age-0.0.1.0: test/Test/Crypto/Age/Payload/Plaintext/Gen.hs
module Test.Crypto.Age.Payload.Plaintext.Gen
( genNormalPlaintextPayloadChunk
, genFinalPlaintextPayloadChunk
, genPlaintextPayloadChunk
) where
import Crypto.Age.Payload.Plaintext
( FinalPlaintextPayloadChunk
, NormalPlaintextPayloadChunk
, PlaintextPayloadChunk (..)
, mkFinalPlaintextPayloadChunk
, mkNormalPlaintextPayloadChunk
, plaintextChunkSize
)
import Hedgehog ( Gen )
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import Prelude
import Test.Gen ( genByteArray )
genNormalPlaintextPayloadChunk :: Gen NormalPlaintextPayloadChunk
genNormalPlaintextPayloadChunk = do
bs <- genByteArray (Range.singleton plaintextChunkSize)
case mkNormalPlaintextPayloadChunk bs of
Nothing -> fail "failed to generate a NormalPlaintextPayloadChunk"
Just x -> pure x
genFinalPlaintextPayloadChunk :: Gen FinalPlaintextPayloadChunk
genFinalPlaintextPayloadChunk = do
bs <-
-- Tend more toward generating smaller chunks.
Gen.frequency
[ (1, genByteArray (Range.constant 256 plaintextChunkSize))
, (30, genByteArray (Range.constant 0 256))
]
case mkFinalPlaintextPayloadChunk bs of
Nothing -> fail "failed to generate a FinalPlaintextPayloadChunk"
Just x -> pure x
genPlaintextPayloadChunk :: Gen PlaintextPayloadChunk
genPlaintextPayloadChunk =
-- Tend more toward generating smaller final chunks rather than full 64 KiB
-- normal chunks.
Gen.frequency
[ (1, PlaintextPayloadChunkNormal <$> genNormalPlaintextPayloadChunk)
, (30, PlaintextPayloadChunkFinal <$> genFinalPlaintextPayloadChunk)
]