Merge #21297: test: feature_blockfilterindex_prune.py improvements

88c4b9b761 test: remove unneeded node from feature_blockfilterindex_prune.py (Jon Atack)
ace3f4cbdf test: improve assertions in feature_blockfilterindex_prune.py (Jon Atack)

Pull request description:

  - improves the assertions
  - removes an unneeded node, reducing from two to one, and some unneeded `extra_arg` code

ACKs for top commit:
  MarcoFalke:
    ACK 88c4b9b761
  brunoerg:
    Tested ACK 88c4b9b761

Tree-SHA512: 295700da3a5f583ee02ae2d184db93cce0e13aba69115d5db07f83e96a66b4b850adaff2c3725b6585799565b9ee654b1fee8a6245eaba8c21e1cb5ce524eb2b
This commit is contained in:
MarcoFalke committed 2021-02-27 13:11:58 +01:00
commit fb67caebe2
1 file changed
+30 -21
@@ -13,43 +13,52 @@ from test_framework.util import (
class FeatureBlockfilterindexPruneTest(BitcoinTestFramework): class FeatureBlockfilterindexPruneTest(BitcoinTestFramework):
def set_test_params(self): def set_test_params(self):
self.num_nodes = 2 self.num_nodes = 1
self.extra_args = [["-fastprune", "-prune=1"], ["-fastprune", "-prune=1", "-blockfilterindex=1"]] self.extra_args = [["-fastprune", "-prune=1", "-blockfilterindex=1"]]
def sync_index(self, height):
expected = {'basic block filter index': {'synced': True, 'best_block_height': height}}
self.wait_until(lambda: self.nodes[0].getindexinfo() == expected)
def run_test(self): def run_test(self):
self.log.info("check if we can access a blockfilter when pruning is enabled but no blocks are actually pruned") self.log.info("check if we can access a blockfilter when pruning is enabled but no blocks are actually pruned")
self.wait_until(lambda: self.nodes[1].getindexinfo() == {'basic block filter index': {'synced': True, 'best_block_height': 200}}) self.sync_index(height=200)
assert len(self.nodes[1].getblockfilter(self.nodes[1].getbestblockhash())['filter']) > 0 assert_greater_than(len(self.nodes[0].getblockfilter(self.nodes[0].getbestblockhash())['filter']), 0)
# Mine two batches of blocks to avoid hitting NODE_NETWORK_LIMITED_MIN_BLOCKS disconnection # Mine two batches of blocks to avoid hitting NODE_NETWORK_LIMITED_MIN_BLOCKS disconnection
self.nodes[1].generate(250) self.nodes[0].generate(250)
self.sync_all() self.sync_all()
self.nodes[1].generate(250) self.nodes[0].generate(250)
self.sync_all() self.sync_all()
self.wait_until(lambda: self.nodes[1].getindexinfo() == {'basic block filter index': {'synced': True, 'best_block_height': 700}}) self.sync_index(height=700)
self.log.info("prune some blocks") self.log.info("prune some blocks")
pruneheight = self.nodes[1].pruneblockchain(400) pruneheight = self.nodes[0].pruneblockchain(400)
assert_equal(pruneheight, 250) assert_equal(pruneheight, 250)
self.log.info("check if we can access the tips blockfilter when we have pruned some blocks") self.log.info("check if we can access the tips blockfilter when we have pruned some blocks")
assert len(self.nodes[1].getblockfilter(self.nodes[1].getbestblockhash())['filter']) > 0 assert_greater_than(len(self.nodes[0].getblockfilter(self.nodes[0].getbestblockhash())['filter']), 0)
self.log.info("check if we can access the blockfilter of a pruned block") self.log.info("check if we can access the blockfilter of a pruned block")
assert len(self.nodes[1].getblockfilter(self.nodes[1].getblockhash(2))['filter']) > 0 assert_greater_than(len(self.nodes[0].getblockfilter(self.nodes[0].getblockhash(2))['filter']), 0)
self.log.info("start node without blockfilterindex") self.log.info("start node without blockfilterindex")
self.stop_node(1) self.restart_node(0, extra_args=["-fastprune", "-prune=1"])
self.start_node(1, extra_args=self.extra_args[0])
self.log.info("make sure accessing the blockfilters throws an error") self.log.info("make sure accessing the blockfilters throws an error")
assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic", self.nodes[1].getblockfilter, self.nodes[1].getblockhash(2)) assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic", self.nodes[0].getblockfilter, self.nodes[0].getblockhash(2))
self.nodes[1].generate(1000) self.nodes[0].generate(1000)
self.log.info("prune below the blockfilterindexes best block while blockfilters are disabled") self.log.info("prune below the blockfilterindexes best block while blockfilters are disabled")
pruneheight_new = self.nodes[1].pruneblockchain(1000) pruneheight_new = self.nodes[0].pruneblockchain(1000)
assert_greater_than(pruneheight_new, pruneheight) assert_greater_than(pruneheight_new, pruneheight)
self.stop_node(1) self.stop_node(0)
self.log.info("make sure we get an init error when starting the node again with block filters") self.log.info("make sure we get an init error when starting the node again with block filters")
with self.nodes[1].assert_debug_log(["basic block filter index best block of the index goes beyond pruned data. Please disable the index or reindex (which will download the whole blockchain again)"]): with self.nodes[0].assert_debug_log(["basic block filter index best block of the index goes beyond pruned data. Please disable the index or reindex (which will download the whole blockchain again)"]):
self.nodes[1].assert_start_raises_init_error(extra_args=self.extra_args[1]) self.nodes[0].assert_start_raises_init_error(extra_args=["-fastprune", "-prune=1", "-blockfilterindex=1"])
self.log.info("make sure the node starts again with the -reindex arg") self.log.info("make sure the node starts again with the -reindex arg")
reindex_args = self.extra_args[1] self.start_node(0, extra_args = ["-fastprune", "-prune=1", "-blockfilterindex", "-reindex"])
reindex_args.append("-reindex")
self.start_node(1, extra_args=reindex_args)
if __name__ == '__main__': if __name__ == '__main__':