diff options
author | Ava Chow <github@achow101.com> | 2024-01-31 16:30:12 -0500 |
---|---|---|
committer | Ava Chow <github@achow101.com> | 2024-01-31 16:36:31 -0500 |
commit | 4b6687719768b6fd0812edc4cc4b6f9f91622dbc (patch) | |
tree | 2aa70288c9a4840384536ad10a5d8324736133ba | |
parent | 6f7395b3ff21228183df190f3ed1bdc3049f39e2 (diff) | |
parent | 9642aefb81a9c87227eccf9997380024247ed1fc (diff) |
Merge bitcoin/bitcoin#29352: test: fix intermittent failure in p2p_v2_earlykeyresponse
9642aefb81a9c87227eccf9997380024247ed1fc test: fix intermittent failure in p2p_v2_earlykeyresponse (Martin Zumsande)
Pull request description:
The test fails intermittently, see https://cirrus-ci.com/task/6403578080788480?logs=ci#L3521 and https://github.com/bitcoin/bitcoin/pull/24748#issuecomment-1916996716.
I think it's because of a race between the python NetworkThread and the actual
test, which will both call `initiate_v2_handshake`. I could reproduce it by adding a sleep into `initiate_v2_handshake` after the line `self.sent_garbage = random.randbytes(garbage_len)`.
Fix this by waiting for the first `initiate_v2_handshake` to have finished before calling it a second time.
ACKs for top commit:
stratospher:
tested ACK 9642aef.
achow101:
ACK 9642aefb81a9c87227eccf9997380024247ed1fc
theStack:
Tested ACK 9642aefb81a9c87227eccf9997380024247ed1fc
Tree-SHA512: f728bbceaf816ddefeee4957494ccb608ad4fc912cb5cbf5f2acf09836df969c4e8fa2bb441aadb94fa39b3ffbb005d4132e7b6a5a98d80811810d8bd1d624e3
-rwxr-xr-x | test/functional/p2p_v2_earlykeyresponse.py | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/test/functional/p2p_v2_earlykeyresponse.py b/test/functional/p2p_v2_earlykeyresponse.py index 5f6c978661..1f570e6010 100755 --- a/test/functional/p2p_v2_earlykeyresponse.py +++ b/test/functional/p2p_v2_earlykeyresponse.py @@ -49,6 +49,7 @@ class PeerEarlyKey(P2PInterface): def __init__(self): super().__init__() self.v2_state = None + self.connection_opened = False def connection_made(self, transport): """64 bytes ellswift is sent in 2 parts during `initial_v2_handshake()`""" @@ -59,6 +60,8 @@ class PeerEarlyKey(P2PInterface): # check that data can be received on recvbuf only when mismatch from V1_PREFIX happens (send_net_magic = False) assert self.v2_state.can_data_be_received and not self.v2_state.send_net_magic + def on_open(self): + self.connection_opened = True class P2PEarlyKey(BitcoinTestFramework): def set_test_params(self): @@ -73,6 +76,7 @@ class P2PEarlyKey(BitcoinTestFramework): self.log.info('If a response is received, assertion failure would happen in our custom data_received() function') # send happens in `initiate_v2_handshake()` in `connection_made()` peer1 = node0.add_p2p_connection(PeerEarlyKey(), wait_for_verack=False, send_version=False, supports_v2_p2p=True) + self.wait_until(lambda: peer1.connection_opened) self.log.info('Sending remaining ellswift and garbage which are different from V1_PREFIX. Since a response is') self.log.info('expected now, our custom data_received() function wouldn\'t result in assertion failure') ellswift_and_garbage_data = peer1.v2_state.initiate_v2_handshake() |