15
15
import random
16
16
import shutil
17
17
import subprocess
18
+ import tempfile
18
19
import time
19
20
import re
20
21
import errno
@@ -325,7 +326,7 @@ def _rpchost_to_args(rpchost):
325
326
rv += ['-rpcport=' + rpcport ]
326
327
return rv
327
328
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 ):
329
330
"""
330
331
Start a bitcoind and return RPC connection to it
331
332
"""
@@ -334,7 +335,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
334
335
binary = os .getenv ("BITCOIND" , "bitcoind" )
335
336
args = [ binary , "-datadir=" + datadir , "-server" , "-keypool=1" , "-discover=0" , "-rest" , "-mocktime=" + str (get_mocktime ()) ]
336
337
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 )
338
339
if os .getenv ("PYTHON_DEBUG" , "" ):
339
340
print ("start_node: bitcoind started, waiting for RPC to come up" )
340
341
url = rpc_url (i , rpchost )
@@ -348,6 +349,25 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
348
349
349
350
return proxy
350
351
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
+
351
371
def start_nodes (num_nodes , dirname , extra_args = None , rpchost = None , timewait = None , binary = None ):
352
372
"""
353
373
Start multiple bitcoinds, return RPC connections to them
0 commit comments