package core.framework.impl.web.rate; import org.junit.Test; import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author neo */ public class RateLimiterTest { @Test public void acquire() { RateLimiter.Rate rate = new RateLimiter.Rate(1); rate.lastUpdateTime = 100; boolean result = rate.acquire(101, 2, 1); assertTrue(result); assertEquals(1, rate.currentPermits, 0.000001); result = rate.acquire(101, 2, 1); assertTrue(result); assertEquals(0, rate.currentPermits, 0.000001); result = rate.acquire(101, 2, 1); assertFalse(result); result = rate.acquire(102, 2, 1); assertTrue(result); assertEquals(0, rate.currentPermits, 0.000001); } @Test public void ratePerNano() { RateLimiter limiter = new RateLimiter(1); assertEquals(0.1, limiter.ratePerNano(100, TimeUnit.MICROSECONDS), 0.0000000000001); assertEquals(0.000000001, limiter.ratePerNano(1, TimeUnit.SECONDS), 0.0000000000001); assertEquals(100, limiter.ratePerNano(100, TimeUnit.NANOSECONDS), 0.0000000000001); } }