[Tests] Require exact match in assert_start_raises_init_eror()
This commit is contained in:
parent
0ec08a672d
commit
58122736b5
6 changed files with 35 additions and 18 deletions
|
@ -5,6 +5,7 @@
|
||||||
"""Test various command line arguments and configuration file parameters."""
|
"""Test various command line arguments and configuration file parameters."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import get_datadir_path
|
from test_framework.util import get_datadir_path
|
||||||
|
@ -25,13 +26,13 @@ class ConfArgsTest(BitcoinTestFramework):
|
||||||
|
|
||||||
# Check that using -datadir argument on non-existent directory fails
|
# Check that using -datadir argument on non-existent directory fails
|
||||||
self.nodes[0].datadir = new_data_dir
|
self.nodes[0].datadir = new_data_dir
|
||||||
self.nodes[0].assert_start_raises_init_error(['-datadir='+new_data_dir], 'Error: Specified data directory "' + new_data_dir + '" does not exist.')
|
self.nodes[0].assert_start_raises_init_error(['-datadir=' + new_data_dir], 'Error: Specified data directory "' + re.escape(new_data_dir) + '" does not exist.')
|
||||||
|
|
||||||
# Check that using non-existent datadir in conf file fails
|
# Check that using non-existent datadir in conf file fails
|
||||||
conf_file = os.path.join(default_data_dir, "bitcoin.conf")
|
conf_file = os.path.join(default_data_dir, "bitcoin.conf")
|
||||||
with open(conf_file, 'a', encoding='utf8') as f:
|
with open(conf_file, 'a', encoding='utf8') as f:
|
||||||
f.write("datadir=" + new_data_dir + "\n")
|
f.write("datadir=" + new_data_dir + "\n")
|
||||||
self.nodes[0].assert_start_raises_init_error(['-conf='+conf_file], 'Error reading configuration file: specified data directory "' + new_data_dir + '" does not exist.')
|
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.')
|
||||||
|
|
||||||
# Create the directory and ensure the config file now works
|
# Create the directory and ensure the config file now works
|
||||||
os.mkdir(new_data_dir)
|
os.mkdir(new_data_dir)
|
||||||
|
|
|
@ -30,8 +30,8 @@ class LoggingTest(BitcoinTestFramework):
|
||||||
invdir = os.path.join(self.nodes[0].datadir, "regtest", "foo")
|
invdir = os.path.join(self.nodes[0].datadir, "regtest", "foo")
|
||||||
invalidname = os.path.join("foo", "foo.log")
|
invalidname = os.path.join("foo", "foo.log")
|
||||||
self.stop_node(0)
|
self.stop_node(0)
|
||||||
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % (invalidname)],
|
exp_stderr = "Error: Could not open debug log file \S+$"
|
||||||
"Error: Could not open debug log file")
|
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % (invalidname)], exp_stderr)
|
||||||
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
|
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
|
||||||
|
|
||||||
# check that invalid log (relative) works after path exists
|
# check that invalid log (relative) works after path exists
|
||||||
|
@ -44,8 +44,7 @@ class LoggingTest(BitcoinTestFramework):
|
||||||
self.stop_node(0)
|
self.stop_node(0)
|
||||||
invdir = os.path.join(self.options.tmpdir, "foo")
|
invdir = os.path.join(self.options.tmpdir, "foo")
|
||||||
invalidname = os.path.join(invdir, "foo.log")
|
invalidname = os.path.join(invdir, "foo.log")
|
||||||
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % invalidname],
|
self.nodes[0].assert_start_raises_init_error(["-debuglogfile=%s" % invalidname], exp_stderr)
|
||||||
"Error: Could not open debug log file")
|
|
||||||
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
|
assert not os.path.isfile(os.path.join(invdir, "foo.log"))
|
||||||
|
|
||||||
# check that invalid log (absolute) works after path exists
|
# check that invalid log (absolute) works after path exists
|
||||||
|
|
|
@ -4,9 +4,12 @@
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
"""Test the -uacomment option."""
|
"""Test the -uacomment option."""
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import assert_equal
|
from test_framework.util import assert_equal
|
||||||
|
|
||||||
|
|
||||||
class UacommentTest(BitcoinTestFramework):
|
class UacommentTest(BitcoinTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.num_nodes = 1
|
self.num_nodes = 1
|
||||||
|
@ -23,13 +26,14 @@ class UacommentTest(BitcoinTestFramework):
|
||||||
|
|
||||||
self.log.info("test -uacomment max length")
|
self.log.info("test -uacomment max length")
|
||||||
self.stop_node(0)
|
self.stop_node(0)
|
||||||
expected = "exceeds maximum length (256). Reduce the number or size of uacomments."
|
expected = "Error: Total length of network version string \([0-9]+\) exceeds maximum length \(256\). Reduce the number or size of uacomments."
|
||||||
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + 'a' * 256], expected)
|
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + 'a' * 256], expected)
|
||||||
|
|
||||||
self.log.info("test -uacomment unsafe characters")
|
self.log.info("test -uacomment unsafe characters")
|
||||||
for unsafe_char in ['/', ':', '(', ')']:
|
for unsafe_char in ['/', ':', '(', ')']:
|
||||||
expected = "User Agent comment (" + unsafe_char + ") contains unsafe characters"
|
expected = "Error: User Agent comment \(" + re.escape(unsafe_char) + "\) contains unsafe characters."
|
||||||
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + unsafe_char], expected)
|
self.nodes[0].assert_start_raises_init_error(["-uacomment=" + unsafe_char], expected)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
UacommentTest().main()
|
UacommentTest().main()
|
||||||
|
|
|
@ -169,8 +169,11 @@ class TestNode():
|
||||||
def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, *args, **kwargs):
|
def assert_start_raises_init_error(self, extra_args=None, expected_msg=None, *args, **kwargs):
|
||||||
"""Attempt to start the node and expect it to raise an error.
|
"""Attempt to start the node and expect it to raise an error.
|
||||||
|
|
||||||
|
extra_args: extra arguments to pass through to bitcoind
|
||||||
|
expected_msg: regex that stderr should match when bitcoind fails
|
||||||
|
|
||||||
Will throw if bitcoind starts without an error.
|
Will throw if bitcoind starts without an error.
|
||||||
Will throw if an expected_msg is provided and it does not appear in bitcoind's stdout."""
|
Will throw if an expected_msg is provided and it does not match bitcoind's stdout."""
|
||||||
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
|
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr:
|
||||||
try:
|
try:
|
||||||
self.start(extra_args, stderr=log_stderr, *args, **kwargs)
|
self.start(extra_args, stderr=log_stderr, *args, **kwargs)
|
||||||
|
@ -181,11 +184,12 @@ class TestNode():
|
||||||
assert 'bitcoind exited' in str(e) # node must have shutdown
|
assert 'bitcoind exited' in str(e) # node must have shutdown
|
||||||
self.running = False
|
self.running = False
|
||||||
self.process = None
|
self.process = None
|
||||||
|
# Check stderr for expected message
|
||||||
if expected_msg is not None:
|
if expected_msg is not None:
|
||||||
log_stderr.seek(0)
|
log_stderr.seek(0)
|
||||||
stderr = log_stderr.read().decode('utf-8')
|
stderr = log_stderr.read().decode('utf-8')
|
||||||
if expected_msg not in stderr:
|
if re.fullmatch(expected_msg + '\n', stderr) is None:
|
||||||
raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
|
raise AssertionError('Expected message "{}" does not match stderr:\n"{}"'.format(expected_msg, stderr))
|
||||||
else:
|
else:
|
||||||
if expected_msg is None:
|
if expected_msg is None:
|
||||||
assert_msg = "bitcoind should have exited with an error"
|
assert_msg = "bitcoind should have exited with an error"
|
||||||
|
|
|
@ -23,7 +23,7 @@ class WalletHDTest(BitcoinTestFramework):
|
||||||
|
|
||||||
# Make sure can't switch off usehd after wallet creation
|
# Make sure can't switch off usehd after wallet creation
|
||||||
self.stop_node(1)
|
self.stop_node(1)
|
||||||
self.nodes[1].assert_start_raises_init_error(['-usehd=0'], 'already existing HD wallet')
|
self.nodes[1].assert_start_raises_init_error(['-usehd=0'], "Error: Error loading : You can't disable HD on an already existing HD wallet")
|
||||||
self.start_node(1)
|
self.start_node(1)
|
||||||
connect_nodes_bi(self.nodes, 0, 1)
|
connect_nodes_bi(self.nodes, 0, 1)
|
||||||
|
|
||||||
|
|
|
@ -60,22 +60,30 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||||
assert_equal(os.path.isfile(wallet_dir(wallet_name)), True)
|
assert_equal(os.path.isfile(wallet_dir(wallet_name)), True)
|
||||||
|
|
||||||
# should not initialize if wallet path can't be created
|
# should not initialize if wallet path can't be created
|
||||||
self.assert_start_raises_init_error(0, ['-wallet=wallet.dat/bad'], 'Not a directory')
|
exp_stderr = "\n\n\*+\n" + \
|
||||||
|
"EXCEPTION: .*\n" + \
|
||||||
|
"boost::filesystem::create_directory: Not a directory:.*\n" + \
|
||||||
|
"bitcoin in .*\n"
|
||||||
|
self.nodes[0].assert_start_raises_init_error(['-wallet=wallet.dat/bad'], exp_stderr)
|
||||||
|
|
||||||
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" does not exist')
|
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" does not exist')
|
||||||
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" is a relative path', cwd=data_dir())
|
self.nodes[0].assert_start_raises_init_error(['-walletdir=wallets'], 'Error: Specified -walletdir "wallets" is a relative path', cwd=data_dir())
|
||||||
self.nodes[0].assert_start_raises_init_error(['-walletdir=debug.log'], 'Error: Specified -walletdir "debug.log" is not a directory', cwd=data_dir())
|
self.nodes[0].assert_start_raises_init_error(['-walletdir=debug.log'], 'Error: Specified -walletdir "debug.log" is not a directory', cwd=data_dir())
|
||||||
|
|
||||||
# should not initialize if there are duplicate wallets
|
# should not initialize if there are duplicate wallets
|
||||||
self.nodes[0].assert_start_raises_init_error(['-wallet=w1', '-wallet=w1'], 'Error loading wallet w1. Duplicate -wallet filename specified.')
|
self.nodes[0].assert_start_raises_init_error(['-wallet=w1', '-wallet=w1'], 'Error: Error loading wallet w1. Duplicate -wallet filename specified.')
|
||||||
|
|
||||||
# should not initialize if one wallet is a copy of another
|
# should not initialize if one wallet is a copy of another
|
||||||
shutil.copyfile(wallet_dir('w8'), wallet_dir('w8_copy'))
|
shutil.copyfile(wallet_dir('w8'), wallet_dir('w8_copy'))
|
||||||
self.nodes[0].assert_start_raises_init_error(['-wallet=w8', '-wallet=w8_copy'], 'duplicates fileid')
|
exp_stderr = "\n\n\*+\n" + \
|
||||||
|
"EXCEPTION: .*\n" + \
|
||||||
|
"CDB: Can't open database w8_copy \(duplicates fileid \w+ from w8\)\s*\n" + \
|
||||||
|
"bitcoin in .*\n"
|
||||||
|
self.nodes[0].assert_start_raises_init_error(['-wallet=w8', '-wallet=w8_copy'], exp_stderr)
|
||||||
|
|
||||||
# should not initialize if wallet file is a symlink
|
# should not initialize if wallet file is a symlink
|
||||||
os.symlink('w8', wallet_dir('w8_symlink'))
|
os.symlink('w8', wallet_dir('w8_symlink'))
|
||||||
self.nodes[0].assert_start_raises_init_error(['-wallet=w8_symlink'], 'Invalid -wallet path')
|
self.nodes[0].assert_start_raises_init_error(['-wallet=w8_symlink'], 'Error: Invalid -wallet path \'w8_symlink\'\. .*')
|
||||||
|
|
||||||
# should not initialize if the specified walletdir does not exist
|
# should not initialize if the specified walletdir does not exist
|
||||||
self.nodes[0].assert_start_raises_init_error(['-walletdir=bad'], 'Error: Specified -walletdir "bad" does not exist')
|
self.nodes[0].assert_start_raises_init_error(['-walletdir=bad'], 'Error: Specified -walletdir "bad" does not exist')
|
||||||
|
@ -102,8 +110,9 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||||
|
|
||||||
competing_wallet_dir = os.path.join(self.options.tmpdir, 'competing_walletdir')
|
competing_wallet_dir = os.path.join(self.options.tmpdir, 'competing_walletdir')
|
||||||
os.mkdir(competing_wallet_dir)
|
os.mkdir(competing_wallet_dir)
|
||||||
self.restart_node(0, ['-walletdir='+competing_wallet_dir])
|
self.restart_node(0, ['-walletdir=' + competing_wallet_dir])
|
||||||
self.nodes[1].assert_start_raises_init_error(['-walletdir='+competing_wallet_dir], 'Error initializing wallet database environment')
|
exp_stderr = "Error: Error initializing wallet database environment \"\S+competing_walletdir\"!"
|
||||||
|
self.nodes[1].assert_start_raises_init_error(['-walletdir=' + competing_wallet_dir], exp_stderr)
|
||||||
|
|
||||||
self.restart_node(0, extra_args)
|
self.restart_node(0, extra_args)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue