Bitcoin Core  27.99.0
P2P Digital Currency
validation_load_mempool.cpp
Go to the documentation of this file.
1 // Copyright (c) 2020-2022 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 
7 #include <node/mempool_args.h>
10 #include <test/fuzz/fuzz.h>
11 #include <test/fuzz/util.h>
12 #include <test/fuzz/util/mempool.h>
13 #include <test/util/setup_common.h>
14 #include <test/util/txmempool.h>
15 #include <txmempool.h>
16 #include <util/time.h>
17 #include <validation.h>
18 
19 #include <cstdint>
20 #include <vector>
21 
24 
25 using node::MempoolPath;
26 
27 namespace {
28 const TestingSetup* g_setup;
29 } // namespace
30 
32 {
33  static const auto testing_setup = MakeNoLogFileContext<const TestingSetup>();
34  g_setup = testing_setup.get();
35 }
36 
38 {
39  FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
40  SetMockTime(ConsumeTime(fuzzed_data_provider));
41  FuzzedFileProvider fuzzed_file_provider{fuzzed_data_provider};
42 
43  CTxMemPool pool{MemPoolOptionsForTest(g_setup->m_node)};
44 
45  auto& chainstate{static_cast<DummyChainState&>(g_setup->m_node.chainman->ActiveChainstate())};
46  chainstate.SetMempool(&pool);
47 
48  auto fuzzed_fopen = [&](const fs::path&, const char*) {
49  return fuzzed_file_provider.open();
50  };
51  (void)LoadMempool(pool, MempoolPath(g_setup->m_args), chainstate,
52  {
53  .mockable_fopen_function = fuzzed_fopen,
54  });
55  pool.SetLoadTried(true);
56  (void)DumpMempool(pool, MempoolPath(g_setup->m_args), fuzzed_fopen, true);
57 }
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
Definition: txmempool.h:302
void SetMempool(CTxMemPool *mempool)
Definition: mempool.h:18
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
Definition: fs.h:33
bool LoadMempool(CTxMemPool &pool, const fs::path &load_path, Chainstate &active_chainstate, ImportMempoolOptions &&opts)
Import the file and attempt to add its contents to the mempool.
bool DumpMempool(const CTxMemPool &pool, const fs::path &dump_path, FopenFn mockable_fopen_function, bool skip_file_commit)
fs::path MempoolPath(const ArgsManager &argsman)
Testing setup that configures a complete environment.
Definition: setup_common.h:83
int64_t ConsumeTime(FuzzedDataProvider &fuzzed_data_provider, const std::optional< int64_t > &min, const std::optional< int64_t > &max) noexcept
Definition: util.cpp:34
CTxMemPool::Options MemPoolOptionsForTest(const NodeContext &node)
Definition: txmempool.cpp:19
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
Definition: time.cpp:81
FUZZ_TARGET(validation_load_mempool,.init=initialize_validation_load_mempool)
void initialize_validation_load_mempool()