Skip to content

Commit

Permalink
[qa] Wait for specific block announcement in p2p-compactblocks
Browse files Browse the repository at this point in the history
Change check_announcement_of_new_block() to wait specifically for the
announcement of the newly created block, instead of waiting for any
announcement at all. A difficult to reproduce failure in
check_announcement_of_new_block() that happened in a travis build
(https://travis-ci.org/bitcoin/bitcoin/jobs/175198367) might have happened
because an older announcement was mistaken for the expected one. The error
looked like:

  Assertion failed: Failed

  File ".../bitcoin/qa/rpc-tests/test_framework/test_framework.py", line 145, in main
    self.run_test()
  File ".../bitcoin/build/../qa/rpc-tests/p2p-compactblocks.py", line 787, in run_test
    self.test_sendcmpct(self.nodes[1], self.segwit_node, 2, old_node=self.old_node)
  File ".../bitcoin/build/../qa/rpc-tests/p2p-compactblocks.py", line 201, in test_sendcmpct
    check_announcement_of_new_block(node, test_node, lambda p: p.last_cmpctblock is None and p.last_inv is not None)
  File ".../bitcoin/build/../qa/rpc-tests/p2p-compactblocks.py", line 194, in check_announcement_of_new_block
    assert(predicate(peer))

This commit also changes the assertion failed message above to include more
detailed information for debug.

Github-Pull: bitcoin#9159
Rebased-From: dfa44d1
  • Loading branch information
ryanofsky authored and MarcoFalke committed Nov 19, 2016
1 parent dccdc3a commit eca9b46
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions qa/rpc-tests/p2p-compactblocks.py
Expand Up @@ -186,12 +186,15 @@ def received_sendcmpct():

def check_announcement_of_new_block(node, peer, predicate):
peer.clear_block_announcement()
node.generate(1)
got_message = wait_until(lambda: peer.block_announced, timeout=30)
block_hash = int(node.generate(1)[0], 16)
peer.wait_for_block_announcement(block_hash, timeout=30)
assert(peer.block_announced)
assert(got_message)

with mininode_lock:
assert(predicate(peer))
assert predicate(peer), (
"block_hash={!r}, cmpctblock={!r}, inv={!r}".format(
block_hash, peer.last_cmpctblock, peer.last_inv))

# We shouldn't get any block announcements via cmpctblock yet.
check_announcement_of_new_block(node, test_node, lambda p: p.last_cmpctblock is None)
Expand Down

0 comments on commit eca9b46

Please sign in to comment.