Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_framework/test_framework.py
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Lines | def add_nodes(self, num_nodes, extra_args=None, rpchost=None, timewait=None, binary=None): | ||||
if binary is None: | if binary is None: | ||||
binary = [None] * num_nodes | binary = [None] * num_nodes | ||||
assert_equal(len(extra_args), num_nodes) | assert_equal(len(extra_args), num_nodes) | ||||
assert_equal(len(binary), num_nodes) | assert_equal(len(binary), num_nodes) | ||||
for i in range(num_nodes): | for i in range(num_nodes): | ||||
self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, rpc_port=rpc_port(i), p2p_port=p2p_port(i), | self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, rpc_port=rpc_port(i), p2p_port=p2p_port(i), | ||||
timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, use_cli=self.options.usecli)) | timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, use_cli=self.options.usecli)) | ||||
def start_node(self, i, extra_args=None, stderr=None): | def start_node(self, i, *args, **kwargs): | ||||
"""Start a bitcoind""" | """Start a bitcoind""" | ||||
node = self.nodes[i] | node = self.nodes[i] | ||||
node.start(extra_args, stderr) | node.start(*args, **kwargs) | ||||
node.wait_for_rpc_connection() | node.wait_for_rpc_connection() | ||||
if self.options.coveragedir is not None: | if self.options.coveragedir is not None: | ||||
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc) | coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc) | ||||
def start_nodes(self, extra_args=None): | def start_nodes(self, extra_args=None, *args, **kwargs): | ||||
"""Start multiple bitcoinds""" | """Start multiple bitcoinds""" | ||||
if extra_args is None: | if extra_args is None: | ||||
extra_args = [None] * self.num_nodes | extra_args = [None] * self.num_nodes | ||||
assert_equal(len(extra_args), self.num_nodes) | assert_equal(len(extra_args), self.num_nodes) | ||||
try: | try: | ||||
for i, node in enumerate(self.nodes): | for i, node in enumerate(self.nodes): | ||||
node.start(extra_args[i]) | node.start(extra_args[i], *args, **kwargs) | ||||
for node in self.nodes: | for node in self.nodes: | ||||
node.wait_for_rpc_connection() | node.wait_for_rpc_connection() | ||||
except: | except: | ||||
# If one node failed to start, stop the others | # If one node failed to start, stop the others | ||||
self.stop_nodes() | self.stop_nodes() | ||||
raise | raise | ||||
if self.options.coveragedir is not None: | if self.options.coveragedir is not None: | ||||
Show All 16 Lines | def stop_nodes(self): | ||||
# Wait for nodes to stop | # Wait for nodes to stop | ||||
node.wait_until_stopped() | node.wait_until_stopped() | ||||
def restart_node(self, i, extra_args=None): | def restart_node(self, i, extra_args=None): | ||||
"""Stop and start a test node""" | """Stop and start a test node""" | ||||
self.stop_node(i) | self.stop_node(i) | ||||
self.start_node(i, extra_args) | self.start_node(i, extra_args) | ||||
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, *args, **kwargs): | ||||
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr: | with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr: | ||||
try: | try: | ||||
self.start_node(i, extra_args, stderr=log_stderr) | self.start_node( | ||||
i, extra_args, stderr=log_stderr, *args, **kwargs) | |||||
self.stop_node(i) | self.stop_node(i) | ||||
except Exception as e: | except Exception as e: | ||||
assert 'bitcoind exited' in str(e) # node must have shutdown | assert 'bitcoind exited' in str(e) # node must have shutdown | ||||
self.nodes[i].running = False | self.nodes[i].running = False | ||||
self.nodes[i].process = None | self.nodes[i].process = None | ||||
if expected_msg is not None: | if expected_msg is not None: | ||||
log_stderr.seek(0) | log_stderr.seek(0) | ||||
stderr = log_stderr.read().decode('utf-8') | stderr = log_stderr.read().decode('utf-8') | ||||
▲ Show 20 Lines • Show All 203 Lines • Show Last 20 Lines |