|
|
@ -1,10 +1,13 @@ |
|
|
|
#include <gtest/gtest.h> |
|
|
|
#include <gtest/gtest-spi.h> |
|
|
|
|
|
|
|
#include "consensus/validation.h" |
|
|
|
#include "core_io.h" |
|
|
|
#include "main.h" |
|
|
|
#include "primitives/transaction.h" |
|
|
|
#include "txmempool.h" |
|
|
|
#include "policy/fees.h" |
|
|
|
#include "util.h" |
|
|
|
|
|
|
|
// Fake the input of transaction 5295156213414ed77f6e538e7e8ebe14492156906b9fe995b242477818789364
|
|
|
|
// - 532639cc6bebed47c1c69ae36dd498c68a012e74ad12729adbd3dbb56f8f3f4a, 0
|
|
|
@ -87,3 +90,45 @@ TEST(Mempool, PriorityStatsDoNotCrash) { |
|
|
|
|
|
|
|
EXPECT_EQ(dPriority, MAX_PRIORITY); |
|
|
|
} |
|
|
|
|
|
|
|
TEST(Mempool, TxInputLimit) { |
|
|
|
CTxMemPool pool(::minRelayTxFee); |
|
|
|
bool missingInputs; |
|
|
|
|
|
|
|
// Create an obviously-invalid transaction
|
|
|
|
CMutableTransaction mtx; |
|
|
|
mtx.nVersion = 0; |
|
|
|
mtx.vin.resize(10); |
|
|
|
|
|
|
|
// Check it fails as expected
|
|
|
|
CValidationState state1; |
|
|
|
CTransaction tx1(mtx); |
|
|
|
EXPECT_FALSE(AcceptToMemoryPool(pool, state1, tx1, false, &missingInputs)); |
|
|
|
EXPECT_EQ(state1.GetRejectReason(), "bad-txns-version-too-low"); |
|
|
|
|
|
|
|
// Set a limit
|
|
|
|
mapArgs["-mempooltxinputlimit"] = "10"; |
|
|
|
|
|
|
|
// Check it stil fails as expected
|
|
|
|
CValidationState state2; |
|
|
|
EXPECT_FALSE(AcceptToMemoryPool(pool, state2, tx1, false, &missingInputs)); |
|
|
|
EXPECT_EQ(state2.GetRejectReason(), "bad-txns-version-too-low"); |
|
|
|
|
|
|
|
// Resize the transaction
|
|
|
|
mtx.vin.resize(11); |
|
|
|
|
|
|
|
// Check it now fails due to exceeding the limit
|
|
|
|
CValidationState state3; |
|
|
|
CTransaction tx3(mtx); |
|
|
|
EXPECT_FALSE(AcceptToMemoryPool(pool, state3, tx3, false, &missingInputs)); |
|
|
|
EXPECT_NE(state3.GetRejectReason(), "bad-txns-version-too-low"); |
|
|
|
|
|
|
|
// Clear the limit
|
|
|
|
mapArgs.erase("-mempooltxinputlimit"); |
|
|
|
|
|
|
|
// Check it no longer fails due to exceeding the limit
|
|
|
|
CValidationState state4; |
|
|
|
EXPECT_FALSE(AcceptToMemoryPool(pool, state4, tx3, false, &missingInputs)); |
|
|
|
EXPECT_EQ(state4.GetRejectReason(), "bad-txns-version-too-low"); |
|
|
|
} |
|
|
|
|
|
|
|