module Spec where import qualified Data.ByteString as B import Generators (directories) import Hedgehog (forAll, property, tripping) import System.IO (hSetEncoding, stderr, stdout, utf8) import Tahoe.Capability (confidentiallyShow) import qualified Tahoe.Directory as Directory import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.HUnit (assertEqual, testCase) import Test.Tasty.Hedgehog (testProperty) import Text.Megaparsec (parse) tests :: TestTree tests = testGroup "Directory" [ testCase "well-known serialized directory round-trips through parse . serialize" $ do original <- B.readFile "test/example.dir" let parsed = Directory.parse original serialized = Directory.serialize <$> parsed assertEqual "original /= serialized" (Right original) serialized , testProperty "Directory round-trips through serialize . parse" $ property $ do directory <- forAll directories tripping directory Directory.serialize Directory.parse , testCase "well-known directory CHK read capability round-trips through parseCapability . confidentiallyShow" $ do -- ❯ curl -XPOST http://localhost:3456/uri?t=mkdir-immutable --data '{"foo": ["filenode", {}], "bar": ["filenode", {}], "baz": ["filenode", {}]}' let original = "URI:DIR2-CHK:46y5edbbxojwg5ez4lelafu5jy:fbgn7ijfxarstdxmr363et4de522n7eslnqxavymfqkoax4lc65q:3:10:63" let parsed = parse Directory.pReadCHK "" original let serialized = confidentiallyShow <$> parsed assertEqual "original /= serialized" (Right original) serialized , testCase "well-known directory CHK verify capability round-trips through parseCapability . confidentiallyShow" $ do -- `tahoe ls --json ` to produce verifier let original = "URI:DIR2-CHK-Verifier:ni4pjcqflws33ikhifsxqwvmya:fbgn7ijfxarstdxmr363et4de522n7eslnqxavymfqkoax4lc65q:3:10:63" let parsed = parse Directory.pVerifyCHK "" original let serialized = confidentiallyShow <$> parsed assertEqual "original /= serialized" (Right original) serialized , testCase "well-known directory SDMF write capability round-trips through parseCapability . confidentiallyShow" $ do -- `tahoe mkdir` to produce directory writer let original = "URI:DIR2:ez2k3glrx46svivnnrmh77uieq:c43fbv5274wmphdykpmpweq4moat5co53fvf42lg2z2xekkghm6a" parsed = parse Directory.pWriteSDMF "" original serialized = confidentiallyShow <$> parsed assertEqual "original /= serialized" (Right original) serialized , testCase "well-known directory SDMF read capability round-trips through parseCapability . confidentiallyShow" $ do -- `tahoe ls --json ` to produce reader let original = "URI:DIR2-RO:g3vdy2tlmpejr2tts7n6pyxbnu:c43fbv5274wmphdykpmpweq4moat5co53fvf42lg2z2xekkghm6a" parsed = parse Directory.pReadSDMF "" original serialized = confidentiallyShow <$> parsed assertEqual "original /= serialized" (Right original) serialized , testCase "well-known directory SDMF verify capability round-trips through parseCapability . confidentiallyShow" $ do -- `tahoe ls --json ` to produce verifier let original = "URI:DIR2-Verifier:aofaktmdrgegdvnq3vsxnccc7q:c43fbv5274wmphdykpmpweq4moat5co53fvf42lg2z2xekkghm6a" parsed = parse Directory.pVerifySDMF "" original serialized = confidentiallyShow <$> parsed assertEqual "original /= serialized" (Right original) serialized ] main :: IO () main = do -- Hedgehog writes some non-ASCII and the whole test process will die if -- it can't be encoded. Increase the chances that all of the output can -- be encoded by forcing the use of UTF-8 (overriding the LANG-based -- choice normally made). hSetEncoding stdout utf8 hSetEncoding stderr utf8 defaultMain tests