Skip to content

Commit 2b4ea52

Browse files
committed
[tests] fix timeout issues from TestNode
Fixes a couple of bugs from the introduction of TestNode: - test scripts were no longer able to specify a custom timeout for starting a node. Therefore tests with nodes that take a long time to start up (eg pruning.py) would fail. - the test for whether a node has failed on start up was broken by changing 'assert x is None' to 'assert not x'. Since subprocess.poll() can return None (indicating the node is still running) or 0 (indicating the node exited with return code 0), this was a regression.
1 parent 31b2612 commit 2b4ea52

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

test/functional/dbcrash.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ def __init__(self):
6464
self.extra_args = [self.node0_args, self.node1_args, self.node2_args, self.node3_args]
6565

6666
def setup_network(self):
67-
self.setup_nodes()
67+
# Need a bit of extra time for the nodes to start up for this test
68+
self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, self.extra_args, timewait=90)
6869
# Leave them unconnected, we'll use submitblock directly in this test
6970

7071
def restart_node(self, node_index, expected_tip):
@@ -74,10 +75,10 @@ def restart_node(self, node_index, expected_tip):
7475
after 60 seconds. Returns the utxo hash of the given node."""
7576

7677
time_start = time.time()
77-
while time.time() - time_start < 60:
78+
while time.time() - time_start < 120:
7879
try:
7980
# Any of these RPC calls could throw due to node crash
80-
self.nodes[node_index] = self.start_node(node_index, self.options.tmpdir, self.extra_args[node_index])
81+
self.nodes[node_index] = self.start_node(node_index, self.options.tmpdir, self.extra_args[node_index], timewait=90)
8182
self.nodes[node_index].waitforblock(expected_tip)
8283
utxo_hash = self.nodes[node_index].gettxoutsetinfo()['hash_serialized_2']
8384
return utxo_hash

test/functional/test_framework/test_node.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ def __init__(self, i, dirname, extra_args, rpchost, timewait, binary, stderr, mo
3434
self.index = i
3535
self.datadir = os.path.join(dirname, "node" + str(i))
3636
self.rpchost = rpchost
37-
self.rpc_timeout = timewait
37+
if timewait:
38+
self.rpc_timeout = timewait
39+
else:
40+
# Wait for up to 60 seconds for the RPC server to respond
41+
self.rpc_timeout = 60
3842
if binary is None:
3943
self.binary = os.getenv("BITCOIND", "bitcoind")
4044
else:
@@ -65,10 +69,10 @@ def start(self):
6569

6670
def wait_for_rpc_connection(self):
6771
"""Sets up an RPC connection to the bitcoind process. Returns False if unable to connect."""
68-
timeout_s = 60 # Wait for up to 60 seconds for the RPC server to respond
69-
poll_per_s = 4 # Poll at a rate of four times per second
70-
for _ in range(timeout_s*poll_per_s):
71-
assert not self.process.poll(), "bitcoind exited with status %i during initialization" % self.process.returncode
72+
# Poll at a rate of four times per second
73+
poll_per_s = 4
74+
for _ in range(poll_per_s * self.rpc_timeout):
75+
assert self.process.poll() is None, "bitcoind exited with status %i during initialization" % self.process.returncode
7276
try:
7377
self.rpc = get_rpc_proxy(rpc_url(self.datadir, self.index, self.rpchost), self.index, coveragedir=self.coverage_dir)
7478
self.rpc.getblockcount()

0 commit comments

Comments
 (0)