Skip to content

Commit fa70989

Browse files
author
MacroFake
committed
move-only: Version handshake to libtest_util
1 parent 6c0c262 commit fa70989

File tree

3 files changed

+69
-49
lines changed

3 files changed

+69
-49
lines changed

src/test/fuzz/util.cpp

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -291,55 +291,12 @@ bool FuzzedSock::IsConnected(std::string& errmsg) const
291291

292292
void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, 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/util/net.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,66 @@
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+
CSerializedNetMsg msg_version{
28+
mm.Make(NetMsgType::VERSION,
29+
version, //
30+
Using<CustomUintFormatter<8>>(remote_services), //
31+
int64_t{}, // dummy time
32+
int64_t{}, // ignored service bits
33+
CService{}, // dummy
34+
int64_t{}, // ignored service bits
35+
CService{}, // ignored
36+
uint64_t{1}, // dummy nonce
37+
std::string{}, // dummy subver
38+
int32_t{}, // dummy starting_height
39+
relay_txs),
40+
};
41+
42+
(void)connman.ReceiveMsgFrom(node, msg_version);
43+
node.fPauseSend = false;
44+
connman.ProcessMessagesOnce(node);
45+
{
46+
LOCK(node.cs_sendProcessing);
47+
peerman.SendMessages(&node);
48+
}
49+
if (node.fDisconnect) return;
50+
assert(node.nVersion == version);
51+
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
52+
assert(node.nServices == remote_services);
53+
CNodeStateStats statestats;
54+
assert(peerman.GetNodeStateStats(node.GetId(), statestats));
55+
assert(statestats.m_relay_txs == (relay_txs && !node.IsBlockOnlyConn()));
56+
node.m_permissionFlags = permission_flags;
57+
if (successfully_connected) {
58+
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};
59+
(void)connman.ReceiveMsgFrom(node, msg_verack);
60+
node.fPauseSend = false;
61+
connman.ProcessMessagesOnce(node);
62+
{
63+
LOCK(node.cs_sendProcessing);
64+
peerman.SendMessages(&node);
65+
}
66+
assert(node.fSuccessfullyConnected == true);
67+
}
68+
}
69+
1470
void ConnmanTestMsg::NodeReceiveMsgBytes(CNode& node, Span<const uint8_t> msg_bytes, bool& complete) const
1571
{
1672
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)