{-# LANGUAGE OverloadedStrings #-}
module TestStandard
( standardTests
) where
import Test.Tasty
import Test.Tasty.HUnit
import Network.CryptoConditions
import TestSupport
standardTests :: TestTree
standardTests = testGroup "testStandard"
[ testFulfill "Test ed25519" ed2Alice
, testFulfill "Test 1 of 1" $
Threshold 1 [ed2Alice]
, testFulfill "Test 1 of 2" $
Threshold 1 [ed2Alice, ed2Bob]
, testFulfill "Test 2 of 2" $
Threshold 2 [ed2Alice, ed2BobF]
, testFulfill "Test 2 of 3" $
Threshold 2 [ed2Alice, ed2BobF, ed2Eve]
, testFulfill "Test 3 of 3" $
Threshold 3 [ed2Alice, ed2BobF, ed2EveF]
, testFulfill "Test nested" $
let subcond = Threshold 2 [ed2Alice, preimageCondition "a", ed2Eve]
in Threshold 2 [ed2BobF, subcond]
, testFulfill "Test prefixed" $
Prefix "a" 20 ed2Alice
]
-- | Takes a condition which just requires Alice to sign in
-- order to validate
testFulfill :: String -> Condition -> TestTree
testFulfill name cond = testCase name $ do
let msg = umsg
uri = getConditionURI cond
badFfill = fulfillEd25519 pkAlice skEve umsg cond
(Just ffillBin) = encodeFulfillment badFfill
goodFfill = fulfillEd25519 pkAlice skAlice umsg cond
econd = decodeFulfillment ffillBin :: Either String Condition
assertEqual "can not get fulfillment payload without signature"
Nothing $ encodeFulfillment cond
assertEqual "get uri from good fulfillment"
(Right uri) $ getConditionURI <$> econd
assertBool "wrong sig right message does not validate" $
not $ validate uri badFfill msg
assertBool "wrong msg right sig does not validate" $
not $ validate uri goodFfill "b"
assertBool "right sig right message does validate" $
validate uri goodFfill msg