Skip to content

Commit a245429

Browse files
committed
Merge bitcoin#26940: test: create random and coins utils, add amount helper, dedupe add_coin
4275195 De-duplicate add_coin methods to a test util helper (Jon Atack) 9d92c3d Create InsecureRandMoneyAmount() test util helper (Jon Atack) 81f5ade Move random test util code from setup_common to random (Jon Atack) Pull request description: - Move random test utilities from `setup_common` to a new `random` file, as many tests don't use this code. - Create a helper to generate semi-random CAmounts up to `MONEY_RANGE` rather than only uint32, and use the helper in the unit tests. - De-duplicate a shared `add_coin` method by extracting it to a `coins` test utility. ACKs for top commit: pinheadmz: ACK 4275195 achow101: ACK 4275195 john-moffett: ACK 4275195 Tree-SHA512: 3ed974251149c7417f935ef2f8865aa0dcc33b281b47522b0f96f1979dff94bb8527957f098fe4d210f40d715c00f29512f2ffe189097102229023b7284a3a27
2 parents 9321df4 + 4275195 commit a245429

39 files changed

+139
-43
lines changed

ci/test/06_script_b.sh

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ if [ "${RUN_TIDY}" = "true" ]; then
6060
" src/rpc/signmessage.cpp"\
6161
" src/test/fuzz/txorphan.cpp"\
6262
" src/test/fuzz/util/"\
63+
" src/test/util/coins.cpp"\
6364
" src/uint256.cpp"\
6465
" src/util/bip32.cpp"\
6566
" src/util/bytevectorhash.cpp"\

src/Makefile.test_util.include

+3
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ EXTRA_LIBRARIES += \
1010
TEST_UTIL_H = \
1111
test/util/blockfilter.h \
1212
test/util/chainstate.h \
13+
test/util/coins.h \
1314
test/util/json.h \
1415
test/util/logging.h \
1516
test/util/mining.h \
1617
test/util/net.h \
18+
test/util/random.h \
1719
test/util/script.h \
1820
test/util/setup_common.h \
1921
test/util/str.h \
@@ -30,6 +32,7 @@ libtest_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
3032
libtest_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
3133
libtest_util_a_SOURCES = \
3234
test/util/blockfilter.cpp \
35+
test/util/coins.cpp \
3336
test/util/json.cpp \
3437
test/util/logging.cpp \
3538
test/util/mining.cpp \

src/test/base58_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <base58.h>
88
#include <test/util/json.h>
9+
#include <test/util/random.h>
910
#include <test/util/setup_common.h>
1011
#include <util/strencodings.h>
1112
#include <util/vector.h>

src/test/blockencodings_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <consensus/merkle.h>
88
#include <pow.h>
99
#include <streams.h>
10+
#include <test/util/random.h>
1011
#include <test/util/txmempool.h>
1112

1213
#include <test/util/setup_common.h>

src/test/bloom_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <random.h>
1313
#include <serialize.h>
1414
#include <streams.h>
15+
#include <test/util/random.h>
1516
#include <test/util/setup_common.h>
1617
#include <uint256.h>
1718
#include <util/strencodings.h>

src/test/checkqueue_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <checkqueue.h>
66
#include <sync.h>
7+
#include <test/util/random.h>
78
#include <test/util/setup_common.h>
89
#include <util/system.h>
910
#include <util/time.h>

src/test/coins_tests.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <coins.h>
77
#include <script/standard.h>
88
#include <streams.h>
9+
#include <test/util/random.h>
910
#include <test/util/setup_common.h>
1011
#include <txdb.h>
1112
#include <uint256.h>
@@ -172,7 +173,7 @@ void SimulationTest(CCoinsView* base, bool fake_best_block)
172173

173174
if (InsecureRandRange(5) == 0 || coin.IsSpent()) {
174175
Coin newcoin;
175-
newcoin.out.nValue = InsecureRand32();
176+
newcoin.out.nValue = InsecureRandMoneyAmount();
176177
newcoin.nHeight = 1;
177178

178179
// Infrequently test adding unspendable coins.

src/test/crypto_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <crypto/muhash.h>
1818
#include <random.h>
1919
#include <streams.h>
20+
#include <test/util/random.h>
2021
#include <test/util/setup_common.h>
2122
#include <util/strencodings.h>
2223

src/test/cuckoocache_tests.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// Copyright (c) 2012-2021 The Bitcoin Core developers
22
// Distributed under the MIT software license, see the accompanying
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
45
#include <cuckoocache.h>
56
#include <random.h>
67
#include <script/sigcache.h>
8+
#include <test/util/random.h>
79
#include <test/util/setup_common.h>
810

911
#include <boost/test/unit_test.hpp>

src/test/dbwrapper_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <dbwrapper.h>
6+
#include <test/util/random.h>
67
#include <test/util/setup_common.h>
78
#include <uint256.h>
89
#include <util/string.h>

src/test/hash_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <clientversion.h>
66
#include <crypto/siphash.h>
77
#include <hash.h>
8+
#include <test/util/random.h>
89
#include <test/util/setup_common.h>
910
#include <util/strencodings.h>
1011

src/test/key_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include <key_io.h>
88
#include <streams.h>
9+
#include <test/util/random.h>
910
#include <test/util/setup_common.h>
1011
#include <uint256.h>
1112
#include <util/strencodings.h>

src/test/merkle_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <consensus/merkle.h>
6+
#include <test/util/random.h>
67
#include <test/util/setup_common.h>
78

89
#include <boost/test/unit_test.hpp>

src/test/miner_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <node/miner.h>
1010
#include <policy/policy.h>
1111
#include <script/standard.h>
12+
#include <test/util/random.h>
1213
#include <test/util/txmempool.h>
1314
#include <timedata.h>
1415
#include <txmempool.h>

src/test/minisketch_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <minisketch.h>
66
#include <node/minisketchwrapper.h>
77
#include <random.h>
8+
#include <test/util/random.h>
89
#include <test/util/setup_common.h>
910

1011
#include <boost/test/unit_test.hpp>

src/test/orphanage_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <script/sign.h>
88
#include <script/signingprovider.h>
99
#include <script/standard.h>
10+
#include <test/util/random.h>
1011
#include <test/util/setup_common.h>
1112
#include <txorphanage.h>
1213

src/test/pmt_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <merkleblock.h>
77
#include <serialize.h>
88
#include <streams.h>
9+
#include <test/util/random.h>
910
#include <test/util/setup_common.h>
1011
#include <uint256.h>
1112
#include <version.h>

src/test/pow_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <chain.h>
66
#include <chainparams.h>
77
#include <pow.h>
8+
#include <test/util/random.h>
89
#include <test/util/setup_common.h>
910

1011
#include <boost/test/unit_test.hpp>

src/test/prevector_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <serialize.h>
1010
#include <streams.h>
1111

12+
#include <test/util/random.h>
1213
#include <test/util/setup_common.h>
1314

1415
#include <boost/test/unit_test.hpp>

src/test/script_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <script/signingprovider.h>
1717
#include <streams.h>
1818
#include <test/util/json.h>
19+
#include <test/util/random.h>
1920
#include <test/util/setup_common.h>
2021
#include <test/util/transaction_utils.h>
2122
#include <util/strencodings.h>

src/test/serfloat_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <hash.h>
6+
#include <test/util/random.h>
67
#include <test/util/setup_common.h>
78
#include <util/serfloat.h>
89
#include <serialize.h>

src/test/sighash_tests.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <streams.h>
1212
#include <test/data/sighash.json.h>
1313
#include <test/util/json.h>
14+
#include <test/util/random.h>
1415
#include <test/util/setup_common.h>
1516
#include <util/strencodings.h>
1617
#include <util/system.h>
@@ -109,7 +110,7 @@ void static RandomTransaction(CMutableTransaction& tx, bool fSingle)
109110
for (int out = 0; out < outs; out++) {
110111
tx.vout.push_back(CTxOut());
111112
CTxOut &txout = tx.vout.back();
112-
txout.nValue = InsecureRandRange(100000000);
113+
txout.nValue = InsecureRandMoneyAmount();
113114
RandomScript(txout.scriptPubKey);
114115
}
115116
}

src/test/skiplist_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include <chain.h>
6+
#include <test/util/random.h>
67
#include <test/util/setup_common.h>
78

89
#include <vector>

src/test/streams_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <fs.h>
66
#include <streams.h>
7+
#include <test/util/random.h>
78
#include <test/util/setup_common.h>
89

910
#include <boost/test/unit_test.hpp>

src/test/transaction_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <script/standard.h>
2323
#include <streams.h>
2424
#include <test/util/json.h>
25+
#include <test/util/random.h>
2526
#include <test/util/script.h>
2627
#include <test/util/transaction_utils.h>
2728
#include <util/strencodings.h>

src/test/txpackage_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <primitives/transaction.h>
1010
#include <script/script.h>
1111
#include <script/standard.h>
12+
#include <test/util/random.h>
1213
#include <test/util/setup_common.h>
1314
#include <validation.h>
1415

src/test/txrequest_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <txrequest.h>
77
#include <uint256.h>
88

9+
#include <test/util/random.h>
910
#include <test/util/setup_common.h>
1011

1112
#include <algorithm>

