package org.stagemonitor; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.Test; import org.mockito.Mockito; import org.stagemonitor.web.monitor.filter.AbstractExclusionFilter; public class AbstractExclusionFilterTest { private AbstractExclusionFilter testFilter = Mockito.spy(new TestExclusionFilter()); private FilterConfig filterConfigMock = mock(FilterConfig.class); private HttpServletRequest mockRequest = mock(HttpServletRequest.class); private static class TestExclusionFilter extends AbstractExclusionFilter { @Override public void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } } @Test public void testExclude() throws Exception { when(filterConfigMock.getInitParameter("exclude")).thenReturn("exclude1,/exclude2, /exclude3/"); testFilter.init(filterConfigMock); assertExcludes("/context-path/exclude1"); assertExcludes("/context-path/exclude2/bla/blubb"); assertExcludes("/context-path/exclude3/"); assertExcludes("/context-path/exclude2bla"); assertIncludes("/context-path/exclude3"); assertIncludes("/context-path/included"); assertIncludes("/context-path/included/exclude1"); } @Test public void testNotExclude() throws Exception { testFilter.init(filterConfigMock); assertIncludes("/exclude3"); } private void assertIncludes(String url) throws Exception { assertExcludes(url, false); } private void assertExcludes(String url) throws Exception { assertExcludes(url, true); } private int notExclutedCount = 0; private void assertExcludes(String url, boolean excluded) throws Exception { if (!excluded) notExclutedCount++; when(mockRequest.getRequestURI()).thenReturn(url); when(mockRequest.getContextPath()).thenReturn("/context-path"); testFilter.doFilter(mockRequest, mock(HttpServletResponse.class), mock(FilterChain.class)); verify(testFilter, times(notExclutedCount)).doFilterInternal((HttpServletRequest) any(), (HttpServletResponse) any(), (FilterChain) any()); } }