mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
revert: revert bitcoin#20034 (Get rid of default wallet hacks)
This reverts commit 096ebad3cc
.
This commit is contained in:
parent
743e555174
commit
855c8c3e5a
@ -14,6 +14,7 @@ class ConfArgsTest(BitcoinTestFramework):
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 1
|
||||
self.supports_cli = False
|
||||
self.wallet_names = []
|
||||
|
||||
def test_config_file_parser(self):
|
||||
# Assume node is stopped
|
||||
|
@ -125,9 +125,9 @@ class EstimateFeeTest(BitcoinTestFramework):
|
||||
self.num_nodes = 3
|
||||
# mine non-standard txs (e.g. txs with "dust" outputs)
|
||||
self.extra_args = [
|
||||
["-acceptnonstdtxn=1", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1", "-wallet="],
|
||||
["-acceptnonstdtxn=1", "-blockmaxsize=17000", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1", "-wallet="],
|
||||
["-acceptnonstdtxn=1", "-blockmaxsize=8000", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1", "-wallet="]
|
||||
["-acceptnonstdtxn=1", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1"],
|
||||
["-acceptnonstdtxn=1", "-blockmaxsize=17000", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1"],
|
||||
["-acceptnonstdtxn=1", "-blockmaxsize=8000", "-maxorphantxsize=1000", "-whitelist=noban@127.0.0.1"]
|
||||
]
|
||||
|
||||
def skip_test_if_missing_module(self):
|
||||
|
@ -15,7 +15,7 @@ class FilelockTest(BitcoinTestFramework):
|
||||
|
||||
def setup_network(self):
|
||||
self.add_nodes(self.num_nodes, extra_args=None)
|
||||
self.nodes[0].start(['-wallet='])
|
||||
self.nodes[0].start()
|
||||
self.nodes[0].wait_for_rpc_connection()
|
||||
|
||||
def run_test(self):
|
||||
@ -27,10 +27,11 @@ class FilelockTest(BitcoinTestFramework):
|
||||
self.nodes[1].assert_start_raises_init_error(extra_args=['-datadir={}'.format(self.nodes[0].datadir), '-noserver'], expected_msg=expected_msg)
|
||||
|
||||
if self.is_wallet_compiled():
|
||||
self.nodes[0].createwallet(self.default_wallet_name)
|
||||
wallet_dir = os.path.join(datadir, 'wallets')
|
||||
self.log.info("Check that we can't start a second dashd instance using the same wallet")
|
||||
expected_msg = "Error: Error initializing wallet database environment"
|
||||
self.nodes[1].assert_start_raises_init_error(extra_args=['-walletdir={}'.format(wallet_dir), '-wallet=', '-noserver'], expected_msg=expected_msg, match=ErrorMatch.PARTIAL_REGEX)
|
||||
self.nodes[1].assert_start_raises_init_error(extra_args=['-walletdir={}'.format(wallet_dir), '-wallet=' + self.default_wallet_name, '-noserver'], expected_msg=expected_msg, match=ErrorMatch.PARTIAL_REGEX)
|
||||
|
||||
if __name__ == '__main__':
|
||||
FilelockTest().main()
|
||||
|
@ -43,8 +43,8 @@ class NotificationsTest(BitcoinTestFramework):
|
||||
"-blocknotify=echo > {}".format(os.path.join(self.blocknotify_dir, '%s'))],
|
||||
["-blockversion=211",
|
||||
"-rescan",
|
||||
"-wallet={}".format(self.wallet),
|
||||
"-walletnotify=echo > {}".format(os.path.join(self.walletnotify_dir, notify_outputname('%w', '%s')))]]
|
||||
self.wallet_names = [self.default_wallet_name, self.wallet]
|
||||
super().setup_network()
|
||||
|
||||
def run_test(self):
|
||||
|
@ -106,8 +106,7 @@ class PruneTest(BitcoinTestFramework):
|
||||
def setup_nodes(self):
|
||||
self.add_nodes(self.num_nodes, self.extra_args)
|
||||
self.start_nodes()
|
||||
for n in self.nodes:
|
||||
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase', rescan=False)
|
||||
self.import_deterministic_coinbase_privkeys()
|
||||
|
||||
def create_big_chain(self):
|
||||
# Start by creating some coinbases we can spend later
|
||||
|
@ -17,6 +17,7 @@ class SettingsTest(BitcoinTestFramework):
|
||||
def set_test_params(self):
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 1
|
||||
self.wallet_names = []
|
||||
|
||||
def run_test(self):
|
||||
node, = self.nodes
|
||||
|
@ -18,6 +18,10 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
||||
self.num_nodes = 1
|
||||
self.supports_cli = False
|
||||
|
||||
def setup_nodes(self):
|
||||
self.add_nodes(self.num_nodes)
|
||||
self.start_nodes()
|
||||
|
||||
def setup_chain(self):
|
||||
super().setup_chain()
|
||||
# Append rpcauth to dash.conf before initialization
|
||||
@ -36,7 +40,6 @@ class HTTPBasicsTest(BitcoinTestFramework):
|
||||
f.write(rpcauthoperator+"\n")
|
||||
|
||||
def run_test(self):
|
||||
|
||||
url = urllib.parse.urlparse(self.nodes[0].url)
|
||||
|
||||
def test_command(method, params, auth, expexted_status, should_not_match=False):
|
||||
|
@ -117,9 +117,17 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
||||
self.rpc_timeout = 60 # Wait for up to 60 seconds for the RPC server to respond
|
||||
self.supports_cli = True
|
||||
self.bind_to_localhost_only = True
|
||||
self.extra_args_from_options = []
|
||||
self.set_test_params()
|
||||
self.parse_args()
|
||||
self.default_wallet_name = ""
|
||||
self.wallet_data_filename = "wallet.dat"
|
||||
self.extra_args_from_options = []
|
||||
# Optional list of wallet names that can be set in set_test_params to
|
||||
# create and import keys to. If unset, default is len(nodes) *
|
||||
# [default_wallet_name]. If wallet names are None, wallet creation is
|
||||
# skipped. If list is truncated, wallet creation is skipped and keys
|
||||
# are not imported.
|
||||
self.wallet_names = None
|
||||
self.set_test_params()
|
||||
if self.options.timeout_factor == 0 :
|
||||
self.options.timeout_factor = 99999
|
||||
self.rpc_timeout = int(self.rpc_timeout * self.options.timeout_factor) # optionally, increase timeout by a factor
|
||||
@ -387,7 +395,8 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
||||
extra_args = self.extra_args
|
||||
self.add_nodes(self.num_nodes, extra_args)
|
||||
self.start_nodes()
|
||||
self.import_deterministic_coinbase_privkeys()
|
||||
if self.is_wallet_compiled():
|
||||
self.import_deterministic_coinbase_privkeys()
|
||||
if not self.setup_clean_chain:
|
||||
for n in self.nodes:
|
||||
assert_equal(n.getblockchaininfo()["blocks"], 199)
|
||||
@ -404,13 +413,11 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
||||
assert_equal(chain_info["initialblockdownload"], False)
|
||||
|
||||
def import_deterministic_coinbase_privkeys(self):
|
||||
for n in self.nodes:
|
||||
try:
|
||||
n.getwalletinfo()
|
||||
except JSONRPCException as e:
|
||||
assert str(e).startswith('Method not found')
|
||||
continue
|
||||
|
||||
wallet_names = [self.default_wallet_name] * len(self.nodes) if self.wallet_names is None else self.wallet_names
|
||||
assert len(wallet_names) <= len(self.nodes)
|
||||
for wallet_name, n in zip(wallet_names, self.nodes):
|
||||
if wallet_name is not None:
|
||||
n.createwallet(wallet_name=wallet_name, load_on_startup=True)
|
||||
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase')
|
||||
|
||||
def run_test(self):
|
||||
@ -933,6 +940,7 @@ class DashTestFramework(BitcoinTestFramework):
|
||||
idx = len(self.nodes)
|
||||
self.add_nodes(1, extra_args=[self.extra_args[idx]])
|
||||
self.start_node(idx)
|
||||
self.nodes[idx].createwallet(self.default_wallet_name)
|
||||
for i in range(0, idx):
|
||||
self.connect_nodes(i, idx)
|
||||
|
||||
@ -1092,7 +1100,6 @@ class DashTestFramework(BitcoinTestFramework):
|
||||
self.prepare_masternodes()
|
||||
self.prepare_datadirs()
|
||||
self.start_masternodes()
|
||||
self.import_deterministic_coinbase_privkeys()
|
||||
|
||||
# non-masternodes where disconnected from the control node during prepare_datadirs,
|
||||
# let's reconnect them back to make sure they receive updates
|
||||
|
@ -72,7 +72,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
||||
locked_dir = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets")
|
||||
self.assert_raises_tool_error(
|
||||
'Error initializing wallet database environment "{}"!'.format(locked_dir),
|
||||
'-wallet=wallet.dat',
|
||||
'-wallet=' + self.default_wallet_name,
|
||||
'info',
|
||||
)
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "nonexistent.dat")
|
||||
@ -118,7 +118,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
||||
Transactions: 0
|
||||
Address Book: 1
|
||||
''')
|
||||
self.assert_tool_output(out, '-wallet=wallet.dat', 'info')
|
||||
self.assert_tool_output(out, '-wallet=' + self.default_wallet_name, 'info')
|
||||
timestamp_after = self.wallet_timestamp()
|
||||
self.log.debug('Wallet file timestamp after calling info: {}'.format(timestamp_after))
|
||||
self.log_wallet_timestamp_comparison(timestamp_before, timestamp_after)
|
||||
@ -157,7 +157,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
||||
Transactions: 1
|
||||
Address Book: 1
|
||||
''')
|
||||
self.assert_tool_output(out, '-wallet=wallet.dat', 'info')
|
||||
self.assert_tool_output(out, '-wallet=' + self.default_wallet_name, 'info')
|
||||
shasum_after = self.wallet_shasum()
|
||||
timestamp_after = self.wallet_timestamp()
|
||||
self.log.debug('Wallet file timestamp after calling info: {}'.format(timestamp_after))
|
||||
@ -195,7 +195,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
||||
|
||||
def test_getwalletinfo_on_different_wallet(self):
|
||||
self.log.info('Starting node with arg -wallet=foo')
|
||||
self.start_node(0, ['-wallet=foo'])
|
||||
self.start_node(0, ['-nowallet', '-wallet=foo'])
|
||||
|
||||
self.log.info('Calling getwalletinfo on a different wallet ("foo"), testing output')
|
||||
shasum_before = self.wallet_shasum()
|
||||
@ -225,7 +225,7 @@ class ToolWalletTest(BitcoinTestFramework):
|
||||
self.assert_tool_output('', '-wallet=salvage', 'salvage')
|
||||
|
||||
def run_test(self):
|
||||
self.wallet_path = os.path.join(self.nodes[0].datadir, self.chain, 'wallets', 'wallet.dat')
|
||||
self.wallet_path = os.path.join(self.nodes[0].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename)
|
||||
self.test_invalid_tool_commands_and_args()
|
||||
# Warning: The following tests are order-dependent.
|
||||
self.test_tool_wallet_info()
|
||||
|
@ -45,10 +45,10 @@ class WalletBackupTest(BitcoinTestFramework):
|
||||
# nodes 1, 2,3 are spenders, let's give them a keypool=100
|
||||
# whitelist all peers to speed up tx relay / mempool sync
|
||||
self.extra_args = [
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100", "-wallet="],
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100", "-wallet="],
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100", "-wallet="],
|
||||
["-whitelist=noban@127.0.0.1", "-wallet="],
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100"],
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100"],
|
||||
["-whitelist=noban@127.0.0.1", "-keypool=100"],
|
||||
["-whitelist=noban@127.0.0.1"],
|
||||
]
|
||||
self.rpc_timeout = 120
|
||||
|
||||
@ -102,9 +102,9 @@ class WalletBackupTest(BitcoinTestFramework):
|
||||
self.stop_node(2)
|
||||
|
||||
def erase_three(self):
|
||||
os.remove(os.path.join(self.nodes[0].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
os.remove(os.path.join(self.nodes[1].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
os.remove(os.path.join(self.nodes[2].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
os.remove(os.path.join(self.nodes[0].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
os.remove(os.path.join(self.nodes[1].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
os.remove(os.path.join(self.nodes[2].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
|
||||
def run_test(self):
|
||||
self.log.info("Generating initial blockchain")
|
||||
@ -168,9 +168,9 @@ class WalletBackupTest(BitcoinTestFramework):
|
||||
shutil.rmtree(os.path.join(self.nodes[2].datadir, self.chain, 'llmq'))
|
||||
|
||||
# Restore wallets from backup
|
||||
shutil.copyfile(os.path.join(self.nodes[0].datadir, 'wallet.bak'), os.path.join(self.nodes[0].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
shutil.copyfile(os.path.join(self.nodes[1].datadir, 'wallet.bak'), os.path.join(self.nodes[1].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
shutil.copyfile(os.path.join(self.nodes[2].datadir, 'wallet.bak'), os.path.join(self.nodes[2].datadir, self.chain, 'wallets', 'wallet.dat'))
|
||||
shutil.copyfile(os.path.join(self.nodes[0].datadir, 'wallet.bak'), os.path.join(self.nodes[0].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
shutil.copyfile(os.path.join(self.nodes[1].datadir, 'wallet.bak'), os.path.join(self.nodes[1].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
shutil.copyfile(os.path.join(self.nodes[2].datadir, 'wallet.bak'), os.path.join(self.nodes[2].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename))
|
||||
|
||||
self.log.info("Re-starting nodes")
|
||||
self.start_three()
|
||||
@ -208,9 +208,9 @@ class WalletBackupTest(BitcoinTestFramework):
|
||||
|
||||
# Backup to source wallet file must fail
|
||||
sourcePaths = [
|
||||
os.path.join(self.nodes[0].datadir, self.chain, 'wallets', 'wallet.dat'),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, '.', 'wallets', 'wallet.dat'),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, 'wallets', ''),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, '.', 'wallets', self.default_wallet_name, self.wallet_data_filename),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, 'wallets', self.default_wallet_name),
|
||||
os.path.join(self.nodes[0].datadir, self.chain, 'wallets')]
|
||||
|
||||
for sourcePath in sourcePaths:
|
||||
|
@ -165,10 +165,10 @@ class WalletTest(BitcoinTestFramework):
|
||||
# dynamically loading the wallet.
|
||||
before = self.nodes[1].getunconfirmedbalance()
|
||||
dst = self.nodes[1].getnewaddress()
|
||||
self.nodes[1].unloadwallet('')
|
||||
self.nodes[1].unloadwallet(self.default_wallet_name)
|
||||
self.nodes[0].sendtoaddress(dst, 0.1)
|
||||
self.sync_all()
|
||||
self.nodes[1].loadwallet('')
|
||||
self.nodes[1].loadwallet(self.default_wallet_name)
|
||||
after = self.nodes[1].getunconfirmedbalance()
|
||||
assert_equal(before + Decimal('0.1'), after)
|
||||
|
||||
|
@ -16,6 +16,7 @@ class DisableWalletTest (BitcoinTestFramework):
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 1
|
||||
self.extra_args = [["-disablewallet"]]
|
||||
self.wallet_names = []
|
||||
|
||||
def run_test (self):
|
||||
# Make sure wallet is really disabled
|
||||
|
@ -81,7 +81,10 @@ class WalletHDTest(BitcoinTestFramework):
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "chainstate"))
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "evodb"))
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "llmq"))
|
||||
shutil.copyfile(os.path.join(self.nodes[1].datadir, "hd.bak"), os.path.join(self.nodes[1].datadir, self.chain, "wallets", "wallet.dat"))
|
||||
shutil.copyfile(
|
||||
os.path.join(self.nodes[1].datadir, "hd.bak"),
|
||||
os.path.join(self.nodes[1].datadir, self.chain, 'wallets', self.default_wallet_name, self.wallet_data_filename),
|
||||
)
|
||||
self.start_node(1)
|
||||
|
||||
# Assert that derivation is deterministic
|
||||
@ -106,7 +109,10 @@ class WalletHDTest(BitcoinTestFramework):
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "chainstate"))
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "evodb"))
|
||||
shutil.rmtree(os.path.join(self.nodes[1].datadir, self.chain, "llmq"))
|
||||
shutil.copyfile(os.path.join(self.nodes[1].datadir, "hd.bak"), os.path.join(self.nodes[1].datadir, self.chain, "wallets", "wallet.dat"))
|
||||
shutil.copyfile(
|
||||
os.path.join(self.nodes[1].datadir, "hd.bak"),
|
||||
os.path.join(self.nodes[1].datadir, self.chain, "wallets", self.default_wallet_name, self.wallet_data_filename),
|
||||
)
|
||||
self.start_node(1, extra_args=self.extra_args[1])
|
||||
self.connect_nodes(0, 1)
|
||||
self.sync_all()
|
||||
|
@ -125,7 +125,7 @@ class ImportRescanTest(BitcoinTestFramework):
|
||||
self.skip_if_no_wallet()
|
||||
|
||||
def setup_network(self):
|
||||
extra_args = [["-wallet="] for _ in range(self.num_nodes)]
|
||||
extra_args = [[] for _ in range(self.num_nodes)]
|
||||
for i, import_node in enumerate(IMPORT_NODES, 2):
|
||||
if import_node.prune:
|
||||
# txindex is enabled by default in Dash and needs to be disabled for import-rescan.py
|
||||
@ -134,9 +134,8 @@ class ImportRescanTest(BitcoinTestFramework):
|
||||
self.add_nodes(self.num_nodes, extra_args=extra_args)
|
||||
|
||||
# Import keys with pruning disabled
|
||||
self.start_nodes(extra_args=[["-wallet="]] * self.num_nodes)
|
||||
for n in self.nodes:
|
||||
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase')
|
||||
self.start_nodes(extra_args=[[]] * self.num_nodes)
|
||||
self.import_deterministic_coinbase_privkeys()
|
||||
self.stop_nodes()
|
||||
|
||||
self.start_nodes()
|
||||
|
@ -673,7 +673,7 @@ class ImportMultiTest(BitcoinTestFramework):
|
||||
|
||||
# Cannot import those pubkeys to keypool of wallet with privkeys
|
||||
self.log.info("Pubkeys cannot be added to the keypool of a wallet with private keys")
|
||||
wrpc = self.nodes[1].get_wallet_rpc("")
|
||||
wrpc = self.nodes[1].get_wallet_rpc(self.default_wallet_name)
|
||||
assert wrpc.getwalletinfo()['private_keys_enabled']
|
||||
result = wrpc.importmulti(
|
||||
[{
|
||||
|
@ -29,7 +29,7 @@ class KeypoolRestoreTest(BitcoinTestFramework):
|
||||
self.skip_if_no_wallet()
|
||||
|
||||
def run_test(self):
|
||||
wallet_path = os.path.join(self.nodes[1].datadir, self.chain, "wallets", "wallet.dat")
|
||||
wallet_path = os.path.join(self.nodes[1].datadir, self.chain, "wallets", self.default_wallet_name, self.wallet_data_filename)
|
||||
wallet_backup_path = os.path.join(self.nodes[1].datadir, "wallet.bak")
|
||||
self.nodes[0].generate(101)
|
||||
|
||||
|
@ -43,7 +43,6 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 2
|
||||
self.rpc_timeout = 120
|
||||
self.extra_args = [["-wallet="], ["-wallet="]]
|
||||
|
||||
def skip_test_if_missing_module(self):
|
||||
self.skip_if_no_wallet()
|
||||
@ -64,14 +63,14 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
|
||||
def wallet_file(name):
|
||||
if os.path.isdir(wallet_dir(name)):
|
||||
return wallet_dir(name, "wallet.dat")
|
||||
return wallet_dir(name, self.wallet_data_filename)
|
||||
return wallet_dir(name)
|
||||
|
||||
assert_equal(self.nodes[0].listwalletdir(), { 'wallets': [{ 'name': '' }] })
|
||||
assert_equal(self.nodes[0].listwalletdir(), { 'wallets': [{ 'name': self.default_wallet_name }] })
|
||||
|
||||
# check wallet.dat is created
|
||||
self.stop_nodes()
|
||||
assert_equal(os.path.isfile(wallet_dir('wallet.dat')), True)
|
||||
assert_equal(os.path.isfile(wallet_dir(self.default_wallet_name, self.wallet_data_filename)), True)
|
||||
|
||||
# create symlink to verify wallet directory path can be referenced
|
||||
# through symlink
|
||||
@ -81,13 +80,13 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
|
||||
# rename wallet.dat to make sure plain wallet file paths (as opposed to
|
||||
# directory paths) can be loaded
|
||||
os.rename(wallet_dir("wallet.dat"), wallet_dir("w8"))
|
||||
os.rename(wallet_dir(self.default_wallet_name, self.wallet_data_filename), wallet_dir("w8"))
|
||||
|
||||
# create another dummy wallet for use in testing backups later
|
||||
self.start_node(0, ["-wallet="])
|
||||
self.start_node(0, ["-nowallet", "-wallet=" + self.default_wallet_name])
|
||||
self.stop_nodes()
|
||||
empty_wallet = os.path.join(self.options.tmpdir, 'empty.dat')
|
||||
os.rename(wallet_dir("wallet.dat"), empty_wallet)
|
||||
os.rename(wallet_dir(self.default_wallet_name, self.wallet_data_filename), empty_wallet)
|
||||
|
||||
# restart node with a mix of wallet names:
|
||||
# w1, w2, w3 - to verify new wallets created when non-existing paths specified
|
||||
@ -97,12 +96,12 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
# w7_symlink - to verify symlinked wallet path is initialized correctly
|
||||
# w8 - to verify existing wallet file is loaded correctly
|
||||
# '' - to verify default wallet file is created correctly
|
||||
wallet_names = ['w1', 'w2', 'w3', 'w', 'sub/w5', os.path.join(self.options.tmpdir, 'extern/w6'), 'w7_symlink', 'w8', '']
|
||||
wallet_names = ['w1', 'w2', 'w3', 'w', 'sub/w5', os.path.join(self.options.tmpdir, 'extern/w6'), 'w7_symlink', 'w8', self.default_wallet_name]
|
||||
if os.name == 'nt':
|
||||
wallet_names.remove('w7_symlink')
|
||||
extra_args = ['-wallet={}'.format(n) for n in wallet_names]
|
||||
extra_args = ['-nowallet'] + ['-wallet={}'.format(n) for n in wallet_names]
|
||||
self.start_node(0, extra_args)
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), ['', os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8'])
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), [self.default_wallet_name, os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8'])
|
||||
|
||||
assert_equal(set(node.listwallets()), set(wallet_names))
|
||||
|
||||
@ -113,7 +112,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
|
||||
# should not initialize if wallet path can't be created
|
||||
exp_stderr = "boost::filesystem::create_directory:"
|
||||
self.nodes[0].assert_start_raises_init_error(['-wallet=wallet.dat/bad'], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
|
||||
self.nodes[0].assert_start_raises_init_error(['-wallet=w8/bad'], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
|
||||
|
||||
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())
|
||||
@ -146,14 +145,14 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
# if wallets/ doesn't exist, datadir should be the default wallet dir
|
||||
wallet_dir2 = data_dir('walletdir')
|
||||
os.rename(wallet_dir(), wallet_dir2)
|
||||
self.start_node(0, ['-wallet=w4', '-wallet=w5'])
|
||||
self.start_node(0, ['-nowallet', '-wallet=w4', '-wallet=w5'])
|
||||
assert_equal(set(node.listwallets()), {"w4", "w5"})
|
||||
w5 = wallet("w5")
|
||||
node.generatetoaddress(nblocks=1, address=w5.getnewaddress())
|
||||
|
||||
# now if wallets/ exists again, but the rootdir is specified as the walletdir, w4 and w5 should still be loaded
|
||||
os.rename(wallet_dir2, wallet_dir())
|
||||
self.restart_node(0, ['-wallet=w4', '-wallet=w5', '-walletdir=' + data_dir()])
|
||||
self.restart_node(0, ['-nowallet', '-wallet=w4', '-wallet=w5', '-walletdir=' + data_dir()])
|
||||
assert_equal(set(node.listwallets()), {"w4", "w5"})
|
||||
w5 = wallet("w5")
|
||||
w5_info = w5.getwalletinfo()
|
||||
@ -161,13 +160,13 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
|
||||
competing_wallet_dir = os.path.join(self.options.tmpdir, 'competing_walletdir')
|
||||
os.mkdir(competing_wallet_dir)
|
||||
self.restart_node(0, ['-walletdir=' + competing_wallet_dir, '-wallet='])
|
||||
self.restart_node(0, ['-walletdir=' + competing_wallet_dir])
|
||||
exp_stderr = r"Error: Error initializing wallet database environment \"\S+competing_walletdir\"!"
|
||||
self.nodes[1].assert_start_raises_init_error(['-walletdir=' + competing_wallet_dir], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
|
||||
|
||||
self.restart_node(0, extra_args)
|
||||
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), ['', os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8', 'w8_copy'])
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), [self.default_wallet_name, os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8', 'w8_copy'])
|
||||
|
||||
wallets = [wallet(w) for w in wallet_names]
|
||||
wallet_bad = wallet("bad")
|
||||
@ -257,12 +256,12 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(-18, "Wallet file verification failed. Failed to load database path '{}'. Path does not exist.".format(path), self.nodes[0].loadwallet, 'wallets')
|
||||
|
||||
# Fail to load duplicate wallets
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "w1", "wallet.dat")
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "w1", self.wallet_data_filename)
|
||||
assert_raises_rpc_error(-4, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, wallet_names[0])
|
||||
|
||||
# Fail to load duplicate wallets by different ways (directory and filepath)
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "wallet.dat")
|
||||
assert_raises_rpc_error(-4, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, 'wallet.dat')
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", self.wallet_data_filename)
|
||||
assert_raises_rpc_error(-4, "Wallet file verification failed. Refusing to load database. Data file '{}' is already loaded.".format(path), self.nodes[0].loadwallet, self.wallet_data_filename)
|
||||
|
||||
# Fail to load if one wallet is a copy of another
|
||||
assert_raises_rpc_error(-4, "BerkeleyDatabase: Can't open database w8_copy (duplicates fileid", self.nodes[0].loadwallet, 'w8_copy')
|
||||
@ -335,7 +334,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||
assert_equal(self.nodes[0].listwallets(), ['w1'])
|
||||
assert_equal(w1.getwalletinfo()['walletname'], 'w1')
|
||||
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), ['', os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8', 'w8_copy', 'w9'])
|
||||
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), [self.default_wallet_name, os.path.join('sub', 'w5'), 'w', 'w1', 'w2', 'w3', 'w7', 'w7_symlink', 'w8', 'w8_copy', 'w9'])
|
||||
|
||||
# Test backing up and restoring wallets
|
||||
self.log.info("Test wallet backup")
|
||||
|
@ -88,7 +88,7 @@ class ReorgsRestoreTest(BitcoinTestFramework):
|
||||
# Node0 wallet file is loaded on longest sync'ed node1
|
||||
self.stop_node(1)
|
||||
self.nodes[0].backupwallet(os.path.join(self.nodes[0].datadir, 'wallet.bak'))
|
||||
shutil.copyfile(os.path.join(self.nodes[0].datadir, 'wallet.bak'), os.path.join(self.nodes[1].datadir, self.chain, 'wallet.dat'))
|
||||
shutil.copyfile(os.path.join(self.nodes[0].datadir, 'wallet.bak'), os.path.join(self.nodes[1].datadir, self.chain, self.default_wallet_name, self.wallet_data_filename))
|
||||
self.start_node(1)
|
||||
tx_after_reorg = self.nodes[1].gettransaction(txid)
|
||||
# Check that normal confirmed tx is confirmed again but with different blockhash
|
||||
|
Loading…
Reference in New Issue
Block a user