mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
test: Use TestNode *_path properties where possible
Seems odd to place the burden on test writers to hardcode the chain or datadir path for the nodes under test.
This commit is contained in:
parent
dddd89962b
commit
aaaa3aefbd
22 changed files with 86 additions and 108 deletions
|
@ -9,10 +9,7 @@
|
|||
- Mine a fork that requires disconnecting the tip.
|
||||
- Verify that bitcoind AbortNode's.
|
||||
"""
|
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import get_datadir_path
|
||||
import os
|
||||
|
||||
|
||||
class AbortNodeTest(BitcoinTestFramework):
|
||||
|
@ -26,10 +23,9 @@ class AbortNodeTest(BitcoinTestFramework):
|
|||
|
||||
def run_test(self):
|
||||
self.generate(self.nodes[0], 3, sync_fun=self.no_op)
|
||||
datadir = get_datadir_path(self.options.tmpdir, 0)
|
||||
|
||||
# Deleting the undo file will result in reorg failure
|
||||
os.unlink(os.path.join(datadir, self.chain, 'blocks', 'rev00000.dat'))
|
||||
(self.nodes[0].chain_path / "blocks" / "rev00000.dat").unlink()
|
||||
|
||||
# Connecting to a node with a more work chain will trigger a reorg
|
||||
# attempt.
|
||||
|
|
|
@ -20,9 +20,7 @@ class AnchorsTest(BitcoinTestFramework):
|
|||
self.disable_autoconnect = False
|
||||
|
||||
def run_test(self):
|
||||
node_anchors_path = os.path.join(
|
||||
self.nodes[0].datadir, "regtest", "anchors.dat"
|
||||
)
|
||||
node_anchors_path = self.nodes[0].chain_path / "anchors.dat"
|
||||
|
||||
self.log.info("When node starts, check if anchors.dat doesn't exist")
|
||||
assert not os.path.exists(node_anchors_path)
|
||||
|
|
|
@ -113,7 +113,7 @@ class AsmapTest(BitcoinTestFramework):
|
|||
|
||||
def run_test(self):
|
||||
self.node = self.nodes[0]
|
||||
self.datadir = os.path.join(self.node.datadir, self.chain)
|
||||
self.datadir = self.node.chain_path
|
||||
self.default_asmap = os.path.join(self.datadir, DEFAULT_ASMAP_FILENAME)
|
||||
self.asmap_raw = os.path.join(os.path.dirname(os.path.realpath(__file__)), ASMAP)
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ class ConfArgsTest(BitcoinTestFramework):
|
|||
self.stop_node(0)
|
||||
|
||||
# Check that startup fails if conf= is set in bitcoin.conf or in an included conf file
|
||||
bad_conf_file_path = os.path.join(self.options.tmpdir, 'node0', 'bitcoin_bad.conf')
|
||||
bad_conf_file_path = self.nodes[0].datadir_path / "bitcoin_bad.conf"
|
||||
util.write_config(bad_conf_file_path, n=0, chain='', extra_config=f'conf=some.conf\n')
|
||||
conf_in_config_file_err = 'Error: Error reading configuration file: conf cannot be set in the configuration file; use includeconf= if you want to include additional config files'
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
|
@ -75,7 +75,7 @@ class ConfArgsTest(BitcoinTestFramework):
|
|||
conf.write("wallet=foo\n")
|
||||
self.nodes[0].assert_start_raises_init_error(expected_msg=f'Error: Config setting for -wallet only applied on {self.chain} network when in [{self.chain}] section.')
|
||||
|
||||
main_conf_file_path = os.path.join(self.options.tmpdir, 'node0', 'bitcoin_main.conf')
|
||||
main_conf_file_path = self.nodes[0].datadir_path / "bitcoin_main.conf"
|
||||
util.write_config(main_conf_file_path, n=0, chain='', extra_config=f'includeconf={inc_conf_file_path}\n')
|
||||
with open(inc_conf_file_path, 'w', encoding='utf-8') as conf:
|
||||
conf.write('acceptnonstdtxn=1\n')
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Check that it's not possible to start a second bitcoind instance using the same datadir or wallet."""
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
|
||||
|
@ -24,7 +23,7 @@ class FilelockTest(BitcoinTestFramework):
|
|||
self.nodes[0].wait_for_rpc_connection()
|
||||
|
||||
def run_test(self):
|
||||
datadir = os.path.join(self.nodes[0].datadir, self.chain)
|
||||
datadir = self.nodes[0].chain_path
|
||||
self.log.info(f"Using datadir {datadir}")
|
||||
|
||||
self.log.info("Check that we can't start a second bitcoind instance using the same datadir")
|
||||
|
@ -35,7 +34,7 @@ class FilelockTest(BitcoinTestFramework):
|
|||
def check_wallet_filelock(descriptors):
|
||||
wallet_name = ''.join([random.choice(string.ascii_lowercase) for _ in range(6)])
|
||||
self.nodes[0].createwallet(wallet_name=wallet_name, descriptors=descriptors)
|
||||
wallet_dir = os.path.join(datadir, 'wallets')
|
||||
wallet_dir = self.nodes[0].wallets_path
|
||||
self.log.info("Check that we can't start a second bitcoind instance using the same wallet")
|
||||
if descriptors:
|
||||
expected_msg = f"Error: SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another instance of {self.config['environment']['PACKAGE_NAME']}?"
|
||||
|
|
|
@ -14,27 +14,25 @@ Verify that:
|
|||
4. multiple includeconf arguments can be specified in the main config
|
||||
file.
|
||||
"""
|
||||
import os
|
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
|
||||
|
||||
class IncludeConfTest(BitcoinTestFramework):
|
||||
def set_test_params(self):
|
||||
self.num_nodes = 1
|
||||
|
||||
def setup_chain(self):
|
||||
super().setup_chain()
|
||||
def run_test(self):
|
||||
# Create additional config files
|
||||
# - tmpdir/node0/relative.conf
|
||||
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
||||
with open(self.nodes[0].datadir_path / "relative.conf", "w", encoding="utf8") as f:
|
||||
f.write("uacomment=relative\n")
|
||||
# - tmpdir/node0/relative2.conf
|
||||
with open(os.path.join(self.options.tmpdir, "node0", "relative2.conf"), "w", encoding="utf8") as f:
|
||||
with open(self.nodes[0].datadir_path / "relative2.conf", "w", encoding="utf8") as f:
|
||||
f.write("uacomment=relative2\n")
|
||||
with open(os.path.join(self.options.tmpdir, "node0", "bitcoin.conf"), "a", encoding='utf8') as f:
|
||||
with open(self.nodes[0].datadir_path / "bitcoin.conf", "a", encoding="utf8") as f:
|
||||
f.write("uacomment=main\nincludeconf=relative.conf\n")
|
||||
self.restart_node(0)
|
||||
|
||||
def run_test(self):
|
||||
self.log.info("-includeconf works from config file. subversion should end with 'main; relative)/'")
|
||||
|
||||
subversion = self.nodes[0].getnetworkinfo()["subversion"]
|
||||
|
@ -52,7 +50,7 @@ class IncludeConfTest(BitcoinTestFramework):
|
|||
)
|
||||
|
||||
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:
|
||||
with open(self.nodes[0].datadir_path / "relative.conf", "a", encoding="utf8") as f:
|
||||
f.write("includeconf=relative2.conf\n")
|
||||
self.start_node(0)
|
||||
|
||||
|
@ -63,20 +61,20 @@ class IncludeConfTest(BitcoinTestFramework):
|
|||
self.log.info("-includeconf cannot contain invalid arg")
|
||||
|
||||
# Commented out as long as we ignore invalid arguments in configuration files
|
||||
#with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
||||
#with open(self.nodes[0].datadir_path / "relative.conf", "w", encoding="utf8") as f:
|
||||
# f.write("foo=bar\n")
|
||||
#self.nodes[0].assert_start_raises_init_error(expected_msg="Error: Error reading configuration file: Invalid configuration value foo")
|
||||
|
||||
self.log.info("-includeconf cannot be invalid path")
|
||||
os.remove(os.path.join(self.options.tmpdir, "node0", "relative.conf"))
|
||||
(self.nodes[0].datadir_path / "relative.conf").unlink()
|
||||
self.nodes[0].assert_start_raises_init_error(expected_msg="Error: Error reading configuration file: Failed to include configuration file relative.conf")
|
||||
|
||||
self.log.info("multiple -includeconf args can be used from the base config file. subversion should end with 'main; relative; relative2)/'")
|
||||
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
||||
with open(self.nodes[0].datadir_path / "relative.conf", "w", encoding="utf8") as f:
|
||||
# Restore initial file contents
|
||||
f.write("uacomment=relative\n")
|
||||
|
||||
with open(os.path.join(self.options.tmpdir, "node0", "bitcoin.conf"), "a", encoding='utf8') as f:
|
||||
with open(self.nodes[0].datadir_path / "bitcoin.conf", "a", encoding="utf8") as f:
|
||||
f.write("includeconf=relative2.conf\n")
|
||||
|
||||
self.start_node(0)
|
||||
|
|
|
@ -37,7 +37,7 @@ class LoadblockTest(BitcoinTestFramework):
|
|||
cfg_file = os.path.join(data_dir, "linearize.cfg")
|
||||
bootstrap_file = os.path.join(self.options.tmpdir, "bootstrap.dat")
|
||||
genesis_block = self.nodes[0].getblockhash(0)
|
||||
blocks_dir = os.path.join(data_dir, self.chain, "blocks")
|
||||
blocks_dir = self.nodes[0].chain_path / "blocks"
|
||||
hash_list = tempfile.NamedTemporaryFile(dir=data_dir,
|
||||
mode='w',
|
||||
delete=False,
|
||||
|
|
|
@ -31,11 +31,11 @@ class PosixFsPermissionsTest(BitcoinTestFramework):
|
|||
|
||||
def run_test(self):
|
||||
self.stop_node(0)
|
||||
datadir = os.path.join(self.nodes[0].datadir, self.chain)
|
||||
datadir = self.nodes[0].chain_path
|
||||
self.check_directory_permissions(datadir)
|
||||
walletsdir = os.path.join(datadir, "wallets")
|
||||
walletsdir = self.nodes[0].wallets_path
|
||||
self.check_directory_permissions(walletsdir)
|
||||
debuglog = os.path.join(datadir, "debug.log")
|
||||
debuglog = self.nodes[0].debug_log_path
|
||||
self.check_file_permissions(debuglog)
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
- Verify that out-of-order blocks are correctly processed, see LoadExternalBlockFile()
|
||||
"""
|
||||
|
||||
import os
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.p2p import MAGIC_BYTES
|
||||
from test_framework.util import assert_equal
|
||||
|
@ -39,7 +38,7 @@ class ReindexTest(BitcoinTestFramework):
|
|||
# In this test environment, blocks will always be in order (since
|
||||
# we're generating them rather than getting them from peers), so to
|
||||
# test out-of-order handling, swap blocks 1 and 2 on disk.
|
||||
blk0 = os.path.join(self.nodes[0].datadir, self.nodes[0].chain, 'blocks', 'blk00000.dat')
|
||||
blk0 = self.nodes[0].chain_path / "blocks" / "blk00000.dat"
|
||||
with open(blk0, 'r+b') as bf:
|
||||
# Read at least the first few blocks (including genesis)
|
||||
b = bf.read(2000)
|
||||
|
|
|
@ -20,10 +20,10 @@ class FeatureRemovePrunedFilesOnStartupTest(BitcoinTestFramework):
|
|||
self.sync_blocks()
|
||||
|
||||
def run_test(self):
|
||||
blk0 = os.path.join(self.nodes[0].datadir, self.nodes[0].chain, 'blocks', 'blk00000.dat')
|
||||
rev0 = os.path.join(self.nodes[0].datadir, self.nodes[0].chain, 'blocks', 'rev00000.dat')
|
||||
blk1 = os.path.join(self.nodes[0].datadir, self.nodes[0].chain, 'blocks', 'blk00001.dat')
|
||||
rev1 = os.path.join(self.nodes[0].datadir, self.nodes[0].chain, 'blocks', 'rev00001.dat')
|
||||
blk0 = self.nodes[0].chain_path / "blocks" / "blk00000.dat"
|
||||
rev0 = self.nodes[0].chain_path / "blocks" / "rev00000.dat"
|
||||
blk1 = self.nodes[0].chain_path / "blocks" / "blk00001.dat"
|
||||
rev1 = self.nodes[0].chain_path / "blocks" / "rev00001.dat"
|
||||
self.mine_batches(800)
|
||||
fo1 = os.open(blk0, os.O_RDONLY)
|
||||
fo2 = os.open(rev1, os.O_RDONLY)
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Test -startupnotify."""
|
||||
|
||||
import os
|
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
assert_equal,
|
||||
|
@ -21,12 +18,12 @@ class StartupNotifyTest(BitcoinTestFramework):
|
|||
self.disable_syscall_sandbox = True
|
||||
|
||||
def run_test(self):
|
||||
tmpdir_file = os.path.join(self.options.tmpdir, NODE_DIR, FILE_NAME)
|
||||
assert not os.path.exists(tmpdir_file)
|
||||
tmpdir_file = self.nodes[0].datadir_path / FILE_NAME
|
||||
assert not tmpdir_file.exists()
|
||||
|
||||
self.log.info("Test -startupnotify command is run when node starts")
|
||||
self.restart_node(0, extra_args=[f"-startupnotify=echo '{FILE_NAME}' >> {NODE_DIR}/{FILE_NAME}"])
|
||||
self.wait_until(lambda: os.path.exists(tmpdir_file))
|
||||
self.wait_until(lambda: tmpdir_file.exists())
|
||||
|
||||
self.log.info("Test -startupnotify is executed once")
|
||||
|
||||
|
|
|
@ -50,10 +50,10 @@ class TxindexCompatibilityTest(BitcoinTestFramework):
|
|||
self.nodes[0].getrawtransaction(txid=spend_utxo["txid"]) # Requires -txindex
|
||||
|
||||
self.stop_nodes()
|
||||
legacy_chain_dir = os.path.join(self.nodes[0].datadir, self.chain)
|
||||
legacy_chain_dir = self.nodes[0].chain_path
|
||||
|
||||
self.log.info("Migrate legacy txindex")
|
||||
migrate_chain_dir = os.path.join(self.nodes[2].datadir, self.chain)
|
||||
migrate_chain_dir = self.nodes[2].chain_path
|
||||
shutil.rmtree(migrate_chain_dir)
|
||||
shutil.copytree(legacy_chain_dir, migrate_chain_dir)
|
||||
with self.nodes[2].assert_debug_log([
|
||||
|
@ -64,7 +64,7 @@ class TxindexCompatibilityTest(BitcoinTestFramework):
|
|||
self.nodes[2].getrawtransaction(txid=spend_utxo["txid"]) # Requires -txindex
|
||||
|
||||
self.log.info("Drop legacy txindex")
|
||||
drop_index_chain_dir = os.path.join(self.nodes[1].datadir, self.chain)
|
||||
drop_index_chain_dir = self.nodes[1].chain_path
|
||||
shutil.rmtree(drop_index_chain_dir)
|
||||
shutil.copytree(legacy_chain_dir, drop_index_chain_dir)
|
||||
self.nodes[1].assert_start_raises_init_error(
|
||||
|
|
|
@ -58,7 +58,7 @@ class MessageCaptureTest(BitcoinTestFramework):
|
|||
self.setup_clean_chain = True
|
||||
|
||||
def run_test(self):
|
||||
capturedir = os.path.join(self.nodes[0].datadir, "regtest/message_capture")
|
||||
capturedir = self.nodes[0].chain_path / "message_capture"
|
||||
# Connect a node so that the handshake occurs
|
||||
self.nodes[0].add_p2p_connection(P2PDataStore())
|
||||
self.nodes[0].disconnect_p2ps()
|
||||
|
|
|
@ -49,7 +49,6 @@ from test_framework.util import (
|
|||
assert_raises_rpc_error,
|
||||
assert_is_hex_string,
|
||||
assert_is_hash_string,
|
||||
get_datadir_path,
|
||||
)
|
||||
from test_framework.wallet import MiniWallet
|
||||
|
||||
|
@ -572,16 +571,15 @@ class BlockchainTest(BitcoinTestFramework):
|
|||
self.log.info("Test that getblock with verbosity 3 includes prevout")
|
||||
assert_vin_contains_prevout(3)
|
||||
|
||||
self.log.info("Test that getblock with verbosity 2 and 3 still works with pruned Undo data")
|
||||
datadir = get_datadir_path(self.options.tmpdir, 0)
|
||||
|
||||
self.log.info("Test getblock with invalid verbosity type returns proper error message")
|
||||
assert_raises_rpc_error(-3, "JSON value of type string is not of expected type number", node.getblock, blockhash, "2")
|
||||
|
||||
self.log.info("Test that getblock with verbosity 2 and 3 still works with pruned Undo data")
|
||||
|
||||
def move_block_file(old, new):
|
||||
old_path = os.path.join(datadir, self.chain, 'blocks', old)
|
||||
new_path = os.path.join(datadir, self.chain, 'blocks', new)
|
||||
os.rename(old_path, new_path)
|
||||
old_path = self.nodes[0].chain_path / "blocks" / old
|
||||
new_path = self.nodes[0].chain_path / "blocks" / new
|
||||
old_path.rename(new_path)
|
||||
|
||||
# Move instead of deleting so we can restore chain state afterwards
|
||||
move_block_file('rev00000.dat', 'rev_wrong')
|
||||
|
|
|
@ -158,7 +158,7 @@ class RpcCreateMultiSigTest(BitcoinTestFramework):
|
|||
try:
|
||||
node1.loadwallet('wmulti')
|
||||
except JSONRPCException as e:
|
||||
path = os.path.join(self.options.tmpdir, "node1", "regtest", "wallets", "wmulti")
|
||||
path = self.nodes[1].wallets_path / "wmulti"
|
||||
if e.error['code'] == -18 and "Wallet file verification failed. Failed to load database path '{}'. Path does not exist.".format(path) in e.error['message']:
|
||||
node1.createwallet(wallet_name='wmulti', disable_private_keys=True)
|
||||
else:
|
||||
|
|
|
@ -7,11 +7,9 @@
|
|||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
assert_equal,
|
||||
get_datadir_path,
|
||||
str_to_b64str,
|
||||
)
|
||||
|
||||
import os
|
||||
import http.client
|
||||
import urllib.parse
|
||||
import subprocess
|
||||
|
@ -38,8 +36,7 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||
self.num_nodes = 2
|
||||
self.supports_cli = False
|
||||
|
||||
def setup_chain(self):
|
||||
super().setup_chain()
|
||||
def conf_setup(self):
|
||||
#Append rpcauth to bitcoin.conf before initialization
|
||||
self.rtpassword = "cA773lm788buwYe4g4WT+05pKyNruVKjQ25x3n0DQcM="
|
||||
rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144"
|
||||
|
@ -64,13 +61,15 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||
rpcauth3 = lines[1]
|
||||
self.password = lines[3]
|
||||
|
||||
with open(os.path.join(get_datadir_path(self.options.tmpdir, 0), "bitcoin.conf"), 'a', encoding='utf8') as f:
|
||||
with open(self.nodes[0].datadir_path / "bitcoin.conf", "a", encoding="utf8") as f:
|
||||
f.write(rpcauth + "\n")
|
||||
f.write(rpcauth2 + "\n")
|
||||
f.write(rpcauth3 + "\n")
|
||||
with open(os.path.join(get_datadir_path(self.options.tmpdir, 1), "bitcoin.conf"), 'a', encoding='utf8') as f:
|
||||
with open(self.nodes[1].datadir_path / "bitcoin.conf", "a", encoding="utf8") as f:
|
||||
f.write("rpcuser={}\n".format(self.rpcuser))
|
||||
f.write("rpcpassword={}\n".format(self.rpcpassword))
|
||||
self.restart_node(0)
|
||||
self.restart_node(1)
|
||||
|
||||
def test_auth(self, node, user, password):
|
||||
self.log.info('Correct...')
|
||||
|
@ -86,6 +85,7 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||
assert_equal(401, call_with_auth(node, user + 'wrong', password + 'wrong').status)
|
||||
|
||||
def run_test(self):
|
||||
self.conf_setup()
|
||||
self.log.info('Check correctness of the rpcauth config option')
|
||||
url = urllib.parse.urlparse(self.nodes[0].url)
|
||||
|
||||
|
@ -112,8 +112,7 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
|||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error, extra_args=['-rpcauth=foo$bar$baz'])
|
||||
|
||||
self.log.info('Check that failure to write cookie file will abort the node gracefully')
|
||||
cookie_file = os.path.join(get_datadir_path(self.options.tmpdir, 0), self.chain, '.cookie.tmp')
|
||||
os.mkdir(cookie_file)
|
||||
(self.nodes[0].chain_path / ".cookie.tmp").mkdir()
|
||||
self.nodes[0].assert_start_raises_init_error(expected_msg=init_error)
|
||||
|
||||
|
||||
|
|
|
@ -6,11 +6,9 @@
|
|||
A test for RPC users with restricted permissions
|
||||
"""
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
import os
|
||||
from test_framework.util import (
|
||||
get_datadir_path,
|
||||
assert_equal,
|
||||
str_to_b64str
|
||||
str_to_b64str,
|
||||
)
|
||||
import http.client
|
||||
import urllib.parse
|
||||
|
@ -30,8 +28,7 @@ class RPCWhitelistTest(BitcoinTestFramework):
|
|||
def set_test_params(self):
|
||||
self.num_nodes = 1
|
||||
|
||||
def setup_chain(self):
|
||||
super().setup_chain()
|
||||
def run_test(self):
|
||||
# 0 => Username
|
||||
# 1 => Password (Hashed)
|
||||
# 2 => Permissions
|
||||
|
@ -55,7 +52,7 @@ class RPCWhitelistTest(BitcoinTestFramework):
|
|||
]
|
||||
# These commands shouldn't be allowed for any user to test failures
|
||||
self.never_allowed = ["getnetworkinfo"]
|
||||
with open(os.path.join(get_datadir_path(self.options.tmpdir, 0), "bitcoin.conf"), 'a', encoding='utf8') as f:
|
||||
with open(self.nodes[0].datadir_path / "bitcoin.conf", "a", encoding="utf8") as f:
|
||||
f.write("\nrpcwhitelistdefault=0\n")
|
||||
for user in self.users:
|
||||
f.write("rpcauth=" + user[0] + ":" + user[1] + "\n")
|
||||
|
@ -64,9 +61,8 @@ class RPCWhitelistTest(BitcoinTestFramework):
|
|||
for strangedude in self.strange_users:
|
||||
f.write("rpcauth=" + strangedude[0] + ":" + strangedude[1] + "\n")
|
||||
f.write("rpcwhitelist=" + strangedude[0] + strangedude[2] + "\n")
|
||||
self.restart_node(0)
|
||||
|
||||
|
||||
def run_test(self):
|
||||
for user in self.users:
|
||||
permissions = user[2].replace(" ", "").split(",")
|
||||
# Pop all empty items
|
||||
|
|
|
@ -173,12 +173,12 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
if file_format is not None and file_format != dump_data["format"]:
|
||||
load_output += "Warning: Dumpfile wallet format \"{}\" does not match command line specified format \"{}\".\n".format(dump_data["format"], file_format)
|
||||
self.assert_tool_output(load_output, *args)
|
||||
assert os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", wallet_name))
|
||||
assert (self.nodes[0].wallets_path / wallet_name).is_dir()
|
||||
|
||||
self.assert_tool_output("The dumpfile may contain private keys. To ensure the safety of your Bitcoin, do not share the dumpfile.\n", '-wallet={}'.format(wallet_name), '-dumpfile={}'.format(rt_dumppath), 'dump')
|
||||
|
||||
rt_dump_data = self.read_dump(rt_dumppath)
|
||||
wallet_dat = os.path.join(self.nodes[0].datadir, "regtest/wallets/", wallet_name, "wallet.dat")
|
||||
wallet_dat = self.nodes[0].wallets_path / wallet_name / "wallet.dat"
|
||||
if rt_dump_data["format"] == "bdb":
|
||||
self.assert_is_bdb(wallet_dat)
|
||||
else:
|
||||
|
@ -193,7 +193,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
self.assert_raises_tool_error('Error parsing command line arguments: Invalid parameter -foo', '-foo')
|
||||
self.assert_raises_tool_error('No method provided. Run `bitcoin-wallet -help` for valid methods.')
|
||||
self.assert_raises_tool_error('Wallet name must be provided when creating a new wallet.', 'create')
|
||||
locked_dir = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets")
|
||||
locked_dir = self.nodes[0].wallets_path
|
||||
error = 'Error initializing wallet database environment "{}"!'.format(locked_dir)
|
||||
if self.options.descriptors:
|
||||
error = f"SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another instance of {self.config['environment']['PACKAGE_NAME']}?"
|
||||
|
@ -202,7 +202,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
'-wallet=' + self.default_wallet_name,
|
||||
'info',
|
||||
)
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "nonexistent.dat")
|
||||
path = self.nodes[0].wallets_path / "nonexistent.dat"
|
||||
self.assert_raises_tool_error("Failed to load database path '{}'. Path does not exist.".format(path), '-wallet=nonexistent.dat', 'info')
|
||||
|
||||
def test_tool_wallet_info(self):
|
||||
|
@ -347,7 +347,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
non_exist_dump = os.path.join(self.nodes[0].datadir, "wallet.nodump")
|
||||
self.assert_raises_tool_error('Unknown wallet file format "notaformat" provided. Please provide one of "bdb" or "sqlite".', '-wallet=todump', '-format=notaformat', '-dumpfile={}'.format(wallet_dump), 'createfromdump')
|
||||
self.assert_raises_tool_error('Dump file {} does not exist.'.format(non_exist_dump), '-wallet=todump', '-dumpfile={}'.format(non_exist_dump), 'createfromdump')
|
||||
wallet_path = os.path.join(self.nodes[0].datadir, 'regtest', 'wallets', 'todump2')
|
||||
wallet_path = self.nodes[0].wallets_path / "todump2"
|
||||
self.assert_raises_tool_error('Failed to create database path \'{}\'. Database already exists.'.format(wallet_path), '-wallet=todump2', '-dumpfile={}'.format(wallet_dump), 'createfromdump')
|
||||
self.assert_raises_tool_error("The -descriptors option can only be used with the 'create' command.", '-descriptors', '-wallet=todump2', '-dumpfile={}'.format(wallet_dump), 'createfromdump')
|
||||
|
||||
|
@ -363,18 +363,18 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
dump_data["BITCOIN_CORE_WALLET_DUMP"] = "0"
|
||||
self.write_dump(dump_data, bad_ver_wallet_dump)
|
||||
self.assert_raises_tool_error('Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version 0', '-wallet=badload', '-dumpfile={}'.format(bad_ver_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
bad_ver_wallet_dump = os.path.join(self.nodes[0].datadir, "wallet-bad_ver2.dump")
|
||||
dump_data["BITCOIN_CORE_WALLET_DUMP"] = "2"
|
||||
self.write_dump(dump_data, bad_ver_wallet_dump)
|
||||
self.assert_raises_tool_error('Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version 2', '-wallet=badload', '-dumpfile={}'.format(bad_ver_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
bad_magic_wallet_dump = os.path.join(self.nodes[0].datadir, "wallet-bad_magic.dump")
|
||||
del dump_data["BITCOIN_CORE_WALLET_DUMP"]
|
||||
dump_data["not_the_right_magic"] = "1"
|
||||
self.write_dump(dump_data, bad_magic_wallet_dump, "not_the_right_magic")
|
||||
self.assert_raises_tool_error('Error: Dumpfile identifier record is incorrect. Got "not_the_right_magic", expected "BITCOIN_CORE_WALLET_DUMP".', '-wallet=badload', '-dumpfile={}'.format(bad_magic_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
|
||||
self.log.info('Checking createfromdump handling of checksums')
|
||||
bad_sum_wallet_dump = os.path.join(self.nodes[0].datadir, "wallet-bad_sum1.dump")
|
||||
|
@ -383,21 +383,21 @@ class ToolWalletTest(BitcoinTestFramework):
|
|||
dump_data["checksum"] = "1" * 64
|
||||
self.write_dump(dump_data, bad_sum_wallet_dump)
|
||||
self.assert_raises_tool_error('Error: Dumpfile checksum does not match. Computed {}, expected {}'.format(checksum, "1" * 64), '-wallet=bad', '-dumpfile={}'.format(bad_sum_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
bad_sum_wallet_dump = os.path.join(self.nodes[0].datadir, "wallet-bad_sum2.dump")
|
||||
del dump_data["checksum"]
|
||||
self.write_dump(dump_data, bad_sum_wallet_dump, skip_checksum=True)
|
||||
self.assert_raises_tool_error('Error: Missing checksum', '-wallet=badload', '-dumpfile={}'.format(bad_sum_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
bad_sum_wallet_dump = os.path.join(self.nodes[0].datadir, "wallet-bad_sum3.dump")
|
||||
dump_data["checksum"] = "2" * 10
|
||||
self.write_dump(dump_data, bad_sum_wallet_dump)
|
||||
self.assert_raises_tool_error('Error: Checksum is not the correct size', '-wallet=badload', '-dumpfile={}'.format(bad_sum_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
dump_data["checksum"] = "3" * 66
|
||||
self.write_dump(dump_data, bad_sum_wallet_dump)
|
||||
self.assert_raises_tool_error('Error: Checksum is not the correct size', '-wallet=badload', '-dumpfile={}'.format(bad_sum_wallet_dump), 'createfromdump')
|
||||
assert not os.path.isdir(os.path.join(self.nodes[0].datadir, "regtest/wallets", "badload"))
|
||||
assert not (self.nodes[0].wallets_path / "badload").is_dir()
|
||||
|
||||
|
||||
def run_test(self):
|
||||
|
|
|
@ -74,8 +74,8 @@ class BackwardsCompatibilityTest(BitcoinTestFramework):
|
|||
|
||||
def nodes_wallet_dir(self, node):
|
||||
if node.version < 170000:
|
||||
return os.path.join(node.datadir, "regtest")
|
||||
return os.path.join(node.datadir, "regtest/wallets")
|
||||
return node.chain_path
|
||||
return node.wallets_path
|
||||
|
||||
def run_test(self):
|
||||
node_miner = self.nodes[0]
|
||||
|
@ -157,10 +157,10 @@ class BackwardsCompatibilityTest(BitcoinTestFramework):
|
|||
assert info['keypoolsize'] == 0
|
||||
|
||||
# Unload wallets and copy to older nodes:
|
||||
node_master_wallets_dir = os.path.join(node_master.datadir, "regtest/wallets")
|
||||
node_v19_wallets_dir = os.path.join(node_v19.datadir, "regtest/wallets")
|
||||
node_v17_wallets_dir = os.path.join(node_v17.datadir, "regtest/wallets")
|
||||
node_v16_wallets_dir = os.path.join(node_v16.datadir, "regtest")
|
||||
node_master_wallets_dir = node_master.wallets_path
|
||||
node_v19_wallets_dir = node_v19.wallets_path
|
||||
node_v17_wallets_dir = node_v17.wallets_path
|
||||
node_v16_wallets_dir = node_v16.chain_path
|
||||
node_master.unloadwallet("w1")
|
||||
node_master.unloadwallet("w2")
|
||||
node_master.unloadwallet("w3")
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
"""
|
||||
Test Inactive HD Chains.
|
||||
"""
|
||||
import os
|
||||
import shutil
|
||||
import time
|
||||
|
||||
|
@ -130,8 +129,8 @@ class InactiveHDChainsTest(BitcoinTestFramework):
|
|||
|
||||
# Copy test wallet to node 0
|
||||
test_wallet.unloadwallet()
|
||||
test_wallet_dir = os.path.join(self.nodes[1].datadir, "regtest/wallets/keymeta_test")
|
||||
new_test_wallet_dir = os.path.join(self.nodes[0].datadir, "regtest/wallets/keymeta_test")
|
||||
test_wallet_dir = self.nodes[1].wallets_path / "keymeta_test"
|
||||
new_test_wallet_dir = self.nodes[0].wallets_path / "keymeta_test"
|
||||
shutil.copytree(test_wallet_dir, new_test_wallet_dir)
|
||||
self.nodes[0].loadwallet("keymeta_test")
|
||||
test_wallet = self.nodes[0].get_wallet_rpc("keymeta_test")
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Test Migrating a wallet from legacy to descriptor."""
|
||||
|
||||
import os
|
||||
import random
|
||||
import shutil
|
||||
from test_framework.descriptors import descsum_create
|
||||
|
@ -35,7 +34,7 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
self.skip_if_no_bdb()
|
||||
|
||||
def assert_is_sqlite(self, wallet_name):
|
||||
wallet_file_path = os.path.join(self.nodes[0].datadir, "regtest/wallets", wallet_name, self.wallet_data_filename)
|
||||
wallet_file_path = self.nodes[0].wallets_path / wallet_name / self.wallet_data_filename
|
||||
with open(wallet_file_path, 'rb') as f:
|
||||
file_magic = f.read(16)
|
||||
assert_equal(file_magic, b'SQLite format 3\x00')
|
||||
|
@ -458,11 +457,11 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
|
||||
wallet.unloadwallet()
|
||||
|
||||
wallet_file_path = os.path.join(self.nodes[0].datadir, "regtest", "wallets", "notloaded2")
|
||||
wallet_file_path = self.nodes[0].wallets_path / "notloaded2"
|
||||
self.nodes[0].migratewallet(wallet_file_path)
|
||||
|
||||
# Because we gave the name by full path, the loaded wallet's name is that path too.
|
||||
wallet = self.nodes[0].get_wallet_rpc(wallet_file_path)
|
||||
wallet = self.nodes[0].get_wallet_rpc(str(wallet_file_path))
|
||||
|
||||
info = wallet.getwalletinfo()
|
||||
assert_equal(info["descriptors"], True)
|
||||
|
@ -485,12 +484,12 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
wallet = self.create_legacy_wallet("plainfile")
|
||||
wallet.unloadwallet()
|
||||
|
||||
wallets_dir = os.path.join(self.nodes[0].datadir, "regtest", "wallets")
|
||||
wallet_path = os.path.join(wallets_dir, "plainfile")
|
||||
wallet_dat_path = os.path.join(wallet_path, "wallet.dat")
|
||||
shutil.copyfile(wallet_dat_path, os.path.join(wallets_dir, "plainfile.bak"))
|
||||
wallets_dir = self.nodes[0].wallets_path
|
||||
wallet_path = wallets_dir / "plainfile"
|
||||
wallet_dat_path = wallet_path / "wallet.dat"
|
||||
shutil.copyfile(wallet_dat_path, wallets_dir / "plainfile.bak")
|
||||
shutil.rmtree(wallet_path)
|
||||
shutil.move(os.path.join(wallets_dir, "plainfile.bak"), wallet_path)
|
||||
shutil.move(wallets_dir / "plainfile.bak", wallet_path)
|
||||
|
||||
self.nodes[0].loadwallet("plainfile")
|
||||
info = wallet.getwalletinfo()
|
||||
|
@ -502,8 +501,8 @@ class WalletMigrationTest(BitcoinTestFramework):
|
|||
assert_equal(info["descriptors"], True)
|
||||
assert_equal(info["format"], "sqlite")
|
||||
|
||||
assert os.path.isdir(wallet_path)
|
||||
assert os.path.isfile(wallet_dat_path)
|
||||
assert wallet_path.is_dir()
|
||||
assert wallet_dat_path.is_file()
|
||||
|
||||
def run_test(self):
|
||||
self.generate(self.nodes[0], 101)
|
||||
|
|
|
@ -138,11 +138,11 @@ class UpgradeWalletTest(BitcoinTestFramework):
|
|||
|
||||
self.log.info("Test upgradewallet RPC...")
|
||||
# Prepare for copying of the older wallet
|
||||
node_master_wallet_dir = os.path.join(node_master.datadir, "regtest/wallets", self.default_wallet_name)
|
||||
node_master_wallet = os.path.join(node_master_wallet_dir, self.default_wallet_name, self.wallet_data_filename)
|
||||
v16_3_wallet = os.path.join(v16_3_node.datadir, "regtest/wallets/wallet.dat")
|
||||
v15_2_wallet = os.path.join(v15_2_node.datadir, "regtest/wallet.dat")
|
||||
split_hd_wallet = os.path.join(v15_2_node.datadir, "regtest/splithd")
|
||||
node_master_wallet_dir = node_master.wallets_path / self.default_wallet_name
|
||||
node_master_wallet = node_master_wallet_dir / self.default_wallet_name / self.wallet_data_filename
|
||||
v16_3_wallet = v16_3_node.wallets_path / "wallet.dat"
|
||||
v15_2_wallet = v15_2_node.chain_path / "wallet.dat"
|
||||
split_hd_wallet = v15_2_node.chain_path / "splithd"
|
||||
self.stop_nodes()
|
||||
|
||||
# Make split hd wallet
|
||||
|
|
Loading…
Add table
Reference in a new issue