Bitcoin Core 29.99.0
P2P Digital Currency
chainstate_write_tests.cpp
Go to the documentation of this file.
1// Copyright (c) The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
6#include <validation.h>
8
9#include <boost/test/unit_test.hpp>
10
11BOOST_AUTO_TEST_SUITE(chainstate_write_tests)
12
13BOOST_FIXTURE_TEST_CASE(chainstate_write_interval, TestingSetup)
14{
16 bool m_did_flush{false};
18 {
19 m_did_flush = true;
20 }
21 };
22
23 const auto sub{std::make_shared<TestSubscriber>()};
24 m_node.validation_signals->RegisterSharedValidationInterface(sub);
25 auto& chainstate{Assert(m_node.chainman)->ActiveChainstate()};
26 BlockValidationState state_dummy{};
27
28 // The first periodic flush sets m_next_write and does not flush
29 chainstate.FlushStateToDisk(state_dummy, FlushStateMode::PERIODIC);
30 m_node.validation_signals->SyncWithValidationInterfaceQueue();
31 BOOST_CHECK(!sub->m_did_flush);
32
33 // The periodic flush interval is between 50 and 70 minutes (inclusive)
34 SetMockTime(GetTime<std::chrono::minutes>() + 49min);
35 chainstate.FlushStateToDisk(state_dummy, FlushStateMode::PERIODIC);
36 m_node.validation_signals->SyncWithValidationInterfaceQueue();
37 BOOST_CHECK(!sub->m_did_flush);
38
39 SetMockTime(GetTime<std::chrono::minutes>() + 70min);
40 chainstate.FlushStateToDisk(state_dummy, FlushStateMode::PERIODIC);
41 m_node.validation_signals->SyncWithValidationInterfaceQueue();
42 BOOST_CHECK(sub->m_did_flush);
43}
44
node::NodeContext m_node
Definition: bitcoin-gui.cpp:42
BOOST_FIXTURE_TEST_CASE(chainstate_write_interval, TestingSetup)
#define Assert(val)
Identity function.
Definition: check.h:106
Implement this to subscribe to events generated in validation and mempool.
virtual void ChainStateFlushed(ChainstateRole role, const CBlockLocator &locator)
Notifies listeners of the new active block chain on-disk.
BOOST_AUTO_TEST_SUITE_END()
ChainstateRole
This enum describes the various roles a specific Chainstate instance can take.
Definition: chain.h:25
#define BOOST_CHECK(expr)
Definition: object.cpp:17
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
Definition: block.h:124
Testing setup that configures a complete environment.
Definition: setup_common.h:121
std::unique_ptr< ValidationSignals > validation_signals
Issues calls about blocks and transactions.
Definition: context.h:88
std::unique_ptr< ChainstateManager > chainman
Definition: context.h:72
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
Definition: time.cpp:40