Skip to content

Commit

Permalink
Merge bitcoin#27212: test: Make the unlikely race in p2p_invalid_mess…
Browse files Browse the repository at this point in the history
…ages impossible

fa1eb0e test: Make the unlikely race in p2p_invalid_messages impossible (MarcoFalke)

Pull request description:

  After `add_p2p_connection` both sides have the verack processed.
  However the pong from conn in reply to the ping from the node has not
  been processed and recorded in totalbytesrecv.
  Flush the pong from conn by sending a ping from conn.

  This should make the unlikely race impossible.

ACKs for top commit:
  mzumsande:
    ACK fa1eb0e
  pinheadmz:
    ACK fa1eb0e

Tree-SHA512: 44166587572e8c0c758cac460fcfd5cf403b2883880128b13dc62e7f74ca5cb8f145bb68a903df177ff0e62faa360f913fd409b009d4cd1360f1f4403ade39ae
  • Loading branch information
fanquake authored and PastaPastaPasta committed Oct 24, 2024
1 parent 6f6b718 commit dbe2e04
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions test/functional/p2p_invalid_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ def run_test(self):
def test_buffer(self):
self.log.info("Test message with header split across two buffers is received")
conn = self.nodes[0].add_p2p_connection(P2PDataStore())
# After add_p2p_connection both sides have the verack processed.
# However the pong from conn in reply to the ping from the node has not
# been processed and recorded in totalbytesrecv.
# Flush the pong from conn by sending a ping from conn.
conn.sync_with_ping(timeout=1)
# Create valid message
msg = conn.build_message(msg_ping(nonce=12345))
cut_pos = 12 # Chosen at an arbitrary position within the header
Expand All @@ -75,8 +80,6 @@ def test_buffer(self):
# Wait until node has processed the first half of the message
self.wait_until(lambda: self.nodes[0].getnettotals()['totalbytesrecv'] != before)
middle = self.nodes[0].getnettotals()['totalbytesrecv']
# If this assert fails, we've hit an unlikely race
# where the test framework sent a message in between the two halves
assert_equal(middle, before + cut_pos)
conn.send_raw_message(msg[cut_pos:])
conn.sync_with_ping(timeout=1)
Expand Down

0 comments on commit dbe2e04

Please sign in to comment.