Skip to content

Commit faace13

Browse files
author
MarcoFalke
committed
qa: Match full plain text by default
1 parent 8394300 commit faace13

File tree

6 files changed

+29
-18
lines changed

6 files changed

+29
-18
lines changed

test/functional/feature_blocksdir.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"""
77

88
import os
9-
import re
109
import shutil
1110

1211
from test_framework.test_framework import BitcoinTestFramework, initialize_datadir
@@ -23,7 +22,7 @@ def run_test(self):
2322
initialize_datadir(self.options.tmpdir, 0)
2423
self.log.info("Starting with non exiting blocksdir ...")
2524
blocksdir_path = os.path.join(self.options.tmpdir, 'blocksdir')
26-
self.nodes[0].assert_start_raises_init_error(["-blocksdir=" + blocksdir_path], re.escape('Error: Specified blocks directory "{}" does not exist.'.format(blocksdir_path)))
25+
self.nodes[0].assert_start_raises_init_error(["-blocksdir=" + blocksdir_path], 'Error: Specified blocks directory "{}" does not exist.'.format(blocksdir_path))
2726
os.mkdir(blocksdir_path)
2827
self.log.info("Starting with exiting blocksdir ...")
2928
self.start_node(0, ["-blocksdir=" + blocksdir_path])

test/functional/feature_config_args.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"""Test various command line arguments and configuration file parameters."""
66

77
import os
8-
import re
98

109
from test_framework.test_framework import BitcoinTestFramework
1110

@@ -26,13 +25,13 @@ def run_test(self):
2625

2726
# Check that using -datadir argument on non-existent directory fails
2827
self.nodes[0].datadir = new_data_dir
29-
self.nodes[0].assert_start_raises_init_error(['-datadir=' + new_data_dir], 'Error: Specified data directory "' + re.escape(new_data_dir) + '" does not exist.')
28+
self.nodes[0].assert_start_raises_init_error(['-datadir=' + new_data_dir], 'Error: Specified data directory "' + new_data_dir + '" does not exist.')
3029

3130
# Check that using non-existent datadir in conf file fails
3231
conf_file = os.path.join(default_data_dir, "bitcoin.conf")
3332
with open(conf_file, 'a', encoding='utf8') as f:
3433
f.write("datadir=" + new_data_dir + "\n")
35-
self.nodes[0].assert_start_raises_init_error(['-conf=' + conf_file], 'Error reading configuration file: specified data directory "' + re.escape(new_data_dir) + '" does not exist.')
34+
self.nodes[0].assert_start_raises_init_error(['-conf=' + conf_file], 'Error reading configuration file: specified data directory "' + new_data_dir + '" does not exist.')
3635

3736
# Create the directory and ensure the config file now works
3837
os.mkdir(new_data_dir)

test/functional/feature_logging.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import os
88

99
from test_framework.test_framework import BitcoinTestFramework
10+
from test_framework.test_node import ErrorMatch
11+
1012

1113
class LoggingTest(BitcoinTestFramework):
1214
def set_test_params(self):
@@ -31,7 +33,7 @@ def run_test(self):
3133
invalidname = os.path.join("foo", "foo.log")
3234
self.stop_node(0)
3335
exp_stderr = "Error: Could not open debug log file \S+$"
34-
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % (invalidname)], exp_stderr)
36+
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % (invalidname)], exp_stderr, match=ErrorMatch.FULL_REGEX)
3537
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
3638

3739
# check that invalid log (relative) works after path exists
@@ -44,7 +46,7 @@ def run_test(self):
4446
self.stop_node(0)
4547
invdir = os.path.join(self.options.tmpdir, "foo")
4648
invalidname = os.path.join(invdir, "foo.log")
47-
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % invalidname], exp_stderr)
49+
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % invalidname], exp_stderr, match=ErrorMatch.FULL_REGEX)
4850
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
4951

5052
# check that invalid log (absolute) works after path exists

test/functional/feature_uacomment.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import re
88

99
from test_framework.test_framework import BitcoinTestFramework
10+
from test_framework.test_node import ErrorMatch
1011
from test_framework.util import assert_equal
1112

1213

@@ -27,12 +28,12 @@ def run_test(self):
2728
self.log.info("test -uacomment max length")
2829
self.stop_node(0)
2930
expected = "Error: Total length of network version string \([0-9]+\) exceeds maximum length \(256\). Reduce the number or size of uacomments."
30-
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + 'a' * 256], expected)
31+
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + 'a' * 256], expected, match=ErrorMatch.FULL_REGEX)
3132

3233
self.log.info("test -uacomment unsafe characters")
3334
for unsafe_char in ['/', ':', '(', ')']:
3435
expected = "Error: User Agent comment \(" + re.escape(unsafe_char) + "\) contains unsafe characters."
35-
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + unsafe_char], expected)
36+
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + unsafe_char], expected, match=ErrorMatch.FULL_REGEX)
3637

3738

3839
if __name__ == '__main__':

test/functional/test_framework/test_node.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import decimal
88
import errno
9+
from enum import Enum
910
import http.client
1011
import json
1112
import logging
@@ -35,6 +36,12 @@ class FailedToStartError(Exception):
3536
"""Raised when a node fails to start correctly."""
3637

3738

39+
class ErrorMatch(Enum):
40+
FULL_TEXT = 1
41+
FULL_REGEX = 2
42+
PARTIAL_REGEX = 3
43+
44+
3845
class TestNode():
3946
"""A class for representing a bitcoind node under test.
4047
@@ -172,7 +179,7 @@ def is_node_stopped(self):
172179
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
173180
wait_until(self.is_node_stopped, timeout=timeout)
174181

