/
githubmirror
/
bitcoin
Обзор
Документация
Войти
/
githubmirror
/
bitcoin
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/test/testnet4_miner_tests.cpp
72 строки
2 KB
seduless
scripted-diff: Rename NodeClockContext to FakeNodeClock
08 июн 2026, 17:27
Не верифицирован
08 июн 2026, 17:27
55e402f
Код
Авторство
О чём код?
// Copyright (c) 2025-present 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 <chain.h> #include <interfaces/mining.h> #include <node/mining_types.h> #include <primitives/block.h> #include <sync.h> #include <test/util/common.h> #include <test/util/setup_common.h> #include <test/util/time.h> #include <util/time.h> #include <validation.h> #include <boost/test/unit_test.hpp> #include <memory> using interfaces::BlockTemplate; using interfaces::Mining; using node::BlockWaitOptions; namespace testnet4_miner_tests { struct Testnet4MinerTestingSetup : public Testnet4Setup { std::unique_ptr<Mining> MakeMining() { return interfaces::MakeMining(m_node, /*wait_loaded=*/false); } }; } // namespace testnet4_miner_tests BOOST_FIXTURE_TEST_SUITE(testnet4_miner_tests, Testnet4MinerTestingSetup) BOOST_AUTO_TEST_CASE(MiningInterface) { auto mining{MakeMining()}; BOOST_REQUIRE(mining); std::unique_ptr<BlockTemplate> block_template; // Set node time a few minutes past the testnet4 genesis block const auto template_time{3min + WITH_LOCK(cs_main, return m_node.chainman->ActiveChain().Tip()->Time())}; FakeNodeClock clock{template_time}; block_template = mining->createNewBlock({}, /*cooldown=*/false); BOOST_REQUIRE(block_template); // The template should use the mocked system time BOOST_REQUIRE_EQUAL(block_template->getBlockHeader().Time(), template_time); const BlockWaitOptions wait_options{.timeout = MillisecondsDouble{0}, .fee_threshold = 1}; // waitNext() should return nullptr because there is no better template auto should_be_nullptr = block_template->waitNext(wait_options); BOOST_REQUIRE(should_be_nullptr == nullptr); // This remains the case when exactly 20 minutes have gone by clock += 17min; should_be_nullptr = block_template->waitNext(wait_options); BOOST_REQUIRE(should_be_nullptr == nullptr); // One second later the difficulty drops and it returns a new template // Note that we can't test the actual difficulty change, because the // difficulty is already at 1. clock += 1s; block_template = block_template->waitNext(wait_options); BOOST_REQUIRE(block_template); } BOOST_AUTO_TEST_SUITE_END()