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())};
88 chainman.DisableNextWrite();
94 node.addrman = std::make_unique<AddrMan>(*
node.netgroupman,
true, 0);
99 .reconcile_txs = true,
100 .deterministic_rng = true,
103 connman.SetMsgProc(
node.peerman.get());
104 connman.SetAddrman(*
node.addrman);
108 if (!LIMIT_TO_MESSAGE_TYPE.empty() && random_message_type != LIMIT_TO_MESSAGE_TYPE) {
112 node.validation_signals->RegisterValidationInterface(
node.peerman.get());
116 connman.AddTestNode(p2p_node);
122 net_msg.
m_type = random_message_type;
125 connman.FlushSendBuffer(p2p_node);
126 (void)connman.ReceiveMsgFrom(p2p_node, std::move(net_msg));
128 bool more_work{
true};
132 more_work = connman.ProcessMessagesOnce(p2p_node);
133 }
catch (
const std::ios_base::failure&) {
135 node.peerman->SendMessages(p2p_node);
137 node.validation_signals->SyncWithValidationInterfaceQueue();
138 node.validation_signals->UnregisterValidationInterface(
node.peerman.get());
139 node.connman->StopNodes();
140 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
std::string ConsumeBytesAsString(size_t num_bytes)
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
Helper to initialize the global NodeClock, let a duration elapse, and reset it after use in a test.
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.
void FillNode(FuzzedDataProvider &fuzzed_data_provider, ConnmanTestMsg &connman, CNode &node) noexcept
std::unique_ptr< CNode > ConsumeNodeAsUniquePtr(FuzzedDataProvider &fdp, 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.
void SeedRandomStateForTest(SeedRand seedtype)
Seed the global RNG state for testing and log the seed value.
@ ZEROS
Seed with a compile time constant of zeros.
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
FuzzedDataProvider & fuzzed_data_provider