175-
def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, partial_match=False, *args, **kwargs):
182+
def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, match=ErrorMatch.FULL_TEXT, *args, **kwargs):
176183
"""Attempt to start the node and expect it to raise an error.
177184
178185
extra_args: extra arguments to pass through to bitcoind
@@ -194,12 +201,15 @@ def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, par
194201
if expected_msg is not None:
195202
log_stderr.seek(0)
196203
stderr = log_stderr.read().decode('utf-8').strip()
197-
if partial_match:
204+
if match == ErrorMatch.PARTIAL_REGEX:
198205
if re.search(expected_msg, stderr, flags=re.MULTILINE) is None:
199206
raise AssertionError('Expected message "{}" does not partially match stderr:\n"{}"'.format(expected_msg, stderr))
200-
else:
207+
elif match == ErrorMatch.FULL_REGEX:
201208
if re.fullmatch(expected_msg, stderr) is None:
202209
raise AssertionError('Expected message "{}" does not fully match stderr:\n"{}"'.format(expected_msg, stderr))
210+
elif match == ErrorMatch.FULL_TEXT:
211+
if expected_msg != stderr:
212+
raise AssertionError('Expected message "{}" does not fully match stderr:\n"{}"'.format(expected_msg, stderr))
203213
else:
204214
if expected_msg is None:
205215
assert_msg = "bitcoind should have exited with an error"

test/functional/wallet_multiwallet.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
Verify that a bitcoind node can load multiple wallet files
88
"""
99
import os
10-
import re
1110
import shutil
1211

1312
from test_framework.test_framework import BitcoinTestFramework
13+
from test_framework.test_node import ErrorMatch
1414
from test_framework.util import (
1515
assert_equal,
1616
assert_raises_rpc_error,
@@ -66,7 +66,7 @@ def run_test(self):
6666

6767
# should not initialize if wallet path can't be created
6868
exp_stderr = "boost::filesystem::create_directory: (The system cannot find the path specified|Not a directory):"
69-
self.nodes[0].assert_start_raises_init_error(['-wallet=wallet.dat/bad'], exp_stderr, partial_match=True)
69+
self.nodes[0].assert_start_raises_init_error(['-wallet=wallet.dat/bad'], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
7070

7171
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" does not exist')
7272
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" is a relative path', cwd=data_dir())
@@ -78,18 +78,18 @@ def run_test(self):
7878
# should not initialize if one wallet is a copy of another
7979
shutil.copyfile(wallet_dir('w8'), wallet_dir('w8_copy'))
8080
exp_stderr = "CDB: Can't open database w8_copy \(duplicates fileid \w+ from w8\)"
81-
self.nodes[0].assert_start_raises_init_error(['-wallet=w8', '-wallet=w8_copy'], exp_stderr, partial_match=True)
81+
self.nodes[0].assert_start_raises_init_error(['-wallet=w8', '-wallet=w8_copy'], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
8282

8383
# should not initialize if wallet file is a symlink
8484
os.symlink('w8', wallet_dir('w8_symlink'))
85-
self.nodes[0].assert_start_raises_init_error(['-wallet=w8_symlink'], 'Error: Invalid -wallet path \'w8_symlink\'\. .*')
85+
self.nodes[0].assert_start_raises_init_error(['-wallet=w8_symlink'], 'Error: Invalid -wallet path \'w8_symlink\'\. .*', match=ErrorMatch.FULL_REGEX)
8686

8787
# should not initialize if the specified walletdir does not exist
8888
self.nodes[0].assert_start_raises_init_error(['-walletdir=bad'], 'Error: Specified -walletdir "bad" does not exist')
8989
# should not initialize if the specified walletdir is not a directory
9090
not_a_dir = wallet_dir('notadir')
9191
open(not_a_dir, 'a').close()
92-
self.nodes[0].assert_start_raises_init_error(['-walletdir=' + not_a_dir], 'Error: Specified -walletdir "' + re.escape(not_a_dir) + '" is not a directory')
92+
self.nodes[0].assert_start_raises_init_error(['-walletdir=' + not_a_dir], 'Error: Specified -walletdir "' + not_a_dir + '" is not a directory')
9393

9494
# if wallets/ doesn't exist, datadir should be the default wallet dir
9595
wallet_dir2 = data_dir('walletdir')
@@ -111,7 +111,7 @@ def run_test(self):
111111
os.mkdir(competing_wallet_dir)
112112
self.restart_node(0, ['-walletdir=' + competing_wallet_dir])
113113
exp_stderr = "Error: Error initializing wallet database environment \"\S+competing_walletdir\"!"
114-
self.nodes[1].assert_start_raises_init_error(['-walletdir=' + competing_wallet_dir], exp_stderr, partial_match=True)
114+
self.nodes[1].assert_start_raises_init_error(['-walletdir=' + competing_wallet_dir], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
115115

116116
self.restart_node(0, extra_args)
117117

0 commit comments

Comments
 (0)