merge bitcoin#21785: Fix intermittent issue in p2p_addr_relay.py

This commit is contained in:
Kittywhiskers Van Gogh 2021-04-28 08:14:22 +02:00
parent 6d27db58d1
commit 03ab144b8f
No known key found for this signature in database
GPG Key ID: 30CD0C065E5C4AAD
4 changed files with 13 additions and 12 deletions

View File

@ -78,7 +78,7 @@ class AddrTest(BitcoinTestFramework):
# pop m_next_addr_send timer # pop m_next_addr_send timer
self.bump_mocktime(5 * 60) self.bump_mocktime(5 * 60)
for peer in receivers: for peer in receivers:
peer.sync_with_ping() peer.sync_send_with_ping()
def oversized_addr_test(self): def oversized_addr_test(self):
self.log.info('Send an addr message that is too large') self.log.info('Send an addr message that is too large')
@ -197,9 +197,7 @@ class AddrTest(BitcoinTestFramework):
self.log.info('Check that we relay address messages') self.log.info('Check that we relay address messages')
addr_source = self.nodes[0].add_p2p_connection(P2PInterface()) addr_source = self.nodes[0].add_p2p_connection(P2PInterface())
msg = self.setup_addr_msg(2) msg = self.setup_addr_msg(2)
addr_source.send_and_ping(msg) self.send_addr_msg(addr_source, msg, [full_outbound_peer])
self.bump_mocktime(5 * 60)
full_outbound_peer.sync_with_ping()
assert_equal(full_outbound_peer.num_ipv4_received, 2) assert_equal(full_outbound_peer.num_ipv4_received, 2)
self.nodes[0].disconnect_p2ps() self.nodes[0].disconnect_p2ps()

View File

@ -90,11 +90,7 @@ class P2PBlocksOnly(BitcoinTestFramework):
# Bump time forward to ensure nNextInvSend timer pops # Bump time forward to ensure nNextInvSend timer pops
self.nodes[0].setmocktime(int(time.time()) + 60) self.nodes[0].setmocktime(int(time.time()) + 60)
# Calling sync_with_ping twice requires that the node calls conn.sync_send_with_ping()
# `ProcessMessage` twice, and thus ensures `SendMessages` must have
# been called at least once
conn.sync_with_ping()
conn.sync_with_ping()
assert(int(txid, 16) not in conn.get_invs()) assert(int(txid, 16) not in conn.get_invs())
def check_p2p_tx_violation(self, index=1): def check_p2p_tx_violation(self, index=1):

View File

@ -168,8 +168,7 @@ class FilterTest(BitcoinTestFramework):
filter_peer.merkleblock_received = False filter_peer.merkleblock_received = False
filter_peer.tx_received = False filter_peer.tx_received = False
self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 90) self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 90)
filter_peer.sync_with_ping() filter_peer.sync_send_with_ping()
filter_peer.sync_with_ping()
assert not filter_peer.merkleblock_received assert not filter_peer.merkleblock_received
assert not filter_peer.tx_received assert not filter_peer.tx_received

View File

@ -577,8 +577,16 @@ class P2PInterface(P2PConnection):
self.send_message(message) self.send_message(message)
self.sync_with_ping(timeout=timeout) self.sync_with_ping(timeout=timeout)
# Sync up with the node def sync_send_with_ping(self, timeout=60):
"""Ensure SendMessages is called on this connection"""
# Calling sync_with_ping twice requires that the node calls
# `ProcessMessage` twice, and thus ensures `SendMessages` must have
# been called at least once
self.sync_with_ping()
self.sync_with_ping()
def sync_with_ping(self, timeout=60): def sync_with_ping(self, timeout=60):
"""Ensure ProcessMessages is called on this connection"""
self.send_message(msg_ping(nonce=self.ping_counter)) self.send_message(msg_ping(nonce=self.ping_counter))
def test_function(): def test_function():