1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
{-# LANGUAGE ScopedTypeVariables #-}
-- | Test utilities.
module Util
( assertJust
, assertRight
, getAttached
, getDetached
, testFile
, TestKey(..)
, TestIV(..)
) where
import Control.Monad (when)
import Data.ByteString (ByteString, pack)
import Data.Maybe (isNothing)
import Crypto.Cipher.Types
import Crypto.Store.CMS
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
assertJust :: Maybe a -> (a -> Assertion) -> Assertion
assertJust (Just a) f = f a
assertJust Nothing _ = assertFailure "expecting Just but got Nothing"
assertRight :: Show a => Either a b -> (b -> Assertion) -> Assertion
assertRight (Right b) f = f b
assertRight (Left val) _ =
assertFailure ("expecting Right but got: Left " ++ show val)
getAttached :: Encapsulates struct => struct (Encap a) -> IO (struct a)
getAttached e = do
let m = fromAttached e
when (isNothing m) $
assertFailure "expecting attached but got detached content"
let Just r = m in return r
getDetached :: Encapsulates struct => a -> struct (Encap a) -> IO (struct a)
getDetached c e = do
let m = fromDetached c e
when (isNothing m) $
assertFailure "expecting detached but got attached content"
let Just r = m in return r
testFile :: String -> FilePath
testFile name = "tests/files/" ++ name
newtype TestKey cipher = Key ByteString deriving (Show, Eq)
instance Cipher cipher => Arbitrary (TestKey cipher) where
arbitrary = Key . pack <$>
case cipherKeySize cipher of
KeySizeFixed len -> vector len
KeySizeRange a b -> choose (a, b) >>= vector
KeySizeEnum list -> elements list >>= vector
where cipher = undefined :: cipher
newtype TestIV cipher = IV ByteString deriving (Show, Eq)
instance BlockCipher cipher => Arbitrary (TestIV cipher) where
arbitrary = IV . pack <$> vector (blockSize cipher)
where cipher = undefined :: cipher
|