mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-31 02:31:07 +00:00
Merge bitcoin/bitcoin#34337: fuzz: Return chrono point from ConsumeTime(), Add ConsumeDuration()
eeee3755f8c415b227820479b5492261f3a8aa08 fuzz: Return chrono point from ConsumeTime(), Add ConsumeDuration() (MarcoFalke)
faa5a9ebad15fe41e8ddf45f11ad72bdc5aabf99 fuzz: Use min option in ConsumeTime (MarcoFalke)
Pull request description:
Returning a raw i64 is a bit confusing when it comes to chrono types. For example, in the addrman fuzz tests, the `time_penalty` is not a time point, but a duration.
Also, all call-sites assume second resolution right now, so document that better by returning `NodeSeconds` from `ConsumeTime(...)` and `std::chrono::seconds` from `ConsumeDuration(...)`.
ACKs for top commit:
l0rinc:
ACK eeee3755f8c415b227820479b5492261f3a8aa08
Crypt-iQ:
crACK eeee3755f8c415b227820479b5492261f3a8aa08
Tree-SHA512: 25dd779a1bf79fa42c6e69db0f0593ad4daa4c0d746e8e82a26bdd65391a27c38e484431056d4e2207b542c511a71cb536c259809728a7166b8d304c0490e321
This commit is contained in:
commit
2778eb4664
@ -144,23 +144,23 @@ FUZZ_TARGET(addrman, .init = initialize_addrman)
|
||||
addresses.push_back(ConsumeAddress(fuzzed_data_provider));
|
||||
}
|
||||
auto net_addr = ConsumeNetAddr(fuzzed_data_provider);
|
||||
auto time_penalty = std::chrono::seconds{ConsumeTime(fuzzed_data_provider, 0, 100000000)};
|
||||
auto time_penalty = ConsumeDuration(fuzzed_data_provider, /*min=*/0s, /*max=*/100000000s);
|
||||
addr_man.Add(addresses, net_addr, time_penalty);
|
||||
},
|
||||
[&] {
|
||||
auto addr = ConsumeService(fuzzed_data_provider);
|
||||
auto time = NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}};
|
||||
auto time = ConsumeTime(fuzzed_data_provider);
|
||||
addr_man.Good(addr, time);
|
||||
},
|
||||
[&] {
|
||||
auto addr = ConsumeService(fuzzed_data_provider);
|
||||
auto count_failure = fuzzed_data_provider.ConsumeBool();
|
||||
auto time = NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}};
|
||||
auto time = ConsumeTime(fuzzed_data_provider);
|
||||
addr_man.Attempt(addr, count_failure, time);
|
||||
},
|
||||
[&] {
|
||||
auto addr = ConsumeService(fuzzed_data_provider);
|
||||
auto time = NodeSeconds{std::chrono::seconds{ConsumeTime(fuzzed_data_provider)}};
|
||||
auto time = ConsumeTime(fuzzed_data_provider);
|
||||
addr_man.Connected(addr, time);
|
||||
},
|
||||
[&] {
|
||||
|
||||
@ -55,13 +55,11 @@ FUZZ_TARGET(headers_sync_state, .init = initialize_headers_sync_state_fuzz)
|
||||
{
|
||||
SeedRandomStateForTest(SeedRand::ZEROS);
|
||||
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
|
||||
auto mock_time{ConsumeTime(fuzzed_data_provider)};
|
||||
|
||||
CBlockHeader genesis_header{Params().GenesisBlock()};
|
||||
CBlockIndex start_index(genesis_header);
|
||||
|
||||
if (mock_time < start_index.GetMedianTimePast()) return;
|
||||
SetMockTime(mock_time);
|
||||
SetMockTime(ConsumeTime(fuzzed_data_provider, /*min=*/start_index.GetMedianTimePast()));
|
||||
|
||||
const uint256 genesis_hash = genesis_header.GetHash();
|
||||
start_index.phashBlock = &genesis_hash;
|
||||
|
||||
@ -121,7 +121,7 @@ CBlockHeader ConsumeHeader(FuzzedDataProvider& fuzzed_data_provider, const uint2
|
||||
arith_uint256 target = ConsumeArithUInt256InRange(fuzzed_data_provider, lower_target, upper_target);
|
||||
header.nBits = target.GetCompact();
|
||||
}
|
||||
header.nTime = ConsumeTime(fuzzed_data_provider);
|
||||
header.nTime = TicksSinceEpoch<std::chrono::seconds>(ConsumeTime(fuzzed_data_provider));
|
||||
header.hashPrevBlock = prev_hash;
|
||||
header.nVersion = fuzzed_data_provider.ConsumeIntegral<int32_t>();
|
||||
return header;
|
||||
|
||||
@ -31,12 +31,17 @@ CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider, const std::option
|
||||
return fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(0, max.value_or(MAX_MONEY));
|
||||
}
|
||||
|
||||
int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider, const std::optional<int64_t>& min, const std::optional<int64_t>& max) noexcept
|
||||
NodeSeconds ConsumeTime(FuzzedDataProvider& fuzzed_data_provider, const std::optional<int64_t>& min, const std::optional<int64_t>& max) noexcept
|
||||
{
|
||||
// Avoid t=0 (1970-01-01T00:00:00Z) since SetMockTime(0) disables mocktime.
|
||||
static const int64_t time_min{ParseISO8601DateTime("2000-01-01T00:00:01Z").value()};
|
||||
static const int64_t time_max{ParseISO8601DateTime("2100-12-31T23:59:59Z").value()};
|
||||
return fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(min.value_or(time_min), max.value_or(time_max));
|
||||
return NodeSeconds{ConsumeDuration(fuzzed_data_provider, min.value_or(time_min) * 1s, max.value_or(time_max) * 1s)};
|
||||
}
|
||||
|
||||
std::chrono::seconds ConsumeDuration(FuzzedDataProvider& fuzzed_data_provider, std::chrono::seconds min, std::chrono::seconds max) noexcept
|
||||
{
|
||||
return 1s * fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(min.count(), max.count());
|
||||
}
|
||||
|
||||
CMutableTransaction ConsumeTransaction(FuzzedDataProvider& fuzzed_data_provider, const std::optional<std::vector<Txid>>& prevout_txids, const int max_num_in, const int max_num_out) noexcept
|
||||
|
||||
@ -144,7 +144,8 @@ template <typename WeakEnumType, size_t size>
|
||||
|
||||
[[nodiscard]] CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider, const std::optional<CAmount>& max = std::nullopt) noexcept;
|
||||
|
||||
[[nodiscard]] int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider, const std::optional<int64_t>& min = std::nullopt, const std::optional<int64_t>& max = std::nullopt) noexcept;
|
||||
[[nodiscard]] NodeSeconds ConsumeTime(FuzzedDataProvider& fuzzed_data_provider, const std::optional<int64_t>& min = std::nullopt, const std::optional<int64_t>& max = std::nullopt) noexcept;
|
||||
[[nodiscard]] std::chrono::seconds ConsumeDuration(FuzzedDataProvider& fuzzed_data_provider, std::chrono::seconds min, std::chrono::seconds max) noexcept;
|
||||
|
||||
[[nodiscard]] CMutableTransaction ConsumeTransaction(FuzzedDataProvider& fuzzed_data_provider, const std::optional<std::vector<Txid>>& prevout_txids, int max_num_in = 10, int max_num_out = 10) noexcept;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user