{-# LANGUAGE OverloadedStrings #-} module CBORSpec ( spec, ) where import Codec.Serialise import Data.Proxy import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import qualified Data.Set as Set import Servant.API import TahoeLAFS.Storage.API import Test.Hspec ( Spec, describe, it, shouldBe, ) import Prelude hiding ( toInteger, ) spec :: Spec spec = do describe "encode decode" $ do it "round trips Version1Parameters" $ deserialise (serialise testAV) `shouldBe` testAV it "round trips ApplicationVersion" $ deserialise (serialise v1params) `shouldBe` v1params it "round trips Version" $ deserialise (serialise aVersion) `shouldBe` aVersion describe "deserialise CBOR" $ it "works with Tahoe CBOR" $ deserialise tahoeVersion `shouldBe` aVersion describe "mimeUnrender CBOR Version" $ it "gives the correct result" $ do (mimeUnrender (Proxy :: Proxy CBOR) tahoeVersion :: Either String Version) `shouldBe` (Right $ Version{parameters = Version1Parameters{maximumImmutableShareSize = 232660657664, maximumMutableShareSize = 69105000000000000, availableSpace = 232660657664}, applicationVersion = "tahoe-lafs/1.18.0.post908"}) describe "CBOR round trip" $ do it "works for StorageIndex" $ deserialise (serialise ("5" :: StorageIndex)) `shouldBe` ("5" :: StorageIndex) it "works for ShareNumber" $ deserialise (serialise (ShareNumber 5)) `shouldBe` ShareNumber 5 it "works for ReadResult" $ deserialise (serialise readRes) `shouldBe` readRes it "works for CBORSet" $ deserialise (serialise cborSet) `shouldBe` cborSet readRes :: BS.ByteString readRes = "strict bytestring" cborSet :: CBORSet ShareNumber cborSet = CBORSet (Set.fromList $ ShareNumber <$> [1, 2, 3]) testAV :: ApplicationVersion testAV = "tahoe-lafs/1.18.0.post908" v1params :: Version1Parameters v1params = Version1Parameters 232660657664 69105000000000000 232660657664 aVersion :: Version aVersion = Version v1params testAV tahoeVersion :: BSL.ByteString tahoeVersion = "\162X/http://allmydata.org/tahoe/protocols/storage/v1\163X\FSmaximum-immutable-share-size\ESC\NUL\NUL\NUL6+\167\230\NULX\SUBmaximum-mutable-share-size\ESC\NUL\245\130\161\161\&4\DLE\NULOavailable-space\ESC\NUL\NUL\NUL6+\167\230\NULSapplication-versionX\EMtahoe-lafs/1.18.0.post908"