|
@@ -0,0 +1,19 @@
|
|
|
|
|
+#include <gtest/gtest.h>
|
|
|
|
|
+#include "rate_limiter.hpp"
|
|
|
|
|
+using namespace svapi;
|
|
|
|
|
+TEST(RateLimiter, AllowsUpToLimitThenBlocks) {
|
|
|
|
|
+ RateLimiter rl; int64_t t = 1000; rl.setClockForTesting([&]{ return t; });
|
|
|
|
|
+ EXPECT_TRUE(rl.allow("k", 2));
|
|
|
|
|
+ EXPECT_TRUE(rl.allow("k", 2));
|
|
|
|
|
+ EXPECT_FALSE(rl.allow("k", 2)); // 3rd in same minute blocked
|
|
|
|
|
+ t += 60; // next window
|
|
|
|
|
+ EXPECT_TRUE(rl.allow("k", 2)); // resets
|
|
|
|
|
+}
|
|
|
|
|
+TEST(RateLimiter, ZeroMeansUnlimited) {
|
|
|
|
|
+ RateLimiter rl; for (int i=0;i<1000;i++) EXPECT_TRUE(rl.allow("k", 0));
|
|
|
|
|
+}
|
|
|
|
|
+TEST(RateLimiter, KeysAreIndependent) {
|
|
|
|
|
+ RateLimiter rl; int64_t t=1000; rl.setClockForTesting([&]{ return t; });
|
|
|
|
|
+ EXPECT_TRUE(rl.allow("a",1)); EXPECT_FALSE(rl.allow("a",1));
|
|
|
|
|
+ EXPECT_TRUE(rl.allow("b",1));
|
|
|
|
|
+}
|