// Copyright (c) 2013-2014 The Bitcoin Core developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. // // Unit tests for block.CheckBlock() // #include "clientversion.h" #include "main.h" #include "utiltime.h" #include #include #include #include BOOST_AUTO_TEST_SUITE(CheckBlock_tests) bool read_block(const std::string& filename, CBlock& block) { namespace fs = boost::filesystem; fs::path testFile = fs::current_path() / "data" / filename; #ifdef TEST_DATA_DIR if (!fs::exists(testFile)) { testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename; } #endif FILE* fp = fopen(testFile.string().c_str(), "rb"); if (!fp) return false; fseek(fp, 8, SEEK_SET); // skip msgheader/size CAutoFile filein(fp, SER_DISK, CLIENT_VERSION); if (filein.IsNull()) return false; filein >> block; return true; } BOOST_AUTO_TEST_CASE(May15) { // Putting a 1MB binary file in the git repository is not a great // idea, so this test is only run if you manually download // test/data/Mar12Fork.dat from // http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/Mar12Fork.dat/download unsigned int tMay15 = 1368576000; SetMockTime(tMay15); // Test as if it was right at May 15 CBlock forkingBlock; if (read_block("Mar12Fork.dat", forkingBlock)) { CValidationState state; // After May 15'th, big blocks are OK: forkingBlock.nTime = tMay15; // Invalidates PoW BOOST_CHECK(CheckBlock(forkingBlock, state, false, false)); } SetMockTime(0); } BOOST_AUTO_TEST_SUITE_END()