Skip to content

Commit dd13d7b

Browse files
author
MacroFake
committed
Merge bitcoin/bitcoin#25591: move-only: Version handshake to libtest_util
fa4be8e move-only: InitializeNode to handshake helper (MacroFake) fa70989 move-only: Version handshake to libtest_util (MacroFake) Pull request description: The version handshake after setting up a peer is an integral part of (unit) testing net processing logic. Thus, make the helper accessible in libtest_util. Also, remove the peerman argument from `FillNode`, as it must be equal to connman's peerman, which can then be used instead. ACKs for top commit: dergoegge: ACK fa4be8e Tree-SHA512: 8296399dc2c29196bd56584c9b61f1c5a088f96dd3438b07b84e1acf525d867f1e37fdfdeede8a831add25848cda0c221ce3fb873e5ae5ca805a1765aa08eb12
2 parents 39d111a + fa4be8e commit dd13d7b

File tree

6 files changed

+75
-55
lines changed

6 files changed

+75
-55
lines changed

src/test/fuzz/process_message.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ void fuzz_target(FuzzBufferType buffer, const std::string& LIMIT_TO_MESSAGE_TYPE
8080
CNode& p2p_node = *ConsumeNodeAsUniquePtr(fuzzed_data_provider).release();
8181

8282
connman.AddTestNode(p2p_node);
83-
g_setup->m_node.peerman->InitializeNode(&p2p_node);
84-
FillNode(fuzzed_data_provider, connman, *g_setup->m_node.peerman, p2p_node);
83+
FillNode(fuzzed_data_provider, connman, p2p_node);
8584

8685
const auto mock_time = ConsumeTime(fuzzed_data_provider);
8786
SetMockTime(mock_time);

src/test/fuzz/process_messages.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ FUZZ_TARGET_INIT(process_messages, initialize_process_messages)
4646
peers.push_back(ConsumeNodeAsUniquePtr(fuzzed_data_provider, i).release());
4747
CNode& p2p_node = *peers.back();
4848

49-
g_setup->m_node.peerman->InitializeNode(&p2p_node);
50-
FillNode(fuzzed_data_provider, connman, *g_setup->m_node.peerman, p2p_node);
49+
FillNode(fuzzed_data_provider, connman, p2p_node);
5150

5251
connman.AddTestNode(p2p_node);
5352
}

src/test/fuzz/util.cpp

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -289,57 +289,14 @@ bool FuzzedSock::IsConnected(std::string& errmsg) const
289289
return false;
290290
}
291291

292-
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, CNode& node) noexcept
292+
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, CNode& node) noexcept
293293
{
294-
const bool successfully_connected{fuzzed_data_provider.ConsumeBool()};
295-
const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
296-
const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
297-
const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
298-
const bool relay_txs{fuzzed_data_provider.ConsumeBool()};
299-
300-
const CNetMsgMaker mm{0};
301-
302-
CSerializedNetMsg msg_version{
303-
mm.Make(NetMsgType::VERSION,
304-
version, //
305-
Using<CustomUintFormatter<8>>(remote_services), //
306-
int64_t{}, // dummy time
307-
int64_t{}, // ignored service bits
308-
CService{}, // dummy
309-
int64_t{}, // ignored service bits
310-
CService{}, // ignored
311-
uint64_t{1}, // dummy nonce
312-
std::string{}, // dummy subver
313-
int32_t{}, // dummy starting_height
314-
relay_txs),
315-
};
316-
317-
(void)connman.ReceiveMsgFrom(node, msg_version);
318-
node.fPauseSend = false;
319-
connman.ProcessMessagesOnce(node);
320-
{
321-
LOCK(node.cs_sendProcessing);
322-
peerman.SendMessages(&node);
323-
}
324-
if (node.fDisconnect) return;
325-
assert(node.nVersion == version);
326-
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
327-
assert(node.nServices == remote_services);
328-
CNodeStateStats statestats;
329-
assert(peerman.GetNodeStateStats(node.GetId(), statestats));
330-
assert(statestats.m_relay_txs == (relay_txs && !node.IsBlockOnlyConn()));
331-
node.m_permissionFlags = permission_flags;
332-
if (successfully_connected) {
333-
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};
334-
(void)connman.ReceiveMsgFrom(node, msg_verack);
335-
node.fPauseSend = false;
336-
connman.ProcessMessagesOnce(node);
337-
{
338-
LOCK(node.cs_sendProcessing);
339-
peerman.SendMessages(&node);
340-
}
341-
assert(node.fSuccessfullyConnected == true);
342-
}
294+
connman.Handshake(node,
295+
/*successfully_connected=*/fuzzed_data_provider.ConsumeBool(),
296+
/*remote_services=*/ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS),
297+
/*permission_flags=*/ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS),
298+
/*version=*/fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max()),
299+
/*relay_txs=*/fuzzed_data_provider.ConsumeBool());
343300
}
344301

