#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
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");
+}
+