test: add parameterized constructor for msg_sendcmpct()

This commit is contained in:
Sebastian Falbesoner 2020-08-23 02:08:45 +02:00
parent 197450f808
commit 638441928a
2 changed files with 10 additions and 27 deletions

View file

@ -188,28 +188,21 @@ class CompactBlocksTest(BitcoinTestFramework):
test_node.request_headers_and_sync(locator=[tip]) test_node.request_headers_and_sync(locator=[tip])
# Now try a SENDCMPCT message with too-high version # Now try a SENDCMPCT message with too-high version
sendcmpct = msg_sendcmpct() test_node.send_and_ping(msg_sendcmpct(announce=True, version=preferred_version+1))
sendcmpct.version = preferred_version + 1
sendcmpct.announce = True
test_node.send_and_ping(sendcmpct)
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message)
# Headers sync before next test. # Headers sync before next test.
test_node.request_headers_and_sync(locator=[tip]) test_node.request_headers_and_sync(locator=[tip])
# Now try a SENDCMPCT message with valid version, but announce=False # Now try a SENDCMPCT message with valid version, but announce=False
sendcmpct.version = preferred_version test_node.send_and_ping(msg_sendcmpct(announce=False, version=preferred_version))
sendcmpct.announce = False
test_node.send_and_ping(sendcmpct)
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message)
# Headers sync before next test. # Headers sync before next test.
test_node.request_headers_and_sync(locator=[tip]) test_node.request_headers_and_sync(locator=[tip])
# Finally, try a SENDCMPCT message with announce=True # Finally, try a SENDCMPCT message with announce=True
sendcmpct.version = preferred_version test_node.send_and_ping(msg_sendcmpct(announce=True, version=preferred_version))
sendcmpct.announce = True
test_node.send_and_ping(sendcmpct)
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message)
# Try one more time (no headers sync should be needed!) # Try one more time (no headers sync should be needed!)
@ -220,23 +213,17 @@ class CompactBlocksTest(BitcoinTestFramework):
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message)
# Try one more time, after sending a version-1, announce=false message. # Try one more time, after sending a version-1, announce=false message.
sendcmpct.version = preferred_version - 1 test_node.send_and_ping(msg_sendcmpct(announce=False, version=preferred_version-1))
sendcmpct.announce = False
test_node.send_and_ping(sendcmpct)
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" in p.last_message)
# Now turn off announcements # Now turn off announcements
sendcmpct.version = preferred_version test_node.send_and_ping(msg_sendcmpct(announce=False, version=preferred_version))
sendcmpct.announce = False
test_node.send_and_ping(sendcmpct)
check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message and "headers" in p.last_message) check_announcement_of_new_block(node, test_node, lambda p: "cmpctblock" not in p.last_message and "headers" in p.last_message)
if old_node is not None: if old_node is not None:
# Verify that a peer using an older protocol version can receive # Verify that a peer using an older protocol version can receive
# announcements from this node. # announcements from this node.
sendcmpct.version = preferred_version - 1 old_node.send_and_ping(msg_sendcmpct(announce=True, version=preferred_version-1))
sendcmpct.announce = True
old_node.send_and_ping(sendcmpct)
# Header sync # Header sync
old_node.request_headers_and_sync(locator=[tip]) old_node.request_headers_and_sync(locator=[tip])
check_announcement_of_new_block(node, old_node, lambda p: "cmpctblock" in p.last_message) check_announcement_of_new_block(node, old_node, lambda p: "cmpctblock" in p.last_message)
@ -729,11 +716,7 @@ class CompactBlocksTest(BitcoinTestFramework):
node = self.nodes[0] node = self.nodes[0]
tip = node.getbestblockhash() tip = node.getbestblockhash()
peer.get_headers(locator=[int(tip, 16)], hashstop=0) peer.get_headers(locator=[int(tip, 16)], hashstop=0)
peer.send_and_ping(msg_sendcmpct(announce=True, version=peer.cmpct_version))
msg = msg_sendcmpct()
msg.version = peer.cmpct_version
msg.announce = True
peer.send_and_ping(msg)
def test_compactblock_reconstruction_multiple_peers(self, stalling_peer, delivery_peer): def test_compactblock_reconstruction_multiple_peers(self, stalling_peer, delivery_peer):
node = self.nodes[0] node = self.nodes[0]

View file

@ -1461,9 +1461,9 @@ class msg_sendcmpct:
__slots__ = ("announce", "version") __slots__ = ("announce", "version")
msgtype = b"sendcmpct" msgtype = b"sendcmpct"
def __init__(self): def __init__(self, announce=False, version=1):
self.announce = False self.announce = announce
self.version = 1 self.version = version
def deserialize(self, f): def deserialize(self, f):
self.announce = struct.unpack("<?", f.read(1))[0] self.announce = struct.unpack("<?", f.read(1))[0]