Changeset View
Changeset View
Standalone View
Standalone View
qa/rpc-tests/p2p-compactblocks.py
Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | def __init__(self): | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
self.utxos = [] | self.utxos = [] | ||||
def setup_network(self): | def setup_network(self): | ||||
self.nodes = [] | self.nodes = [] | ||||
# Start up two version 1 CB nodes. | # Start up two version 1 CB nodes. | ||||
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, | self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, | ||||
[["-debug", "-logtimemicros=1"], | [[], ["-txindex"]]) | ||||
["-debug", "-logtimemicros", "-txindex"]]) | |||||
connect_nodes(self.nodes[0], 1) | connect_nodes(self.nodes[0], 1) | ||||
def build_block_on_tip(self, node): | def build_block_on_tip(self, node): | ||||
height = node.getblockcount() | height = node.getblockcount() | ||||
tip = node.getbestblockhash() | tip = node.getbestblockhash() | ||||
mtp = node.getblockheader(tip)['mediantime'] | mtp = node.getblockheader(tip)['mediantime'] | ||||
block = create_block( | block = create_block( | ||||
int(tip, 16), create_coinbase(height + 1), mtp + 1) | int(tip, 16), create_coinbase(height + 1), mtp + 1) | ||||
▲ Show 20 Lines • Show All 732 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
NetworkThread().start() # Start up network handling in another thread | NetworkThread().start() # Start up network handling in another thread | ||||
# Test logic begins here | # Test logic begins here | ||||
self.test_node.wait_for_verack() | self.test_node.wait_for_verack() | ||||
# We will need UTXOs to construct transactions in later tests. | # We will need UTXOs to construct transactions in later tests. | ||||
self.make_utxos() | self.make_utxos() | ||||
print("Running tests:") | self.log.info("Running tests:") | ||||
print("\tTesting SENDCMPCT p2p message... ") | self.log.info("\tTesting SENDCMPCT p2p message... ") | ||||
self.test_sendcmpct(self.nodes[0], self.test_node, 1) | self.test_sendcmpct(self.nodes[0], self.test_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_sendcmpct( | self.test_sendcmpct( | ||||
self.nodes[1], self.ex_softfork_node, 1, old_node=self.old_node) | self.nodes[1], self.ex_softfork_node, 1, old_node=self.old_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting compactblock construction...") | self.log.info("\tTesting compactblock construction...") | ||||
self.test_compactblock_construction(self.nodes[0], self.test_node) | self.test_compactblock_construction(self.nodes[0], self.test_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_compactblock_construction( | self.test_compactblock_construction( | ||||
self.nodes[1], self.ex_softfork_node) | self.nodes[1], self.ex_softfork_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting compactblock requests... ") | self.log.info("\tTesting compactblock requests... ") | ||||
self.test_compactblock_requests(self.nodes[0], self.test_node, 1) | self.test_compactblock_requests(self.nodes[0], self.test_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_compactblock_requests( | self.test_compactblock_requests( | ||||
self.nodes[1], self.ex_softfork_node, 2) | self.nodes[1], self.ex_softfork_node, 2) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting getblocktxn requests...") | self.log.info("\tTesting getblocktxn requests...") | ||||
self.test_getblocktxn_requests(self.nodes[0], self.test_node, 1) | self.test_getblocktxn_requests(self.nodes[0], self.test_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_getblocktxn_requests(self.nodes[1], self.ex_softfork_node, 2) | self.test_getblocktxn_requests(self.nodes[1], self.ex_softfork_node, 2) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting getblocktxn handler...") | self.log.info("\tTesting getblocktxn handler...") | ||||
self.test_getblocktxn_handler(self.nodes[0], self.test_node, 1) | self.test_getblocktxn_handler(self.nodes[0], self.test_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_getblocktxn_handler(self.nodes[1], self.ex_softfork_node, 2) | self.test_getblocktxn_handler(self.nodes[1], self.ex_softfork_node, 2) | ||||
self.test_getblocktxn_handler(self.nodes[1], self.old_node, 1) | self.test_getblocktxn_handler(self.nodes[1], self.old_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print( | self.log.info( | ||||
"\tTesting compactblock requests/announcements not at chain tip...") | "\tTesting compactblock requests/announcements not at chain tip...") | ||||
self.test_compactblocks_not_at_tip(self.nodes[0], self.test_node) | self.test_compactblocks_not_at_tip(self.nodes[0], self.test_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_compactblocks_not_at_tip( | self.test_compactblocks_not_at_tip( | ||||
self.nodes[1], self.ex_softfork_node) | self.nodes[1], self.ex_softfork_node) | ||||
self.test_compactblocks_not_at_tip(self.nodes[1], self.old_node) | self.test_compactblocks_not_at_tip(self.nodes[1], self.old_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting handling of incorrect blocktxn responses...") | self.log.info("\tTesting handling of incorrect blocktxn responses...") | ||||
self.test_incorrect_blocktxn_response(self.nodes[0], self.test_node, 1) | self.test_incorrect_blocktxn_response(self.nodes[0], self.test_node, 1) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
self.test_incorrect_blocktxn_response( | self.test_incorrect_blocktxn_response( | ||||
self.nodes[1], self.ex_softfork_node, 2) | self.nodes[1], self.ex_softfork_node, 2) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
# End-to-end block relay tests | # End-to-end block relay tests | ||||
print("\tTesting end-to-end block relay...") | self.log.info("\tTesting end-to-end block relay...") | ||||
self.request_cb_announcements(self.test_node, self.nodes[0]) | self.request_cb_announcements(self.test_node, self.nodes[0]) | ||||
self.request_cb_announcements(self.old_node, self.nodes[1]) | self.request_cb_announcements(self.old_node, self.nodes[1]) | ||||
self.request_cb_announcements( | self.request_cb_announcements( | ||||
self.ex_softfork_node, self.nodes[1], version=2) | self.ex_softfork_node, self.nodes[1], version=2) | ||||
self.test_end_to_end_block_relay( | self.test_end_to_end_block_relay( | ||||
self.nodes[0], [self.ex_softfork_node, self.test_node, self.old_node]) | self.nodes[0], [self.ex_softfork_node, self.test_node, self.old_node]) | ||||
self.test_end_to_end_block_relay( | self.test_end_to_end_block_relay( | ||||
self.nodes[1], [self.ex_softfork_node, self.test_node, self.old_node]) | self.nodes[1], [self.ex_softfork_node, self.test_node, self.old_node]) | ||||
print("\tTesting handling of invalid compact blocks...") | self.log.info("\tTesting handling of invalid compact blocks...") | ||||
self.test_invalid_tx_in_compactblock(self.nodes[0], self.test_node) | self.test_invalid_tx_in_compactblock(self.nodes[0], self.test_node) | ||||
self.test_invalid_tx_in_compactblock( | self.test_invalid_tx_in_compactblock( | ||||
self.nodes[1], self.ex_softfork_node) | self.nodes[1], self.ex_softfork_node) | ||||
self.test_invalid_tx_in_compactblock(self.nodes[1], self.old_node) | self.test_invalid_tx_in_compactblock(self.nodes[1], self.old_node) | ||||
print("\tTesting reconstructing compact blocks from all peers...") | self.log.info( | ||||
"\tTesting reconstructing compact blocks from all peers...") | |||||
self.test_compactblock_reconstruction_multiple_peers( | self.test_compactblock_reconstruction_multiple_peers( | ||||
self.nodes[1], self.ex_softfork_node, self.old_node) | self.nodes[1], self.ex_softfork_node, self.old_node) | ||||
sync_blocks(self.nodes) | sync_blocks(self.nodes) | ||||
print("\tTesting invalid index in cmpctblock message...") | self.log.info("\tTesting invalid index in cmpctblock message...") | ||||
self.test_invalid_cmpctblock_message() | self.test_invalid_cmpctblock_message() | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
CompactBlocksTest().main() | CompactBlocksTest().main() |