51 lines
1.6 KiB
Java
51 lines
1.6 KiB
Java
package dev.coph.nextusweb.server.ratelimit;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class TokenBucketLimiterTest {
|
|
|
|
@Test
|
|
void burstUpToCapacityIsAllowed() {
|
|
TokenBucketLimiter lim = new TokenBucketLimiter(1, 3);
|
|
long now = 0;
|
|
assertTrue(lim.tryAcquire("k", now).allowed());
|
|
assertTrue(lim.tryAcquire("k", now).allowed());
|
|
assertTrue(lim.tryAcquire("k", now).allowed());
|
|
}
|
|
|
|
@Test
|
|
void emptyBucketIsDeniedAndRetryAfterIsPositive() {
|
|
TokenBucketLimiter lim = new TokenBucketLimiter(1, 1);
|
|
assertTrue(lim.tryAcquire("k", 0).allowed());
|
|
RateLimiter.Result r = lim.tryAcquire("k", 0);
|
|
assertFalse(r.allowed());
|
|
assertTrue(r.retryAfterMillis() > 0);
|
|
assertEquals(1, r.limit());
|
|
}
|
|
|
|
@Test
|
|
void refillAllowsAcquireAfterTime() {
|
|
TokenBucketLimiter lim = new TokenBucketLimiter(10, 1);
|
|
assertTrue(lim.tryAcquire("k", 0).allowed());
|
|
assertFalse(lim.tryAcquire("k", 0).allowed());
|
|
long oneSecLater = 1_000_000_000L;
|
|
assertTrue(lim.tryAcquire("k", oneSecLater).allowed());
|
|
}
|
|
|
|
@Test
|
|
void differentKeysAreIndependent() {
|
|
TokenBucketLimiter lim = new TokenBucketLimiter(1, 1);
|
|
assertTrue(lim.tryAcquire("a", 0).allowed());
|
|
assertTrue(lim.tryAcquire("b", 0).allowed());
|
|
}
|
|
|
|
@Test
|
|
void cleanupDoesNotThrow() {
|
|
TokenBucketLimiter lim = new TokenBucketLimiter(1, 1);
|
|
lim.tryAcquire("k", System.nanoTime());
|
|
assertDoesNotThrow(() -> lim.cleanup(0));
|
|
}
|
|
}
|