aboutsummaryrefslogtreecommitdiff
path: root/test/functional/test_framework/test_node.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/test_framework/test_node.py')
-rwxr-xr-xtest/functional/test_framework/test_node.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py
index f7d6ba78d2..7ab6dd0f30 100755
--- a/test/functional/test_framework/test_node.py
+++ b/test/functional/test_framework/test_node.py
@@ -76,7 +76,7 @@ class TestNode():
To make things easier for the test writer, any unrecognised messages will
be dispatched to the RPC connection."""
- def __init__(self, i, datadir_path, *, chain, rpchost, timewait, timeout_factor, bitcoind, bitcoin_cli, coverage_dir, cwd, extra_conf=None, extra_args=None, use_cli=False, start_perf=False, use_valgrind=False, version=None, descriptors=False, v2transport=False):
+ def __init__(self, i, datadir_path, *, chain, rpchost, timewait, timeout_factor, binaries, coverage_dir, cwd, extra_conf=None, extra_args=None, use_cli=False, start_perf=False, use_valgrind=False, version=None, descriptors=False, v2transport=False):
"""
Kwargs:
start_perf (bool): If True, begin profiling the node with `perf` as soon as
@@ -92,7 +92,7 @@ class TestNode():
self.chain = chain
self.rpchost = rpchost
self.rpc_timeout = timewait
- self.binary = bitcoind
+ self.binaries = binaries
self.coverage_dir = coverage_dir
self.cwd = cwd
self.descriptors = descriptors
@@ -109,8 +109,7 @@ class TestNode():
# Configuration for logging is set as command-line args rather than in the bitcoin.conf file.
# This means that starting a bitcoind using the temp dir to debug a failed test won't
# spam debug.log.
- self.args = [
- self.binary,
+ self.args = self.binaries.daemon_argv() + [
f"-datadir={self.datadir_path}",
"-logtimemicros",
"-debug",
@@ -149,7 +148,7 @@ class TestNode():
self.args.append("-v2transport=0")
# if v2transport is requested via global flag but not supported for node version, ignore it
- self.cli = TestNodeCLI(bitcoin_cli, self.datadir_path)
+ self.cli = TestNodeCLI(binaries, self.datadir_path)
self.use_cli = use_cli
self.start_perf = start_perf
@@ -443,6 +442,11 @@ class TestNode():
kwargs["expected_ret_code"] = 1 if expect_error else 0 # Whether node shutdown return EXIT_FAILURE or EXIT_SUCCESS
self.wait_until(lambda: self.is_node_stopped(**kwargs), timeout=timeout)
+ def kill_process(self):
+ self.process.kill()
+ self.wait_until_stopped(expected_ret_code=1 if platform.system() == "Windows" else -9)
+ assert self.is_node_stopped()
+
def replace_in_config(self, replacements):
"""
Perform replacements in the configuration file.
@@ -822,7 +826,8 @@ class TestNode():
def disconnect_p2ps(self):
"""Close all p2p connections to the node.
- Use only after each p2p has sent a version message to ensure the wait works."""
+ The state of the peers (such as txrequests) may not be fully cleared
+ yet, even after this method returns."""
for p in self.p2ps:
p.peer_disconnect()
del self.p2ps[:]
@@ -865,16 +870,16 @@ def arg_to_cli(arg):
class TestNodeCLI():
"""Interface to bitcoin-cli for an individual node"""
- def __init__(self, binary, datadir):
+ def __init__(self, binaries, datadir):
self.options = []
- self.binary = binary
+ self.binaries = binaries
self.datadir = datadir
self.input = None
self.log = logging.getLogger('TestFramework.bitcoincli')
def __call__(self, *options, input=None):
# TestNodeCLI is callable with bitcoin-cli command-line options
- cli = TestNodeCLI(self.binary, self.datadir)
+ cli = TestNodeCLI(self.binaries, self.datadir)
cli.options = [str(o) for o in options]
cli.input = input
return cli
@@ -895,7 +900,7 @@ class TestNodeCLI():
"""Run bitcoin-cli command. Deserializes returned string as python object."""
pos_args = [arg_to_cli(arg) for arg in args]
named_args = [str(key) + "=" + arg_to_cli(value) for (key, value) in kwargs.items()]
- p_args = [self.binary, f"-datadir={self.datadir}"] + self.options
+ p_args = self.binaries.rpc_argv() + [f"-datadir={self.datadir}"] + self.options
if named_args:
p_args += ["-named"]
if clicommand is not None:
@@ -911,7 +916,7 @@ class TestNodeCLI():
code, message = match.groups()
raise JSONRPCException(dict(code=int(code), message=message))
# Ignore cli_stdout, raise with cli_stderr
- raise subprocess.CalledProcessError(returncode, self.binary, output=cli_stderr)
+ raise subprocess.CalledProcessError(returncode, p_args, output=cli_stderr)
try:
return json.loads(cli_stdout, parse_float=decimal.Decimal)
except (json.JSONDecodeError, decimal.InvalidOperation):