diff --git a/test/functional/abc_p2p_compactproofs.py b/test/functional/abc_p2p_compactproofs.py --- a/test/functional/abc_p2p_compactproofs.py +++ b/test/functional/abc_p2p_compactproofs.py @@ -96,21 +96,27 @@ ) outbound_avapeers.append(peer) - self.wait_until( - lambda: all([p.last_message.get("getavaproofs") for p in outbound_avapeers])) - assert all([p.message_count.get( - "getavaproofs", 0) >= 1 for p in outbound_avapeers]) - assert all([p.message_count.get( - "getavaproofs", 0) == 0 for p in non_avapeers]) - assert all([p.message_count.get( - "getavaproofs", 0) == 0 for p in inbound_avapeers]) + def all_peers_received_getavaproofs(): + with p2p_lock: + return all([p.last_message.get("getavaproofs") + for p in outbound_avapeers]) + self.wait_until(all_peers_received_getavaproofs) + + with p2p_lock: + assert all([p.message_count.get( + "getavaproofs", 0) >= 1 for p in outbound_avapeers]) + assert all([p.message_count.get( + "getavaproofs", 0) == 0 for p in non_avapeers]) + assert all([p.message_count.get( + "getavaproofs", 0) == 0 for p in inbound_avapeers]) self.log.info( "Check we send periodic getavaproofs message to one of our peers") def count_outbounds_getavaproofs(): - return sum([p.message_count.get("getavaproofs", 0) - for p in outbound_avapeers]) + with p2p_lock: + return sum([p.message_count.get("getavaproofs", 0) + for p in outbound_avapeers]) outbounds_getavaproofs = count_outbounds_getavaproofs() for i in range(12): @@ -119,10 +125,11 @@ == outbounds_getavaproofs + 1) outbounds_getavaproofs += 1 - assert all([p.message_count.get( - "getavaproofs", 0) == 0 for p in non_avapeers]) - assert all([p.message_count.get( - "getavaproofs", 0) == 0 for p in inbound_avapeers]) + with p2p_lock: + assert all([p.message_count.get( + "getavaproofs", 0) == 0 for p in non_avapeers]) + assert all([p.message_count.get( + "getavaproofs", 0) == 0 for p in inbound_avapeers]) def test_send_manual_getavaproofs(self): self.log.info( @@ -157,7 +164,7 @@ assert_equal(node.getpeerinfo()[-1]['addr'], ip_port) assert_equal(node.getpeerinfo()[-1]['connection_type'], 'manual') - self.wait_until(lambda: p.last_message.get("getavaproofs")) + p.wait_until(lambda: p.last_message.get("getavaproofs")) def test_respond_getavaproofs(self): self.log.info("Check the node responds to getavaproofs messages") diff --git a/test/functional/abc_p2p_getavaaddr.py b/test/functional/abc_p2p_getavaaddr.py --- a/test/functional/abc_p2p_getavaaddr.py +++ b/test/functional/abc_p2p_getavaaddr.py @@ -36,7 +36,6 @@ class AddrReceiver(P2PInterface): - def __init__(self): super().__init__() self.received_addrs = None @@ -90,6 +89,17 @@ self.extra_args = [['-enableavalanche=1', '-avacooldown=0', '-whitelist=noban@127.0.0.1']] + def check_all_peers_received_getavaaddr_once(self, avapeers): + def received_all_getavaaddr(avapeers): + with p2p_lock: + return all([p.last_message.get("getavaaddr") + for p in avapeers]) + self.wait_until(lambda: received_all_getavaaddr(avapeers)) + + with p2p_lock: + assert all([p.message_count.get( + "getavaaddr", 0) == 1 for p in avapeers]) + def getavaaddr_interval_test(self): node = self.nodes[0] @@ -102,14 +112,17 @@ proof_hex = proof.serialize().hex() # Add some avalanche peers to the node - for n in range(10): + for _ in range(10): node.add_p2p_connection(AllYesAvaP2PInterface(master_privkey)) assert node.addavalanchenode( node.getpeerinfo()[-1]['id'], master_pubkey, proof_hex) # Build some statistics to ensure some addresses will be returned - self.wait_until(lambda: all( - [avanode.poll_received > 0 for avanode in node.p2ps])) + def all_peers_received_poll(): + with p2p_lock: + return all([avanode.poll_received > + 0 for avanode in node.p2ps]) + self.wait_until(all_peers_received_poll) node.mockscheduler(AVALANCHE_STATISTICS_INTERVAL) requester = node.add_p2p_connection(AddrReceiver()) @@ -118,7 +131,7 @@ getavaddr_time = mock_time # Spamming more get getavaaddr has no effect - for i in range(10): + for _ in range(10): with node.assert_debug_log(["Ignoring repeated getavaaddr from peer"]): requester.send_message(msg_getavaaddr()) @@ -183,8 +196,9 @@ # muted nodes. def poll_all_for_block(): node.generate(1) - return all([avanode.poll_received > ( - 10 if avanode.is_responding else 0) for avanode in avanodes]) + with p2p_lock: + return all([avanode.poll_received > ( + 10 if avanode.is_responding else 0) for avanode in avanodes]) self.wait_until(poll_all_for_block) # Move the scheduler time 10 minutes forward so that so that our peers @@ -236,10 +250,7 @@ ) avapeers.append(avapeer) - self.wait_until( - lambda: all([p.last_message.get("getavaaddr") for p in avapeers])) - assert all([p.message_count.get( - "getavaaddr", 0) == 1 for p in avapeers]) + self.check_all_peers_received_getavaaddr_once(avapeers) # Generate some block to poll for node.generate(1) @@ -248,8 +259,12 @@ # fail out of option shortly and send a getavaaddr message to one of its # outbound avalanche peers. node.mockscheduler(MAX_GETAVAADDR_DELAY) - self.wait_until( - lambda: any([p.message_count.get("getavaaddr", 0) > 1 for p in avapeers])) + + def any_peer_received_getavaaddr(): + with p2p_lock: + return any([p.message_count.get( + "getavaaddr", 0) > 1 for p in avapeers]) + self.wait_until(any_peer_received_getavaaddr) def getavaaddr_manual_test(self): self.log.info( @@ -284,15 +299,15 @@ assert_equal(node.getpeerinfo()[-1]['addr'], ip_port) assert_equal(node.getpeerinfo()[-1]['connection_type'], 'manual') - self.wait_until(lambda: p.last_message.get("getavaaddr")) + p.wait_until(lambda: p.last_message.get("getavaaddr")) # Generate some block to poll for node.generate(1) - # Because our avalanche peers is not responding, our node should fail + # Because our avalanche peer is not responding, our node should fail # out of option shortly and send another getavaaddr message. node.mockscheduler(MAX_GETAVAADDR_DELAY) - self.wait_until(lambda: p.message_count.get("getavaaddr", 0) > 1) + p.wait_until(lambda: p.message_count.get("getavaaddr", 0) > 1) def getavaaddr_noquorum(self): self.log.info( @@ -320,14 +335,12 @@ peerinfo = node.getpeerinfo()[-1] avapeer.set_addr(peerinfo["addr"]) - self.wait_until( - lambda: all([p.last_message.get("getavaaddr") for p in avapeers])) - assert all([p.message_count.get( - "getavaaddr", 0) == 1 for p in avapeers]) + self.check_all_peers_received_getavaaddr_once(avapeers) def total_getavaaddr_msg(): - return sum([p.message_count.get("getavaaddr", 0) - for p in avapeers]) + with p2p_lock: + return sum([p.message_count.get("getavaaddr", 0) + for p in avapeers]) # Because we have not enough stake to start polling, we keep requesting # more addresses