mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
fuzz: add steady clock mocking to FuzzedSock
This commit is contained in:
parent
6fe1c35c05
commit
39b7e2b590
2 changed files with 21 additions and 1 deletions
|
@ -113,8 +113,10 @@ template CAddress::SerParams ConsumeDeserializationParams(FuzzedDataProvider&) n
|
|||
FuzzedSock::FuzzedSock(FuzzedDataProvider& fuzzed_data_provider)
|
||||
: Sock{fuzzed_data_provider.ConsumeIntegralInRange<SOCKET>(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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue