Add RPC test of RewindBlockIndex
This commit is contained in:
parent
65dedeeae3
commit
fe87fd2b36
|
@ -54,6 +54,7 @@ testScripts=(
|
|||
'bip65-cltv-p2p.py'
|
||||
'bipdersig-p2p.py'
|
||||
'overwinter_peer_management.py'
|
||||
'rewind_index.py'
|
||||
);
|
||||
testScriptsExt=(
|
||||
'getblocktemplate_longpoll.py'
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env python2
|
||||
# Copyright (c) 2018 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 assert_equal, initialize_chain_clean, \
|
||||
start_nodes, start_node, connect_nodes_bi, bitcoind_processes
|
||||
|
||||
import time
|
||||
|
||||
|
||||
class RewindBlockIndexTest (BitcoinTestFramework):
|
||||
|
||||
def setup_chain(self):
|
||||
print("Initializing test directory "+self.options.tmpdir)
|
||||
initialize_chain_clean(self.options.tmpdir, 3)
|
||||
|
||||
def setup_network(self, split=False):
|
||||
# Node 0 - Overwinter, then Sprout, then Overwinter again
|
||||
# Node 1 - Sprout
|
||||
# Node 2 - Overwinter
|
||||
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-nuparams=5ba81b19:10'], [], ['-nuparams=5ba81b19:10']])
|
||||
connect_nodes_bi(self.nodes,0,1)
|
||||
connect_nodes_bi(self.nodes,1,2)
|
||||
connect_nodes_bi(self.nodes,0,2)
|
||||
self.is_network_split=False
|
||||
self.sync_all()
|
||||
|
||||
def run_test (self):
|
||||
# Bring all nodes to just before the activation block
|
||||
print("Mining blocks...")
|
||||
self.nodes[0].generate(8)
|
||||
block9 = self.nodes[0].generate(1)[0]
|
||||
self.sync_all()
|
||||
|
||||
assert_equal(self.nodes[0].getbestblockhash(), block9)
|
||||
assert_equal(self.nodes[1].getbestblockhash(), block9)
|
||||
|
||||
print("Mining diverging blocks")
|
||||
block10s = self.nodes[1].generate(1)[0]
|
||||
block10o = self.nodes[2].generate(1)[0]
|
||||
self.sync_all()
|
||||
|
||||
assert_equal(self.nodes[0].getbestblockhash(), block10o)
|
||||
assert_equal(self.nodes[1].getbestblockhash(), block10s)
|
||||
assert_equal(self.nodes[2].getbestblockhash(), block10o)
|
||||
|
||||
# Restart node 0 using Sprout instead of Overwinter
|
||||
print("Switching node 0 from Overwinter to Sprout")
|
||||
self.nodes[0].stop()
|
||||
bitcoind_processes[0].wait()
|
||||
self.nodes[0] = start_node(0,self.options.tmpdir)
|
||||
connect_nodes_bi(self.nodes,0,1)
|
||||
connect_nodes_bi(self.nodes,1,2)
|
||||
connect_nodes_bi(self.nodes,0,2)
|
||||
|
||||
# Assume node 1 will send block10s to node 0 quickly
|
||||
# (if we used self.sync_all() here and there was a bug, the test would hang)
|
||||
time.sleep(2)
|
||||
|
||||
# Node 0 has rewound and is now on the Sprout chain
|
||||
assert_equal(self.nodes[0].getblockcount(), 10)
|
||||
assert_equal(self.nodes[0].getbestblockhash(), block10s)
|
||||
|
||||
# Restart node 0 using Overwinter instead of Sprout
|
||||
print("Switching node 0 from Sprout to Overwinter")
|
||||
self.nodes[0].stop()
|
||||
bitcoind_processes[0].wait()
|
||||
self.nodes[0] = start_node(0,self.options.tmpdir, extra_args=['-nuparams=5ba81b19:10'])
|
||||
connect_nodes_bi(self.nodes,0,1)
|
||||
connect_nodes_bi(self.nodes,1,2)
|
||||
connect_nodes_bi(self.nodes,0,2)
|
||||
|
||||
# Assume node 2 will send block10o to node 0 quickly
|
||||
# (if we used self.sync_all() here and there was a bug, the test would hang)
|
||||
time.sleep(2)
|
||||
|
||||
# Node 0 has rewound and is now on the Overwinter chain again
|
||||
assert_equal(self.nodes[0].getblockcount(), 10)
|
||||
assert_equal(self.nodes[0].getbestblockhash(), block10o)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
RewindBlockIndexTest().main()
|
Loading…
Reference in New Issue