Changeset View
Changeset View
Standalone View
Standalone View
test/functional/feature_block.py
Show First 20 Lines • Show All 1,380 Lines • ▼ Show 20 Lines | def reconnect_p2p(self): | ||||
The node gets disconnected several times in this test. This helper | The node gets disconnected several times in this test. This helper | ||||
method reconnects the p2p and restarts the network thread.""" | method reconnects the p2p and restarts the network thread.""" | ||||
network_thread_join() | network_thread_join() | ||||
self.nodes[0].disconnect_p2ps() | self.nodes[0].disconnect_p2ps() | ||||
self.nodes[0].add_p2p_connection(P2PDataStore()) | self.nodes[0].add_p2p_connection(P2PDataStore()) | ||||
network_thread_start() | network_thread_start() | ||||
self.nodes[0].p2p.wait_for_verack() | # We need to wait for the initial getheaders from the peer before we | ||||
# start populating our blockstore. If we don't, then we may run ahead | |||||
# to the next subtest before we receive the getheaders. We'd then send | |||||
# an INV for the next block and receive two getheaders - one for the | |||||
# IBD and one for the INV. We'd respond to both and could get | |||||
# unexpectedly disconnected if the DoS score for that error is 50. | |||||
self.nodes[0].p2p.wait_for_getheaders(timeout=5) | |||||
def sync_blocks(self, blocks, success=True, reject_code=None, reject_reason=None, request_block=True, reconnect=False, timeout=60): | def sync_blocks(self, blocks, success=True, reject_code=None, reject_reason=None, request_block=True, reconnect=False, timeout=60): | ||||
"""Sends blocks to test node. Syncs and verifies that tip has advanced to most recent block. | """Sends blocks to test node. Syncs and verifies that tip has advanced to most recent block. | ||||
Call with success = False if the tip shouldn't advance to the most recent block.""" | Call with success = False if the tip shouldn't advance to the most recent block.""" | ||||
self.nodes[0].p2p.send_blocks_and_test(blocks, self.nodes[0], success=success, reject_code=reject_code, | self.nodes[0].p2p.send_blocks_and_test(blocks, self.nodes[0], success=success, reject_code=reject_code, | ||||
reject_reason=reject_reason, request_block=request_block, timeout=timeout) | reject_reason=reject_reason, request_block=request_block, timeout=timeout) | ||||
if reconnect: | if reconnect: | ||||
self.reconnect_p2p() | self.reconnect_p2p() | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
FullBlockTest().main() | FullBlockTest().main() |