瀏覽代碼

Switch testing framework from MAIN to new UNITTEST network

UNITTEST inherites from MAIN but allows synamically changing its parameters using the ModifiableParams() interface
tags/v0.15.1
SergioDemianLerner 7 年之前
父節點
當前提交
f0fd00cb77
共有 10 個檔案被更改,包括 97 行新增4 行删除
  1. 44
    0
      src/chainparams.cpp
  2. 23
    0
      src/chainparams.h
  3. 17
    0
      src/chainparamsbase.cpp
  4. 1
    0
      src/chainparamsbase.h
  5. 2
    0
      src/checkpoints.cpp
  6. 2
    1
      src/main.cpp
  7. 4
    0
      src/pow.cpp
  8. 2
    2
      src/test/base58_tests.cpp
  9. 1
    0
      src/test/miner_tests.cpp
  10. 1
    1
      src/test/test_bitcoin.cpp

+ 44
- 0
src/chainparams.cpp 查看文件

@@ -214,8 +214,50 @@ public:
};
static CRegTestParams regTestParams;

//
// Unit test
//
class CUnitTestParams : public CMainParams, public CModifiableParams {
public:
CUnitTestParams() {
networkID = CBaseChainParams::UNITTEST;
strNetworkID = "unittest";
nDefaultPort = 18445;
vFixedSeeds.clear();
vSeeds.clear(); // Regtest mode doesn't have any DNS seeds.

fRequireRPCPassword = false;
fMiningRequiresPeers = false;
fDefaultCheckMemPool = true;
fAllowMinDifficultyBlocks = false;
fMineBlocksOnDemand = true;
fSkipProofOfWorkCheck = false;
}
virtual bool SkipProofOfWorkCheck() const { return fSkipProofOfWorkCheck; }
protected:
bool fSkipProofOfWorkCheck;
public:
// Published setters to allow changing values in unit test cases
virtual void setSubsidyHalvingInterval(int anSubsidyHalvingInterval) { nSubsidyHalvingInterval=anSubsidyHalvingInterval; }
virtual void setEnforceBlockUpgradeMajority(int anEnforceBlockUpgradeMajority) { nEnforceBlockUpgradeMajority=anEnforceBlockUpgradeMajority; }
virtual void setRejectBlockOutdatedMajority(int anRejectBlockOutdatedMajority) { nRejectBlockOutdatedMajority=anRejectBlockOutdatedMajority; }
virtual void setToCheckBlockUpgradeMajority(int anToCheckBlockUpgradeMajority) { nToCheckBlockUpgradeMajority=anToCheckBlockUpgradeMajority; }
virtual void setDefaultCheckMemPool(bool afDefaultCheckMemPool) { fDefaultCheckMemPool=afDefaultCheckMemPool; }
virtual void setAllowMinDifficultyBlocks(bool afAllowMinDifficultyBlocks) { fAllowMinDifficultyBlocks=afAllowMinDifficultyBlocks; }
virtual void setSkipProofOfWorkCheck(bool afSkipProofOfWorkCheck) { fSkipProofOfWorkCheck = afSkipProofOfWorkCheck; }
};
static CUnitTestParams unitTestParams;


static CChainParams *pCurrentParams = 0;

CModifiableParams *ModifiableParams()
{
assert(pCurrentParams);
assert(pCurrentParams==&unitTestParams);
return (CModifiableParams*)&unitTestParams;
}

const CChainParams &Params() {
assert(pCurrentParams);
return *pCurrentParams;
@@ -229,6 +271,8 @@ CChainParams &Params(CBaseChainParams::Network network) {
return testNetParams;
case CBaseChainParams::REGTEST:
return regTestParams;
case CBaseChainParams::UNITTEST:
return unitTestParams;
default:
assert(false && "Unimplemented network");
return mainParams;

+ 23
- 0
src/chainparams.h 查看文件

@@ -61,6 +61,8 @@ public:
bool DefaultCheckMemPool() const { return fDefaultCheckMemPool; }
/* Allow mining of a min-difficulty block */
bool AllowMinDifficultyBlocks() const { return fAllowMinDifficultyBlocks; }
/* Skip proof-of-work check: allow mining of any difficulty block */
virtual bool SkipProofOfWorkCheck() const { return false; }
/* Make standard checks */
bool RequireStandard() const { return fRequireStandard; }
int64_t TargetTimespan() const { return nTargetTimespan; }
@@ -105,6 +107,24 @@ protected:
bool fMineBlocksOnDemand;
};

/** Modifiable parameters interface is used by test cases to adapt the parameters in order
*** to test specific features more easily. Test cases should always restore the previous
*** values after finalization.
**/

class CModifiableParams {
public:
// Published setters to allow changing values in unit test cases
virtual void setSubsidyHalvingInterval(int anSubsidyHalvingInterval) =0;
virtual void setEnforceBlockUpgradeMajority(int anEnforceBlockUpgradeMajority)=0;
virtual void setRejectBlockOutdatedMajority(int anRejectBlockOutdatedMajority)=0;
virtual void setToCheckBlockUpgradeMajority(int anToCheckBlockUpgradeMajority)=0;
virtual void setDefaultCheckMemPool(bool aDefaultCheckMemPool)=0;
virtual void setAllowMinDifficultyBlocks(bool aAllowMinDifficultyBlocks)=0;
virtual void setSkipProofOfWorkCheck(bool aSkipProofOfWorkCheck)=0;
};


/**
* Return the currently selected parameters. This won't change after app startup
* outside of the unit tests.
@@ -114,6 +134,9 @@ const CChainParams &Params();
/** Return parameters for the given network. */
CChainParams &Params(CBaseChainParams::Network network);

/** Get modifyable network parameters (UNITTEST only) */
CModifiableParams *ModifiableParams();

/** Sets the params returned by Params() to those for the given network. */
void SelectParams(CBaseChainParams::Network network);


+ 17
- 0
src/chainparamsbase.cpp 查看文件

@@ -57,6 +57,20 @@ public:
};
static CBaseRegTestParams regTestParams;

