diff --git a/src/test/fuzz/util/net.cpp b/src/test/fuzz/util/net.cpp index b02c4edbadf..a134e5ad4f7 100644 --- a/src/test/fuzz/util/net.cpp +++ b/src/test/fuzz/util/net.cpp @@ -113,8 +113,10 @@ template CAddress::SerParams ConsumeDeserializationParams(FuzzedDataProvider&) n FuzzedSock::FuzzedSock(FuzzedDataProvider& fuzzed_data_provider) : Sock{fuzzed_data_provider.ConsumeIntegralInRange(INVALID_SOCKET - 1, INVALID_SOCKET)}, m_fuzzed_data_provider{fuzzed_data_provider}, - m_selectable{fuzzed_data_provider.ConsumeBool()} + m_selectable{fuzzed_data_provider.ConsumeBool()}, + m_time{MockableSteadyClock::INITIAL_MOCK_TIME} { + ElapseTime(std::chrono::seconds(0)); // start mocking the steady clock. } FuzzedSock::~FuzzedSock() @@ -126,6 +128,12 @@ FuzzedSock::~FuzzedSock() m_socket = INVALID_SOCKET; } +void FuzzedSock::ElapseTime(std::chrono::milliseconds duration) const +{ + m_time += duration; + MockableSteadyClock::SetMockTime(m_time); +} + FuzzedSock& FuzzedSock::operator=(Sock&& other) { assert(false && "Move of Sock into FuzzedSock not allowed."); @@ -388,6 +396,7 @@ bool FuzzedSock::Wait(std::chrono::milliseconds timeout, Event requested, Event* // FuzzedDataProvider runs out of data. *occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : requested; } + ElapseTime(timeout); return true; } @@ -400,6 +409,7 @@ bool FuzzedSock::WaitMany(std::chrono::milliseconds timeout, EventsPerSock& even // FuzzedDataProvider runs out of data. events.occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : events.requested; } + ElapseTime(timeout); return true; } diff --git a/src/test/fuzz/util/net.h b/src/test/fuzz/util/net.h index cc73cdff4b7..698001a7f15 100644 --- a/src/test/fuzz/util/net.h +++ b/src/test/fuzz/util/net.h @@ -157,6 +157,16 @@ class FuzzedSock : public Sock */ const bool m_selectable; + /** + * Used to mock the steady clock in methods waiting for a given duration. + */ + mutable std::chrono::milliseconds m_time; + + /** + * Set the value of the mocked steady clock such as that many ms have passed. + */ + void ElapseTime(std::chrono::milliseconds duration) const; + public: explicit FuzzedSock(FuzzedDataProvider& fuzzed_data_provider);