Changeset View
Changeset View
Standalone View
Standalone View
src/test/validation_tests.cpp
- This file was added.
// Copyright (c) 2011-2016 The Bitcoin Core developers | |||||
// Copyright (c) 2017 The Bitcoin developers | |||||
// Distributed under the MIT software license, see the accompanying | |||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
#include "validation.h" | |||||
#include "chainparams.h" | |||||
#include "config.h" | |||||
#include "consensus/consensus.h" | |||||
#include "primitives/transaction.h" | |||||
#include "test/test_bitcoin.h" | |||||
#include "util.h" | |||||
#include <cstdint> | |||||
#include <cstdio> | |||||
#include <vector> | |||||
#include <boost/test/unit_test.hpp> | |||||
static CBlock makeLargeDummyBlock(const size_t num_tx) { | |||||
CBlock block; | |||||
block.vtx.reserve(num_tx); | |||||
CTransaction tx; | |||||
for (size_t i = 0; i < num_tx; i++) { | |||||
block.vtx.push_back(MakeTransactionRef(tx)); | |||||
} | |||||
return block; | |||||
} | |||||
BOOST_FIXTURE_TEST_SUITE(validation_tests, BasicTestingSetup) | |||||
/** Test that LoadExternalBlockFile works with the buffer size set | |||||
below the size of a large block. Currently, LoadExternalBlockFile has the | |||||
buffer size for CBufferedFile set to 2 * MAX_TX_SIZE. Test with a value | |||||
of 10 * MAX_TX_SIZE. */ | |||||
BOOST_AUTO_TEST_CASE(validation_load_external_block_file) { | |||||
FILE *fp = tmpfile(); | |||||
const Config &config = GetConfig(); | |||||
const CChainParams &chainparams = config.GetChainParams(); | |||||
// serialization format is: | |||||
// message start magic, size of block, block | |||||
size_t nwritten = fwrite(chainparams.MessageStart(), | |||||
CMessageHeader::MESSAGE_START_SIZE, 1, fp); | |||||
BOOST_CHECK_EQUAL(nwritten, 1); | |||||
CTransaction empty_tx; | |||||
size_t empty_tx_size = GetSerializeSize(empty_tx, SER_DISK, CLIENT_VERSION); | |||||
size_t num_tx = (10 * MAX_TX_SIZE) / empty_tx_size; | |||||
CBlock block = makeLargeDummyBlock(num_tx); | |||||
BOOST_CHECK(GetSerializeSize(block, SER_DISK, CLIENT_VERSION) > | |||||
2 * MAX_TX_SIZE); | |||||
unsigned int size = GetSerializeSize(block, SER_DISK, CLIENT_VERSION); | |||||
{ | |||||
CAutoFile outs(fp, SER_DISK, CLIENT_VERSION); | |||||
outs << size; | |||||
outs << block; | |||||
outs.release(); | |||||
} | |||||
fseek(fp, 0, SEEK_SET); | |||||
BOOST_CHECK_NO_THROW( | |||||
{ LoadExternalBlockFile(config, chainparams, fp, 0); }); | |||||
} | |||||
BOOST_AUTO_TEST_SUITE_END() |