Skip to content

Commit 025dec0

Browse files
committed
[qa] assert_start_raises_init_error
1 parent bed5b30 commit 025dec0

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

qa/rpc-tests/test_framework/util.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import random
2020
import shutil
2121
import subprocess
22+
import tempfile
2223
import time
2324
import re
2425
import errno
@@ -329,7 +330,7 @@ def _rpchost_to_args(rpchost):
329330
rv += ['-rpcport=' + rpcport]
330331
return rv
331332

332-
def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
333+
def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None, stderr=None):
333334
"""
334335
Start a bitcoind and return RPC connection to it
335336
"""
@@ -338,7 +339,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
338339
binary = os.getenv("BITCOIND", "bitcoind")
339340
args = [ binary, "-datadir="+datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-mocktime="+str(get_mocktime()) ]
340341
if extra_args is not None: args.extend(extra_args)
341-
bitcoind_processes[i] = subprocess.Popen(args)
342+
bitcoind_processes[i] = subprocess.Popen(args, stderr=stderr)
342343
if os.getenv("PYTHON_DEBUG", ""):
343344
print("start_node: bitcoind started, waiting for RPC to come up")
344345
url = rpc_url(i, rpchost)
@@ -352,6 +353,25 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
352353

353354
return proxy
354355

356+
def assert_start_raises_init_error(i, dirname, extra_args=None, expected_msg=None):
357+
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
358+
try:
359+
node = start_node(i, dirname, extra_args, stderr=log_stderr)
360+
stop_node(node, i)
361+
except Exception as e:
362+
assert 'bitcoind exited' in str(e) #node must have shutdown
363+
if expected_msg is not None:
364+
log_stderr.seek(0)
365+
stderr = log_stderr.read().decode('utf-8')
366+
if expected_msg not in stderr:
367+
raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
368+
else:
369+
if expected_msg is None:
370+
assert_msg = "bitcoind should have exited with an error"
371+
else:
372+
assert_msg = "bitcoind should have exited with expected error " + expected_msg
373+
raise AssertionError(assert_msg)
374+
355375
def start_nodes(num_nodes, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
356376
"""
357377
Start multiple bitcoinds, return RPC connections to them

qa/rpc-tests/wallet-hd.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
start_node,
1010
assert_equal,
1111
connect_nodes_bi,
12+
assert_start_raises_init_error
1213
)
1314
import os
1415
import shutil
@@ -30,6 +31,12 @@ def setup_network(self):
3031
def run_test (self):
3132
tmpdir = self.options.tmpdir
3233

34+
# Make sure can't switch off usehd after wallet creation
35+
self.stop_node(1)
36+
assert_start_raises_init_error(1, self.options.tmpdir, ['-usehd=0'], 'already existing HD wallet')
37+
self.nodes[1] = start_node(1, self.options.tmpdir, self.node_args[1])
38+
connect_nodes_bi(self.nodes, 0, 1)
39+
3340
# Make sure we use hd, keep masterkeyid
3441
masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid']
3542
assert_equal(len(masterkeyid), 40)

0 commit comments

Comments
 (0)