src/test/util/blockfilter.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,3 @@ bool ComputeFilter(BlockFilterType filter_type, const CBlockIndex* block_index,
2828
filter = BlockFilter(filter_type, block, block_undo);
2929
return true;
3030
}
31-

src/test/util/coins.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) 2023 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#include <test/util/coins.h>
6+
7+
#include <coins.h>
8+
#include <primitives/transaction.h>
9+
#include <script/script.h>
10+
#include <test/util/random.h>
11+
#include <uint256.h>
12+
13+
#include <stdint.h>
14+
#include <utility>
15+
16+
COutPoint AddTestCoin(CCoinsViewCache& coins_view)
17+
{
18+
Coin new_coin;
19+
const uint256 txid{InsecureRand256()};
20+
COutPoint outpoint{txid, /*nIn=*/0};
21+
new_coin.nHeight = 1;
22+
new_coin.out.nValue = InsecureRandMoneyAmount();
23+
new_coin.out.scriptPubKey.assign(uint32_t{56}, 1);
24+
coins_view.AddCoin(outpoint, std::move(new_coin), /*possible_overwrite=*/false);
25+
26+
return outpoint;
27+
};

src/test/util/coins.h

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2023 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#ifndef BITCOIN_TEST_UTIL_COINS_H
6+
#define BITCOIN_TEST_UTIL_COINS_H
7+
8+
#include <primitives/transaction.h>
9+
10+
class CCoinsViewCache;
11+
12+
/**
13+
* Create a Coin with DynamicMemoryUsage of 80 bytes and add it to the given view.
14+
* @param[in,out] coins_view The coins view cache to add the new coin to.
15+
* @returns the COutPoint of the created coin.
16+
*/
17+
COutPoint AddTestCoin(CCoinsViewCache& coins_view);
18+
19+
#endif // BITCOIN_TEST_UTIL_COINS_H

src/test/util/random.h

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Copyright (c) 2023 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#ifndef BITCOIN_TEST_UTIL_RANDOM_H
6+
#define BITCOIN_TEST_UTIL_RANDOM_H
7+
8+
#include <consensus/amount.h>
9+
#include <random.h>
10+
#include <test/util/setup_common.h>
11+
#include <uint256.h>
12+
13+
#include <cstdint>
14+
15+
static inline uint32_t InsecureRand32()
16+
{
17+
return g_insecure_rand_ctx.rand32();
18+
}
19+
20+
static inline uint256 InsecureRand256()
21+
{
22+
return g_insecure_rand_ctx.rand256();
23+
}
24+
25+
static inline uint64_t InsecureRandBits(int bits)
26+
{
27+
return g_insecure_rand_ctx.randbits(bits);
28+
}
29+
30+
static inline uint64_t InsecureRandRange(uint64_t range)
31+
{
32+
return g_insecure_rand_ctx.randrange(range);
33+
}
34+
35+
static inline bool InsecureRandBool()
36+
{
37+
return g_insecure_rand_ctx.randbool();
38+
}
39+
40+
static inline CAmount InsecureRandMoneyAmount()
41+
{
42+
return static_cast<CAmount>(InsecureRandRange(MAX_MONEY + 1));
43+
}
44+
45+
#endif // BITCOIN_TEST_UTIL_RANDOM_H

src/test/util/setup_common.h

-6
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,6 @@ static inline void SeedInsecureRand(SeedRand seed = SeedRand::SEED)
7171
}
7272
}
7373

74-
static inline uint32_t InsecureRand32() { return g_insecure_rand_ctx.rand32(); }
75-
static inline uint256 InsecureRand256() { return g_insecure_rand_ctx.rand256(); }
76-
static inline uint64_t InsecureRandBits(int bits) { return g_insecure_rand_ctx.randbits(bits); }
77-
static inline uint64_t InsecureRandRange(uint64_t range) { return g_insecure_rand_ctx.randrange(range); }
78-
static inline bool InsecureRandBool() { return g_insecure_rand_ctx.randbool(); }
79-
8074
static constexpr CAmount CENT{1000000};
8175

8276
/** Basic testing setup.

src/test/util_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <hash.h> // For Hash()
1010
#include <key.h> // For CKey
1111
#include <sync.h>
12+
#include <test/util/random.h>
1213
#include <test/util/setup_common.h>
1314
#include <uint256.h>
1415
#include <util/getuniquepath.h>

src/test/validation_block_tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <pow.h>
1212
#include <random.h>
1313
#include <script/standard.h>
14+
#include <test/util/random.h>
1415
#include <test/util/script.h>
1516
#include <test/util/setup_common.h>
1617
#include <util/time.h>

0 commit comments

Comments
 (0)