@Override public void stop() throws Exception { requestRateLimiterFactory.close(); } });
RateLimited rateLimited = method.getAnnotation(RateLimited.class); RequestRateLimiter rateLimit = factory.getInstance(toLimitRules(rateLimited));
@Test @DisplayName("should not limit request") public void shouldNotLimit() { when(requestRateLimiterFactory.getInstance(anySet())).thenReturn(requestRateLimiter); when(requestRateLimiter.overLimitWhenIncremented(anyString())).thenReturn(false); Response response = rule.getJerseyTest().target("/test/{id}").resolveTemplate("id", 1) .request(MediaType.APPLICATION_JSON_TYPE) .get(); assertThat(response.getStatus()).isEqualTo(200); }
@Test @DisplayName("should configure rate limiter") public void shouldReportOnly() { when(requestRateLimiterFactory.getInstance(anySet())).thenReturn(requestRateLimiter); when(requestRateLimiter.overLimitWhenIncremented(anyString())).thenReturn(true); Response response = rule.getJerseyTest().target("/test/reportOnly/{id}").resolveTemplate("id", 1) .request(MediaType.APPLICATION_JSON_TYPE) .get(); assertThat(response.getStatus()).isEqualTo(200); }
@Test @DisplayName("should not limit if the backing rate limiter throws exception") public void shouldNotLimitIfBackingRateLimiterFails() { when(requestRateLimiterFactory.getInstance(anySet())).thenReturn(requestRateLimiter); when(requestRateLimiter.overLimitWhenIncremented(anyString())).thenThrow(new RuntimeException()); Response response = rule.getJerseyTest().target("/test/{id}").resolveTemplate("id", 1) .request(MediaType.APPLICATION_JSON_TYPE) .get(); assertThat(response.getStatus()).isEqualTo(200); }
@Test @DisplayName("should limit request returning a 429") public void shouldLimit() { when(requestRateLimiterFactory.getInstance(anySet())).thenReturn(requestRateLimiter); when(requestRateLimiter.overLimitWhenIncremented(anyString())).thenReturn(true); Response response = rule.getJerseyTest().target("/test/{id}").resolveTemplate("id", 1) .request(MediaType.APPLICATION_JSON_TYPE) .get(); assertThat(response.getStatus()).isEqualTo(429); }