aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2024-09-18 23:43:03 +0200
committerFabian Jahr <fjahr@protonmail.com>2024-09-20 17:20:15 +0200
commit037b101e808ccf9e717751619e04f6e87d614efd (patch)
tree371cc1c0d83ef7f66765f095ed77f7364148e425 /test
parent31c0df038909e40fe9618a4595254907ed1de907 (diff)
test: Add coverage for best block locator write in wallet_backup
Diffstat (limited to 'test')
-rwxr-xr-xtest/functional/wallet_backup.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/functional/wallet_backup.py b/test/functional/wallet_backup.py
index a639c34377..83267f77e1 100755
--- a/test/functional/wallet_backup.py
+++ b/test/functional/wallet_backup.py
@@ -140,6 +140,25 @@ class WalletBackupTest(BitcoinTestFramework):
assert_raises_rpc_error(-36, error_message, node.restorewallet, wallet_name, backup_file)
assert wallet_file.exists()
+ def test_pruned_wallet_backup(self):
+ self.log.info("Test loading backup on a pruned node when the backup was created close to the prune height of the restoring node")
+ node = self.nodes[3]
+ self.restart_node(3, ["-prune=1", "-fastprune=1"])
+ # Ensure the chain tip is at height 214, because this test assume it is.
+ assert_equal(node.getchaintips()[0]["height"], 214)
+ # We need a few more blocks so we can actually get above an realistic
+ # minimal prune height
+ self.generate(node, 50, sync_fun=self.no_op)
+ # Backup created at block height 264
+ node.backupwallet(node.datadir_path / 'wallet_pruned.bak')
+ # Generate more blocks so we can actually prune the older blocks
+ self.generate(node, 300, sync_fun=self.no_op)
+ # This gives us an actual prune height roughly in the range of 220 - 240
+ node.pruneblockchain(250)
+ # The backup should be updated with the latest height (locator) for
+ # the backup to load successfully this close to the prune height
+ node.restorewallet(f'pruned', node.datadir_path / 'wallet_pruned.bak')
+
def run_test(self):
self.log.info("Generating initial blockchain")
self.generate(self.nodes[0], 1)
@@ -242,6 +261,8 @@ class WalletBackupTest(BitcoinTestFramework):
for sourcePath in sourcePaths:
assert_raises_rpc_error(-4, "backup failed", self.nodes[0].backupwallet, sourcePath)
+ self.test_pruned_wallet_backup()
+
if __name__ == '__main__':
WalletBackupTest(__file__).main()