Skip to content

Commit 4de6303

Browse files
committed
[tools] add PoissonNextSend method that returns mockable time
1 parent deb2327 commit 4de6303

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/net.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -943,11 +943,13 @@ class CNode
943943
void MaybeSetAddrName(const std::string& addrNameIn);
944944
};
945945

946-
947-
948-
949-
950946
/** Return a timestamp in the future (in microseconds) for exponentially distributed events. */
951947
int64_t PoissonNextSend(int64_t now, int average_interval_seconds);
952948

949+
/** Wrapper to return mockable type */
950+
inline std::chrono::microseconds PoissonNextSend(std::chrono::microseconds now, std::chrono::seconds average_interval)
951+
{
952+
return std::chrono::microseconds{PoissonNextSend(now.count(), average_interval.count())};
953+
}
954+
953955
#endif // BITCOIN_NET_H

src/test/net_tests.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,5 +303,19 @@ BOOST_AUTO_TEST_CASE(LocalAddress_BasicLifecycle)
303303
BOOST_CHECK_EQUAL(IsLocal(addr), false);
304304
}
305305

306+
BOOST_AUTO_TEST_CASE(PoissonNextSend)
307+
{
308+
g_mock_deterministic_tests = true;
309+
310+
int64_t now = 5000;
311+
int average_interval_seconds = 600;
312+
313+
auto poisson = ::PoissonNextSend(now, average_interval_seconds);
314+
std::chrono::microseconds poisson_chrono = ::PoissonNextSend(std::chrono::microseconds{now}, std::chrono::seconds{average_interval_seconds});
315+
316+
BOOST_CHECK_EQUAL(poisson, poisson_chrono.count());
317+
318+
g_mock_deterministic_tests = false;
319+
}
306320

307321
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)