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

Commit f251526

Browse files
committed
[CDEC-500] Add Json+Bi golden tests for Address
Since we are modifying this for CO-354, and it's quite important to preserve backwards compatibility of Addresses, I've added 5 golden tests to ensure the various configurations of Addresses will have proper test coverage. 4 example Address datatypes are added to the 1 existing datatype, and all 5 are used for golden tests in both the `Json` and `Bi` modules.
1 parent 8d9e2b8 commit f251526

File tree

13 files changed

+150
-9
lines changed

13 files changed

+150
-9
lines changed

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

+15-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ import Test.Pos.Binary.Helpers (SizeTestConfig (..), scfg, sizeTest)
4444
import Test.Pos.Binary.Helpers.GoldenRoundTrip (goldenTestBi,
4545
roundTripsBiBuildable, roundTripsBiShow)
4646
import Test.Pos.Core.ExampleHelpers (exampleAddrSpendingData_PubKey,
47-
exampleAddress, exampleBlockVersion,
47+
exampleAddress, exampleAddress1, exampleAddress2,
48+
exampleAddress3, exampleAddress4, exampleBlockVersion,
4849
exampleBlockVersionData, exampleBlockVersionModifier,
4950
exampleCommitment, exampleCommitmentSignature,
5051
exampleCommitmentsMap, exampleEpochIndex, exampleHashTx,
@@ -78,7 +79,19 @@ import Test.Pos.Util.Tripping (discoverRoundTrip)
7879
-- Address
7980
--------------------------------------------------------------------------------
8081
golden_Address :: Property
81-
golden_Address = goldenTestBi exampleAddress "test/golden/Address"
82+
golden_Address = goldenTestBi exampleAddress "test/golden/bi/Address0"
83+
84+
golden_Address1 :: Property
85+
golden_Address1 = goldenTestBi exampleAddress1 "test/golden/bi/Address1"
86+
87+
golden_Address2 :: Property
88+
golden_Address2 = goldenTestBi exampleAddress2 "test/golden/bi/Address2"
89+
90+
golden_Address3 :: Property
91+
golden_Address3 = goldenTestBi exampleAddress3 "test/golden/bi/Address3"
92+
93+
golden_Address4 :: Property
94+
golden_Address4 = goldenTestBi exampleAddress4 "test/golden/bi/Address4"
8295

8396
roundTripAddressBi :: Property
8497
roundTripAddressBi = eachOf 1000 genAddress roundTripsBiBuildable

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

+51-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ module Test.Pos.Core.ExampleHelpers
33

44
exampleAddrSpendingData_PubKey
55
, exampleAddress
6+
, exampleAddress1
7+
, exampleAddress2
8+
, exampleAddress3
9+
, exampleAddress4
610
, exampleBlockVersion
711
, exampleBlockVersionData
812
, exampleBlockVersionModifier
@@ -83,6 +87,7 @@ import Data.Fixed (Fixed (..))
8387
import qualified Data.HashMap.Strict as HM
8488
import Data.List (zipWith4, (!!))
8589
import Data.List.NonEmpty (fromList)
90+
import qualified Data.Map as M
8691
import Data.Maybe (fromJust)
8792
import qualified Data.Text as T
8893
import Data.Time.Units (Millisecond)
@@ -99,8 +104,8 @@ import Pos.Core.Common (AddrAttributes (..), AddrSpendingData (..),
99104
CoinPortion (..), IsBootstrapEraAddr (..), Script (..),
100105
ScriptVersion, SharedSeed (..), SlotLeaders,
101106
StakeholderId, StakesList, TxFeePolicy (..),
102-
TxSizeLinear (..), addressHash, makeAddress,
103-
makePubKeyAddress)
107+
TxSizeLinear (..), addressHash, coinPortionDenominator,
108+
makeAddress, makePubKeyAddress, mkMultiKeyDistr)
104109
import Pos.Core.Configuration
105110
import Pos.Core.Delegation (HeavyDlgIndex (..), LightDlgIndices (..),
106111
ProxySKBlockInfo, ProxySKHeavy)
@@ -564,6 +569,50 @@ exampleAddress = makeAddress exampleAddrSpendingData_PubKey attrs
564569
attrs = AddrAttributes hap BootstrapEraDistr
565570
hap = Just (HDAddressPayload (getBytes 32 32))
566571

