Bitcoin Core 31.99.0
P2P Digital Currency
validation.h
Go to the documentation of this file.
1// Copyright (c) 2020-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_TEST_UTIL_VALIDATION_H
6#define BITCOIN_TEST_UTIL_VALIDATION_H
7
8#include <consensus/amount.h>
10#include <util/task_runner.h>
11#include <validation.h>
12
13#include <cstddef>
14#include <functional>
15#include <thread>
16#include <utility>
17#include <vector>
18
19namespace node {
20class BlockManager;
21}
23class FakeNodeClock;
24struct TestingSetup;
25
28{
29public:
30 void insert(std::function<void()> func) override { std::thread(std::move(func)).join(); }
31 void flush() override {}
32 size_t size() override { return 0; }
33};
34
37 void CleanupForFuzzing();
38};
39
42 void DisableNextWrite();
44 void ResetIbd();
46 void JumpOutOfIbd();
52};
53
55{
56public:
57 static void BlockConnected(
58 const kernel::ChainstateRole& role,
60 const std::shared_ptr<const CBlock>& block,
61 const CBlockIndex* pindex);
62};
63
64std::vector<std::pair<COutPoint, CAmount>> ResetChainmanAndMempool(TestingSetup& setup, FakeNodeClock& node_clock);
65
66#endif // BITCOIN_TEST_UTIL_VALIDATION_H
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:94
Implement this to subscribe to events generated in validation and mempool.
Interface for managing multiple Chainstate objects, where each chainstate is associated with chainsta...
Definition: validation.h:945
Helper to initialize the global NodeClock, let a duration elapse, and reset it after use in a test.
Definition: time.h:54
Runs callbacks synchronously and deterministically, while avoiding DEBUG_LOCKORDER false positives.
Definition: validation.h:28
size_t size() override
Returns the number of currently pending events.
Definition: validation.h:32
void flush() override
Forces the processing of all pending events.
Definition: validation.h:31
void insert(std::function< void()> func) override
The callback can either be queued for later/asynchronous/threaded processing, or be executed immediat...
Definition: validation.h:30
static void BlockConnected(const kernel::ChainstateRole &role, CValidationInterface &obj, const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
Definition: validation.cpp:59
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
Definition: blockstorage.h:196
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition: cs_main.cpp:8
std::thread thread
Thread variable should be after other struct members so the thread does not start until the other mem...
Definition: messages.h:21
void CleanupForFuzzing()
Test-only method to clear internal state for fuzzing.
Definition: validation.cpp:28
void ResetBestInvalid() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:103
void InvalidChainFound(CBlockIndex *pindexNew) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:79
CBlockIndex * FindMostWorkChain() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:91
void DisableNextWrite()
Disable the next write of all chainstates.
Definition: validation.cpp:35
void InvalidBlockFound(CBlockIndex *pindex, const BlockValidationState &state) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Wrappers that avoid making chainstatemanager internals public for tests.
Definition: validation.cpp:67
void JumpOutOfIbd()
Toggle IsInitialBlockDownload from true to false.
Definition: validation.cpp:52
void ResetIbd()
Reset the ibd cache to its initial state.
Definition: validation.cpp:46
Testing setup that configures a complete environment.
Definition: setup_common.h:115
Information about chainstate that notifications are sent from.
Definition: types.h:18
This header provides an interface and simple implementation for a task runner.
std::vector< std::pair< COutPoint, CAmount > > ResetChainmanAndMempool(TestingSetup &setup, FakeNodeClock &node_clock)
Definition: validation.cpp:108
static int setup(void)
Definition: tests.c:8154
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49