module Main where import Age import qualified Data.Text.IO as TIO import Dhall import Dhall.Core (pretty) import qualified Dhall.Secret as Lib import Dhall.Secret.IO import System.Environment (setEnv) import System.Environment.Blank (getEnv) import Test.HUnit testKms = "encrypt decrypt with KMS" ~: snapshot "./test/example01.dhall" "./test/example01.encrypted.dhall" testAge = "encrypt decrypt with Age Algo" ~: snapshot "./test/example02.dhall" "./test/example02.encrypted.dhall" main :: IO () main = do alg <- getEnv "TEST_ALG" setEnv "DHALL_SECRET_AGE_KEYS" "AGE-SECRET-KEY-1SR4ZPP77HDEUJJ9MXJPFQFKHNJ57XKUHXW7TFZ6R3AV59M3KHP2S45ZFW9\nAGE-SECRET-KEY-1HKC2ZRPFFY66049G5EWYLT2PMYKTPN6UW6RFEEEN3JEEWTFFFDNQ2QTC8M\nAGE-SECRET-KEY-1GLAZ75TDSSR647WXD0MH3RUU8XGRK6R5SD8UGQ6C6R9MCYR03ULQSUC7D6" case alg of Just "KMS" -> runTestTTAndExit (test testKms) Just "ALL" -> runTestTTAndExit (test [testKms, testAgeEncryption, testAge]) _ -> runTestTTAndExit (test [testAgeEncryption, testAge]) snapshot src expect = do expr <- TIO.readFile src encrypted1 <- parseExpr expr >>= Lib.encrypt >>= prettyExpr encrypted2 <- TIO.readFile expect >>= parseExpr decrypted1 <- parseExpr encrypted1 >>= Lib.decrypt (Lib.DecryptPreference False) >>= prettyExpr decrypted2 <- Lib.decrypt (Lib.DecryptPreference False) encrypted2 >>= prettyExpr assertEqual "snapshot" decrypted1 decrypted2