resume-parser / src /test /java /com /resumeparser /config /RateLimitInterceptorTest.java
hari7775's picture
Add 3 requests per month IP rate limiting
1419a33
Raw History Blame Contribute Delete
2.96 kB
package com.resumeparser.config;
import com.resumeparser.service.FirestoreRateLimiterService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
class RateLimitInterceptorTest {
private FirestoreRateLimiterService rateLimiterService;
private RateLimitInterceptor interceptor;
@BeforeEach
void setUp() {
rateLimiterService = mock(FirestoreRateLimiterService.class);
interceptor = new RateLimitInterceptor(rateLimiterService);
}
@Test
void shouldAllowOptionsRequestsWithoutRateLimiting() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("OPTIONS");
MockHttpServletResponse response = new MockHttpServletResponse();
boolean result = interceptor.preHandle(request, response, new Object());
assertTrue(result);
verifyNoInteractions(rateLimiterService);
}
@Test
void shouldAllowRequestWhenUnderLimit() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.setRemoteAddr("192.168.1.50");
MockHttpServletResponse response = new MockHttpServletResponse();
when(rateLimiterService.isAllowed("192.168.1.50")).thenReturn(true);
boolean result = interceptor.preHandle(request, response, new Object());
assertTrue(result);
assertEquals(200, response.getStatus());
}
@Test
void shouldBlockRequestWith429WhenLimitExceeded() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.setRemoteAddr("192.168.1.50");
MockHttpServletResponse response = new MockHttpServletResponse();
when(rateLimiterService.isAllowed("192.168.1.50")).thenReturn(false);
boolean result = interceptor.preHandle(request, response, new Object());
assertFalse(result);
assertEquals(429, response.getStatus());
assertTrue(response.getContentAsString().contains("Too many requests"));
}
@Test
void shouldExtractIpFromXForwardedForHeader() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.addHeader("X-Forwarded-For", "203.0.113.195, 10.0.0.1");
request.setRemoteAddr("127.0.0.1");
MockHttpServletResponse response = new MockHttpServletResponse();
when(rateLimiterService.isAllowed("203.0.113.195")).thenReturn(true);
boolean result = interceptor.preHandle(request, response, new Object());
assertTrue(result);
verify(rateLimiterService).isAllowed("203.0.113.195");
}
}