mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-08-24 12:51:39 +02:00
[refactor] clarify tests by referencing p2p objects directly
Use object returned from add_p2p_connection to refer to p2ps. Add a test class attribute if it needs to be used across many methods. Don't use the p2p property.
This commit is contained in:
@@ -136,7 +136,7 @@ class ExampleTest(BitcoinTestFramework):
|
||||
"""Main test logic"""
|
||||
|
||||
# Create P2P connections will wait for a verack to make sure the connection is fully up
|
||||
self.nodes[0].add_p2p_connection(BaseNode())
|
||||
peer_messaging = self.nodes[0].add_p2p_connection(BaseNode())
|
||||
|
||||
# Generating a block on one of the nodes will get us out of IBD
|
||||
blocks = [int(self.nodes[0].generate(nblocks=1)[0], 16)]
|
||||
@@ -173,7 +173,7 @@ class ExampleTest(BitcoinTestFramework):
|
||||
block.solve()
|
||||
block_message = msg_block(block)
|
||||
# Send message is used to send a P2P message to the node over our P2PInterface
|
||||
self.nodes[0].p2p.send_message(block_message)
|
||||
peer_messaging.send_message(block_message)
|
||||
self.tip = block.sha256
|
||||
blocks.append(self.tip)
|
||||
self.block_time += 1
|
||||
@@ -191,25 +191,25 @@ class ExampleTest(BitcoinTestFramework):
|
||||
self.log.info("Add P2P connection to node2")
|
||||
self.nodes[0].disconnect_p2ps()
|
||||
|
||||
self.nodes[2].add_p2p_connection(BaseNode())
|
||||
peer_receiving = self.nodes[2].add_p2p_connection(BaseNode())
|
||||
|
||||
self.log.info("Test that node2 propagates all the blocks to us")
|
||||
|
||||
getdata_request = msg_getdata()
|
||||
for block in blocks:
|
||||
getdata_request.inv.append(CInv(MSG_BLOCK, block))
|
||||
self.nodes[2].p2p.send_message(getdata_request)
|
||||
peer_receiving.send_message(getdata_request)
|
||||
|
||||
# wait_until() will loop until a predicate condition is met. Use it to test properties of the
|
||||
# P2PInterface objects.
|
||||
self.nodes[2].p2p.wait_until(lambda: sorted(blocks) == sorted(list(self.nodes[2].p2p.block_receive_map.keys())), timeout=5)
|
||||
peer_receiving.wait_until(lambda: sorted(blocks) == sorted(list(peer_receiving.block_receive_map.keys())), timeout=5)
|
||||
|
||||
self.log.info("Check that each block was received only once")
|
||||
# The network thread uses a global lock on data access to the P2PConnection objects when sending and receiving
|
||||
# messages. The test thread should acquire the global lock before accessing any P2PConnection data to avoid locking
|
||||
# and synchronization issues. Note p2p.wait_until() acquires this global lock internally when testing the predicate.
|
||||
with p2p_lock:
|
||||
for block in self.nodes[2].p2p.block_receive_map.values():
|
||||
for block in peer_receiving.block_receive_map.values():
|
||||
assert_equal(block, 1)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user