aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Newbery <john@johnnewbery.com>2018-02-07 10:51:13 -0500
committerJohn Newbery <john@johnnewbery.com>2018-05-09 10:39:31 -0400
commitbeee49ba1f17937539aa4b543d5b28a9d76c0f4a (patch)
treeaa446e7a681dd3d971f1ccc8ccf69899d2f8b86e
parente5036715c8f56170e1674f8aa4eb4b54565bb451 (diff)
downloadbitcoin-beee49ba1f17937539aa4b543d5b28a9d76c0f4a.tar.xz
[tests] Allow stderr to be tested against specified string
Allow bitcoind's stderr to be tested against a specified string on shutdown.
-rwxr-xr-xtest/functional/feature_includeconf.py17
-rwxr-xr-xtest/functional/test_framework/test_framework.py4
-rwxr-xr-xtest/functional/test_framework/test_node.py9
3 files changed, 17 insertions, 13 deletions
diff --git a/test/functional/feature_includeconf.py b/test/functional/feature_includeconf.py
index d3f1be6c3a..1ead2fcb02 100755
--- a/test/functional/feature_includeconf.py
+++ b/test/functional/feature_includeconf.py
@@ -15,9 +15,8 @@ Verify that:
file.
"""
import os
-import tempfile
-from test_framework.test_framework import BitcoinTestFramework, assert_equal
+from test_framework.test_framework import BitcoinTestFramework
class IncludeConfTest(BitcoinTestFramework):
def set_test_params(self):
@@ -44,20 +43,18 @@ class IncludeConfTest(BitcoinTestFramework):
self.log.info("-includeconf cannot be used as command-line arg. subversion should still end with 'main; relative)/'")
self.stop_node(0)
- with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
- self.start_node(0, extra_args=["-includeconf=relative2.conf"], stderr=log_stderr)
- subversion = self.nodes[0].getnetworkinfo()["subversion"]
- assert subversion.endswith("main; relative)/")
- log_stderr.seek(0)
- stderr = log_stderr.read().decode('utf-8').strip()
- assert_equal(stderr, 'warning: -includeconf cannot be used from commandline; ignoring -includeconf=relative2.conf')
+ self.start_node(0, extra_args=["-includeconf=relative2.conf"])
+
+ subversion = self.nodes[0].getnetworkinfo()["subversion"]
+ assert subversion.endswith("main; relative)/")
+ self.stop_node(0, expected_stderr="warning: -includeconf cannot be used from commandline; ignoring -includeconf=relative2.conf")
self.log.info("-includeconf cannot be used recursively. subversion should end with 'main; relative)/'")
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "a", encoding="utf8") as f:
f.write("includeconf=relative2.conf\n")
- self.restart_node(0)
+ self.start_node(0)
subversion = self.nodes[0].getnetworkinfo()["subversion"]
assert subversion.endswith("main; relative)/")
diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
index bb850740ce..b842e6ef4e 100755
--- a/test/functional/test_framework/test_framework.py
+++ b/test/functional/test_framework/test_framework.py
@@ -289,9 +289,9 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
for node in self.nodes:
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
- def stop_node(self, i):
+ def stop_node(self, i, expected_stderr=''):
"""Stop a bitcoind test node"""
- self.nodes[i].stop_node()
+ self.nodes[i].stop_node(expected_stderr)
self.nodes[i].wait_until_stopped()
def stop_nodes(self):
diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py
index 440e4586b7..eac6057de6 100755
--- a/test/functional/test_framework/test_node.py
+++ b/test/functional/test_framework/test_node.py
@@ -188,7 +188,7 @@ class TestNode():
wallet_path = "wallet/%s" % wallet_name
return self.rpc / wallet_path
- def stop_node(self):
+ def stop_node(self, expected_stderr=''):
"""Stop the node."""
if not self.running:
return
@@ -197,6 +197,13 @@ class TestNode():
self.stop()
except http.client.CannotSendRequest:
self.log.exception("Unable to stop node.")
+
+ # Check that stderr is as expected
+ self.stderr.seek(0)
+ stderr = self.stderr.read().decode('utf-8').strip()
+ if stderr != expected_stderr:
+ raise AssertionError("Unexpected stderr {} != {}".format(stderr, expected_stderr))
+
del self.p2ps[:]
def is_node_stopped(self):