mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-11 21:20:39 +02:00
Avoid exposing a process-wide FakeNodeClock accessor from the test utility module. Initialize separate scoped clocks for target setup and input processing, and pass the active clock to ResetChainmanAndMempool by reference. ResetChainmanAndMempool sets each scoped clock to the selected chain's genesis time. Avoid hard-coding the mainnet genesis timestamp when constructing these clocks, because the targets use REGTEST parameters and the value is overwritten during reset. Initialize each clock from the fuzz harness's existing mock time until ResetChainmanAndMempool sets the REGTEST genesis time. This commit does not change behavior. Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com> Co-authored-by: nervana21 <205626986+nervana21@users.noreply.github.com>
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
// Copyright (c) 2020-present The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_TEST_UTIL_VALIDATION_H
|
|
#define BITCOIN_TEST_UTIL_VALIDATION_H
|
|
|
|
#include <consensus/amount.h>
|
|
#include <primitives/transaction.h>
|
|
#include <validation.h>
|
|
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
namespace node {
|
|
class BlockManager;
|
|
}
|
|
class CValidationInterface;
|
|
class FakeNodeClock;
|
|
struct TestingSetup;
|
|
|
|
struct TestBlockManager : public node::BlockManager {
|
|
/** Test-only method to clear internal state for fuzzing */
|
|
void CleanupForFuzzing();
|
|
};
|
|
|
|
struct TestChainstateManager : public ChainstateManager {
|
|
/** Disable the next write of all chainstates */
|
|
void DisableNextWrite();
|
|
/** Reset the ibd cache to its initial state */
|
|
void ResetIbd();
|
|
/** Toggle IsInitialBlockDownload from true to false */
|
|
void JumpOutOfIbd();
|
|
/** Wrappers that avoid making chainstatemanager internals public for tests */
|
|
void InvalidBlockFound(CBlockIndex* pindex, const BlockValidationState& state) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
|
void InvalidChainFound(CBlockIndex* pindexNew) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
|
CBlockIndex* FindMostWorkChain() EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
|
void ResetBestInvalid() EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
|
};
|
|
|
|
class ValidationInterfaceTest
|
|
{
|
|
public:
|
|
static void BlockConnected(
|
|
const kernel::ChainstateRole& role,
|
|
CValidationInterface& obj,
|
|
const std::shared_ptr<const CBlock>& block,
|
|
const CBlockIndex* pindex);
|
|
};
|
|
|
|
std::vector<std::pair<COutPoint, CAmount>> ResetChainmanAndMempool(TestingSetup& setup, FakeNodeClock& node_clock);
|
|
|
|
#endif // BITCOIN_TEST_UTIL_VALIDATION_H
|