19
19
import random
20
20
import shutil
21
21
import subprocess
22
+ import tempfile
22
23
import time
23
24
import re
24
25
import errno
@@ -329,7 +330,7 @@ def _rpchost_to_args(rpchost):
329
330
rv += ['-rpcport=' + rpcport ]
330
331
return rv
331
332
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 ):
333
334
"""
334
335
Start a bitcoind and return RPC connection to it
335
336
"""
@@ -338,7 +339,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
338
339
binary = os .getenv ("BITCOIND" , "bitcoind" )
339
340
args = [ binary , "-datadir=" + datadir , "-server" , "-keypool=1" , "-discover=0" , "-rest" , "-mocktime=" + str (get_mocktime ()) ]
340
341
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 )
342
343
if os .getenv ("PYTHON_DEBUG" , "" ):
343
344
print ("start_node: bitcoind started, waiting for RPC to come up" )
344
345
url = rpc_url (i , rpchost )
@@ -352,6 +353,25 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
352
353
353
354
return proxy
354
355
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
+
355
375
def start_nodes (num_nodes , dirname , extra_args = None , rpchost = None , timewait = None , binary = None ):
356
376
"""
357
377
Start multiple bitcoinds, return RPC connections to them
0 commit comments