Skip to content

Commit bf5662c

Browse files
committed
test: enable v2 for python p2p depending on global --v2transport flag
This changes the default behavior, individual tests can overwrite this option. As a result, it is possible to run the entire test suite with --v2transport, and all connections to the python p2p will then use it. Also adjust several tests that are already running with --v2transport in the test runner (although they actually made v1 connection before this change). This is done in the same commit so that there isn't an intermediate commit in which the CI fails.
1 parent 6e9e39d commit bf5662c

File tree

4 files changed

+35
-22
lines changed

4 files changed

+35
-22
lines changed

test/functional/p2p_ibd_stalling.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ def run_test(self):
8080

8181
# Need to wait until 1023 blocks are received - the magic total bytes number is a workaround in lack of an rpc
8282
# returning the number of downloaded (but not connected) blocks.
83-
self.wait_until(lambda: self.total_bytes_recv_for_blocks() == 172761)
83+
bytes_recv = 172761 if not self.options.v2transport else 169692
84+
self.wait_until(lambda: self.total_bytes_recv_for_blocks() == bytes_recv)
8485

8586
self.all_sync_send_with_ping(peers)
8687
# If there was a peer marked for stalling, it would get disconnected

test/functional/p2p_timeouts.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,8 @@ def run_test(self):
6969
with self.nodes[0].assert_debug_log(['Unsupported message "ping" prior to verack from peer=0']):
7070
no_verack_node.send_message(msg_ping())
7171

72-
# With v2, non-version messages before the handshake would be interpreted as part of the key exchange.
73-
# Therefore, don't execute this part of the test if v2transport is chosen.
74-
if not self.options.v2transport:
75-
with self.nodes[0].assert_debug_log(['non-version message before version handshake. Message "ping" from peer=1']):
76-
no_version_node.send_message(msg_ping())
72+
with self.nodes[0].assert_debug_log(['non-version message before version handshake. Message "ping" from peer=1']):
73+
no_version_node.send_message(msg_ping())
7774

7875
self.mock_forward(1)
7976
assert "version" in no_verack_node.last_message
@@ -83,14 +80,20 @@ def run_test(self):
8380
assert no_send_node.is_connected
8481

8582
no_verack_node.send_message(msg_ping())
86-
if not self.options.v2transport:
87-
no_version_node.send_message(msg_ping())
88-
89-
expected_timeout_logs = [
90-
"version handshake timeout peer=0",
91-
f"socket no message in first 3 seconds, {'0' if self.options.v2transport else '1'} 0 peer=1",
92-
"socket no message in first 3 seconds, 0 0 peer=2",
93-
]
83+
no_version_node.send_message(msg_ping())
84+
85+
if self.options.v2transport:
86+
expected_timeout_logs = [
87+
"version handshake timeout peer=0",
88+
"version handshake timeout peer=1",
89+
"version handshake timeout peer=2",
90+
]
91+
else:
92+
expected_timeout_logs = [
93+
"version handshake timeout peer=0",
94+
"socket no message in first 3 seconds, 1 0 peer=1",
95+
"socket no message in first 3 seconds, 0 0 peer=2",
96+
]
9497

9598
with self.nodes[0].assert_debug_log(expected_msgs=expected_timeout_logs):
9699
self.mock_forward(2)

