packages feed

botan-low-0.2.0.0: test/Test/Botan/Low/RNG.hs

{-# LANGUAGE CPP               #-}
{-# LANGUAGE OverloadedStrings #-}

module Test.Botan.Low.RNG (tests) where

import           Botan.Low.RNG
import           Data.ByteString as BS
import           Test.Hspec
import           Test.Tasty
import           Test.Tasty.Hspec
import           Test.Util.ByteString
import           Test.Util.Hspec

tests :: IO TestTree
tests = do
    specs <- testSpec "spec_rng" spec_rng
    pure $ testGroup "Test.Botan.Low.RNG" [
        specs
      ]

rngs :: [RNGType]
rngs =
    [ SystemRNG
    , UserRNG
    , UserThreadsafeRNG
#if x86_64_HOST_ARCH
    , RDRandRNG -- NOTES: Not available on all processors
#endif
    ]

spec_rng :: Spec
spec_rng = do
    it "systemRNGGet" $ do
        bs <- systemRNGGet 8
        BS.length bs `shouldBe` 8
    testSuite rngs chars $ \ rng -> do
        it "rngInit" $ do
            _ctx <- rngInit rng
            pass
        it "rngGet" $ do
            ctx <- rngInit rng
            _bs <- rngGet ctx 8
            pass
        it "rngReseed" $ do
            ctx <- rngInit rng
            rngReseed ctx 64
            pass
        it "rngReseedFromRNGCtx" $ do
            ctx <- rngInit rng
            source <- rngInit rng
            rngReseedFromRNG ctx source 64
            pass
        it "rngAddEntropy" $ do
            ctx <- rngInit rng
            rngAddEntropy ctx "Fee fi fo fum!"
            pass