44# file COPYING or http://www.opensource.org/licenses/mit-license.php.
55
66import random
7+ import time
78from enum import Enum
89
910from 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