haskoin-core-0.2.0: tests/Network/Haskoin/Node/Units.hs
{-# LANGUAGE OverloadedStrings #-}
module Network.Haskoin.Node.Units (tests) where
import Test.HUnit (Assertion, assertBool)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Data.Maybe (fromJust)
import Network.Haskoin.Crypto
import Network.Haskoin.Node
import Network.Haskoin.Util
tests :: [Test]
tests =
[ -- Test cases come from bitcoind /src/test/bloom_tests.cpp
testGroup "Bloom Filters"
[ testCase "Bloom Filter Vector 1" bloomFilter1
, testCase "Bloom Filter Vector 2" bloomFilter2
, testCase "Bloom Filter Vector 3" bloomFilter3
]
]
bloomFilter1 :: Assertion
bloomFilter1 = do
assertBool "Bloom filter doesn't contain vector 1" $ bloomContains f1 v1
assertBool "Bloom filter contains something it should not" $
not $ bloomContains f1 v2
assertBool "Bloom filter doesn't contain vector 3" $ bloomContains f3 v3
assertBool "Bloom filter doesn't contain vector 4" $ bloomContains f4 v4
assertBool "Bloom filter serialization is incorrect" $ (encode' f4) == bs
where
f0 = bloomCreate 3 0.01 0 BloomUpdateAll
f1 = bloomInsert f0 v1
f3 = bloomInsert f1 v3
f4 = bloomInsert f3 v4
v1 = fromJust $ decodeHex "99108ad8ed9bb6274d3980bab5a85c048f0950c8"
v2 = fromJust $ decodeHex "19108ad8ed9bb6274d3980bab5a85c048f0950c8"
v3 = fromJust $ decodeHex "b5a2c786d9ef4658287ced5914b37a1b4aa32eee"
v4 = fromJust $ decodeHex "b9300670b4c5366e95b2699e8b18bc75e5f729c5"
bs = fromJust $ decodeHex "03614e9b050000000000000001"
bloomFilter2 :: Assertion
bloomFilter2 = do
assertBool "Bloom filter doesn't contain vector 1" $ bloomContains f1 v1
assertBool "Bloom filter contains something it should not" $
not $ bloomContains f1 v2
assertBool "Bloom filter doesn't contain vector 3" $ bloomContains f3 v3
assertBool "Bloom filter doesn't contain vector 4" $ bloomContains f4 v4
assertBool "Bloom filter serialization is incorrect" $ (encode' f4) == bs
where
f0 = bloomCreate 3 0.01 2147483649 BloomUpdateAll
f1 = bloomInsert f0 v1
f3 = bloomInsert f1 v3
f4 = bloomInsert f3 v4
v1 = fromJust $ decodeHex "99108ad8ed9bb6274d3980bab5a85c048f0950c8"
v2 = fromJust $ decodeHex "19108ad8ed9bb6274d3980bab5a85c048f0950c8"
v3 = fromJust $ decodeHex "b5a2c786d9ef4658287ced5914b37a1b4aa32eee"
v4 = fromJust $ decodeHex "b9300670b4c5366e95b2699e8b18bc75e5f729c5"
bs = fromJust $ decodeHex "03ce4299050000000100008001"
bloomFilter3 :: Assertion
bloomFilter3 = do
assertBool "Bloom filter serialization is incorrect" $ (encode' f2) == bs
where
f0 = bloomCreate 2 0.001 0 BloomUpdateAll
f1 = bloomInsert f0 $ encode' p
f2 = bloomInsert f1 $ encode' $ getAddrHash $ pubKeyAddr p
k = fromJust $ fromWif "5Kg1gnAjaLfKiwhhPpGS3QfRg2m6awQvaj98JCZBZQ5SuS2F15C"
p = derivePubKey k
bs = fromJust $ decodeHex "038fc16b080000000000000001"