Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/test_node.py
Show First 20 Lines • Show All 421 Lines • ▼ Show 20 Lines | class TestNodeCLIAttr: | ||||
def __call__(self, *args, **kwargs): | def __call__(self, *args, **kwargs): | ||||
return self.cli.send_cli(self.command, *args, **kwargs) | return self.cli.send_cli(self.command, *args, **kwargs) | ||||
def get_request(self, *args, **kwargs): | def get_request(self, *args, **kwargs): | ||||
return lambda: self(*args, **kwargs) | return lambda: self(*args, **kwargs) | ||||
def arg_to_cli(arg): | |||||
if isinstance(arg, bool): | |||||
return str(arg).lower() | |||||
elif isinstance(arg, dict) or isinstance(arg, list): | |||||
return json.dumps(arg) | |||||
else: | |||||
return str(arg) | |||||
class TestNodeCLI(): | class TestNodeCLI(): | ||||
"""Interface to bitcoin-cli for an individual node""" | """Interface to bitcoin-cli for an individual node""" | ||||
def __init__(self, binary, datadir): | def __init__(self, binary, datadir): | ||||
self.options = [] | self.options = [] | ||||
self.binary = binary | self.binary = binary | ||||
self.datadir = datadir | self.datadir = datadir | ||||
self.input = None | self.input = None | ||||
Show All 15 Lines | def batch(self, requests): | ||||
try: | try: | ||||
results.append(dict(result=request())) | results.append(dict(result=request())) | ||||
except JSONRPCException as e: | except JSONRPCException as e: | ||||
results.append(dict(error=e)) | results.append(dict(error=e)) | ||||
return results | return results | ||||
def send_cli(self, command=None, *args, **kwargs): | def send_cli(self, command=None, *args, **kwargs): | ||||
"""Run bitcoin-cli command. Deserializes returned string as python object.""" | """Run bitcoin-cli command. Deserializes returned string as python object.""" | ||||
pos_args = [arg_to_cli(arg) for arg in args] | |||||
pos_args = [str(arg).lower() if type( | named_args = [str(key) + "=" + arg_to_cli(value) | ||||
arg) is bool else str(arg) for arg in args] | |||||
named_args = [str(key) + "=" + str(value) | |||||
for (key, value) in kwargs.items()] | for (key, value) in kwargs.items()] | ||||
assert not ( | assert not ( | ||||
pos_args and named_args), "Cannot use positional arguments and named arguments in the same bitcoin-cli call" | 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] + self.options | p_args = [self.binary, "-datadir=" + self.datadir] + self.options | ||||
if named_args: | if named_args: | ||||
p_args += ["-named"] | p_args += ["-named"] | ||||
if command is not None: | if command is not None: | ||||
p_args += [command] | p_args += [command] | ||||
p_args += pos_args + named_args | p_args += pos_args + named_args | ||||
self.log.debug("Running bitcoin-cli command: {}".format(command)) | self.log.debug("Running bitcoin-cli command: {}".format(command)) | ||||
process = subprocess.Popen(p_args, stdin=subprocess.PIPE, | process = subprocess.Popen(p_args, stdin=subprocess.PIPE, | ||||
Show All 16 Lines |