From 07064ea2d19889c31137c5ca0845eca0e3f7b8b7 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Mon, 10 Oct 2016 15:24:00 -0500 Subject: [PATCH] GBT: Add RPC tests --- qa/pull-tester/rpc-tests.sh | 1 + qa/rpc-tests/getblocktemplate.py | 58 ++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100755 qa/rpc-tests/getblocktemplate.py diff --git a/qa/pull-tester/rpc-tests.sh b/qa/pull-tester/rpc-tests.sh index b44df9d7b..13ddc461f 100755 --- a/qa/pull-tester/rpc-tests.sh +++ b/qa/pull-tester/rpc-tests.sh @@ -31,6 +31,7 @@ testScripts=( 'walletbackup.py' 'zcjoinsplit.py' 'zcjoinsplitdoublespend.py' + 'getblocktemplate.py' ); testScriptsExt=( 'bipdersig-p2p.py' diff --git a/qa/rpc-tests/getblocktemplate.py b/qa/rpc-tests/getblocktemplate.py new file mode 100755 index 000000000..2610e257b --- /dev/null +++ b/qa/rpc-tests/getblocktemplate.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2 +# Copyright (c) 2016 The Zcash developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import * + + +class GetBlockTemplateTest(BitcoinTestFramework): + ''' + Test getblocktemplate. + ''' + + def setup_chain(self): + print("Initializing test directory "+self.options.tmpdir) + initialize_chain_clean(self.options.tmpdir, 4) + + def setup_network(self, split=False): + self.nodes = start_nodes(2, self.options.tmpdir) + connect_nodes_bi(self.nodes,0,1) + self.is_network_split=False + self.sync_all() + + def run_test(self): + node = self.nodes[0] + node.generate(1) # Mine a block to leave initial block download + + # Test 1: Default to coinbasetxn + tmpl = node.getblocktemplate() + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 2: Get coinbasetxn if requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 3: coinbasevalue not supported if requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasevalue']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 4: coinbasevalue not supported if both requested + tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn', 'coinbasevalue']}) + assert('coinbasetxn' in tmpl) + assert('coinbasevalue' not in tmpl) + + # Test 5: General checks + tmpl = node.getblocktemplate() + assert(len(tmpl['noncerange']) == 8) + + # Test 6: coinbasetxn checks + assert('foundersreward' in tmpl['coinbasetxn']) + assert(tmpl['coinbasetxn']['required']) + +if __name__ == '__main__': + GetBlockTemplateTest().main()