Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit 9e595df

Browse files
committed
[CDEC-552] Add golden and round-trip tests for types in Pos.Core.Block
1 parent d3e9d56 commit 9e595df

25 files changed

+740
-65
lines changed

core/test/Test/Pos/Core/Bi.hs

Lines changed: 308 additions & 39 deletions
Large diffs are not rendered by default.

core/test/Test/Pos/Core/Gen.hs

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module Test.Pos.Core.Gen
1010
, genGenesisConsensusData
1111
, genGenesisHash
1212
, genGenesisProof
13+
, genHeaderHash
1314
, genMainBlockHeader
1415
, genMainBody
1516
, genMainConsensusData
@@ -167,10 +168,11 @@ import qualified Hedgehog.Range as Range
167168
import Pos.Binary.Class (Bi, Raw (..), asBinary)
168169
import Pos.Core.Block (BlockBodyAttributes, BlockHeader (..), BlockHeaderAttributes,
169170
BlockSignature (..), GenesisBlockHeader, GenesisBody (..),
170-
GenesisConsensusData (..), GenesisProof (..), MainBlockHeader,
171-
MainBody (..), MainConsensusData (..), MainExtraBodyData (..),
171+
GenesisConsensusData (..), GenesisExtraHeaderData (..),
172+
GenesisProof (..), HeaderHash, MainBlockHeader, MainBody (..),
173+
MainConsensusData (..), MainExtraBodyData (..),
172174
MainExtraHeaderData (..), MainProof (..), MainToSign (..),
173-
mkGenesisHeader, mkMainHeader)
175+
mkGenericHeader, mkMainHeaderExplicit)
174176
import Pos.Core.Common (AddrAttributes (..), AddrSpendingData (..),
175177
AddrStakeDistribution (..), AddrType (..), Address (..),
176178
BlockCount (..), ChainDifficulty (..), Coeff (..), Coin (..),
@@ -229,7 +231,7 @@ genBlockBodyAttributes = pure $ mkAttributes ()
229231

230232
genBlockHeader :: ProtocolMagic -> ProtocolConstants -> Gen BlockHeader
231233
genBlockHeader pm pc =
232-
Gen.choice [ BlockHeaderGenesis <$> genGenesisBlockHeader pm pc
234+
Gen.choice [ BlockHeaderGenesis <$> genGenesisBlockHeader pm
233235
, BlockHeaderMain <$> genMainBlockHeader pm pc
234236
]
235237

@@ -247,16 +249,16 @@ genBlockSignature pm pc =
247249
<$> genProxySignature (genMainToSign pm pc) genHeavyDlgIndex
248250
]
249251

250-
genGenesisBlockHeader :: ProtocolMagic -> ProtocolConstants -> Gen GenesisBlockHeader
251-
genGenesisBlockHeader pm pc =
252-
mkGenesisHeader pm
253-
<$> Gen.choice gens
254-
<*> genEpochIndex
255-
<*> genGenesisBody
256-
where
257-
gens = [ Left <$> genGenesisHash
258-
, Right <$> genBlockHeader pm pc
259-
]
252+
genGenesisBlockHeader :: ProtocolMagic -> Gen GenesisBlockHeader
253+
genGenesisBlockHeader pm = do
254+
epoch <- genEpochIndex
255+
body <- genGenesisBody
256+
prevHash <- coerce <$> genTextHash
257+
difficulty <- genChainDifficulty
258+
let consensus = const (GenesisConsensusData {_gcdEpoch = epoch
259+
,_gcdDifficulty = difficulty})
260+
gehd = GenesisExtraHeaderData $ mkAttributes ()
261+
pure (mkGenericHeader pm prevHash body consensus gehd)
260262

261263
genGenesisBody :: Gen GenesisBody
262264
genGenesisBody = GenesisBody <$> genSlotLeaders
@@ -269,8 +271,11 @@ genGenesisConsensusData =
269271

270272
genGenesisHash :: Gen GenesisHash
271273
genGenesisHash = do
272-
sampleText <- Gen.text Range.constantBounded Gen.alphaNum
273-
pure $ GenesisHash (coerce (hash sampleText :: Hash Text))
274+
th <- genTextHash
275+
pure (GenesisHash (coerce th))
276+
277+
genHeaderHash :: Gen HeaderHash
278+
genHeaderHash = coerce <$> genTextHash
274279

275280
genGenesisProof :: Gen GenesisProof
276281
genGenesisProof = GenesisProof <$> genAbstractHash genSlotLeaders
@@ -285,11 +290,12 @@ genMainBody pm =
285290

286291
genMainBlockHeader :: ProtocolMagic -> ProtocolConstants -> Gen MainBlockHeader
287292
genMainBlockHeader pm pc =
288-
mkMainHeader pm
289-
<$> (Left <$> genGenesisHash)
293+
mkMainHeaderExplicit pm
294+
<$> genHeaderHash
295+
<*> genChainDifficulty
290296
<*> genSlotId pc
291297
<*> genSecretKey
292-
<*> genProxySKBlockInfo pm
298+
<*> pure Nothing
293299
<*> genMainBody pm
294300
<*> genMainExtraHeaderData
295301

@@ -446,7 +452,7 @@ genStakesList :: Gen StakesList
446452
genStakesList = Gen.list range gen
447453
where
448454
gen = (,) <$> genStakeholderId <*> genCoin
449-
range = Range.constant 0 10
455+
range = Range.linear 0 10
450456

451457
genStakesMap :: Gen StakesMap
452458
genStakesMap = genCustomHashMap genStakeholderId genCoin
@@ -704,7 +710,7 @@ genOpening = snd <$> genCommitmentOpening
704710

705711
genOpeningsMap :: Gen OpeningsMap
706712
genOpeningsMap = do
707-
hMapSize <- Gen.int (Range.constant 0 20)
713+
hMapSize <- Gen.int (Range.linear 0 10)
708714
stakeholderId <- Gen.list (Range.singleton hMapSize) genStakeholderId
709715
opening <- Gen.list (Range.singleton hMapSize) genOpening
710716
pure $ HM.fromList $ zip stakeholderId opening
@@ -714,7 +720,7 @@ genSharesDistribution = genCustomHashMap genStakeholderId genWord16
714720

715721
genSharesMap :: Gen SharesMap
716722
genSharesMap = do
717-
hMapSize <- Gen.int (Range.constant 0 20)
723+
hMapSize <- Gen.int (Range.linear 0 10)
718724
stakeholderId <- Gen.list (Range.singleton hMapSize) genStakeholderId
719725
innerSharesMap <- Gen.list (Range.singleton hMapSize) genInnerSharesMap
720726
pure $ HM.fromList $ zip stakeholderId innerSharesMap
@@ -975,7 +981,7 @@ genUpId pm = genAbstractHash (genUpdateProposal pm)
975981

976982
genUpsData :: Gen (HM.HashMap SystemTag UpdateData)
977983
genUpsData = do
978-
hMapSize <- Gen.int (Range.constant 0 20)
984+
hMapSize <- Gen.int (Range.linear 0 20)
979985
sysTagList <- Gen.list (Range.singleton hMapSize) genSystemTag
980986
upDataList <- Gen.list (Range.singleton hMapSize) genUpdateData
981987
pure $ HM.fromList $ zip sysTagList upDataList
@@ -998,7 +1004,7 @@ genAttributes genA = mkAttributes <$> genA
9981004
----------------------------------------------------------------------------
9991005

10001006
genMerkleTree :: Bi a => Gen a -> Gen (MerkleTree a)
1001-
genMerkleTree genA = mkMerkleTree <$> Gen.list (Range.constant 0 10) genA
1007+
genMerkleTree genA = mkMerkleTree <$> Gen.list (Range.linear 0 10) genA
10021008

10031009
genMerkleRoot :: Bi a => Gen a -> Gen (MerkleRoot a)
10041010
genMerkleRoot genA = mtRoot <$> genMerkleTree genA
@@ -1012,7 +1018,7 @@ customHashMapGen
10121018
=> Gen k -> Gen v -> Gen (HM.HashMap k v)
10131019
customHashMapGen keyGen valGen =
10141020
HM.fromList
1015-
<$> (Gen.list (Range.constant 1 10) $ (,) <$> keyGen <*> valGen)
1021+
<$> (Gen.list (Range.linear 1 10) $ (,) <$> keyGen <*> valGen)
10161022

10171023
genBase16Bs :: Gen ByteString
10181024
genBase16Bs = B16.encode <$> genBytes 32
@@ -1035,7 +1041,7 @@ genCustomHashMap
10351041
genCustomHashMap genK genV = HM.fromList <$> Gen.list range gen
10361042
where
10371043
gen = (,) <$> genK <*> genV
1038-
range = Range.constant 0 10
1044+
range = Range.linear 0 10
10391045

10401046
genMillisecond :: Gen Millisecond
10411047
genMillisecond = fromMicroseconds <$> Gen.integral (Range.constant 0 1000000)

core/test/cardano-sl-core-test.cabal

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ library
2525
build-depends: QuickCheck
2626
, base
2727
, bytestring
28+
, base16-bytestring
29+
, cardano-crypto
2830
, cardano-sl-binary
31+
, cardano-sl-binary-test
2932
, cardano-sl-core
3033
, cardano-sl-crypto
3134
, cardano-sl-crypto-test
@@ -35,6 +38,7 @@ library
3538
, cryptonite
3639
, cryptonite-openssl >= 0.5
3740
, data-default
41+
, ed25519
3842
, formatting
3943
, generic-arbitrary
4044
, hedgehog
@@ -45,6 +49,7 @@ library
4549
, random
4650
, serokell-util
4751
, tagged
52+
, text
4853
, time-units
4954
, universum
5055
, unordered-containers
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"Network":"ggv:32313"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"PubKey":"cae922c720ea93e5ead49b4652fb24caf4948e31eee378a4c4513f11"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a0

core/test/golden/BlockHeaderMain

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
000: 85005820125bbf1daefc2897d8db4899
2+
010: 9d09b4eae439f0dfed83bc43246ca039
3+
020: fa4b121384830158205e46ceb20538af
4+
030: eeb45cb8f7030512af34b4ff363a8c7e
5+
040: 94d441a257500ffab75820e32c9549bc
6+
050: 3acbe0e848b2d7ad26331b7d84975803
7+
060: 64cb2bc6c8bda9aa0975b88302582036
8+
070: e799e376b8a5bc0127b933dcef926c56
9+
080: d30f00b1d717c498b6f23d4f2c4e5558
10+
090: 209fbbb2f0eff7472fe19e462fd88c49
11+
0a0: 5ac90f9ad58c4dd6cb204515710b0fe1
12+
0b0: 325820b5f2d3cb5a94d3e7dc9d812ebf
13+
0c0: 56003e4f9fb02296034f5d5bcd073811
14+
0d0: ebe6b35820a9d2e0af73f175d0eab5d9
15+
0e0: 6c8b480edfa8226f4c2a9037d637f6aa
16+
0f0: 3cd9f3b57584820b182f5840644c586b
17+
100: 756573565a394a6648676a726374734c
18+
110: 4674324e766f76586e6368734f765830
19+
120: 3559364c6f686c544e74356d6b504668
20+
130: 556f587531455a534a5449798119270f
21+
140: 82005840c15b8d60075f29a8d15a2525
22+
150: 96f622a4b590402be5eb8b66f3acbc55
23+
160: c9d4bb6db32987df80f22954de7a5bb8
24+
170: c4974299bec72b68b24719b1d6db0d62
25+
180: d3628b0984830101018266476f6c6465
26+
190: 6e1863a058204ba92aa320c60acc9ad7
27+
1a0: b9a64f2eda55c4d2ec28e604faf18670
28+
1b0: 8b4f0c4e8edf
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
00: 820085005820f7077d40c94a36e7df95
2+
10: b6f99a86f08bcf06ea3b24e68dd30393
3+
20: 33fa53141775582074840ea4e9e28b2f
4+
30: 906a1530270131bc5ab07106024d6f9c
5+
40: 8f4773e478c343a2820b810081a0

core/test/golden/BlockSignature

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
00: 8200584067d583469c7bb28c232d5cea
2+
10: 2d04f4d21c5d36ab25925c7e339c69f2
3+
20: 29b5c86ccaa76fa4f7641f36d0489c3e
4+
30: 691db8393b86ce1b13e19d5c12816a68
5+
40: 7daf0b0c

0 commit comments

Comments
 (0)