[qa] TestNode: Add wait_until_stopped helper method

This commit is contained in:
MarcoFalke 2017-08-16 08:52:24 -07:00
parent 777519bd96
commit faa8d9581a
5 changed files with 24 additions and 22 deletions

View File

@ -21,7 +21,7 @@ from decimal import Decimal
import http.client import http.client
import subprocess import subprocess
from test_framework.test_framework import (BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT) from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import ( from test_framework.util import (
assert_equal, assert_equal,
assert_raises, assert_raises,
@ -141,7 +141,7 @@ class BlockchainTest(BitcoinTestFramework):
except (ConnectionError, http.client.BadStatusLine): except (ConnectionError, http.client.BadStatusLine):
pass # The node already shut down before response pass # The node already shut down before response
self.log.debug('Node should stop at this height...') self.log.debug('Node should stop at this height...')
self.nodes[0].process.wait(timeout=BITCOIND_PROC_WAIT_TIMEOUT) self.nodes[0].wait_until_stopped()
self.start_node(0) self.start_node(0)
assert_equal(self.nodes[0].getblockcount(), 207) assert_equal(self.nodes[0].getblockcount(), 207)

View File

@ -4,7 +4,7 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php. # file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test the fundrawtransaction RPC.""" """Test the fundrawtransaction RPC."""
from test_framework.test_framework import BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import * from test_framework.util import *

View File

@ -43,8 +43,6 @@ TEST_EXIT_PASSED = 0
TEST_EXIT_FAILED = 1 TEST_EXIT_FAILED = 1
TEST_EXIT_SKIPPED = 77 TEST_EXIT_SKIPPED = 77
BITCOIND_PROC_WAIT_TIMEOUT = 60
class BitcoinTestFramework(object): class BitcoinTestFramework(object):
"""Base class for a bitcoin test script. """Base class for a bitcoin test script.
@ -263,8 +261,7 @@ class BitcoinTestFramework(object):
def stop_node(self, i): def stop_node(self, i):
"""Stop a bitcoind test node""" """Stop a bitcoind test node"""
self.nodes[i].stop_node() self.nodes[i].stop_node()
while not self.nodes[i].is_node_stopped(): self.nodes[i].wait_until_stopped()
time.sleep(0.1)
def stop_nodes(self): def stop_nodes(self):
"""Stop multiple bitcoind test nodes""" """Stop multiple bitcoind test nodes"""
@ -274,8 +271,7 @@ class BitcoinTestFramework(object):
for node in self.nodes: for node in self.nodes:
# Wait for nodes to stop # Wait for nodes to stop
while not node.is_node_stopped(): node.wait_until_stopped()
time.sleep(0.1)
def assert_start_raises_init_error(self, i, extra_args=None, expected_msg=None): def assert_start_raises_init_error(self, i, extra_args=None, expected_msg=None):
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr: with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:

View File

@ -17,9 +17,12 @@ from .util import (
assert_equal, assert_equal,
get_rpc_proxy, get_rpc_proxy,
rpc_url, rpc_url,
wait_until,
) )
from .authproxy import JSONRPCException from .authproxy import JSONRPCException
BITCOIND_PROC_WAIT_TIMEOUT = 60
class TestNode(): class TestNode():
"""A class for representing a bitcoind node under test. """A class for representing a bitcoind node under test.
@ -125,14 +128,20 @@ class TestNode():
if not self.running: if not self.running:
return True return True
return_code = self.process.poll() return_code = self.process.poll()
if return_code is not None: if return_code is None:
# process has stopped. Assert that it didn't return an error code. return False
assert_equal(return_code, 0)
self.running = False # process has stopped. Assert that it didn't return an error code.
self.process = None assert_equal(return_code, 0)
self.log.debug("Node stopped") self.running = False
return True self.process = None
return False self.rpc_connected = False
self.rpc = None
self.log.debug("Node stopped")
return True
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
wait_until(self.is_node_stopped, timeout=timeout)
def node_encrypt_wallet(self, passphrase): def node_encrypt_wallet(self, passphrase):
""""Encrypts the wallet. """"Encrypts the wallet.
@ -140,10 +149,7 @@ class TestNode():
This causes bitcoind to shutdown, so this method takes This causes bitcoind to shutdown, so this method takes
care of cleaning up resources.""" care of cleaning up resources."""
self.encryptwallet(passphrase) self.encryptwallet(passphrase)
while not self.is_node_stopped(): self.wait_until_stopped()
time.sleep(0.1)
self.rpc = None
self.rpc_connected = False
class TestNodeCLI(): class TestNodeCLI():
"""Interface to bitcoin-cli for an individual node""" """Interface to bitcoin-cli for an individual node"""

View File

@ -6,7 +6,7 @@
import time import time
from test_framework.test_framework import BitcoinTestFramework, BITCOIND_PROC_WAIT_TIMEOUT from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import ( from test_framework.util import (
assert_equal, assert_equal,
assert_raises_jsonrpc, assert_raises_jsonrpc,