Skip to content

Commit aaf02b5

Browse files
committed
tests: Tests for migrating wallets by name, and providing passphrase
1 parent 7fd125b commit aaf02b5

File tree

1 file changed

+68
-1
lines changed

1 file changed

+68
-1
lines changed

test/functional/wallet_migration.py

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,10 +400,75 @@ def test_pk_coinbases(self):
400400
def test_encrypted(self):
401401
self.log.info("Test migration of an encrypted wallet")
402402
wallet = self.create_legacy_wallet("encrypted")
403+
default = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
403404

404405
wallet.encryptwallet("pass")
406+
addr = wallet.getnewaddress()
407+
txid = default.sendtoaddress(addr, 1)
408+
self.generate(self.nodes[0], 1)
409+
bals = wallet.getbalances()
410+
411+
assert_raises_rpc_error(-4, "Error: Wallet decryption failed, the wallet passphrase was not provided or was incorrect", wallet.migratewallet)
412+
assert_raises_rpc_error(-4, "Error: Wallet decryption failed, the wallet passphrase was not provided or was incorrect", wallet.migratewallet, None, "badpass")
413+
assert_raises_rpc_error(-4, "The passphrase contains a null character", wallet.migratewallet, None, "pass\0with\0null")
414+
415+
wallet.migratewallet(passphrase="pass")
416+
417+
info = wallet.getwalletinfo()
418+
assert_equal(info["descriptors"], True)
419+
assert_equal(info["format"], "sqlite")
420+
assert_equal(info["unlocked_until"], 0)
421+
wallet.gettransaction(txid)
422+
423+
assert_equal(bals, wallet.getbalances())
424+
425+
def test_unloaded(self):
426+
self.log.info("Test migration of a wallet that isn't loaded")
427+
wallet = self.create_legacy_wallet("notloaded")
428+
default = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
429+
430+
addr = wallet.getnewaddress()
431+
txid = default.sendtoaddress(addr, 1)
432+
self.generate(self.nodes[0], 1)
433+
bals = wallet.getbalances()
434+
435+
wallet.unloadwallet()
436+
437+
assert_raises_rpc_error(-8, "RPC endpoint wallet and wallet_name parameter specify different wallets", wallet.migratewallet, "someotherwallet")
438+
assert_raises_rpc_error(-8, "Either RPC endpoint wallet or wallet_name parameter must be provided", self.nodes[0].migratewallet)
439+
self.nodes[0].migratewallet("notloaded")
405440

406-
# TODO: Fix migratewallet so that we can actually migrate encrypted wallets
441+
info = wallet.getwalletinfo()
442+
assert_equal(info["descriptors"], True)
443+
assert_equal(info["format"], "sqlite")
444+
wallet.gettransaction(txid)
445+
446+
assert_equal(bals, wallet.getbalances())
447+
448+
def test_unloaded_by_path(self):
449+
self.log.info("Test migration of a wallet that isn't loaded, specified by path")
450+
wallet = self.create_legacy_wallet("notloaded2")
451+
default = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
452+
453+
addr = wallet.getnewaddress()
454+
txid = default.sendtoaddress(addr, 1)
455+
self.generate(self.nodes[0], 1)
456+
bals = wallet.getbalances()
457+
458+
wallet.unloadwallet()
459+
460+
wallet_file_path = os.path.join(self.nodes[0].datadir, "regtest", "wallets", "notloaded2")
461+
self.nodes[0].migratewallet(wallet_file_path)
462+
463+
# Because we gave the name by full path, the loaded wallet's name is that path too.
464+
wallet = self.nodes[0].get_wallet_rpc(wallet_file_path)
465+
466+
info = wallet.getwalletinfo()
467+
assert_equal(info["descriptors"], True)
468+
assert_equal(info["format"], "sqlite")
469+
wallet.gettransaction(txid)
470+
471+
assert_equal(bals, wallet.getbalances())
407472

408473
def run_test(self):
409474
self.generate(self.nodes[0], 101)
@@ -415,6 +480,8 @@ def run_test(self):
415480
self.test_no_privkeys()
416481
self.test_pk_coinbases()
417482
self.test_encrypted()
483+
self.test_unloaded()
484+
self.test_unloaded_by_path()
418485

419486
if __name__ == '__main__':
420487
WalletMigrationTest().main()

0 commit comments

Comments
 (0)