Merge #20683: test: Fix restart node race

fab46b34f4 test: Fix restart node race (MarcoFalke)

Pull request description:

  It is not allowed to start a node before it has been fully stopped. Otherwise it could lead to intermittent issues due to access issues (e.g. cookie file https://cirrus-ci.com/task/6409665024098304?command=ci#L4793)

  Fix that by waiting for the node to fully stop.

ACKs for top commit:
  laanwj:
    code review ACK fab46b34f4

Tree-SHA512: 7605cac0573a7b04f05ff110d0131e8940d87f7baf6d698505ed16b363d4d15b1e552c5ffd1a187c8fe5639f7e265c3122734c85283275746e46bd789614fd21
This commit is contained in:
Wladimir J. van der Laan 2020-12-21 20:20:18 +01:00
commit cc2a5ef9b2
No known key found for this signature in database
GPG Key ID: 1E4AED62986CD25D
2 changed files with 5 additions and 3 deletions

View File

@ -517,13 +517,12 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
def stop_node(self, i, expected_stderr='', wait=0): def stop_node(self, i, expected_stderr='', wait=0):
"""Stop a bitcoind test node""" """Stop a bitcoind test node"""
self.nodes[i].stop_node(expected_stderr, wait=wait) self.nodes[i].stop_node(expected_stderr, wait=wait)
self.nodes[i].wait_until_stopped()
def stop_nodes(self, wait=0): def stop_nodes(self, wait=0):
"""Stop multiple bitcoind test nodes""" """Stop multiple bitcoind test nodes"""
for node in self.nodes: for node in self.nodes:
# Issue RPC to stop nodes # Issue RPC to stop nodes
node.stop_node(wait=wait) node.stop_node(wait=wait, wait_until_stopped=False)
for node in self.nodes: for node in self.nodes:
# Wait for nodes to stop # Wait for nodes to stop

View File

@ -308,7 +308,7 @@ class TestNode():
def version_is_at_least(self, ver): def version_is_at_least(self, ver):
return self.version is None or self.version >= ver return self.version is None or self.version >= ver
def stop_node(self, expected_stderr='', wait=0): def stop_node(self, expected_stderr='', *, wait=0, wait_until_stopped=True):
"""Stop the node.""" """Stop the node."""
if not self.running: if not self.running:
return return
@ -337,6 +337,9 @@ class TestNode():
del self.p2ps[:] del self.p2ps[:]
if wait_until_stopped:
self.wait_until_stopped()
def is_node_stopped(self): def is_node_stopped(self):
"""Checks whether the node has stopped. """Checks whether the node has stopped.