mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
Extend getchaintips RPC test.
Add the capability to simulate network splits to the RPC test framework and use it to do more extensive testing of 'getchaintips'.
This commit is contained in:
@@ -3,22 +3,52 @@
|
||||
# Distributed under the MIT/X11 software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
# Exercise the getchaintips API.
|
||||
|
||||
# Since the test framework does not generate orphan blocks, we can
|
||||
# unfortunately not check for them!
|
||||
# Exercise the getchaintips API. We introduce a network split, work
|
||||
# on chains of different lengths, and join the network together again.
|
||||
# This gives us two tips, verify that it works.
|
||||
|
||||
from test_framework import BitcoinTestFramework
|
||||
from util import assert_equal
|
||||
|
||||
class GetChainTipsTest (BitcoinTestFramework):
|
||||
|
||||
def run_test (self, nodes):
|
||||
res = nodes[0].getchaintips ()
|
||||
assert_equal (len (res), 1)
|
||||
res = res[0]
|
||||
assert_equal (res['branchlen'], 0)
|
||||
assert_equal (res['height'], 200)
|
||||
def run_test (self):
|
||||
BitcoinTestFramework.run_test (self)
|
||||
|
||||
tips = self.nodes[0].getchaintips ()
|
||||
assert_equal (len (tips), 1)
|
||||
assert_equal (tips[0]['branchlen'], 0)
|
||||
assert_equal (tips[0]['height'], 200)
|
||||
|
||||
# Split the network and build two chains of different lengths.
|
||||
self.split_network ()
|
||||
self.nodes[0].setgenerate (True, 10);
|
||||
self.nodes[2].setgenerate (True, 20);
|
||||
self.sync_all ()
|
||||
|
||||
tips = self.nodes[1].getchaintips ()
|
||||
assert_equal (len (tips), 1)
|
||||
shortTip = tips[0]
|
||||
assert_equal (shortTip['branchlen'], 0)
|
||||
assert_equal (shortTip['height'], 210)
|
||||
|
||||
tips = self.nodes[3].getchaintips ()
|
||||
assert_equal (len (tips), 1)
|
||||
longTip = tips[0]
|
||||
assert_equal (longTip['branchlen'], 0)
|
||||
assert_equal (longTip['height'], 220)
|
||||
|
||||
# Join the network halves and check that we now have two tips
|
||||
# (at least at the nodes that previously had the short chain).
|
||||
self.join_network ()
|
||||
|
||||
tips = self.nodes[0].getchaintips ()
|
||||
assert_equal (len (tips), 2)
|
||||
assert_equal (tips[0], longTip)
|
||||
|
||||
assert_equal (tips[1]['branchlen'], 10)
|
||||
tips[1]['branchlen'] = 0;
|
||||
assert_equal (tips[1], shortTip)
|
||||
|
||||
if __name__ == '__main__':
|
||||
GetChainTipsTest ().main ()
|
||||
|
||||
Reference in New Issue
Block a user