SERVER-107924 Make RateLimitIsValidAfterQueueing test resilient to slow machines (#41656)

GitOrigin-RevId: 1ac25655a8d9a1a5e3a219955b8e23e513b6a0bb
This commit is contained in:
Erin McNulty 2025-09-22 14:55:47 -04:00 committed by MongoDB Bot
parent a082c84cc9
commit 2e536df639

View File

@ -59,6 +59,11 @@ auto constexpr convertBurstSizeToBurstCapacitySecs(double refreshRate, double bu
return burstSize / refreshRate;
}
auto assertApproxEqualUnevenBounds(double value, double lowerBound, double upperBound) {
ASSERT_GTE(value, lowerBound);
ASSERT_LT(value, upperBound);
}
class RateLimiterTest : public ServiceContextTest {
private:
unittest::MinimumLoggedSeverityGuard logSeverityGuard{logv2::LogComponent::kDefault,
@ -135,7 +140,11 @@ TEST_F(RateLimiterTest, RateLimitIsValidAfterQueueing) {
"Elapsed vs. expected elapsed millis",
"elapsed"_attr = elapsed,
"expected"_attr = expectedElapsedMillis);
ASSERT_APPROX_EQUAL(durationCount<Milliseconds>(elapsed), expectedElapsedMillis, 100);
// The folly token bucket may dispense tokens at a slightly lower rate than specified,
// but it must not dispense tokens at a higher rate.
assertApproxEqualUnevenBounds(durationCount<Milliseconds>(elapsed),
expectedElapsedMillis - 100,
expectedElapsedMillis + 1000);
// Once all the threads have joined, we expect that 3 threads were admitted and 2 were
// rejected.
@ -156,7 +165,7 @@ TEST_F(RateLimiterTest, RateLimitIsValidAfterQueueing) {
"Elapsed vs. expected elapsed millis",
"elapsed"_attr = finalElapsed,
"expected"_attr = expectedFinalMillis);
ASSERT_APPROX_EQUAL(durationCount<Milliseconds>(finalElapsed), expectedFinalMillis, 100);
ASSERT_APPROX_EQUAL(durationCount<Milliseconds>(finalElapsed), expectedFinalMillis, 500);
});
}