test: Add functional test for continuing a reindex

Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
This commit is contained in:
TheCharlatan 2024-05-23 14:11:39 +02:00
parent 201c1a9282
commit 1b1c6dcca0
No known key found for this signature in database
GPG key ID: 9B79B45691DB4173
2 changed files with 22 additions and 2 deletions

View file

@ -73,6 +73,25 @@ class ReindexTest(BitcoinTestFramework):
# All blocks should be accepted and processed.
assert_equal(self.nodes[0].getblockcount(), 12)
def continue_reindex_after_shutdown(self):
node = self.nodes[0]
self.generate(node, 1500)
# Restart node with reindex and stop reindex as soon as it starts reindexing
self.log.info("Restarting node while reindexing..")
node.stop_node()
with node.busy_wait_for_debug_log([b'initload thread start']):
node.start(['-blockfilterindex', '-reindex'])
node.wait_for_rpc_connection(wait_for_import=False)
node.stop_node()
# Start node without the reindex flag and verify it does not wipe the indexes data again
db_path = node.chain_path / 'indexes' / 'blockfilter' / 'basic' / 'db'
with node.assert_debug_log(expected_msgs=[f'Opening LevelDB in {db_path}'], unexpected_msgs=[f'Wiping LevelDB in {db_path}']):
node.start(['-blockfilterindex'])
node.wait_for_rpc_connection(wait_for_import=False)
node.stop_node()
def run_test(self):
self.reindex(False)
self.reindex(True)
@ -80,6 +99,7 @@ class ReindexTest(BitcoinTestFramework):
self.reindex(True)
self.out_of_order()
self.continue_reindex_after_shutdown()
if __name__ == '__main__':

View file

@ -241,7 +241,7 @@ class TestNode():
if self.start_perf:
self._start_perf()
def wait_for_rpc_connection(self):
def wait_for_rpc_connection(self, *, wait_for_import=True):
"""Sets up an RPC connection to the bitcoind process. Returns False if unable to connect."""
# Poll at a rate of four times per second
poll_per_s = 4
@ -263,7 +263,7 @@ class TestNode():
)
rpc.getblockcount()
# If the call to getblockcount() succeeds then the RPC connection is up
if self.version_is_at_least(190000):
if self.version_is_at_least(190000) and wait_for_import:
# getmempoolinfo.loaded is available since commit
# bb8ae2c (version 0.19.0)
self.wait_until(lambda: rpc.getmempoolinfo()['loaded'])