Skip to content

Commit

Permalink
test: add functional test for balance after snapshot completion
Browse files Browse the repository at this point in the history
Use a third node for this, which doesn't get restarted like the second
node.
This test would fail without the previous commit.
  • Loading branch information
mzumsande committed Dec 26, 2024
1 parent 226d03d commit bc43eca
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions test/functional/wallet_assumeutxo.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from test_framework.util import (
assert_equal,
assert_raises_rpc_error,
ensure_for,
)
from test_framework.wallet import MiniWallet

Expand All @@ -34,17 +35,18 @@ def add_options(self, parser):

def set_test_params(self):
"""Use the pregenerated, deterministic chain up to height 199."""
self.num_nodes = 2
self.num_nodes = 3
self.rpc_timeout = 120
self.extra_args = [
[],
[],
[],
]

def setup_network(self):
"""Start with the nodes disconnected so that one can generate a snapshot
including blocks the other hasn't yet seen."""
self.add_nodes(2)
self.add_nodes(3)
self.start_nodes(extra_args=self.extra_args)

def run_test(self):
Expand All @@ -57,6 +59,7 @@ def run_test(self):
"""
n0 = self.nodes[0]
n1 = self.nodes[1]
n2 = self.nodes[2]

self.mini_wallet = MiniWallet(n0)

Expand Down Expand Up @@ -88,6 +91,7 @@ def run_test(self):

# make n1 aware of the new header, but don't give it the block.
n1.submitheader(newblock)
n2.submitheader(newblock)

# Ensure everyone is seeing the same headers.
for n in self.nodes:
Expand Down Expand Up @@ -125,6 +129,7 @@ def run_test(self):

assert_equal(n0.getblockcount(), FINAL_HEIGHT)
assert_equal(n1.getblockcount(), START_HEIGHT)
assert_equal(n2.getblockcount(), START_HEIGHT)

assert_equal(n0.getblockchaininfo()["blocks"], FINAL_HEIGHT)

Expand Down Expand Up @@ -192,6 +197,13 @@ def run_test(self):
w = n1.get_wallet_rpc("w")
assert_equal(w.getbalance(), 34)

self.log.info("Check balance of a wallet that is active during snapshot completion")
n2.restorewallet("w", "backup_w.dat")
loaded = n2.loadtxoutset(dump_output['path'])
self.connect_nodes(0, 2)
self.wait_until(lambda: len(n2.getchainstates()['chainstates']) == 1)
ensure_for(duration=1, f=lambda: (n2.getbalance() == 34))


if __name__ == '__main__':
AssumeutxoTest(__file__).main()

0 comments on commit bc43eca

Please sign in to comment.