572+
exampleAddress1 :: Address
573+
exampleAddress1 = makeAddress easd attrs
574+
where
575+
easd = PubKeyASD pk
576+
[pk] = examplePublicKeys 24 1
577+
attrs = AddrAttributes hap BootstrapEraDistr
578+
hap = Nothing
579+
580+
exampleAddress2 :: Address
581+
exampleAddress2 = makeAddress easd attrs
582+
where
583+
easd = RedeemASD exampleRedeemPublicKey
584+
attrs = AddrAttributes hap asd
585+
hap = Just (HDAddressPayload (getBytes 15 32))
586+
asd = SingleKeyDistr exampleStakeholderId
587+
588+
exampleAddress3 :: Address
589+
exampleAddress3 = makeAddress easd attrs
590+
where
591+
easd = ScriptASD exampleScript
592+
attrs = AddrAttributes hap exampleMultiKeyDistr
593+
hap = Just (HDAddressPayload (getBytes 17 32))
594+
595+
exampleAddress4 :: Address
596+
exampleAddress4 = makeAddress easd attrs
597+
where
598+
easd = UnknownASD 7 "test value"
599+
attrs = AddrAttributes Nothing (SingleKeyDistr sId)
600+
[sId] = exampleStakeholderIds 7 1
601+
602+
exampleMultiKeyDistr :: AddrStakeDistribution
603+
exampleMultiKeyDistr = case mkMultiKeyDistr (M.fromList pairs) of
604+
Left err -> error $
605+
"exampleMultiKeyDistr: improperly constructed stake map: " <> show err
606+
Right asd -> asd
607+
where
608+
pairs = zip stakeIds (map CoinPortion (remainderCP : coinPortions))
609+
stakeIds = map abstractHash (examplePublicKeys 7 4)
610+
coinPortions = [ (10 :: Word64) ^ (12 :: Word64)
611+
, ( 7 :: Word64) ^ (11 :: Word64)
612+
, ( 6 :: Word64) ^ (14 :: Word64)
613+
]
614+
remainderCP = coinPortionDenominator - sum coinPortions
615+
567616
exampleGenesisConfiguration_GCSrc :: GenesisConfiguration
568617
exampleGenesisConfiguration_GCSrc =
569618
GCSrc "dRaMwdYsH3QA3dChe" (abstractHash (Raw "Test"))

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

+48-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import qualified Hedgehog as H
55

66
import Pos.Core.JsonLog.LogEvents (InvReqDataFlowLog (..))
77

