Test network upgrade logic
Also demonstrates how to specify a network upgrade.
This commit is contained in:
@@ -33,6 +33,7 @@ zcash_gtest_SOURCES += \
|
|||||||
gtest/test_random.cpp \
|
gtest/test_random.cpp \
|
||||||
gtest/test_rpc.cpp \
|
gtest/test_rpc.cpp \
|
||||||
gtest/test_transaction.cpp \
|
gtest/test_transaction.cpp \
|
||||||
|
gtest/test_upgrades.cpp \
|
||||||
gtest/test_validation.cpp \
|
gtest/test_validation.cpp \
|
||||||
gtest/test_circuit.cpp \
|
gtest/test_circuit.cpp \
|
||||||
gtest/test_txid.cpp \
|
gtest/test_txid.cpp \
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ public:
|
|||||||
consensus.nPowTargetSpacing = 2.5 * 60;
|
consensus.nPowTargetSpacing = 2.5 * 60;
|
||||||
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
||||||
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
||||||
|
consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight =
|
||||||
|
Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The message start string should be awesome! ⓩ❤
|
* The message start string should be awesome! ⓩ❤
|
||||||
@@ -246,6 +248,8 @@ public:
|
|||||||
consensus.nPowTargetSpacing = 2.5 * 60;
|
consensus.nPowTargetSpacing = 2.5 * 60;
|
||||||
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
||||||
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
||||||
|
consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight =
|
||||||
|
Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT;
|
||||||
|
|
||||||
pchMessageStart[0] = 0xfa;
|
pchMessageStart[0] = 0xfa;
|
||||||
pchMessageStart[1] = 0x1a;
|
pchMessageStart[1] = 0x1a;
|
||||||
@@ -349,6 +353,8 @@ public:
|
|||||||
consensus.nPowTargetSpacing = 2.5 * 60;
|
consensus.nPowTargetSpacing = 2.5 * 60;
|
||||||
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight =
|
||||||
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
Consensus::NetworkUpgrade::ALWAYS_ACTIVE;
|
||||||
|
consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight =
|
||||||
|
Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT;
|
||||||
|
|
||||||
pchMessageStart[0] = 0xaa;
|
pchMessageStart[0] = 0xaa;
|
||||||
pchMessageStart[1] = 0xe8;
|
pchMessageStart[1] = 0xe8;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ namespace Consensus {
|
|||||||
enum UpgradeIndex {
|
enum UpgradeIndex {
|
||||||
// Sprout must be first
|
// Sprout must be first
|
||||||
BASE_SPROUT,
|
BASE_SPROUT,
|
||||||
|
UPGRADE_TESTDUMMY,
|
||||||
// NOTE: Also add new upgrades to NetworkUpgradeInfo in upgrades.cpp
|
// NOTE: Also add new upgrades to NetworkUpgradeInfo in upgrades.cpp
|
||||||
MAX_NETWORK_UPGRADES
|
MAX_NETWORK_UPGRADES
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ const struct NUInfo NetworkUpgradeInfo[Consensus::MAX_NETWORK_UPGRADES] = {
|
|||||||
/*.nBranchId =*/ 0,
|
/*.nBranchId =*/ 0,
|
||||||
/*.strName =*/ "Sprout",
|
/*.strName =*/ "Sprout",
|
||||||
/*.strInfo =*/ "The Zcash network at launch",
|
/*.strInfo =*/ "The Zcash network at launch",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/*.nBranchId =*/ 0x74736554,
|
||||||
|
/*.strName =*/ "Test dummy",
|
||||||
|
/*.strInfo =*/ "Test dummy info",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
142
src/gtest/test_upgrades.cpp
Normal file
142
src/gtest/test_upgrades.cpp
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "chainparams.h"
|
||||||
|
#include "consensus/upgrades.h"
|
||||||
|
|
||||||
|
class UpgradesTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void TearDown() {
|
||||||
|
// Revert to default
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F(UpgradesTest, NetworkUpgradeState) {
|
||||||
|
SelectParams(CBaseChainParams::REGTEST);
|
||||||
|
const Consensus::Params& params = Params().GetConsensus();
|
||||||
|
|
||||||
|
// Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_DISABLED);
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_DISABLED);
|
||||||
|
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
|
||||||
|
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_ACTIVE);
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_ACTIVE);
|
||||||
|
|
||||||
|
int nActivationHeight = 100;
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
|
||||||
|
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(0, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_PENDING);
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(nActivationHeight - 1, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_PENDING);
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(nActivationHeight, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_ACTIVE);
|
||||||
|
EXPECT_EQ(
|
||||||
|
NetworkUpgradeState(1000000, params, Consensus::UPGRADE_TESTDUMMY),
|
||||||
|
UPGRADE_ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(UpgradesTest, CurrentEpoch) {
|
||||||
|
SelectParams(CBaseChainParams::REGTEST);
|
||||||
|
const Consensus::Params& params = Params().GetConsensus();
|
||||||
|
auto nBranchId = NetworkUpgradeInfo[Consensus::UPGRADE_TESTDUMMY].nBranchId;
|
||||||
|
|
||||||
|
// Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
|
||||||
|
EXPECT_EQ(CurrentEpoch(0, params), Consensus::BASE_SPROUT);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(0, params), 0);
|
||||||
|
EXPECT_EQ(CurrentEpoch(1000000, params), Consensus::BASE_SPROUT);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(1000000, params), 0);
|
||||||
|
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
|
||||||
|
|
||||||
|
EXPECT_EQ(CurrentEpoch(0, params), Consensus::UPGRADE_TESTDUMMY);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(0, params), nBranchId);
|
||||||
|
EXPECT_EQ(CurrentEpoch(1000000, params), Consensus::UPGRADE_TESTDUMMY);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(1000000, params), nBranchId);
|
||||||
|
|
||||||
|
int nActivationHeight = 100;
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
|
||||||
|
|
||||||
|
EXPECT_EQ(CurrentEpoch(0, params), Consensus::BASE_SPROUT);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(0, params), 0);
|
||||||
|
EXPECT_EQ(CurrentEpoch(nActivationHeight - 1, params), Consensus::BASE_SPROUT);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(nActivationHeight - 1, params), 0);
|
||||||
|
EXPECT_EQ(CurrentEpoch(nActivationHeight, params), Consensus::UPGRADE_TESTDUMMY);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(nActivationHeight, params), nBranchId);
|
||||||
|
EXPECT_EQ(CurrentEpoch(1000000, params), Consensus::UPGRADE_TESTDUMMY);
|
||||||
|
EXPECT_EQ(CurrentEpochBranchId(1000000, params), nBranchId);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(UpgradesTest, IsActivationHeight) {
|
||||||
|
SelectParams(CBaseChainParams::REGTEST);
|
||||||
|
const Consensus::Params& params = Params().GetConsensus();
|
||||||
|
|
||||||
|
// Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
|
||||||
|
EXPECT_FALSE(IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
|
||||||
|
|
||||||
|
EXPECT_FALSE(IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_TRUE(IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
|
||||||
|
int nActivationHeight = 100;
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
|
||||||
|
|
||||||
|
EXPECT_FALSE(IsActivationHeight(-1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(0, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(nActivationHeight - 1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_TRUE(IsActivationHeight(nActivationHeight, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(nActivationHeight + 1, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
EXPECT_FALSE(IsActivationHeight(1000000, params, Consensus::UPGRADE_TESTDUMMY));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(UpgradesTest, IsActivationHeightForAnyUpgrade) {
|
||||||
|
SelectParams(CBaseChainParams::REGTEST);
|
||||||
|
const Consensus::Params& params = Params().GetConsensus();
|
||||||
|
|
||||||
|
// Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(-1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(0, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1000000, params));
|
||||||
|
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, Consensus::NetworkUpgrade::ALWAYS_ACTIVE);
|
||||||
|
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(-1, params));
|
||||||
|
EXPECT_TRUE(IsActivationHeightForAnyUpgrade(0, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1000000, params));
|
||||||
|
|
||||||
|
int nActivationHeight = 100;
|
||||||
|
UpdateNetworkUpgradeParameters(Consensus::UPGRADE_TESTDUMMY, nActivationHeight);
|
||||||
|
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(-1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(0, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(nActivationHeight - 1, params));
|
||||||
|
EXPECT_TRUE(IsActivationHeightForAnyUpgrade(nActivationHeight, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(nActivationHeight + 1, params));
|
||||||
|
EXPECT_FALSE(IsActivationHeightForAnyUpgrade(1000000, params));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user