import Test.Framework (defaultMain, testGroup) import Test.Framework.Providers.HUnit import Test.HUnit import Codec.Encryption.OpenPGP.ASCIIArmor (armor, decode) import Codec.Encryption.OpenPGP.ASCIIArmor.Types import Data.ByteString (ByteString) import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC8 import Data.Digest.CRC24 (crc24) import Data.Word (Word32) testCRC24 :: ByteString -> Word32 -> Assertion testCRC24 bs crc = assertEqual "crc24" crc (crc24 bs) testArmorDecode :: FilePath -> [FilePath] -> Assertion testArmorDecode fp targets = do bs <- B.readFile $ "tests/data/" ++ fp tbss <- mapM (\target -> B.readFile $ "tests/data/" ++ target) targets case decode bs of Left e -> assertFailure $ "Decode failed (" ++ e ++ ") on " ++ fp Right as -> do assertEqual ("for " ++ fp) tbss (map getPayload as) where getPayload (Armor _ _ pl) = pl testArmorEncode :: FilePath -> FilePath -> Assertion testArmorEncode fp target = do bs <- B.readFile $ "tests/data/" ++ fp tbs <- B.readFile $ "tests/data/" ++ target assertEqual ("literaldata") (armor (Armor ArmorMessage [("Version","OpenPrivacy 0.99")] bs)) tbs tests = [ testGroup "CRC24" [ testCase "CRC24: A" (testCRC24 (BC8.pack "A") 16680698) , testCase "CRC24: Haskell" (testCRC24 (BC8.pack "Haskell") 15612750) , testCase "CRC24: hOpenPGP and friends" (testCRC24 (BC8.pack "hOpenPGP and friends") 11940960) ] , testGroup "ASCII armor" [ testCase "Decode sample armor" (testArmorDecode "msg1.asc" ["msg1.gpg"]) , testCase "Decode sample armor with cruft" (testArmorDecode "msg1a.asc" ["msg1.gpg"]) , testCase "Decode multiple sample armors" (testArmorDecode "msg1b.asc" ["msg1.gpg","msg1.gpg","msg1.gpg"]) , testCase "Encode sample armor" (testArmorEncode "msg1.gpg" "msg1.asc") ] ] main = defaultMain tests