@ -55,15 +55,15 @@ BOOST_AUTO_TEST_CASE(MempoolRemoveTest)
CTxMemPool testPool ( CFeeRate ( 0 ) ) ;
CTxMemPool testPool ( CFeeRate ( 0 ) ) ;
std : : list < CTransaction > removed ;
std : : vector < std : : shared_ptr < const CTransaction > > removed ;
// Nothing in pool, remove should do nothing:
// Nothing in pool, remove should do nothing:
testPool . removeRecursive ( txParent , removed ) ;
testPool . removeRecursive ( txParent , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
// Just the parent:
// Just the parent:
testPool . addUnchecked ( txParent . GetHash ( ) , entry . FromTx ( txParent ) ) ;
testPool . addUnchecked ( txParent . GetHash ( ) , entry . FromTx ( txParent ) ) ;
testPool . removeRecursive ( txParent , removed ) ;
testPool . removeRecursive ( txParent , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 1 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 1 ) ;
removed . clear ( ) ;
removed . clear ( ) ;
@ -75,16 +75,16 @@ BOOST_AUTO_TEST_CASE(MempoolRemoveTest)
testPool . addUnchecked ( txGrandChild [ i ] . GetHash ( ) , entry . FromTx ( txGrandChild [ i ] ) ) ;
testPool . addUnchecked ( txGrandChild [ i ] . GetHash ( ) , entry . FromTx ( txGrandChild [ i ] ) ) ;
}
}
// Remove Child[0], GrandChild[0] should be removed:
// Remove Child[0], GrandChild[0] should be removed:
testPool . removeRecursive ( txChild [ 0 ] , removed ) ;
testPool . removeRecursive ( txChild [ 0 ] , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 2 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 2 ) ;
removed . clear ( ) ;
removed . clear ( ) ;
// ... make sure grandchild and child are gone:
// ... make sure grandchild and child are gone:
testPool . removeRecursive ( txGrandChild [ 0 ] , removed ) ;
testPool . removeRecursive ( txGrandChild [ 0 ] , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
testPool . removeRecursive ( txChild [ 0 ] , removed ) ;
testPool . removeRecursive ( txChild [ 0 ] , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 0 ) ;
// Remove parent, all children/grandchildren should go:
// Remove parent, all children/grandchildren should go:
testPool . removeRecursive ( txParent , removed ) ;
testPool . removeRecursive ( txParent , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 5 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 5 ) ;
BOOST_CHECK_EQUAL ( testPool . size ( ) , 0 ) ;
BOOST_CHECK_EQUAL ( testPool . size ( ) , 0 ) ;
removed . clear ( ) ;
removed . clear ( ) ;
@ -97,7 +97,7 @@ BOOST_AUTO_TEST_CASE(MempoolRemoveTest)
}
}
// Now remove the parent, as might happen if a block-re-org occurs but the parent cannot be
// Now remove the parent, as might happen if a block-re-org occurs but the parent cannot be
// put into the mempool (maybe because it is non-standard):
// put into the mempool (maybe because it is non-standard):
testPool . removeRecursive ( txParent , removed ) ;
testPool . removeRecursive ( txParent , & removed ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 6 ) ;
BOOST_CHECK_EQUAL ( removed . size ( ) , 6 ) ;
BOOST_CHECK_EQUAL ( testPool . size ( ) , 0 ) ;
BOOST_CHECK_EQUAL ( testPool . size ( ) , 0 ) ;
removed . clear ( ) ;
removed . clear ( ) ;
@ -281,12 +281,11 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
BOOST_CHECK_EQUAL ( pool . size ( ) , 10 ) ;
BOOST_CHECK_EQUAL ( pool . size ( ) , 10 ) ;
// Now try removing tx10 and verify the sort order returns to normal
// Now try removing tx10 and verify the sort order returns to normal
std : : list < CTransaction > removed ;
pool . removeRecursive ( pool . mapTx . find ( tx10 . GetHash ( ) ) - > GetTx ( ) ) ;
pool . removeRecursive ( pool . mapTx . find ( tx10 . GetHash ( ) ) - > GetTx ( ) , removed ) ;
CheckSort < descendant_score > ( pool , snapshotOrder ) ;
CheckSort < descendant_score > ( pool , snapshotOrder ) ;
pool . removeRecursive ( pool . mapTx . find ( tx9 . GetHash ( ) ) - > GetTx ( ) , removed ) ;
pool . removeRecursive ( pool . mapTx . find ( tx9 . GetHash ( ) ) - > GetTx ( ) ) ;
pool . removeRecursive ( pool . mapTx . find ( tx8 . GetHash ( ) ) - > GetTx ( ) , removed ) ;
pool . removeRecursive ( pool . mapTx . find ( tx8 . GetHash ( ) ) - > GetTx ( ) ) ;
/* Now check the sort on the mining score index.
/* Now check the sort on the mining score index.
* Final order should be :
* Final order should be :
*
*
@ -413,8 +412,7 @@ BOOST_AUTO_TEST_CASE(MempoolAncestorIndexingTest)
/* after tx6 is mined, tx7 should move up in the sort */
/* after tx6 is mined, tx7 should move up in the sort */
std : : vector < CTransaction > vtx ;
std : : vector < CTransaction > vtx ;
vtx . push_back ( tx6 ) ;
vtx . push_back ( tx6 ) ;
std : : list < CTransaction > dummy ;
pool . removeForBlock ( vtx , 1 , NULL , false ) ;
pool . removeForBlock ( vtx , 1 , dummy , false ) ;
sortedOrder . erase ( sortedOrder . begin ( ) + 1 ) ;
sortedOrder . erase ( sortedOrder . begin ( ) + 1 ) ;
sortedOrder . pop_back ( ) ;
sortedOrder . pop_back ( ) ;
@ -549,12 +547,12 @@ BOOST_AUTO_TEST_CASE(MempoolSizeLimitTest)
pool . addUnchecked ( tx7 . GetHash ( ) , entry . Fee ( 9000LL ) . FromTx ( tx7 , & pool ) ) ;
pool . addUnchecked ( tx7 . GetHash ( ) , entry . Fee ( 9000LL ) . FromTx ( tx7 , & pool ) ) ;
std : : vector < CTransaction > vtx ;
std : : vector < CTransaction > vtx ;
std : : list < CTransaction > conflicts ;
std : : vector < std : : shared_ptr < const CTransaction > > conflicts ;
SetMockTime ( 42 ) ;
SetMockTime ( 42 ) ;
SetMockTime ( 42 + CTxMemPool : : ROLLING_FEE_HALFLIFE ) ;
SetMockTime ( 42 + CTxMemPool : : ROLLING_FEE_HALFLIFE ) ;
BOOST_CHECK_EQUAL ( pool . GetMinFee ( 1 ) . GetFeePerK ( ) , maxFeeRateRemoved . GetFeePerK ( ) + 1000 ) ;
BOOST_CHECK_EQUAL ( pool . GetMinFee ( 1 ) . GetFeePerK ( ) , maxFeeRateRemoved . GetFeePerK ( ) + 1000 ) ;
// ... we should keep the same min fee until we get a block
// ... we should keep the same min fee until we get a block
pool . removeForBlock ( vtx , 1 , conflicts ) ;
pool . removeForBlock ( vtx , 1 ) ;
SetMockTime ( 42 + 2 * CTxMemPool : : ROLLING_FEE_HALFLIFE ) ;
SetMockTime ( 42 + 2 * CTxMemPool : : ROLLING_FEE_HALFLIFE ) ;
BOOST_CHECK_EQUAL ( pool . GetMinFee ( 1 ) . GetFeePerK ( ) , ( maxFeeRateRemoved . GetFeePerK ( ) + 1000 ) / 2 ) ;
BOOST_CHECK_EQUAL ( pool . GetMinFee ( 1 ) . GetFeePerK ( ) , ( maxFeeRateRemoved . GetFeePerK ( ) + 1000 ) / 2 ) ;
// ... then feerate should drop 1/2 each halflife
// ... then feerate should drop 1/2 each halflife