Skip to content

Commit c6d4336

Browse files
committed
test: Fix intermittent failure in p2p_v2_misbehaving.py
The ellswift bytes are computed in the NetworkThread and sent in the MainThread. Add a `wait_until()` to make sure that ellswift computation is completed in NetworkThread before sending it in the MainThread. Also wait until bytes sent are actually received and use mocktime for more robust disconnection checking.
1 parent 9adebe1 commit c6d4336

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

test/functional/p2p_v2_misbehaving.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
55

66
import random
7+
import time
78
from enum import Enum
89

910
from test_framework.messages import MAGIC_BYTES
@@ -136,16 +137,22 @@ def test_earlykeyresponse(self):
136137
self.log.info('Sending ellswift bytes in parts to ensure that response from responder is received only when')
137138
self.log.info('ellswift bytes have a mismatch from the 16 bytes(network magic followed by "version\\x00\\x00\\x00\\x00\\x00")')
138139
node0 = self.nodes[0]
140+
node0.setmocktime(int(time.time()))
139141
self.log.info('Sending first 4 bytes of ellswift which match network magic')
140142
self.log.info('If a response is received, assertion failure would happen in our custom data_received() function')
141143
peer1 = node0.add_p2p_connection(MisbehavingV2Peer(TestType.EARLY_KEY_RESPONSE), wait_for_verack=False, send_version=False, supports_v2_p2p=True, wait_for_v2_handshake=False)
142144
peer1.send_raw_message(MAGIC_BYTES['regtest'])
143145
self.log.info('Sending remaining ellswift and garbage which are different from V1_PREFIX. Since a response is')
144146
self.log.info('expected now, our custom data_received() function wouldn\'t result in assertion failure')
145147
peer1.v2_state.can_data_be_received = True
148+
self.wait_until(lambda: peer1.v2_state.ellswift_ours)
146149
peer1.send_raw_message(peer1.v2_state.ellswift_ours[4:] + peer1.v2_state.sent_garbage)
150+
node0.bumpmocktime(3)
151+
# Ensure that the bytes sent after 4 bytes network magic are actually received.
152+
self.wait_until(lambda: node0.getpeerinfo()[-1]["bytesrecv"] > 4)
147153
with node0.assert_debug_log(['V2 handshake timeout peer=0']):
148-
peer1.wait_for_disconnect(timeout=5)
154+
node0.bumpmocktime(1) # `InactivityCheck()` triggers now
155+
peer1.wait_for_disconnect(timeout=1)
149156
self.log.info('successful disconnection since modified ellswift was sent as response')
150157

151158
def test_v2disconnection(self):
@@ -154,7 +161,7 @@ def test_v2disconnection(self):
154161
expected_debug_message = [
155162
[], # EARLY_KEY_RESPONSE
156163
["V2 transport error: missing garbage terminator, peer=1"], # EXCESS_GARBAGE
157-
["V2 handshake timeout peer=2"], # WRONG_GARBAGE_TERMINATOR
164+
["V2 handshake timeout peer=3"], # WRONG_GARBAGE_TERMINATOR
158165
["V2 transport error: packet decryption failure"], # WRONG_GARBAGE
159166
["V2 transport error: packet decryption failure"], # SEND_NO_AAD
160167
[], # SEND_NON_EMPTY_VERSION_PACKET
@@ -167,8 +174,13 @@ def test_v2disconnection(self):
167174
self.log.info(f"No disconnection for {test_type.name}")
168175
else:
169176
with node0.assert_debug_log(expected_debug_message[test_type.value], timeout=5):
170-
peer = node0.add_p2p_connection(MisbehavingV2Peer(test_type), wait_for_verack=False, send_version=False, supports_v2_p2p=True, expect_success=False)
171-
peer.wait_for_disconnect()
177+
node0.setmocktime(int(time.time()))
178+
peer1 = node0.add_p2p_connection(MisbehavingV2Peer(test_type), wait_for_verack=False, send_version=False, supports_v2_p2p=True, expect_success=False)
179+
# Make a passing connection for more robust disconnection checking.
180+
peer2 = node0.add_p2p_connection(P2PInterface())
181+
assert peer2.is_connected
182+
node0.bumpmocktime(4) # `InactivityCheck()` triggers now
183+
peer1.wait_for_disconnect()
172184
self.log.info(f"Expected disconnection for {test_type.name}")
173185

174186

0 commit comments

Comments
 (0)