mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-14 12:10:42 +02:00
test: Rename wait until helper to wait_until_helper
This commit is contained in:
parent
facb41bf1d
commit
fad2794e93
@ -207,10 +207,11 @@ class ExampleTest(BitcoinTestFramework):
|
|||||||
self.log.info("Check that each block was received only once")
|
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
|
# 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
|
# messages. The test thread should acquire the global lock before accessing any P2PConnection data to avoid locking
|
||||||
# and synchronization issues. Note wait_until() acquires this global lock when testing the predicate.
|
# and synchronization issues. Note p2p.wait_until() acquires this global lock internally when testing the predicate.
|
||||||
with p2p_lock:
|
with p2p_lock:
|
||||||
for block in self.nodes[2].p2p.block_receive_map.values():
|
for block in self.nodes[2].p2p.block_receive_map.values():
|
||||||
assert_equal(block, 1)
|
assert_equal(block, 1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ExampleTest().main()
|
ExampleTest().main()
|
||||||
|
@ -69,7 +69,7 @@ from test_framework.messages import (
|
|||||||
NODE_WITNESS,
|
NODE_WITNESS,
|
||||||
sha256,
|
sha256,
|
||||||
)
|
)
|
||||||
from test_framework.util import wait_until
|
from test_framework.util import wait_until_helper
|
||||||
|
|
||||||
logger = logging.getLogger("TestFramework.p2p")
|
logger = logging.getLogger("TestFramework.p2p")
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ class P2PInterface(P2PConnection):
|
|||||||
|
|
||||||
# Track the most recent message of each type.
|
# Track the most recent message of each type.
|
||||||
# To wait for a message to be received, pop that message from
|
# To wait for a message to be received, pop that message from
|
||||||
# this and use wait_until.
|
# this and use self.wait_until.
|
||||||
self.last_message = {}
|
self.last_message = {}
|
||||||
|
|
||||||
# A count of the number of ping messages we've sent to the node
|
# A count of the number of ping messages we've sent to the node
|
||||||
@ -398,7 +398,7 @@ class P2PInterface(P2PConnection):
|
|||||||
assert self.is_connected
|
assert self.is_connected
|
||||||
return test_function_in()
|
return test_function_in()
|
||||||
|
|
||||||
wait_until(test_function, timeout=timeout, lock=p2p_lock, timeout_factor=self.timeout_factor)
|
wait_until_helper(test_function, timeout=timeout, lock=p2p_lock, timeout_factor=self.timeout_factor)
|
||||||
|
|
||||||
def wait_for_disconnect(self, timeout=60):
|
def wait_for_disconnect(self, timeout=60):
|
||||||
test_function = lambda: not self.is_connected
|
test_function = lambda: not self.is_connected
|
||||||
@ -522,7 +522,7 @@ class NetworkThread(threading.Thread):
|
|||||||
def close(self, timeout=10):
|
def close(self, timeout=10):
|
||||||
"""Close the connections and network event loop."""
|
"""Close the connections and network event loop."""
|
||||||
self.network_event_loop.call_soon_threadsafe(self.network_event_loop.stop)
|
self.network_event_loop.call_soon_threadsafe(self.network_event_loop.stop)
|
||||||
wait_until(lambda: not self.network_event_loop.is_running(), timeout=timeout)
|
wait_until_helper(lambda: not self.network_event_loop.is_running(), timeout=timeout)
|
||||||
self.network_event_loop.close()
|
self.network_event_loop.close()
|
||||||
self.join(timeout)
|
self.join(timeout)
|
||||||
# Safe to remove event loop.
|
# Safe to remove event loop.
|
||||||
|
@ -31,7 +31,7 @@ from .util import (
|
|||||||
disconnect_nodes,
|
disconnect_nodes,
|
||||||
get_datadir_path,
|
get_datadir_path,
|
||||||
initialize_datadir,
|
initialize_datadir,
|
||||||
wait_until,
|
wait_until_helper,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -604,7 +604,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
|||||||
self.sync_mempools(nodes)
|
self.sync_mempools(nodes)
|
||||||
|
|
||||||
def wait_until(self, test_function, timeout=60, lock=None):
|
def wait_until(self, test_function, timeout=60, lock=None):
|
||||||
return wait_until(test_function, timeout=timeout, lock=lock, timeout_factor=self.options.timeout_factor)
|
return wait_until_helper(test_function, timeout=timeout, lock=lock, timeout_factor=self.options.timeout_factor)
|
||||||
|
|
||||||
# Private helper methods. These should not be accessed by the subclass test scripts.
|
# Private helper methods. These should not be accessed by the subclass test scripts.
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ from .util import (
|
|||||||
get_auth_cookie,
|
get_auth_cookie,
|
||||||
get_rpc_proxy,
|
get_rpc_proxy,
|
||||||
rpc_url,
|
rpc_url,
|
||||||
wait_until,
|
wait_until_helper,
|
||||||
p2p_port,
|
p2p_port,
|
||||||
EncodeDecimal,
|
EncodeDecimal,
|
||||||
)
|
)
|
||||||
@ -231,7 +231,7 @@ class TestNode():
|
|||||||
if self.version_is_at_least(190000):
|
if self.version_is_at_least(190000):
|
||||||
# getmempoolinfo.loaded is available since commit
|
# getmempoolinfo.loaded is available since commit
|
||||||
# bb8ae2c (version 0.19.0)
|
# bb8ae2c (version 0.19.0)
|
||||||
wait_until(lambda: rpc.getmempoolinfo()['loaded'])
|
wait_until_helper(lambda: rpc.getmempoolinfo()['loaded'], timeout_factor=self.timeout_factor)
|
||||||
# Wait for the node to finish reindex, block import, and
|
# Wait for the node to finish reindex, block import, and
|
||||||
# loading the mempool. Usually importing happens fast or
|
# loading the mempool. Usually importing happens fast or
|
||||||
# even "immediate" when the node is started. However, there
|
# even "immediate" when the node is started. However, there
|
||||||
@ -359,7 +359,7 @@ class TestNode():
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
|
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
|
||||||
wait_until(self.is_node_stopped, timeout=timeout, timeout_factor=self.timeout_factor)
|
wait_until_helper(self.is_node_stopped, timeout=timeout, timeout_factor=self.timeout_factor)
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def assert_debug_log(self, expected_msgs, unexpected_msgs=None, timeout=2):
|
def assert_debug_log(self, expected_msgs, unexpected_msgs=None, timeout=2):
|
||||||
@ -560,7 +560,7 @@ class TestNode():
|
|||||||
for p in self.p2ps:
|
for p in self.p2ps:
|
||||||
p.peer_disconnect()
|
p.peer_disconnect()
|
||||||
del self.p2ps[:]
|
del self.p2ps[:]
|
||||||
wait_until(lambda: self.num_test_p2p_connections() == 0)
|
wait_until_helper(lambda: self.num_test_p2p_connections() == 0, timeout_factor=self.timeout_factor)
|
||||||
|
|
||||||
|
|
||||||
class TestNodeCLIAttr:
|
class TestNodeCLIAttr:
|
||||||
|
@ -225,14 +225,14 @@ def satoshi_round(amount):
|
|||||||
return Decimal(amount).quantize(Decimal('0.00000001'), rounding=ROUND_DOWN)
|
return Decimal(amount).quantize(Decimal('0.00000001'), rounding=ROUND_DOWN)
|
||||||
|
|
||||||
|
|
||||||
def wait_until(predicate, *, attempts=float('inf'), timeout=float('inf'), lock=None, timeout_factor=1.0):
|
def wait_until_helper(predicate, *, attempts=float('inf'), timeout=float('inf'), lock=None, timeout_factor=1.0):
|
||||||
"""Sleep until the predicate resolves to be True.
|
"""Sleep until the predicate resolves to be True.
|
||||||
|
|
||||||
Warning: Note that this method is not recommended to be used in tests as it is
|
Warning: Note that this method is not recommended to be used in tests as it is
|
||||||
not aware of the context of the test framework. Using `wait_until()` counterpart
|
not aware of the context of the test framework. Using the `wait_until()` members
|
||||||
from `BitcoinTestFramework` or `P2PInterface` class ensures an understandable
|
from `BitcoinTestFramework` or `P2PInterface` class ensures the timeout is
|
||||||
amount of timeout and a common shared timeout_factor. Furthermore, `wait_until()`
|
properly scaled. Furthermore, `wait_until()` from `P2PInterface` class in
|
||||||
from `P2PInterface` class in `mininode.py` has a preset lock.
|
`p2p.py` has a preset lock.
|
||||||
"""
|
"""
|
||||||
if attempts == float('inf') and timeout == float('inf'):
|
if attempts == float('inf') and timeout == float('inf'):
|
||||||
timeout = 60
|
timeout = 60
|
||||||
@ -437,7 +437,7 @@ def disconnect_nodes(from_connection, node_num):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
# wait to disconnect
|
# wait to disconnect
|
||||||
wait_until(lambda: not get_peer_ids(), timeout=5)
|
wait_until_helper(lambda: not get_peer_ids(), timeout=5)
|
||||||
|
|
||||||
|
|
||||||
def connect_nodes(from_connection, node_num):
|
def connect_nodes(from_connection, node_num):
|
||||||
@ -448,8 +448,8 @@ def connect_nodes(from_connection, node_num):
|
|||||||
# See comments in net_processing:
|
# See comments in net_processing:
|
||||||
# * Must have a version message before anything else
|
# * Must have a version message before anything else
|
||||||
# * Must have a verack message before anything else
|
# * Must have a verack message before anything else
|
||||||
wait_until(lambda: all(peer['version'] != 0 for peer in from_connection.getpeerinfo()))
|
wait_until_helper(lambda: all(peer['version'] != 0 for peer in from_connection.getpeerinfo()))
|
||||||
wait_until(lambda: all(peer['bytesrecv_per_msg'].pop('verack', 0) == 24 for peer in from_connection.getpeerinfo()))
|
wait_until_helper(lambda: all(peer['bytesrecv_per_msg'].pop('verack', 0) == 24 for peer in from_connection.getpeerinfo()))
|
||||||
|
|
||||||
|
|
||||||
# Transaction/Block functions
|
# Transaction/Block functions
|
||||||
|
Loading…
Reference in New Issue
Block a user