From e18d392689da72d857fc590097889060a48d98e0 Mon Sep 17 00:00:00 2001 From: ismaelsadeeq Date: Mon, 12 Jan 2026 13:52:54 +0000 Subject: [PATCH] test: add mempool estimator i/o fuzz test --- src/test/fuzz/policy_estimator_io.cpp | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/test/fuzz/policy_estimator_io.cpp b/src/test/fuzz/policy_estimator_io.cpp index 10dad417aec..2d0edaa2fdf 100644 --- a/src/test/fuzz/policy_estimator_io.cpp +++ b/src/test/fuzz/policy_estimator_io.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -13,12 +14,13 @@ #include namespace { -const BasicTestingSetup* g_setup; +const TestingSetup* g_setup; } // namespace void initialize_policy_estimator_io() { - static const auto testing_setup = MakeNoLogFileContext<>(); + static const auto testing_setup{ + MakeNoLogFileContext(ChainType::REGTEST, TestOpts{.setup_net = false})}; g_setup = testing_setup.get(); } @@ -26,11 +28,27 @@ FUZZ_TARGET(policy_estimator_io, .init = initialize_policy_estimator_io) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); FuzzedFileProvider fuzzed_file_provider{fuzzed_data_provider}; - AutoFile fuzzed_auto_file{fuzzed_file_provider.open()}; - // Reusing block_policy_estimator across runs to avoid costly creation of CBlockPolicyEstimator object. - static CBlockPolicyEstimator block_policy_estimator{BlockPolicyFeeEstPath(*g_setup->m_node.args), DEFAULT_ACCEPT_STALE_FEE_ESTIMATES}; - if (block_policy_estimator.Read(fuzzed_auto_file)) { - block_policy_estimator.Write(fuzzed_auto_file); + // Reuse estimators across runs to avoid costly object creation. + static CBlockPolicyEstimator block_policy_estimator{ + BlockPolicyFeeEstPath(*g_setup->m_node.args), DEFAULT_ACCEPT_STALE_FEE_ESTIMATES}; + { + AutoFile fuzzed_auto_file_block_policy{fuzzed_file_provider.open()}; + if (block_policy_estimator.Read(fuzzed_auto_file_block_policy)) { + block_policy_estimator.Write(fuzzed_auto_file_block_policy); + } + (void)fuzzed_auto_file_block_policy.fclose(); + } + static MemPoolFeeRateEstimator mempool_feerate_estimator{ + MempoolPolicyEstimatorPath(*g_setup->m_node.args), + *g_setup->m_node.mempool, + *g_setup->m_node.chainman}; + { + AutoFile fuzzed_auto_file_mempool_policy{fuzzed_file_provider.open()}; + if (mempool_feerate_estimator.Read(fuzzed_auto_file_mempool_policy)) { + mempool_feerate_estimator.Write(fuzzed_auto_file_mempool_policy); + } + // Write() does not take ownership; close explicitly because it may + // have written to the fuzzed file. + (void)fuzzed_auto_file_mempool_policy.fclose(); } - (void)fuzzed_auto_file.fclose(); }