345302
CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider, const std::optional<CAmount>& max) noexcept

src/test/fuzz/util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ auto ConsumeNode(FuzzedDataProvider& fuzzed_data_provider, const std::optional<N
331331
}
332332
inline std::unique_ptr<CNode> ConsumeNodeAsUniquePtr(FuzzedDataProvider& fdp, const std::optional<NodeId>& node_id_in = std::nullopt) { return ConsumeNode<true>(fdp, node_id_in); }
333333

334-
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, CNode& node) noexcept;
334+
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, CNode& node) noexcept;
335335

336336
class FuzzedFileProvider
337337
{

src/test/util/net.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,68 @@
77
#include <chainparams.h>
88
#include <node/eviction.h>
99
#include <net.h>
10+
#include <net_processing.h>
11+
#include <netmessagemaker.h>
1012
#include <span.h>
1113

1214
#include <vector>
1315

16+
void ConnmanTestMsg::Handshake(CNode& node,
17+
bool successfully_connected,
18+
ServiceFlags remote_services,
19+
NetPermissionFlags permission_flags,
20+
int32_t version,
21+
bool relay_txs)
22+
{
23+
auto& peerman{static_cast<PeerManager&>(*m_msgproc)};
24+
auto& connman{*this};
25+
const CNetMsgMaker mm{0};
26+
27+
peerman.InitializeNode(&node);
28+
29+
CSerializedNetMsg msg_version{
30+
mm.Make(NetMsgType::VERSION,
31+
version, //
32+
Using<CustomUintFormatter<8>>(remote_services), //
33+
int64_t{}, // dummy time
34+
int64_t{}, // ignored service bits
35+
CService{}, // dummy
36+
int64_t{}, // ignored service bits
37+
CService{}, // ignored
38+
uint64_t{1}, // dummy nonce
39+
std::string{}, // dummy subver
40+
int32_t{}, // dummy starting_height
41+
relay_txs),
42+
};
43+
44+
(void)connman.ReceiveMsgFrom(node, msg_version);
45+
node.fPauseSend = false;
46+
connman.ProcessMessagesOnce(node);
47+
{
48+
LOCK(node.cs_sendProcessing);
49+
peerman.SendMessages(&node);
50+
}
51+
if (node.fDisconnect) return;
52+
assert(node.nVersion == version);
53+
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
54+
assert(node.nServices == remote_services);
55+
CNodeStateStats statestats;
56+
assert(peerman.GetNodeStateStats(node.GetId(), statestats));
57+
assert(statestats.m_relay_txs == (relay_txs && !node.IsBlockOnlyConn()));
58+
node.m_permissionFlags = permission_flags;
59+
if (successfully_connected) {
60+
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};
61+
(void)connman.ReceiveMsgFrom(node, msg_verack);
62+
node.fPauseSend = false;
63+
connman.ProcessMessagesOnce(node);
64+
{
65+
LOCK(node.cs_sendProcessing);
66+
peerman.SendMessages(&node);
67+
}
68+
assert(node.fSuccessfullyConnected == true);
69+
}
70+
}
71+
1472
void ConnmanTestMsg::NodeReceiveMsgBytes(CNode& node, Span<const uint8_t> msg_bytes, bool& complete) const
1573
{
1674
assert(node.ReceiveMsgBytes(msg_bytes, complete));

src/test/util/net.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ struct ConnmanTestMsg : public CConnman {
3939
m_nodes.clear();
4040
}
4141

42+
void Handshake(CNode& node,
43+
bool successfully_connected,
44+
ServiceFlags remote_services,
45+
NetPermissionFlags permission_flags,
46+
int32_t version,
47+
bool relay_txs);
48+
4249
void ProcessMessagesOnce(CNode& node) { m_msgproc->ProcessMessages(&node, flagInterruptMsgProc); }
4350

4451
void NodeReceiveMsgBytes(CNode& node, Span<const uint8_t> msg_bytes, bool& complete) const;

0 commit comments

Comments
 (0)