mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
fuzz: add util/mempool/h.cpp
Moving the mempool code (Boost) out of util.h, results in a ~10% speedup (for me) when compiling the fuzz tests.
This commit is contained in:
parent
d919e8d574
commit
eb15569280
10 changed files with 43 additions and 25 deletions
|
@ -10,12 +10,13 @@ EXTRA_LIBRARIES += \
|
||||||
TEST_FUZZ_H = \
|
TEST_FUZZ_H = \
|
||||||
test/fuzz/fuzz.h \
|
test/fuzz/fuzz.h \
|
||||||
test/fuzz/FuzzedDataProvider.h \
|
test/fuzz/FuzzedDataProvider.h \
|
||||||
test/fuzz/mempool_utils.h \
|
test/fuzz/util.h \
|
||||||
test/fuzz/util.h
|
test/fuzz/util/mempool.h
|
||||||
|
|
||||||
libtest_fuzz_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
|
libtest_fuzz_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
|
||||||
libtest_fuzz_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
libtest_fuzz_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||||
libtest_fuzz_a_SOURCES = \
|
libtest_fuzz_a_SOURCES = \
|
||||||
test/fuzz/fuzz.cpp \
|
test/fuzz/fuzz.cpp \
|
||||||
test/fuzz/util.cpp \
|
test/fuzz/util.cpp \
|
||||||
|
test/fuzz/util/mempool.cpp \
|
||||||
$(TEST_FUZZ_H)
|
$(TEST_FUZZ_H)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <key_io.h>
|
#include <key_io.h>
|
||||||
#include <memusage.h>
|
#include <memusage.h>
|
||||||
#include <netbase.h>
|
#include <netbase.h>
|
||||||
|
#include <policy/policy.h>
|
||||||
#include <policy/settings.h>
|
#include <policy/settings.h>
|
||||||
#include <pow.h>
|
#include <pow.h>
|
||||||
#include <protocol.h>
|
#include <protocol.h>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
#include <node/miner.h>
|
#include <node/miner.h>
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/mempool_utils.h>
|
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/mining.h>
|
#include <test/util/mining.h>
|
||||||
#include <test/util/script.h>
|
#include <test/util/script.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
|
|
|
@ -478,21 +478,6 @@ CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) no
|
||||||
return tx_destination;
|
return tx_destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept
|
|
||||||
{
|
|
||||||
// Avoid:
|
|
||||||
// policy/feerate.cpp:28:34: runtime error: signed integer overflow: 34873208148477500 * 1000 cannot be represented in type 'long'
|
|
||||||
//
|
|
||||||
// Reproduce using CFeeRate(348732081484775, 10).GetFeePerK()
|
|
||||||
const CAmount fee = std::min<CAmount>(ConsumeMoney(fuzzed_data_provider), std::numeric_limits<CAmount>::max() / static_cast<CAmount>(100000));
|
|
||||||
assert(MoneyRange(fee));
|
|
||||||
const int64_t time = fuzzed_data_provider.ConsumeIntegral<int64_t>();
|
|
||||||
const unsigned int entry_height = fuzzed_data_provider.ConsumeIntegral<unsigned int>();
|
|
||||||
const bool spends_coinbase = fuzzed_data_provider.ConsumeBool();
|
|
||||||
const unsigned int sig_op_cost = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, MAX_BLOCK_SIGOPS_COST);
|
|
||||||
return CTxMemPoolEntry{MakeTransactionRef(tx), fee, time, entry_height, spends_coinbase, sig_op_cost, {}};
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContainsSpentInput(const CTransaction& tx, const CCoinsViewCache& inputs) noexcept
|
bool ContainsSpentInput(const CTransaction& tx, const CCoinsViewCache& inputs) noexcept
|
||||||
{
|
{
|
||||||
for (const CTxIn& tx_in : tx.vin) {
|
for (const CTxIn& tx_in : tx.vin) {
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/util/net.h>
|
#include <test/util/net.h>
|
||||||
#include <txmempool.h>
|
|
||||||
#include <uint256.h>
|
#include <uint256.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
|
|
||||||
|
@ -213,8 +212,6 @@ template <typename WeakEnumType, size_t size>
|
||||||
return UintToArith256(ConsumeUInt256(fuzzed_data_provider));
|
return UintToArith256(ConsumeUInt256(fuzzed_data_provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept;
|
|
||||||
|
|
||||||
[[nodiscard]] CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) noexcept;
|
[[nodiscard]] CTxDestination ConsumeTxDestination(FuzzedDataProvider& fuzzed_data_provider) noexcept;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
27
src/test/fuzz/util/mempool.cpp
Normal file
27
src/test/fuzz/util/mempool.cpp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (c) 2022 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include <consensus/amount.h>
|
||||||
|
#include <primitives/transaction.h>
|
||||||
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
|
#include <txmempool.h>
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept
|
||||||
|
{
|
||||||
|
// Avoid:
|
||||||
|
// policy/feerate.cpp:28:34: runtime error: signed integer overflow: 34873208148477500 * 1000 cannot be represented in type 'long'
|
||||||
|
//
|
||||||
|
// Reproduce using CFeeRate(348732081484775, 10).GetFeePerK()
|
||||||
|
const CAmount fee = std::min<CAmount>(ConsumeMoney(fuzzed_data_provider), std::numeric_limits<CAmount>::max() / static_cast<CAmount>(100000));
|
||||||
|
assert(MoneyRange(fee));
|
||||||
|
const int64_t time = fuzzed_data_provider.ConsumeIntegral<int64_t>();
|
||||||
|
const unsigned int entry_height = fuzzed_data_provider.ConsumeIntegral<unsigned int>();
|
||||||
|
const bool spends_coinbase = fuzzed_data_provider.ConsumeBool();
|
||||||
|
const unsigned int sig_op_cost = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, MAX_BLOCK_SIGOPS_COST);
|
||||||
|
return CTxMemPoolEntry{MakeTransactionRef(tx), fee, time, entry_height, spends_coinbase, sig_op_cost, {}};
|
||||||
|
}
|
|
@ -2,9 +2,12 @@
|
||||||
// Distributed under the MIT software license, see the accompanying
|
// Distributed under the MIT software license, see the accompanying
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
#ifndef BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
#ifndef BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
||||||
#define BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
#define BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
||||||
|
|
||||||
|
#include <primitives/transaction.h>
|
||||||
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
|
#include <txmempool.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
|
|
||||||
class DummyChainState final : public Chainstate
|
class DummyChainState final : public Chainstate
|
||||||
|
@ -16,4 +19,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_TEST_FUZZ_MEMPOOL_UTILS_H
|
[[nodiscard]] CTxMemPoolEntry ConsumeTxMemPoolEntry(FuzzedDataProvider& fuzzed_data_provider, const CTransaction& tx) noexcept;
|
||||||
|
|
||||||
|
#endif // BITCOIN_TEST_FUZZ_UTIL_MEMPOOL_H
|
|
@ -9,8 +9,8 @@
|
||||||
#include <node/mempool_persist_args.h>
|
#include <node/mempool_persist_args.h>
|
||||||
#include <test/fuzz/FuzzedDataProvider.h>
|
#include <test/fuzz/FuzzedDataProvider.h>
|
||||||
#include <test/fuzz/fuzz.h>
|
#include <test/fuzz/fuzz.h>
|
||||||
#include <test/fuzz/mempool_utils.h>
|
|
||||||
#include <test/fuzz/util.h>
|
#include <test/fuzz/util.h>
|
||||||
|
#include <test/fuzz/util/mempool.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
#include <util/time.h>
|
#include <util/time.h>
|
||||||
|
|
Loading…
Add table
Reference in a new issue