Skip to content

Commit

Permalink
[qa] Make compact blocks test construction using fetch methods
Browse files Browse the repository at this point in the history
  • Loading branch information
TheBlueMatt committed Jan 4, 2017
1 parent 8017547 commit 9a0b2f4
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions qa/rpc-tests/p2p-compactblocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,9 @@ def test_compactblock_construction(self, node, test_node, version, use_witness_a
tip = int(node.getbestblockhash(), 16)
assert(test_node.wait_for_block_announcement(tip))

# Make sure we will receive a fast-announce compact block
self.request_cb_announcements(test_node, node, version)

# Now mine a block, and look at the resulting compact block.
test_node.clear_block_announcement()
block_hash = int(node.generate(1)[0], 16)
Expand All @@ -319,27 +322,36 @@ def test_compactblock_construction(self, node, test_node, version, use_witness_a
[tx.calc_sha256() for tx in block.vtx]
block.rehash()

# Don't care which type of announcement came back for this test; just
# request the compact block if we didn't get one yet.
# Wait until the block was announced (via compact blocks)
wait_until(test_node.received_block_announcement, timeout=30)
assert(test_node.received_block_announcement())

# Now fetch and check the compact block
header_and_shortids = None
with mininode_lock:
assert(test_node.last_cmpctblock is not None)
# Convert the on-the-wire representation to absolute indexes
header_and_shortids = HeaderAndShortIDs(test_node.last_cmpctblock.header_and_shortids)
self.check_compactblock_construction_from_block(version, header_and_shortids, block_hash, block)

# Now fetch the compact block using a normal non-announce getdata
with mininode_lock:
if test_node.last_cmpctblock is None:
test_node.clear_block_announcement()
inv = CInv(4, block_hash) # 4 == "CompactBlock"
test_node.send_message(msg_getdata([inv]))
test_node.clear_block_announcement()
inv = CInv(4, block_hash) # 4 == "CompactBlock"
test_node.send_message(msg_getdata([inv]))

wait_until(test_node.received_block_announcement, timeout=30)
assert(test_node.received_block_announcement())

# Now we should have the compactblock
# Now fetch and check the compact block
header_and_shortids = None
with mininode_lock:
assert(test_node.last_cmpctblock is not None)
# Convert the on-the-wire representation to absolute indexes
header_and_shortids = HeaderAndShortIDs(test_node.last_cmpctblock.header_and_shortids)
self.check_compactblock_construction_from_block(version, header_and_shortids, block_hash, block)

def check_compactblock_construction_from_block(self, version, header_and_shortids, block_hash, block):
# Check that we got the right block!
header_and_shortids.header.calc_sha256()
assert_equal(header_and_shortids.header.sha256, block_hash)
Expand Down

0 comments on commit 9a0b2f4

Please sign in to comment.