mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
aaaa3aefbd
Seems odd to place the burden on test writers to hardcode the chain or datadir path for the nodes under test.
45 lines
1.6 KiB
Python
Executable file
45 lines
1.6 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Copyright (c) 2019-2021 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 BitcoinTestFramework
|
|
|
|
|
|
class AbortNodeTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.setup_clean_chain = True
|
|
self.num_nodes = 2
|
|
|
|
def setup_network(self):
|
|
self.setup_nodes()
|
|
# We'll connect the nodes later
|
|
|
|
def run_test(self):
|
|
self.generate(self.nodes[0], 3, sync_fun=self.no_op)
|
|
|
|
# Deleting the undo file will result in reorg failure
|
|
(self.nodes[0].chain_path / "blocks" / "rev00000.dat").unlink()
|
|
|
|
# Connecting to a node with a more work chain will trigger a reorg
|
|
# attempt.
|
|
self.generate(self.nodes[1], 3, sync_fun=self.no_op)
|
|
with self.nodes[0].assert_debug_log(["Failed to disconnect block"]):
|
|
self.connect_nodes(0, 1)
|
|
self.generate(self.nodes[1], 1, sync_fun=self.no_op)
|
|
|
|
# Check that node0 aborted
|
|
self.log.info("Waiting for crash")
|
|
self.nodes[0].wait_until_stopped(timeout=5, expect_error=True)
|
|
self.log.info("Node crashed - now verifying restart fails")
|
|
self.nodes[0].assert_start_raises_init_error()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
AbortNodeTest().main()
|