From fe0b1513a7c53b8490b81165acf1c7d42297a2ed Mon Sep 17 00:00:00 2001 From: Hao Xu Date: Tue, 30 Dec 2025 17:53:52 +0800 Subject: [PATCH] test: add a test for txgraph staging staging is a batching mechanism for txgraph, add a test for this feature. --- src/test/txgraph_tests.cpp | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/test/txgraph_tests.cpp b/src/test/txgraph_tests.cpp index e87c1c5eda5..26cf2b3a970 100644 --- a/src/test/txgraph_tests.cpp +++ b/src/test/txgraph_tests.cpp @@ -368,4 +368,57 @@ BOOST_AUTO_TEST_CASE(txgraph_chunk_chain) block_builder_checker({{&refs[0]}}); } +BOOST_AUTO_TEST_CASE(txgraph_staging) +{ + /* Create a new graph for the test. + * The parameters are max_cluster_count, max_cluster_size, acceptable_iters + */ + auto graph = MakeTxGraph(10, 1000, NUM_ACCEPTABLE_ITERS); + + std::vector refs; + refs.reserve(2); + + FeePerWeight feerateA{2, 10}; + FeePerWeight feerateB{1, 10}; + + // everytime adding a transaction, test the chunk status + // [A] + refs.push_back(graph->AddTransaction(feerateA)); + BOOST_CHECK_EQUAL(graph->HaveStaging(), false); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::TOP), 1); + + graph->StartStaging(); + BOOST_CHECK_EQUAL(graph->HaveStaging(), true); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::TOP), 1); + + // [A, B] + refs.push_back(graph->AddTransaction(feerateB)); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::MAIN), 1); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::TOP), 2); + BOOST_CHECK_EQUAL(graph->Exists(refs[0], TxGraph::Level::TOP), true); + BOOST_CHECK_EQUAL(graph->Exists(refs[1], TxGraph::Level::TOP), true); + + graph->AddDependency(/*parent=*/refs[0], /*child=*/refs[1]); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::MAIN), 1); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::TOP), 2); + + graph->CommitStaging(); + BOOST_CHECK_EQUAL(graph->HaveStaging(), false); + + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::MAIN), 2); + + graph->StartStaging(); + + // [A] + graph->RemoveTransaction(refs[1]); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::MAIN), 2); + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::TOP), 1); + + graph->CommitStaging(); + + BOOST_CHECK_EQUAL(graph->GetTransactionCount(TxGraph::Level::MAIN), 1); + + graph->SanityCheck(); +} + BOOST_AUTO_TEST_SUITE_END()