Changeset View
Changeset View
Standalone View
Standalone View
test/functional/p2p_compactblocks.py
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | |||||
) | ) | ||||
from test_framework.mininode import ( | from test_framework.mininode import ( | ||||
mininode_lock, | mininode_lock, | ||||
P2PInterface, | P2PInterface, | ||||
) | ) | ||||
from test_framework.script import CScript, OP_TRUE | from test_framework.script import CScript, OP_TRUE | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.txtools import pad_tx | from test_framework.txtools import pad_tx | ||||
from test_framework.util import assert_equal, sync_blocks, wait_until | from test_framework.util import ( | ||||
assert_equal, | |||||
wait_until, | |||||
) | |||||
# TestP2PConn: A peer we use to send messages to bitcoind, and store responses. | # TestP2PConn: A peer we use to send messages to bitcoind, and store responses. | ||||
class TestP2PConn(P2PInterface): | class TestP2PConn(P2PInterface): | ||||
def __init__(self): | def __init__(self): | ||||
super().__init__() | super().__init__() | ||||
self.last_sendcmpct = [] | self.last_sendcmpct = [] | ||||
▲ Show 20 Lines • Show All 791 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
# 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() | ||||
self.log.info("Running tests:") | self.log.info("Running tests:") | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info( | 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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
self.log.info("\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) | self.sync_blocks() | ||||
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) | self.sync_blocks() | ||||
# End-to-end block relay tests | # End-to-end block relay tests | ||||
self.log.info("\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]) | ||||
self.log.info("\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) | ||||
self.log.info( | self.log.info( | ||||
"\tTesting reconstructing compact blocks from all peers...") | "\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) | self.sync_blocks() | ||||
self.log.info("\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() |