dcb98466b4
Add the capability to simulate network splits to the RPC test framework and use it to do more extensive testing of 'getchaintips'.
54 lines
1.8 KiB
Python
Executable file
54 lines
1.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# Copyright (c) 2014 The Bitcoin Core developers
|
|
# 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. 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):
|
|
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 ()
|