/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.login.local.view; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.verify; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.replay; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.acegisecurity.ui.logout.LogoutHandler; /** * Test cases for the Logout filter class. * * @author mariano.nardi */ public class LogoutFilterTest extends TestCase { private LogoutHandler logoutHandler; private HttpServletRequest request; private HttpServletResponse response; private FilterChain filterChain; @Override public void setUp() throws Exception { filterChain = createNiceMock(FilterChain.class); replay(filterChain); request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn("context/filterUrl"); expect(request.getContextPath()).andReturn("context").anyTimes(); response = createMock(HttpServletResponse.class); logoutHandler = createMock(LogoutHandler.class); logoutHandler.logout(request, response, null); replay(logoutHandler); } /** Tests a succesfull logout. * * @throws ServletException * @throws IOException */ public void testSendRedirect_contextPath() throws Exception { expect(request.getQueryString()).andReturn( "param2=value2¶m1=value1").times(2); replay(request); expect(response.encodeRedirectURL( "context/succcessURL?param2=value2¶m1=value1")) .andReturn("context/succcessURL?param2=value2¶m1=value1"); response.sendRedirect("context/succcessURL?param2=value2¶m1=value1"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("/succcessURL", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(response); } /* Tests if we correctly redirect to an http location. */ public void testSendRedirect_http() throws Exception { expect(request.getQueryString()).andReturn( "param2=value2¶m1=value1").times(2); replay(request); expect(response.encodeRedirectURL( "http://localhost/url?param2=value2¶m1=value1")) .andReturn("http://localhost/url?param2=value2¶m1=value1"); response.sendRedirect("http://localhost/url?param2=value2¶m1=value1"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("http://localhost/url", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(response); } /* Tests if we correctly redirect to an https location. */ public void testSendRedirect_https() throws Exception { expect(request.getQueryString()).andReturn( "param2=value2¶m1=value1").times(2); replay(request); expect(response.encodeRedirectURL( "https://localhost/url?param2=value2¶m1=value1")) .andReturn("https://localhost/url?param2=value2¶m1=value1"); response.sendRedirect("https://localhost/url?param2=value2¶m1=value1"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("https://localhost/url", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(response); } /* Tests if we correctly redirect to a location without parameters. */ public void testSendRedirect_noParameters() throws Exception { expect(request.getQueryString()).andReturn(null); replay(request); expect(response.encodeRedirectURL("https://localhost/url")) .andReturn("https://localhost/url"); response.sendRedirect("https://localhost/url"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("https://localhost/url", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(response); } /* Tests if the request parameters do no override url parameters. */ public void testSendRedirect_ignoreRequestParametrs() throws Exception { expect(request.getQueryString()).andReturn( "param2=value2¶m1=value1").anyTimes(); replay(request); expect(response.encodeRedirectURL("https://localhost/url?p=v")) .andReturn("https://localhost/url?p=v"); response.sendRedirect("https://localhost/url?p=v"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("https://localhost/url?p=v", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(request); verify(response); } /* Tests if the request parameters are passed along to the redirect url, if * the redirect url has no parameters. */ public void testSendRedirect_passRequestParametrs() throws Exception { expect(request.getQueryString()).andReturn( "param2=value2¶m1=value1").anyTimes(); replay(request); expect(response.encodeRedirectURL( "https://localhost/url?param2=value2¶m1=value1")) .andReturn("https://localhost/url?param2=value2¶m1=value1"); response.sendRedirect("https://localhost/url?param2=value2¶m1=value1"); replay(response); LogoutFilter logoutFilter = new LogoutFilter("https://localhost/url", new LogoutHandler[] { logoutHandler }); logoutFilter.setFilterProcessesUrl("/filterUrl"); logoutFilter.doFilter(request, response, filterChain); verify(request); verify(response); } }