Skip to content

Commit c22ce8a

Browse files
committed
[Tests] Write stdout/stderr to datadir instead of temp file.
1 parent 4a50ec0 commit c22ce8a

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

test/functional/test_framework/test_framework.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ def add_nodes(self, num_nodes, extra_args=None, rpchost=None, timewait=None, bin
256256
assert_equal(len(extra_args), num_nodes)
257257
assert_equal(len(binary), num_nodes)
258258
for i in range(num_nodes):
259-
self.nodes.append(TestNode(i, get_datadir_path(self.options.tmpdir, i), rpchost=rpchost, timewait=timewait, bitcoind=binary[i], bitcoin_cli=self.options.bitcoincli, stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, extra_conf=extra_confs[i], extra_args=extra_args[i], use_cli=self.options.usecli))
259+
self.nodes.append(TestNode(i, get_datadir_path(self.options.tmpdir, i), rpchost=rpchost, timewait=timewait, bitcoind=binary[i], bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, extra_conf=extra_confs[i], extra_args=extra_args[i], use_cli=self.options.usecli))
260260

261261
def start_node(self, i, *args, **kwargs):
262262
"""Start a bitcoind"""
@@ -407,7 +407,7 @@ def _initialize_chain(self):
407407
args = [self.options.bitcoind, "-datadir=" + datadir]
408408
if i > 0:
409409
args.append("-connect=127.0.0.1:" + str(p2p_port(0)))
410-
self.nodes.append(TestNode(i, get_datadir_path(self.options.cachedir, i), extra_conf=["bind=127.0.0.1"], extra_args=[], rpchost=None, timewait=None, bitcoind=self.options.bitcoind, bitcoin_cli=self.options.bitcoincli, stderr=None, mocktime=self.mocktime, coverage_dir=None))
410+
self.nodes.append(TestNode(i, get_datadir_path(self.options.cachedir, i), extra_conf=["bind=127.0.0.1"], extra_args=[], rpchost=None, timewait=None, bitcoind=self.options.bitcoind, bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=None))
411411
self.nodes[i].args = args
412412
self.start_node(i)
413413

test/functional/test_framework/test_node.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import http.client
1111
import json
1212
import logging
13+
import os
1314
import re
1415
import subprocess
1516
import tempfile
@@ -55,17 +56,18 @@ class TestNode():
5556
To make things easier for the test writer, any unrecognised messages will
5657
be dispatched to the RPC connection."""
5758

58-
def __init__(self, i, datadir, rpchost, timewait, bitcoind, bitcoin_cli, stderr, mocktime, coverage_dir, extra_conf=None, extra_args=None, use_cli=False):
59+
def __init__(self, i, datadir, rpchost, timewait, bitcoind, bitcoin_cli, mocktime, coverage_dir, extra_conf=None, extra_args=None, use_cli=False):
5960
self.index = i
6061
self.datadir = datadir
62+
self.stdout_dir = os.path.join(self.datadir, "stdout")
63+
self.stderr_dir = os.path.join(self.datadir, "stderr")
6164
self.rpchost = rpchost
6265
if timewait:
6366
self.rpc_timeout = timewait
6467
else:
6568
# Wait for up to 60 seconds for the RPC server to respond
6669
self.rpc_timeout = 60
6770
self.binary = bitcoind
68-
self.stderr = stderr
6971
self.coverage_dir = coverage_dir
7072
if extra_conf != None:
7173
append_config(datadir, extra_conf)
@@ -124,17 +126,24 @@ def __getattr__(self, name):
124126
assert self.rpc_connected and self.rpc is not None, self._node_msg("Error: no RPC connection")
125127
return getattr(self.rpc, name)
126128

127-
def start(self, extra_args=None, stderr=None, *args, **kwargs):
129+
def start(self, extra_args=None, stdout=None, stderr=None, *args, **kwargs):
128130
"""Start the node."""
129131
if extra_args is None:
130132
extra_args = self.extra_args
133+
134+
# Add a new stdout and stderr file each time bitcoind is started
131135
if stderr is None:
132-
stderr = self.stderr
136+
stderr = tempfile.NamedTemporaryFile(dir=self.stderr_dir, delete=False)
137+
if stdout is None:
138+
stdout = tempfile.NamedTemporaryFile(dir=self.stdout_dir, delete=False)
139+
self.stderr = stderr
140+
self.stdout = stdout
141+
133142
# Delete any existing cookie file -- if such a file exists (eg due to
134143
# unclean shutdown), it will get overwritten anyway by bitcoind, and
135144
# potentially interfere with our attempt to authenticate
136145
delete_cookie_file(self.datadir)
137-
self.process = subprocess.Popen(self.args + extra_args, stderr=stderr, *args, **kwargs)
146+
self.process = subprocess.Popen(self.args + extra_args, stdout=stdout, stderr=stderr, *args, **kwargs)
138147
self.running = True
139148
self.log.debug("bitcoind started, waiting for RPC to come up")
140149

@@ -217,9 +226,10 @@ def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, mat
217226
218227
Will throw if bitcoind starts without an error.
219228
Will throw if an expected_msg is provided and it does not match bitcoind's stdout."""
220-
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
229+
with tempfile.NamedTemporaryFile(dir=self.stderr_dir, delete=False) as log_stderr, \
230+
tempfile.NamedTemporaryFile(dir=self.stdout_dir, delete=False) as log_stdout:
221231
try:
222-
self.start(extra_args, stderr=log_stderr, *args, **kwargs)
232+
self.start(extra_args, stdout=log_stdout, stderr=log_stderr, *args, **kwargs)
223233
self.wait_for_rpc_connection()
224234
self.stop_node()
225235
self.wait_until_stopped()

test/functional/test_framework/util.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ def initialize_datadir(dirname, n):
301301
f.write("keypool=1\n")
302302
f.write("discover=0\n")
303303
f.write("listenonion=0\n")
304+
os.makedirs(os.path.join(datadir, 'stderr'), exist_ok=True)
305+
os.makedirs(os.path.join(datadir, 'stdout'), exist_ok=True)
304306
return datadir
305307

306308
def get_datadir_path(dirname, n):

0 commit comments

Comments
 (0)