//
// Unit test
//
class CBaseUnitTestParams : public CBaseMainParams
{
public:
CBaseUnitTestParams()
{
networkID = CBaseChainParams::UNITTEST;
strDataDir = "unittest";
}
};
static CBaseUnitTestParams unitTestParams;

static CBaseChainParams* pCurrentBaseParams = 0;

const CBaseChainParams& BaseParams()
@@ -77,6 +91,9 @@ void SelectBaseParams(CBaseChainParams::Network network)
case CBaseChainParams::REGTEST:
pCurrentBaseParams = &regTestParams;
break;
case CBaseChainParams::UNITTEST:
pCurrentBaseParams = &unitTestParams;
break;
default:
assert(false && "Unimplemented network");
return;

+ 1
- 0
src/chainparamsbase.h 查看文件

@@ -19,6 +19,7 @@ public:
MAIN,
TESTNET,
REGTEST,
UNITTEST,

MAX_NETWORK_TYPES
};

+ 2
- 0
src/checkpoints.cpp 查看文件

@@ -88,6 +88,8 @@ namespace Checkpoints {
return dataTestnet;
else if (Params().NetworkID() == CBaseChainParams::MAIN)
return data;
else if (Params().NetworkID() == CBaseChainParams::UNITTEST) // UnitTest share the same checkpoints as MAIN
return data;
else
return dataRegtest;
}

+ 2
- 1
src/main.cpp 查看文件

@@ -2305,7 +2305,8 @@ bool AcceptBlockHeader(CBlockHeader& block, CValidationState& state, CBlockIndex
nHeight = pindexPrev->nHeight+1;

// Check proof of work
if (block.nBits != GetNextWorkRequired(pindexPrev, &block))
if ((!Params().SkipProofOfWorkCheck()) &&
(block.nBits != GetNextWorkRequired(pindexPrev, &block)))
return state.DoS(100, error("AcceptBlock() : incorrect proof of work"),
REJECT_INVALID, "bad-diffbits");


+ 4
- 0
src/pow.cpp 查看文件

@@ -81,6 +81,10 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits)
bool fNegative;
bool fOverflow;
uint256 bnTarget;

if (Params().SkipProofOfWorkCheck())
return true;

bnTarget.SetCompact(nBits, &fNegative, &fOverflow);

// Check range

+ 2
- 2
src/test/base58_tests.cpp 查看文件

@@ -175,7 +175,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_parse)
BOOST_CHECK_MESSAGE(!secret.IsValid(), "IsValid pubkey as privkey:" + strTest);
}
}
SelectParams(CBaseChainParams::MAIN);
SelectParams(CBaseChainParams::UNITTEST);
}

// Goal: check that generated keys match test vectors
@@ -243,7 +243,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_gen)
CTxDestination nodest = CNoDestination();
BOOST_CHECK(!dummyAddr.Set(nodest));

SelectParams(CBaseChainParams::MAIN);
SelectParams(CBaseChainParams::UNITTEST);
}

// Goal: check that base58 parsing code is robust against a variety of corrupted data

+ 1
- 0
src/test/miner_tests.cpp 查看文件

@@ -253,6 +253,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)

chainActive.Tip()->nHeight--;
SetMockTime(0);
mempool.clear();

BOOST_FOREACH(CTransaction *tx, txFirst)
delete tx;

+ 1
- 1
src/test/test_bitcoin.cpp 查看文件

@@ -31,7 +31,7 @@ struct TestingSetup {

TestingSetup() {
fPrintToDebugLog = false; // don't want to write to debug.log file
SelectParams(CBaseChainParams::MAIN);
SelectParams(CBaseChainParams::UNITTEST);
noui_connect();
#ifdef ENABLE_WALLET
bitdb.MakeMock();

Loading…
取消
儲存