[tests] add TestNodeCLI class for calling bitcoin-cli for a node

pull/476/merge
John Newbery 7 years ago
parent 85aec87b11
commit b23549f6e6

@ -4,8 +4,10 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php. # file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Class for bitcoind node under test""" """Class for bitcoind node under test"""
import decimal
import errno import errno
import http.client import http.client
import json
import logging import logging
import os import os
import subprocess import subprocess
@ -45,6 +47,8 @@ class TestNode():
self.extra_args = extra_args self.extra_args = extra_args
self.args = [self.binary, "-datadir=" + self.datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment=testnode%d" % i] self.args = [self.binary, "-datadir=" + self.datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment=testnode%d" % i]
self.cli = TestNodeCLI(os.getenv("BITCOINCLI", "bitcoin-cli"), self.datadir)
self.running = False self.running = False
self.process = None self.process = None
self.rpc_connected = False self.rpc_connected = False
@ -132,3 +136,28 @@ class TestNode():
time.sleep(0.1) time.sleep(0.1)
self.rpc = None self.rpc = None
self.rpc_connected = False self.rpc_connected = False
class TestNodeCLI():
"""Interface to bitcoin-cli for an individual node"""
def __init__(self, binary, datadir):
self.binary = binary
self.datadir = datadir
def __getattr__(self, command):
def dispatcher(*args, **kwargs):
return self.send_cli(command, *args, **kwargs)
return dispatcher
def send_cli(self, command, *args, **kwargs):
"""Run bitcoin-cli command. Deserializes returned string as python object."""
pos_args = [str(arg) for arg in args]
named_args = [str(key) + "=" + str(value) for (key, value) in kwargs.items()]
assert not (pos_args and named_args), "Cannot use positional arguments and named arguments in the same bitcoin-cli call"
p_args = [self.binary, "-datadir=" + self.datadir]
if named_args:
p_args += ["-named"]
p_args += [command] + pos_args + named_args
cli_output = subprocess.check_output(p_args, universal_newlines=True)
return json.loads(cli_output, parse_float=decimal.Decimal)

@ -279,6 +279,7 @@ def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_cove
#Set env vars #Set env vars
if "BITCOIND" not in os.environ: if "BITCOIND" not in os.environ:
os.environ["BITCOIND"] = build_dir + '/src/bitcoind' + exeext os.environ["BITCOIND"] = build_dir + '/src/bitcoind' + exeext
os.environ["BITCOINCLI"] = build_dir + '/src/bitcoin-cli' + exeext
tests_dir = src_dir + '/test/functional/' tests_dir = src_dir + '/test/functional/'

Loading…
Cancel
Save