Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/block_header.cpp
- This file was added.
// Copyright (c) 2020 The Bitcoin Core developers | |||||
// Distributed under the MIT software license, see the accompanying | |||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
#include <primitives/block.h> | |||||
#include <test/fuzz/FuzzedDataProvider.h> | |||||
#include <test/fuzz/fuzz.h> | |||||
#include <test/fuzz/util.h> | |||||
#include <uint256.h> | |||||
#include <cassert> | |||||
#include <cstdint> | |||||
#include <optional> | |||||
#include <string> | |||||
#include <vector> | |||||
void test_one_input(const std::vector<uint8_t> &buffer) { | |||||
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); | |||||
const std::optional<CBlockHeader> block_header = | |||||
ConsumeDeserializable<CBlockHeader>(fuzzed_data_provider); | |||||
if (!block_header) { | |||||
return; | |||||
} | |||||
{ | |||||
const BlockHash hash = block_header->GetHash(); | |||||
static const BlockHash blockhash_max( | |||||
uint256S("fffffffffffffffffffffffffffffffffffffffffffffffffffffffff" | |||||
"fffffff")); | |||||
assert(hash != blockhash_max); | |||||
assert(block_header->GetBlockTime() == block_header->nTime); | |||||
assert(block_header->IsNull() == (block_header->nBits == 0)); | |||||
} | |||||
{ | |||||
CBlockHeader mut_block_header = *block_header; | |||||
mut_block_header.SetNull(); | |||||
assert(mut_block_header.IsNull()); | |||||
CBlock block{*block_header}; | |||||
assert(block.GetBlockHeader().GetHash() == block_header->GetHash()); | |||||
(void)block.ToString(); | |||||
block.SetNull(); | |||||
assert(block.GetBlockHeader().GetHash() == mut_block_header.GetHash()); | |||||
} | |||||
} |