From f040dcb3b7685b228a44bf85007a7afed5a883b1 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Wed, 21 Feb 2024 22:47:41 +0000 Subject: [PATCH] test: add mempool fee estimator tests --- src/Makefile.test.include | 1 + src/test/mempool_fee_tests.cpp | 58 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/test/mempool_fee_tests.cpp diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 9f9bdbbd0cd4b1..6de43c9546828d 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -104,6 +104,7 @@ BITCOIN_TESTS =\ test/key_io_tests.cpp \ test/key_tests.cpp \ test/logging_tests.cpp \ + test/mempool_fee_tests.cpp \ test/mempool_tests.cpp \ test/merkle_tests.cpp \ test/merkleblock_tests.cpp \ diff --git a/src/test/mempool_fee_tests.cpp b/src/test/mempool_fee_tests.cpp new file mode 100644 index 00000000000000..76ca726f2f512c --- /dev/null +++ b/src/test/mempool_fee_tests.cpp @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include + +#include +#include + +#include + +const uint64_t SMALL_BYTES_DATA = 200; +const CAmount SMALL_BYTES_DATA_FEE = 11000; +const uint64_t LARGE_BYTES_DATA = 20200; +const CAmount LARGE_BYTES_DATA_FEE = 1100000; + + +BOOST_FIXTURE_TEST_SUITE(mempoolestimator_tests, TestChain100Setup) + + +BOOST_AUTO_TEST_CASE(MempoolEstimator) +{ + m_node.mempool.reset(); + m_node.mempool = std::make_unique(MemPoolOptionsForTest(m_node)); + m_node.mempool_fee_estimator = std::make_unique(); + std::string err_message; + + LOCK(cs_main); + LOCK(m_node.mempool->cs); + + // Test case 1: confTarget > MAX_CONF_TARGET + auto fee_estimate = m_node.mempool_fee_estimator->EstimateFeeWithMemPool(m_node.chainman->ActiveChainstate(), *(m_node.mempool), MAX_CONF_TARGET + 1, false, err_message); + BOOST_CHECK(fee_estimate == CFeeRate(0)); + BOOST_CHECK(err_message == strprintf("Confirmation target %u is above maximum limit of %u, mempool conditions might change and estimates above %u are unreliable.\n", MAX_CONF_TARGET + 1, MAX_CONF_TARGET, MAX_CONF_TARGET)); + + // Test case 2: Mempool not loaded + fee_estimate = m_node.mempool_fee_estimator->EstimateFeeWithMemPool(m_node.chainman->ActiveChainstate(), *m_node.mempool, 1, false, err_message); + BOOST_CHECK(err_message == std::string("Mempool not finished loading, can't get accurate fee rate estimate.")); + BOOST_CHECK(fee_estimate == CFeeRate(0)); + + // // Test case 3: No transactions available in the mempool yet + m_node.mempool->SetLoadTried(true); + fee_estimate = m_node.mempool_fee_estimator->EstimateFeeWithMemPool(m_node.chainman->ActiveChainstate(), *m_node.mempool, 1, false, err_message); + BOOST_CHECK(fee_estimate == CFeeRate(0)); + BOOST_CHECK(err_message == std::string("No transactions available in the mempool yet.")); + + // TestMemPoolEntryHelper entry; + +} + +BOOST_AUTO_TEST_SUITE_END()