test/functional/rpc_net.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ def test_getpeerinfo(self):
117117
peer_info = self.nodes[0].getpeerinfo()[no_version_peer_id]
118118
peer_info.pop("addr")
119119
peer_info.pop("addrbind")
120+
# The next two fields will vary for v2 connections because we send a rng-based number of decoy messages
121+
peer_info.pop("bytesrecv")
122+
peer_info.pop("bytessent")
120123
assert_equal(
121124
peer_info,
122125
{
@@ -125,9 +128,7 @@ def test_getpeerinfo(self):
125128
"addr_relay_enabled": False,
126129
"bip152_hb_from": False,
127130
"bip152_hb_to": False,
128-
"bytesrecv": 0,
129131
"bytesrecv_per_msg": {},
130-
"bytessent": 0,
131132
"bytessent_per_msg": {},
132133
"connection_type": "inbound",
133134
"conntime": no_version_peer_conntime,
@@ -136,22 +137,22 @@ def test_getpeerinfo(self):
136137
"inflight": [],
137138
"last_block": 0,
138139
"last_transaction": 0,
139-
"lastrecv": 0,
140-
"lastsend": 0,
140+
"lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
141+
"lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
141142
"minfeefilter": Decimal("0E-8"),
142143
"network": "not_publicly_routable",
143144
"permissions": [],
144145
"presynced_headers": -1,
145146
"relaytxes": False,
146147
"services": "0000000000000000",
147148
"servicesnames": [],
148-
"session_id": "",
149+
"session_id": "" if not self.options.v2transport else no_version_peer.v2_state.peer['session_id'].hex(),
149150
"startingheight": -1,
150151
"subver": "",
151152
"synced_blocks": -1,
152153
"synced_headers": -1,
153154
"timeoffset": 0,
154-
"transport_protocol_type": "v1" if not self.options.v2transport else "detecting",
155+
"transport_protocol_type": "v1" if not self.options.v2transport else "v2",
155156
"version": 0,
156157
},
157158
)

test/functional/test_framework/test_node.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, mat
667667
assert_msg += "with expected error " + expected_msg
668668
self._raise_assertion_error(assert_msg)
669669

670-
def add_p2p_connection(self, p2p_conn, *, wait_for_verack=True, send_version=True, supports_v2_p2p=False, wait_for_v2_handshake=True, **kwargs):
670+
def add_p2p_connection(self, p2p_conn, *, wait_for_verack=True, send_version=True, supports_v2_p2p=None, wait_for_v2_handshake=True, **kwargs):
671671
"""Add an inbound p2p connection to the node.
672672
673673
This method adds the p2p connection to the self.p2ps list and also
@@ -684,6 +684,9 @@ def add_p2p_connection(self, p2p_conn, *, wait_for_verack=True, send_version=Tru
684684
kwargs['dstport'] = p2p_port(self.index)
685685
if 'dstaddr' not in kwargs:
686686
kwargs['dstaddr'] = '127.0.0.1'
687+
if supports_v2_p2p is None:
688+
supports_v2_p2p = self.use_v2transport
689+
687690

688691
p2p_conn.p2p_connected_to_node = True
689692
if self.use_v2transport:
@@ -723,7 +726,7 @@ def add_p2p_connection(self, p2p_conn, *, wait_for_verack=True, send_version=Tru
723726

724727
return p2p_conn
725728

726-
def add_outbound_p2p_connection(self, p2p_conn, *, wait_for_verack=True, p2p_idx, connection_type="outbound-full-relay", supports_v2_p2p=False, advertise_v2_p2p=False, **kwargs):
729+
def add_outbound_p2p_connection(self, p2p_conn, *, wait_for_verack=True, p2p_idx, connection_type="outbound-full-relay", supports_v2_p2p=None, advertise_v2_p2p=None, **kwargs):
727730
"""Add an outbound p2p connection from node. Must be an
728731
"outbound-full-relay", "block-relay-only", "addr-fetch" or "feeler" connection.
729732
@@ -751,6 +754,11 @@ def addconnection_callback(address, port):
751754
self.addconnection('%s:%d' % (address, port), connection_type, advertise_v2_p2p)
752755

753756
p2p_conn.p2p_connected_to_node = False
757+
if supports_v2_p2p is None:
758+
supports_v2_p2p = self.use_v2transport
759+
if advertise_v2_p2p is None:
760+
advertise_v2_p2p = self.use_v2transport
761+
754762
if advertise_v2_p2p:
755763
kwargs['services'] = kwargs.get('services', P2P_SERVICES) | NODE_P2P_V2
756764
assert self.use_v2transport # only a v2 TestNode could make a v2 outbound connection

0 commit comments

Comments
 (0)