Skip to content

Commit

Permalink
test: add test for getchaintips behavior with invalid chains
Browse files Browse the repository at this point in the history
This test would fail to mark the chain tip as "invalid" instead
of "headers-only" without the previous commit marking the headers
as BLOCK_FAILED_CHILD.
  • Loading branch information
mzumsande committed Sep 17, 2024
1 parent ccd98ea commit 0bd53d9
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions test/functional/rpc_getchaintips.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
- verify that getchaintips now returns two chain tips.
"""

from test_framework.blocktools import (
create_block,
create_coinbase,
)
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal

Expand Down Expand Up @@ -58,5 +62,33 @@ def run_test(self):
tips[1]['status'] = 'active'
assert_equal(tips[1], shortTip)

self.log.info("Test getchaintips behavior with invalid blocks")
self.disconnect_nodes(0, 1)
n0 = self.nodes[0]
tip = int(n0.getbestblockhash(), 16)
start_height = self.nodes[0].getblockcount()
# Create invalid block (too high coinbase)
block_time = n0.getblock(n0.getbestblockhash())['time'] + 1
invalid_block = create_block(tip, create_coinbase(start_height+1, nValue=100), block_time)
invalid_block.solve()

block_time += 1
block2 = create_block(invalid_block.sha256, create_coinbase(2), block_time, version=4)
block2.solve()

self.log.info("Submit headers-only chain")
n0.submitheader(invalid_block.serialize().hex())
n0.submitheader(block2.serialize().hex())
tips = n0.getchaintips()
assert_equal(len(tips), 3)
assert_equal(tips[0]['status'], 'headers-only')

self.log.info("Submit invalid block that invalidates the headers-only chain")
n0.submitblock(invalid_block.serialize().hex())
tips = n0.getchaintips()
assert_equal(len(tips), 3)
assert_equal(tips[0]['status'], 'invalid')


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

0 comments on commit 0bd53d9

Please sign in to comment.