8-
import Test.Pos.Core.ExampleHelpers
9-
(exampleGenesisConfiguration_GCSpec,
8+
import Test.Pos.Core.ExampleHelpers (exampleAddress, exampleAddress1,
9+
exampleAddress2, exampleAddress3, exampleAddress4,
10+
exampleGenesisConfiguration_GCSpec,
1011
exampleGenesisConfiguration_GCSrc, feedPM)
11-
import Test.Pos.Core.Gen (genBlockVersionData, genByte, genCoin,
12-
genCoinPortion, genEpochIndex, genFlatSlotId,
12+
import Test.Pos.Core.Gen (genAddress, genBlockVersionData, genByte,
13+
genCoin, genCoinPortion, genEpochIndex, genFlatSlotId,
1314
genGenesisAvvmBalances, genGenesisConfiguration,
1415
genGenesisDelegation, genGenesisInitializer,
1516
genGenesisProtocolConstants, genInvReqDataFlowLog,
@@ -22,7 +23,49 @@ import Test.Pos.Util.Tripping (discoverRoundTrip,
2223
import Universum
2324

2425
--------------------------------------------------------------------------------
25-
-- GensisConfiguration
26+
-- Address
27+
--------------------------------------------------------------------------------
28+
29+
golden_Address0 :: Property
30+
golden_Address0 =
31+
goldenTestJSON
32+
exampleAddress
33+
"test/golden/json/Address0"
34+
35+
golden_Address1 :: Property
36+
golden_Address1 =
37+
goldenTestJSON
38+
exampleAddress1
39+
"test/golden/json/Address1"
40+
41+
golden_Address2 :: Property
42+
golden_Address2 =
43+
goldenTestJSON
44+
exampleAddress2
45+
"test/golden/json/Address2"
46+
47+
golden_Address3 :: Property
48+
golden_Address3 =
49+
goldenTestJSON
50+
exampleAddress3
51+
"test/golden/json/Address3"
52+
53+
golden_Address4 :: Property
54+
golden_Address4 =
55+
goldenTestJSON
56+
exampleAddress4
57+
"test/golden/json/Address4"
58+
59+
roundTripAddressShow :: Property
60+
roundTripAddressShow =
61+
eachOf 100 genAddress roundTripsAesonShow
62+
63+
roundTripAddressBuildable :: Property
64+
roundTripAddressBuildable =
65+
eachOf 100 genAddress roundTripsAesonBuildable
66+
67+
--------------------------------------------------------------------------------
68+
-- GenesisConfiguration
2669
--------------------------------------------------------------------------------
2770

2871
golden_GenesisConfiguration_GCSpec :: Property
File renamed without changes.

core/test/golden/bi/Address1

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
00: 82d818582183581caa5372095aaa680d
2+
10: 19d4ca496983a145709c3be18b0d4c83
3+
20: cb7bdc5ea0001a32dc988e

core/test/golden/bi/Address2

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
00: 82d818586983581ce269a51e06c374cb
2+
10: 7bf5a4d36e6d673560ebfa8f2d0cfac4
3+
20: 3ed4672ca20058208200581c5125b558
4+
30: daa14b5338e904cc2a75a8b7b3a4738d
5+
40: e9cb28a6819576db0158225820366574
6+
50: 4e6f756958657a4379456a4b63337447
7+
60: 346a61306b466a4f38717a6169021a28
8+
70: 7cce6a

core/test/golden/bi/Address3

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
00: 82d81858e483581c41574eefbf61b89d
2+
10: 19ddbc68c760dbf2fe59fc386bae1bd9
3+
20: 87083453a200589b8201a4581c41cad7
4+
30: 50a98f3ccd30a8d0b641253151de8fd8
5+
40: 45ee12e6ff44cf899c1b000000e8d4a5
6+
50: 1000581c5125b558daa14b5338e904cc
7+
60: 2a75a8b7b3a4738de9cb28a6819576db
8+
70: 1b00038c831b679369581c67f62c82d6
9+
80: 3613496ae4a8b2f7461d7a8a5a31cdb4
10+
90: 961b26a58db04a1b000000123ede4000
11+
a0: 581ca0f124f5f822d9fa2093ede304b6
12+
b0: 43741a980fc1e5c10e8c932560d31a75
13+
c0: db9c970158225820744e6f756958657a
14+
d0: 4379456a4b63337447346a61306b466a
15+
e0: 4f38717a61693236011a3ac2e65f

core/test/golden/bi/Address4

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
00: 82d818584483581ceb7f1fc78b406264
2+
10: c7e41bd42648978aaf5ad7c2c8632af7
3+
20: f1ed7375a10058208200581c5125b558
4+
30: daa14b5338e904cc2a75a8b7b3a4738d
5+
40: e9cb28a6819576db071a9c486f4b

core/test/golden/json/Address0

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"2RhQhCGqYPDpFgTsnBTbnvPvCwpqAkjwLqQkWpkqXbLRmNxd4xNd262nGsr8JiynyKRUeMLSJ9Ntho9i76uvBTrVXdJJG5yiNLb8frmUe5qX7E"

core/test/golden/json/Address1

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"Ae2tdPwUPEZDoUnyXuAgqzhkjNXNJeiZ5nqwprg9sArZmRNjySfJ5uz4FjB"

core/test/golden/json/Address2

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"dRNpRgY7sgwXaGbEZQ7KtFprY5PE3sxejht9kFEKLmSowgUegSinCjx3yuKGHQbRHL2EUP89BuAurEScfrgWxahCjD1M9QKYoTj5KrbR5TDnqBE3oSNx7UcXhrGKM9aau48SASu8i88Sq8hPb3z5K662spTXX"

core/test/golden/json/Address3

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"a2x5MVsL5Pr1SESUZbGb7d64coe2VpRJhEFsYCUHfaimAE3wvmNHd44H7ue1wFx1RqrS9vnAmTVri19FttwaRLWG5L2rLMe1tCSzZ4zJjeUwej8kEX4VmYbL7t7o1rmucebNvz8qGod2s6LKCkAxN6dWVv9jZ3gCkWrNsXq3JeSjaBLPT7RNwSExRmPAwJ6geZmadnKSArbiPjYXkaJa5GQyDUYbni8jCyXmMHB7Qsj1Pgc7qCKA7AebV13kADRv3wSbMgWEAbBrxEmBRnHgXw5Nh6EJ5n7ejVYJAJY3kJ8Q2xisLJxW54Y48BK8a4AW7M3fU"

core/test/golden/json/Address4

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"5FCjkr138i9wjRVwawmYMd4Vc9KxU7TuQhMyjMGpnykg9yb2qMpUCerDFzXvfAJMFgJTHyD7Sn4ybLXm2M6zeWAaWe7ctjq5QjVL427vGRx"

0 commit comments

Comments
 (0)