mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-20 10:38:42 +01:00
ddc7872c08
The extra `bilingual_str` argument of the fatal error notifications and `node::AbortNode()` is often unused and when used usually contains the same string as the message argument. It also seems to be confusing, since it is not consistently used for errors requiring user action. For example some assumeutxo fatal errors require the user to do something, but are not translated. So simplify the fatal error and abort node interfaces by only passing a translated string. This slightly changes the fatal errors displayed to the user. Also de-duplicate the abort error log since it is repeated in noui.cpp.
46 lines
1.7 KiB
Python
Executable File
46 lines
1.7 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].blocks_path / "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, expected_stderr="Error: A fatal internal error occurred, see debug.log for details: Failed to disconnect block.")
|
|
self.log.info("Node crashed - now verifying restart fails")
|
|
self.nodes[0].assert_start_raises_init_error()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
AbortNodeTest().main()
|