// Copyright (c) 2013-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include "clientversion.h" #include "consensus/validation.h" #include "main.h" #include "test/test_bitcoin.h" #include "utiltime.h" #include "zcash/Proof.hpp" #include #include #include #include BOOST_FIXTURE_TEST_SUITE(CheckBlock_tests, BasicTestingSetup) 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 auto verifier = libzcash::ProofVerifier::Strict(); BOOST_CHECK(CheckBlock(forkingBlock, state, verifier, false, false)); } SetMockTime(0); } BOOST_AUTO_TEST_SUITE_END()