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)
|
FuzzedSock::FuzzedSock(FuzzedDataProvider& fuzzed_data_provider)
|
||||||
: Sock{fuzzed_data_provider.ConsumeIntegralInRange<SOCKET>(INVALID_SOCKET - 1, INVALID_SOCKET)},
|
: Sock{fuzzed_data_provider.ConsumeIntegralInRange<SOCKET>(INVALID_SOCKET - 1, INVALID_SOCKET)},
|
||||||
m_fuzzed_data_provider{fuzzed_data_provider},
|
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()
|
FuzzedSock::~FuzzedSock()
|
||||||
|
@ -126,6 +128,12 @@ FuzzedSock::~FuzzedSock()
|
||||||
m_socket = INVALID_SOCKET;
|
m_socket = INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FuzzedSock::ElapseTime(std::chrono::milliseconds duration) const
|
||||||
|
{
|
||||||
|
m_time += duration;
|
||||||
|
MockableSteadyClock::SetMockTime(m_time);
|
||||||
|
}
|
||||||
|
|
||||||
FuzzedSock& FuzzedSock::operator=(Sock&& other)
|
FuzzedSock& FuzzedSock::operator=(Sock&& other)
|
||||||
{
|
{
|
||||||
assert(false && "Move of Sock into FuzzedSock not allowed.");
|
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.
|
// FuzzedDataProvider runs out of data.
|
||||||
*occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : requested;
|
*occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : requested;
|
||||||
}
|
}
|
||||||
|
ElapseTime(timeout);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,6 +409,7 @@ bool FuzzedSock::WaitMany(std::chrono::milliseconds timeout, EventsPerSock& even
|
||||||
// FuzzedDataProvider runs out of data.
|
// FuzzedDataProvider runs out of data.
|
||||||
events.occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : events.requested;
|
events.occurred = m_fuzzed_data_provider.ConsumeBool() ? 0 : events.requested;
|
||||||
}
|
}
|
||||||
|
ElapseTime(timeout);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,16 @@ class FuzzedSock : public Sock
|
||||||
*/
|
*/
|
||||||
const bool m_selectable;
|
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:
|
public:
|
||||||
explicit FuzzedSock(FuzzedDataProvider& fuzzed_data_provider);
|
explicit FuzzedSock(FuzzedDataProvider& fuzzed_data_provider);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue