Skip to content

Commit 9ac064d

Browse files
author
MarcoFalke
committed
Merge bitcoin#23796: test: check that pruneblockchain RPC fails for future 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
2 parents 20aea49 + 140a49c commit 9ac064d

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

test/functional/feature_pruning.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def manual_test(self, node_number, use_timestamp):
277277
self.start_node(node_number)
278278
node = self.nodes[node_number]
279279
assert_equal(node.getblockcount(), 995)
280-
assert_raises_rpc_error(-1, "not in prune mode", node.pruneblockchain, 500)
280+
assert_raises_rpc_error(-1, "Cannot prune blocks because node is not in prune mode", node.pruneblockchain, 500)
281281

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

311+
# prune parameter in the future (block or timestamp) should raise an exception
312+
future_parameter = height(1001) + 5
313+
if use_timestamp:
314+
assert_raises_rpc_error(-8, "Could not find block with at least the specified timestamp", node.pruneblockchain, future_parameter)
315+
else:
316+
assert_raises_rpc_error(-8, "Blockchain is shorter than the attempted prune height", node.pruneblockchain, future_parameter)
317+
311318
# Pruned block should still know the number of transactions
312319
assert_equal(node.getblockheader(node.getblockhash(1))["nTx"], block1_details["nTx"])
313320

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

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

0 commit comments

Comments
 (0)