// Copyright (c) 2025 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include using node::NodeContext; //! Like BasicTestingSetup, but using regtest network instead of mainnet. struct InitTestSetup : BasicTestingSetup { InitTestSetup() : BasicTestingSetup{ChainType::REGTEST} {} }; BOOST_FIXTURE_TEST_SUITE(node_init_tests, InitTestSetup) //! Custom implementation of interfaces::Init for testing. class TestInit : public interfaces::Init { public: TestInit(NodeContext& node) : m_node(node) { InitContext(m_node); m_node.init = this; } std::unique_ptr makeChain() override { return interfaces::MakeChain(m_node); } std::unique_ptr makeWalletLoader(interfaces::Chain& chain) override { return MakeWalletLoader(chain, *Assert(m_node.args)); } NodeContext& m_node; }; BOOST_AUTO_TEST_CASE(init_test) { // Clear state set by BasicTestingSetup that AppInitMain assumes is unset. LogInstance().DisconnectTestLogger(); m_node.args->SetConfigFilePath({}); // Prevent the test from trying to listen on ports 8332 and 8333. m_node.args->ForceSetArg("-server", "0"); m_node.args->ForceSetArg("-listen", "0"); // Run through initialization and shutdown code. TestInit init{m_node}; BOOST_CHECK(AppInitInterfaces(m_node)); BOOST_CHECK(AppInitMain(m_node)); Interrupt(m_node); Shutdown(m_node); } BOOST_AUTO_TEST_SUITE_END()