mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
Merge #18690: test: Check object hashes in wait_for_getdata
9f5608c2893f89cd56c7c548b748996199e0da1d test: check for matching object hashes in wait_for_getdata (Danny Lee) Pull request description: Previously, `wait_for_getdata` only looked for the presence of a recent `"getdata"` message. Additionally checking the object hashes inside the message should make tests involving `wait_for_getdata` more robust. `p2p_sendheaders.py` already overrides `wait_for_getdata` do this check; we can use the same approach consistently across all tests that call `wait_for_getdata`. This PR is progress towards #18614 , but closing that issue would also involve some additional changes to `wait_for_getheaders`. ACKs for top commit: theStack: ACK 9f5608c2893f89cd56c7c548b748996199e0da1d 🍻 Tree-SHA512: 8e7f95881c19631db014d4bb2399fea0d14686a32542f6ca3b60809744b0d684eac4e4c107c87143991f3cd0c2d4ab09d0c17486239768a9b40bee25f2e4d54a
This commit is contained in:
parent
f275a73e64
commit
f3687a269e
@ -90,7 +90,7 @@ class P2PFingerprintTest(BitcoinTestFramework):
|
||||
|
||||
# Force reorg to a longer chain
|
||||
node0.send_message(msg_headers(new_blocks))
|
||||
node0.wait_for_getdata()
|
||||
node0.wait_for_getdata([x.sha256 for x in new_blocks])
|
||||
for block in new_blocks:
|
||||
node0.send_and_ping(msg_block(block))
|
||||
|
||||
|
@ -144,13 +144,6 @@ class BaseNode(P2PInterface):
|
||||
getblocks_message.locator.vHave = locator
|
||||
self.send_message(getblocks_message)
|
||||
|
||||
def wait_for_getdata(self, hash_list, timeout=60):
|
||||
if hash_list == []:
|
||||
return
|
||||
|
||||
test_function = lambda: "getdata" in self.last_message and [x.hash for x in self.last_message["getdata"].inv] == hash_list
|
||||
wait_until(test_function, timeout=timeout, lock=mininode_lock)
|
||||
|
||||
def wait_for_block_announcement(self, block_hash, timeout=60):
|
||||
test_function = lambda: self.last_blockhash_announced == block_hash
|
||||
wait_until(test_function, timeout=timeout, lock=mininode_lock)
|
||||
|
@ -471,17 +471,17 @@ class P2PInterface(P2PConnection):
|
||||
|
||||
self.wait_until(test_function, timeout=timeout)
|
||||
|
||||
def wait_for_getdata(self, timeout=60):
|
||||
def wait_for_getdata(self, hash_list, timeout=60):
|
||||
"""Waits for a getdata message.
|
||||
|
||||
Receiving any getdata message will satisfy the predicate. the last_message["getdata"]
|
||||
value must be explicitly cleared before calling this method, or this will return
|
||||
immediately with success. TODO: change this method to take a hash value and only
|
||||
return true if the correct block/tx has been requested."""
|
||||
The object hashes in the inventory vector must match the provided hash_list."""
|
||||
|
||||
def test_function():
|
||||
assert self.is_connected
|
||||
return self.last_message.get("getdata")
|
||||
last_data = self.last_message.get("getdata")
|
||||
if not last_data:
|
||||
return False
|
||||
return [x.hash for x in last_data.inv] == hash_list
|
||||
|
||||
self.wait_until(test_function, timeout=timeout)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user