mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 14:08:40 +01:00
test: Extends wait_for_getheaders so a specific block hash can be checked
Previously, `wait_for_getheaders` would check whether a node had received **any** getheaders message. This implied that, if a test needed to check for a specific block hash within a headers message, it had to make sure that it was checking the desired message. This normally involved having to manually clear `last_message`. This method, apart from being too verbose, was error prone, given an undesired `getheaders` would make tests pass. This adds the ability to check for a specific block_hash within the last `getheaders` message.
This commit is contained in:
@@ -38,9 +38,10 @@ class HeadersSyncTest(BitcoinTestFramework):
|
||||
def run_test(self):
|
||||
self.log.info("Adding a peer to node0")
|
||||
peer1 = self.nodes[0].add_p2p_connection(P2PInterface())
|
||||
best_block_hash = int(self.nodes[0].getbestblockhash(), 16)
|
||||
|
||||
# Wait for peer1 to receive a getheaders
|
||||
peer1.wait_for_getheaders()
|
||||
peer1.wait_for_getheaders(block_hash=best_block_hash)
|
||||
# An empty reply will clear the outstanding getheaders request,
|
||||
# allowing additional getheaders requests to be sent to this peer in
|
||||
# the future.
|
||||
@@ -60,17 +61,12 @@ class HeadersSyncTest(BitcoinTestFramework):
|
||||
assert "getheaders" not in peer2.last_message
|
||||
assert "getheaders" not in peer3.last_message
|
||||
|
||||
with p2p_lock:
|
||||
peer1.last_message.pop("getheaders", None)
|
||||
|
||||
self.log.info("Have all peers announce a new block")
|
||||
self.announce_random_block(all_peers)
|
||||
|
||||
self.log.info("Check that peer1 receives a getheaders in response")
|
||||
peer1.wait_for_getheaders()
|
||||
peer1.wait_for_getheaders(block_hash=best_block_hash)
|
||||
peer1.send_message(msg_headers()) # Send empty response, see above
|
||||
with p2p_lock:
|
||||
peer1.last_message.pop("getheaders", None)
|
||||
|
||||
self.log.info("Check that exactly 1 of {peer2, peer3} received a getheaders in response")
|
||||
count = 0
|
||||
@@ -80,7 +76,6 @@ class HeadersSyncTest(BitcoinTestFramework):
|
||||
if "getheaders" in p.last_message:
|
||||
count += 1
|
||||
peer_receiving_getheaders = p
|
||||
p.last_message.pop("getheaders", None)
|
||||
p.send_message(msg_headers()) # Send empty response, see above
|
||||
|
||||
assert_equal(count, 1)
|
||||
@@ -89,14 +84,14 @@ class HeadersSyncTest(BitcoinTestFramework):
|
||||
self.announce_random_block(all_peers)
|
||||
|
||||
self.log.info("Check that peer1 receives a getheaders in response")
|
||||
peer1.wait_for_getheaders()
|
||||
peer1.wait_for_getheaders(block_hash=best_block_hash)
|
||||
|
||||
self.log.info("Check that the remaining peer received a getheaders as well")
|
||||
expected_peer = peer2
|
||||
if peer2 == peer_receiving_getheaders:
|
||||
expected_peer = peer3
|
||||
|
||||
expected_peer.wait_for_getheaders()
|
||||
expected_peer.wait_for_getheaders(block_hash=best_block_hash)
|
||||
|
||||
self.log.info("Success!")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user