Skip to content

Commit 48c3429

Browse files
committed
Merge #9832: [qa] assert_start_raises_init_error
025dec0 [qa] assert_start_raises_init_error (NicolasDorier) Tree-SHA512: 0fe3ecbd47625b181aed92f15445ac26993e1a8b9843bbc1088c4adcea774e503b870912a18e13dca3f255c22a9964c1c0ca92c758907538143f316c5272ea4a
2 parents 5a6af31 + 025dec0 commit 48c3429

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
@@ -15,6 +15,7 @@
1515
import random
1616
import shutil
1717
import subprocess
18+
import tempfile
1819
import time
1920
import re
2021
import errno
@@ -325,7 +326,7 @@ def _rpchost_to_args(rpchost):
325326
rv += ['-rpcport=' + rpcport]
326327
return rv
327328

328-
def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
329+
def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=None, stderr=None):
329330
"""
330331
Start a bitcoind and return RPC connection to it
331332
"""
@@ -334,7 +335,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
334335
binary = os.getenv("BITCOIND", "bitcoind")
335336
args = [ binary, "-datadir="+datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-mocktime="+str(get_mocktime()) ]
336337
if extra_args is not None: args.extend(extra_args)
337-
bitcoind_processes[i] = subprocess.Popen(args)
338+
bitcoind_processes[i] = subprocess.Popen(args, stderr=stderr)
338339
if os.getenv("PYTHON_DEBUG", ""):
339340
print("start_node: bitcoind started, waiting for RPC to come up")
340341
url = rpc_url(i, rpchost)
@@ -348,6 +349,25 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
348349

349350
return proxy
350351

352+
def assert_start_raises_init_error(i, dirname, extra_args=None, expected_msg=None):
353+
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
354+
try:
355+
node = start_node(i, dirname, extra_args, stderr=log_stderr)
356+
stop_node(node, i)
357+
except Exception as e:
358+
assert 'bitcoind exited' in str(e) #node must have shutdown
359+
if expected_msg is not None:
360+
log_stderr.seek(0)
361+
stderr = log_stderr.read().decode('utf-8')
362+
if expected_msg not in stderr:
363+
raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
364+
else:
365+
if expected_msg is None:
366+
assert_msg = "bitcoind should have exited with an error"
367+
else:
368+
assert_msg = "bitcoind should have exited with expected error " + expected_msg
369+
raise AssertionError(assert_msg)
370+
351371
def start_nodes(num_nodes, dirname, extra_args=None, rpchost=None, timewait=None, binary=None):
352372
"""
353373
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
@@ -10,6 +10,7 @@
1010
start_node,
1111
assert_equal,
1212
connect_nodes_bi,
13+
assert_start_raises_init_error
1314
)
1415
import os
1516
import shutil
@@ -31,6 +32,12 @@ def setup_network(self):
3132
def run_test (self):
3233
tmpdir = self.options.tmpdir
3334

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

0 commit comments

Comments
 (0)