Line data Source code
1 : // Copyright (c) 2017 The Zcash Core developers
2 : // Copyright (c) 2020 The PIVX Core developers
3 : // Distributed under the MIT software license, see the accompanying
4 : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 :
6 : #include "chainparams.h"
7 : #include "consensus/upgrades.h"
8 : #include "optional.h"
9 : #include "test/test_pivx.h"
10 :
11 : #include <boost/test/unit_test.hpp>
12 :
13 : struct UpgradesTest : public TestingSetup
14 : {
15 : int DefaultActivation[Consensus::MAX_NETWORK_UPGRADES];
16 4 : UpgradesTest()
17 4 : {
18 4 : SelectParams(CBaseChainParams::REGTEST);
19 : // Save activation heights in DefaultActivation and set all upgrades to inactive.
20 64 : for (uint32_t idx = Consensus::BASE_NETWORK + 1; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
21 60 : DefaultActivation[idx] = Params().GetConsensus().vUpgrades[idx].nActivationHeight;
22 60 : UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex(idx), Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT);
23 : }
24 4 : }
25 4 : ~UpgradesTest()
26 4 : {
27 : // Revert to default
28 64 : for (uint32_t idx = Consensus::BASE_NETWORK + 1; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
29 60 : UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex(idx), DefaultActivation[idx]);
30 : }
31 4 : SelectParams(CBaseChainParams::MAIN);
32 4 : }
33 : };
34 :
35 : BOOST_FIXTURE_TEST_SUITE(network_upgrades_tests, UpgradesTest)
36 :
37 2 : BOOST_AUTO_TEST_CASE(networkUpgradeStateTest)
38 : {
39 1 : const Consensus::Params& params = Params().GetConsensus();
40 :
41 : // Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
42 1 : BOOST_CHECK_EQUAL(
43 : NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
44 : UPGRADE_DISABLED);
45 1 : BOOST_CHECK_EQUAL(
46 : NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
47 : UPGRADE_DISABLED);
48 :
49 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
50 :
51 1 : BOOST_CHECK_EQUAL(
52 : NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
53 : UPGRADE_ACTIVE);
54 1 : BOOST_CHECK_EQUAL(
55 : NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
56 : UPGRADE_ACTIVE);
57 :
58 1 : int nActivationHeight = 100;
59 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
60 :
61 1 : BOOST_CHECK_EQUAL(
62 : NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
63 : UPGRADE_PENDING);
64 1 : BOOST_CHECK_EQUAL(
65 : NetworkUpgradeState(nActivationHeight - 1, params, Consensus::UPGRADE_TESTDUMMY),
66 : UPGRADE_PENDING);
67 1 : BOOST_CHECK_EQUAL(
68 : NetworkUpgradeState(nActivationHeight, params, Consensus::UPGRADE_TESTDUMMY),
69 : UPGRADE_ACTIVE);
70 1 : BOOST_CHECK_EQUAL(
71 : NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
72 : UPGRADE_ACTIVE);
73 1 : }
74 :
75 2 : BOOST_AUTO_TEST_CASE(IsActivationHeightTest)
76 : {
77 1 : const Consensus::Params& params = Params().GetConsensus();
78 :
79 : // Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
80 2 : BOOST_CHECK(!IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
81 2 : BOOST_CHECK(!IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
82 2 : BOOST_CHECK(!IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
83 2 : BOOST_CHECK(!IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
84 :
85 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
86 :
87 2 : BOOST_CHECK(!IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
88 2 : BOOST_CHECK(IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
89 2 : BOOST_CHECK(!IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
90 2 : BOOST_CHECK(!IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
91 :
92 1 : int nActivationHeight = 100;
93 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
94 :
95 2 : BOOST_CHECK(!IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
96 2 : BOOST_CHECK(!IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
97 2 : BOOST_CHECK(!IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
98 2 : BOOST_CHECK(!IsActivationHeight(nActivationHeight - 1, params, Consensus::UPGRADE_TESTDUMMY));
99 2 : BOOST_CHECK(IsActivationHeight(nActivationHeight, params, Consensus::UPGRADE_TESTDUMMY));
100 2 : BOOST_CHECK(!IsActivationHeight(nActivationHeight + 1, params, Consensus::UPGRADE_TESTDUMMY));
101 2 : BOOST_CHECK(!IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
102 1 : }
103 :
104 2 : BOOST_AUTO_TEST_CASE(IsActivationHeightForAnyUpgradeTest)
105 : {
106 1 : const Consensus::Params& params = Params().GetConsensus();
107 :
108 : // Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
109 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(-1, params));
110 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(0, params));
111 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1, params));
112 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1000000, params));
113 :
114 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
115 :
116 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(-1, params));
117 2 : BOOST_CHECK(IsActivationHeightForAnyUpgrade(0, params));
118 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1, params));
119 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1000000, params));
120 :
121 1 : int nActivationHeight = 100;
122 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
123 :
124 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(-1, params));
125 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(0, params));
126 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1, params));
127 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(nActivationHeight - 1, params));
128 2 : BOOST_CHECK(IsActivationHeightForAnyUpgrade(nActivationHeight, params));
129 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(nActivationHeight + 1, params));
130 2 : BOOST_CHECK(!IsActivationHeightForAnyUpgrade(1000000, params));
131 1 : }
132 :
133 2 : BOOST_AUTO_TEST_CASE(NextActivationHeightTest)
134 : {
135 1 : const Consensus::Params& params = Params().GetConsensus();
136 :
137 : // Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
138 2 : BOOST_CHECK(NextActivationHeight(-1, params) == nullopt);
139 2 : BOOST_CHECK(NextActivationHeight(0, params) == nullopt);
140 2 : BOOST_CHECK(NextActivationHeight(1, params) == nullopt);
141 2 : BOOST_CHECK(NextActivationHeight(1000000, params) == nullopt);
142 :
143 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
144 :
145 2 : BOOST_CHECK(NextActivationHeight(-1, params) == nullopt);
146 2 : BOOST_CHECK(NextActivationHeight(0, params) == nullopt);
147 2 : BOOST_CHECK(NextActivationHeight(1, params) == nullopt);
148 2 : BOOST_CHECK(NextActivationHeight(1000000, params) == nullopt);
149 :
150 1 : int nActivationHeight = 100;
151 1 : UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
152 :
153 2 : BOOST_CHECK(NextActivationHeight(-1, params) == nullopt);
154 3 : BOOST_CHECK(NextActivationHeight(0, params) == nActivationHeight);
155 3 : BOOST_CHECK(NextActivationHeight(1, params) == nActivationHeight);
156 3 : BOOST_CHECK(NextActivationHeight(nActivationHeight - 1, params) == nActivationHeight);
157 2 : BOOST_CHECK(NextActivationHeight(nActivationHeight, params) == nullopt);
158 2 : BOOST_CHECK(NextActivationHeight(nActivationHeight + 1, params) == nullopt);
159 2 : BOOST_CHECK(NextActivationHeight(1000000, params) == nullopt);
160 1 : }
161 :
162 : BOOST_AUTO_TEST_SUITE_END()
|