[tools] add PoissonNextSend method that returns mockable time

This commit is contained in:
Amiti Uttarwar 2019-11-05 11:06:53 +01:00
parent deb2327b43
commit 4de630354f
2 changed files with 20 additions and 4 deletions

View file

@ -943,11 +943,13 @@ public:
void MaybeSetAddrName(const std::string& addrNameIn);
};
/** Return a timestamp in the future (in microseconds) for exponentially distributed events. */
int64_t PoissonNextSend(int64_t now, int average_interval_seconds);
/** Wrapper to return mockable type */
inline std::chrono::microseconds PoissonNextSend(std::chrono::microseconds now, std::chrono::seconds average_interval)
{
return std::chrono::microseconds{PoissonNextSend(now.count(), average_interval.count())};
}
#endif // BITCOIN_NET_H

View file

@ -303,5 +303,19 @@ BOOST_AUTO_TEST_CASE(LocalAddress_BasicLifecycle)
BOOST_CHECK_EQUAL(IsLocal(addr), false);
}
BOOST_AUTO_TEST_CASE(PoissonNextSend)
{
g_mock_deterministic_tests = true;
int64_t now = 5000;
int average_interval_seconds = 600;
auto poisson = ::PoissonNextSend(now, average_interval_seconds);
std::chrono::microseconds poisson_chrono = ::PoissonNextSend(std::chrono::microseconds{now}, std::chrono::seconds{average_interval_seconds});
BOOST_CHECK_EQUAL(poisson, poisson_chrono.count());
g_mock_deterministic_tests = false;
}
BOOST_AUTO_TEST_SUITE_END()