From dcb98466b4f8193fc28656d17b2317f21665fa3a Mon Sep 17 00:00:00 2001 From: Daniel Kraft Date: Mon, 20 Oct 2014 14:14:04 +0200 Subject: 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'. --- qa/rpc-tests/getchaintips.py | 50 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'qa/rpc-tests/getchaintips.py') diff --git a/qa/rpc-tests/getchaintips.py b/qa/rpc-tests/getchaintips.py index a83c499743..842fcad2b2 100755 --- a/qa/rpc-tests/getchaintips.py +++ b/qa/rpc-tests/getchaintips.py @@ -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 () -- cgit v1.2.3