package com.aol.micro.server.ip.tracker;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.junit.Test;
public class QueryIPRetrieverTest {
private class MyFilterChain implements FilterChain {
private QueryIPRetriever queryIPRetriever;
private String ipAddress;
@Override
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
setIpAddress(QueryIPRetriever.getIpAddress());
}
public void setQueryIPRetriever(QueryIPRetriever queryIPRetriever) {
this.queryIPRetriever = queryIPRetriever;
}
public String getIpAddress() {
return ipAddress;
}
public void setIpAddress(String ipAddress) {
this.ipAddress = ipAddress;
}
}
@Test
public void testDoFilter() throws IOException, ServletException {
ServletRequest request = mock(ServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.11", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterWithXLBClientIPHeader() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-LB-Client-IP")).thenReturn("10.10.11.12");
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.12", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterXLBClientIPHeaderBlank() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-LB-Client-IP")).thenReturn("");
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.11", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterXLBClientIPHeaderNull() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-LB-Client-IP")).thenReturn(null);
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.11", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterWithXForwardedForHeader() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-Forwarded-For")).thenReturn("10.10.11.13");
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.13", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterXForwardedForHeaderBlank() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-Forwarded-For")).thenReturn(" ");
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.11", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
@Test
public void testDoFilterXForwardedForHeaderNull() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
ServletResponse response = mock(ServletResponse.class);
when(request.getHeader("X-Forwarded-For")).thenReturn(null);
when(request.getRemoteAddr()).thenReturn("10.10.11.11");
QueryIPRetriever queryIPRetriever = new QueryIPRetriever();
MyFilterChain myFilterChain = new MyFilterChain();
myFilterChain.setQueryIPRetriever(queryIPRetriever);
queryIPRetriever.doFilter(request, response, myFilterChain);
assertEquals("IP address not equal", "10.10.11.11", myFilterChain.getIpAddress());
assertNull(QueryIPRetriever.getIpAddress());
}
}