git / moonbite-core / test/functional/feature_abortnode.py · raw

#!/usr/bin/env python3# Copyright (c) 2019-2020 The Bitcoin Core developers# Distributed under the MIT software license, see the accompanying# file COPYING or http://www.opensource.org/licenses/mit-license.php."""Test bitcoind aborts if can't disconnect a block.- Start a single node and generate 3 blocks.- Delete the undo data.- Mine a fork that requires disconnecting the tip.- Verify that bitcoind AbortNode's."""from test_framework.test_framework import BitcoinTestFrameworkfrom test_framework.util import get_datadir_pathimport osclass AbortNodeTest(BitcoinTestFramework):    def set_test_params(self):        self.setup_clean_chain = True        self.num_nodes = 2        self.rpc_timeout = 240    def setup_network(self):        self.setup_nodes()        # We'll connect the nodes later    def run_test(self):        self.nodes[0].generate(3)        datadir = get_datadir_path(self.options.tmpdir, 0)        # Deleting the undo file will result in reorg failure        os.unlink(os.path.join(datadir, self.chain, 'blocks', 'rev00000.dat'))        # Connecting to a node with a more work chain will trigger a reorg        # attempt.        self.nodes[1].generate(3)        with self.nodes[0].assert_debug_log(["Failed to disconnect block"]):            self.connect_nodes(0, 1)            self.nodes[1].generate(1)            # Check that node0 aborted            self.log.info("Waiting for crash")            self.nodes[0].wait_until_stopped(timeout=200)        self.log.info("Node crashed - now verifying restart fails")        self.nodes[0].assert_start_raises_init_error()if __name__ == '__main__':    AbortNodeTest().main()