diff --git a/src/gtest/test_rpc.cpp b/src/gtest/test_rpc.cpp index ad97d3ca4..c505bbbe4 100644 --- a/src/gtest/test_rpc.cpp +++ b/src/gtest/test_rpc.cpp @@ -6,9 +6,37 @@ #include "chainparams.h" #include "clientversion.h" #include "primitives/block.h" +#include "rpcserver.h" #include "streams.h" #include "utilstrencodings.h" +TEST(rpc, GetDifficultyTestnetRules) { + SelectParams(CBaseChainParams::TESTNET); + + CBlockIndex prev; + prev.nTime = 1472700000; + prev.nBits = 0x201fffff; + + CBlockIndex curr; + curr.pprev = &prev; + curr.nTime = 1472700300; + curr.nBits = 0x207fffff; + + // Time interval is within 5 minutes, so the min-difficulty block should be + // interpreted as a valid network difficulty. + EXPECT_EQ(1, GetDifficulty(&curr)); + EXPECT_EQ(1, GetNetworkDifficulty(&curr)); + + curr.nTime += 1; + + // Time interval is over 5 minutes, so the min-difficulty block should be + // ignored for network difficulty determination. + EXPECT_EQ(1, GetDifficulty(&curr)); + // We have to check this directly, because of some combination of rounding + // and truncation issues that result in Google Test displaying 4 != 4 + EXPECT_EQ((double)0x7fffff/(double)0x1fffff, GetNetworkDifficulty(&curr)); +} + extern json_spirit::Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails = false); TEST(rpc, check_blockToJSON_returns_minified_solution) {