45std::string_view LIMIT_TO_MESSAGE_TYPE{};
50 setup.m_node.chainman.reset();
51 setup.m_make_chainman();
52 setup.LoadVerifyActivateChainstate();
62 if (
const auto val{std::getenv(
"LIMIT_TO_MESSAGE_TYPE")}) {
63 LIMIT_TO_MESSAGE_TYPE = val;
67 static const auto testing_setup{
68 MakeNoLogFileContext<TestingSetup>(
85 const auto block_index_size{
WITH_LOCK(chainman.GetMutex(),
return chainman.BlockIndex().size())};
89 chainman.DisableNextWrite();
95 node.addrman = std::make_unique<AddrMan>(*
node.netgroupman,
true, 0);
100 .reconcile_txs = true,
101 .deterministic_rng = true,
104 connman.SetMsgProc(
node.peerman.get());
105 connman.SetAddrman(*
node.addrman);
109 if (!LIMIT_TO_MESSAGE_TYPE.empty() && random_message_type != LIMIT_TO_MESSAGE_TYPE) {
113 node.validation_signals->RegisterValidationInterface(
node.peerman.get());
117 connman.AddTestNode(p2p_node);
123 net_msg.
m_type = random_message_type;
126 connman.FlushSendBuffer(p2p_node);
127 (void)connman.ReceiveMsgFrom(p2p_node, std::move(net_msg));
129 bool more_work{
true};
133 more_work = connman.ProcessMessagesOnce(p2p_node);
134 }
catch (
const std::ios_base::failure&) {
136 node.peerman->SendMessages(p2p_node);
138 node.validation_signals->SyncWithValidationInterfaceQueue();
139 node.validation_signals->UnregisterValidationInterface(
node.peerman.get());
140 node.connman->StopNodes();
141 if (block_index_size !=
WITH_LOCK(chainman.GetMutex(),
return chainman.BlockIndex().size())) {
const TestingSetup * g_setup
#define Assert(val)
Identity function.
Information about a peer.
std::atomic_bool fPauseSend
Helper to initialize the global NodeClock, let a duration elapse, and reset it after use in a test.
Helper to initialize the global MockableSteadyClock, let a duration elapse, and reset it after use in...
std::string ConsumeBytesAsString(size_t num_bytes)
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
static std::unique_ptr< PeerManager > make(CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, node::Warnings &warnings, Options opts)
static const int COINBASE_MATURITY
Coinbase transaction outputs can only be spent after this number of new blocks (network rule)
is used externally by mining IPC clients, so it should only declare simple data definitions.
static const unsigned int MAX_PROTOCOL_MESSAGE_LENGTH
Maximum length of incoming protocol messages (no message over 4 MB is currently acceptable).
FUZZ_TARGET(process_message,.init=initialize_process_message)
void initialize_process_message()
const std::array ALL_NET_MESSAGE_TYPES
All known message types (see above).
std::vector< unsigned char > data
void Reset()
Reset the internal state.
Testing setup that configures a complete environment.
Block template creation options.
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
SeedRandomStateForTest(SeedRand::ZEROS)
void FillNode(FuzzedDataProvider &fuzzed_data_provider, ConnmanTestMsg &connman, CNode &node) noexcept
std::unique_ptr< CNode > ConsumeNodeAsUniquePtr(FuzzedDataProvider &fdp, FakeSteadyClock &clock, const std::optional< NodeId > &node_id_in=std::nullopt)
NodeSeconds ConsumeTime(FuzzedDataProvider &fuzzed_data_provider, const std::optional< int64_t > &min, const std::optional< int64_t > &max) noexcept
std::vector< B > ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider, const std::optional< size_t > &max_length=std::nullopt) noexcept
COutPoint MineBlock(const NodeContext &node, const node::BlockCreateOptions &assembler_options)
Returns the generated coin.
@ ZEROS
Seed with a compile time constant of zeros.
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
FuzzedDataProvider & fuzzed_data_provider