Skip to content

Commit

Permalink
Merge bitcoin#23796: test: check that pruneblockchain RPC fails for f…
Browse files Browse the repository at this point in the history
…uture block or timestamp

140a49c test: check that pruneblockchain RPC fails for future block or timestamp (Sebastian Falbesoner)

Pull request description:

  This PR adds missing test coverage for the `pruneblockchain` RPC for the case that a future block or timestamp is passed:
  https://github.com/bitcoin/bitcoin/blob/8c0bd871fcf6c5ff5851ccb18a7bc7554a0484b0/src/rpc/blockchain.cpp#L1101
  https://github.com/bitcoin/bitcoin/blob/8c0bd871fcf6c5ff5851ccb18a7bc7554a0484b0/src/rpc/blockchain.cpp#L1111
  Note that the test method `manual_test` gets called twice, once each with `use_timestamp` set to True/False, respectively. Depending on that, the helper function `height` either converts the passed block height to the timestamp of that block, or just returns it without modification.

  The other tests for failures in this RPC are also changed to be more detailled ("Cannot prune blocks because node is not in prune mode", "Negative block height"), as I don't think there is any value in just checking a sub-string. If there is ever an error with the same sub-string is introduced, it's not clear which error is exactly checked with the test, so it makes sense to be as specific as possible.

ACKs for top commit:
  brunoerg:
    tACK 140a49c

Tree-SHA512: bee3cee9f35c2a63a1839d7ec1f83e354d9d3c0c2ca32d300dca2de8b755d555f769ba2b80ac37d31df6ee7e2b8eaefb8134c4727a7144e47c0f5e34f2cc5822
  • Loading branch information
MarcoFalke committed Dec 20, 2021
2 parents 20aea49 + 140a49c commit 9ac064d
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions test/functional/feature_pruning.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def manual_test(self, node_number, use_timestamp):
self.start_node(node_number)
node = self.nodes[node_number]
assert_equal(node.getblockcount(), 995)
assert_raises_rpc_error(-1, "not in prune mode", node.pruneblockchain, 500)
assert_raises_rpc_error(-1, "Cannot prune blocks because node is not in prune mode", node.pruneblockchain, 500)

# now re-start in manual pruning mode
self.restart_node(node_number, extra_args=["-prune=1"])
Expand Down Expand Up @@ -308,11 +308,18 @@ def has_block(index):
self.generate(node, 6, sync_fun=self.no_op)
assert_equal(node.getblockchaininfo()["blocks"], 1001)

# prune parameter in the future (block or timestamp) should raise an exception
future_parameter = height(1001) + 5
if use_timestamp:
assert_raises_rpc_error(-8, "Could not find block with at least the specified timestamp", node.pruneblockchain, future_parameter)
else:
assert_raises_rpc_error(-8, "Blockchain is shorter than the attempted prune height", node.pruneblockchain, future_parameter)

# Pruned block should still know the number of transactions
assert_equal(node.getblockheader(node.getblockhash(1))["nTx"], block1_details["nTx"])

# negative heights should raise an exception
assert_raises_rpc_error(-8, "Negative", node.pruneblockchain, -10)
assert_raises_rpc_error(-8, "Negative block height", node.pruneblockchain, -10)

# height=100 too low to prune first block file so this is a no-op
prune(100)
Expand Down

0 comments on commit 9ac064d

Please sign in to comment.