mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
Update wallet_multiwallet.py for descriptor and sqlite wallets
This commit is contained in:
parent
310b0fde04
commit
c4a29d0a90
3 changed files with 26 additions and 12 deletions
|
@ -103,7 +103,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
|||
self.supports_cli = True
|
||||
self.bind_to_localhost_only = True
|
||||
self.parse_args()
|
||||
self.default_wallet_name = ""
|
||||
self.default_wallet_name = "default_wallet" if self.options.descriptors else ""
|
||||
self.wallet_data_filename = "wallet.dat"
|
||||
# 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) *
|
||||
|
|
|
@ -141,6 +141,7 @@ BASE_SCRIPTS = [
|
|||
'mempool_reorg.py',
|
||||
'mempool_persist.py',
|
||||
'wallet_multiwallet.py',
|
||||
'wallet_multiwallet.py --descriptors',
|
||||
'wallet_multiwallet.py --usecli',
|
||||
'wallet_createwallet.py',
|
||||
'wallet_createwallet.py --usecli',
|
||||
|
|
|
@ -60,8 +60,10 @@ class MultiWalletTest(BitcoinTestFramework):
|
|||
wallet = lambda name: node.get_wallet_rpc(name)
|
||||
|
||||
def wallet_file(name):
|
||||
if name == self.default_wallet_name:
|
||||
return wallet_dir(self.default_wallet_name, self.wallet_data_filename)
|
||||
if os.path.isdir(wallet_dir(name)):
|
||||
return wallet_dir(name, self.wallet_data_filename)
|
||||
return wallet_dir(name, "wallet.dat")
|
||||
return wallet_dir(name)
|
||||
|
||||
assert_equal(self.nodes[0].listwalletdir(), { 'wallets': [{ 'name': self.default_wallet_name }] })
|
||||
|
@ -77,13 +79,18 @@ 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(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, ["-nowallet", "-wallet=" + self.default_wallet_name])
|
||||
self.start_node(0, ["-nowallet", "-wallet=empty", "-wallet=plain"])
|
||||
node.createwallet("created")
|
||||
self.stop_nodes()
|
||||
empty_wallet = os.path.join(self.options.tmpdir, 'empty.dat')
|
||||
os.rename(wallet_dir(self.default_wallet_name, self.wallet_data_filename), empty_wallet)
|
||||
os.rename(wallet_file("empty"), empty_wallet)
|
||||
shutil.rmtree(wallet_dir("empty"))
|
||||
empty_created_wallet = os.path.join(self.options.tmpdir, 'empty.created.dat')
|
||||
os.rename(wallet_dir("created", self.wallet_data_filename), empty_created_wallet)
|
||||
shutil.rmtree(wallet_dir("created"))
|
||||
os.rename(wallet_file("plain"), wallet_dir("w8"))
|
||||
shutil.rmtree(wallet_dir("plain"))
|
||||
|
||||
# restart node with a mix of wallet names:
|
||||
# w1, w2, w3 - to verify new wallets created when non-existing paths specified
|
||||
|
@ -151,7 +158,7 @@ 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])
|
||||
exp_stderr = r"Error: Error initializing wallet database environment \"\S+competing_walletdir\"!"
|
||||
exp_stderr = r"Error: Error initializing wallet database environment \"\S+competing_walletdir\S*\"!"
|
||||
self.nodes[1].assert_start_raises_init_error(['-walletdir=' + competing_wallet_dir], exp_stderr, match=ErrorMatch.PARTIAL_REGEX)
|
||||
|
||||
self.restart_node(0, extra_args)
|
||||
|
@ -246,12 +253,13 @@ 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", self.wallet_data_filename)
|
||||
path = os.path.join(self.options.tmpdir, "node0", "regtest", "wallets", "w1", "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_names[0])
|
||||
|
||||
# Fail to load duplicate wallets by different ways (directory and filepath)
|
||||
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)
|
||||
if not self.options.descriptors:
|
||||
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')
|
||||
|
||||
# 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')
|
||||
|
@ -334,9 +342,11 @@ class MultiWalletTest(BitcoinTestFramework):
|
|||
rpc = self.nodes[0].get_wallet_rpc(wallet_name)
|
||||
addr = rpc.getnewaddress()
|
||||
backup = os.path.join(self.options.tmpdir, 'backup.dat')
|
||||
if os.path.exists(backup):
|
||||
os.unlink(backup)
|
||||
rpc.backupwallet(backup)
|
||||
self.nodes[0].unloadwallet(wallet_name)
|
||||
shutil.copyfile(empty_wallet, wallet_file(wallet_name))
|
||||
shutil.copyfile(empty_created_wallet if wallet_name == self.default_wallet_name else empty_wallet, wallet_file(wallet_name))
|
||||
self.nodes[0].loadwallet(wallet_name)
|
||||
assert_equal(rpc.getaddressinfo(addr)['ismine'], False)
|
||||
self.nodes[0].unloadwallet(wallet_name)
|
||||
|
@ -348,7 +358,10 @@ class MultiWalletTest(BitcoinTestFramework):
|
|||
self.start_node(1)
|
||||
wallet = os.path.join(self.options.tmpdir, 'my_wallet')
|
||||
self.nodes[0].createwallet(wallet)
|
||||
assert_raises_rpc_error(-4, "Error initializing wallet database environment", self.nodes[1].loadwallet, wallet)
|
||||
if self.options.descriptors:
|
||||
assert_raises_rpc_error(-4, "Unable to obtain an exclusive lock", self.nodes[1].loadwallet, wallet)
|
||||
else:
|
||||
assert_raises_rpc_error(-4, "Error initializing wallet database environment", self.nodes[1].loadwallet, wallet)
|
||||
self.nodes[0].unloadwallet(wallet)
|
||||
self.nodes[1].loadwallet(wallet)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue