/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.login.cas; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.junit.Test; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.*; import org.easymock.EasyMock; public class CasLogoutFilterTest { @Test public void testDoFilter_logout() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); FilterChain chain = EasyMock.createMock(FilterChain.class); CasTicketRegistry casTicketRegistry = new CasTicketRegistry(); ServicesUrlBuilder builder; builder = new ServicesUrlBuilder("http://casurl", "service"); request.setRequestURI("http://blah/cas/logout"); request.setContextPath("cas"); request.setParameter("service", "serviceUrl"); CasLogoutFilter filter = new CasLogoutFilter(casTicketRegistry, builder); filter.doFilter(request, response, chain); assertThat(response.getRedirectedUrl(), is("http://casurl/logout?service=serviceUrl")); } @Test public void testDoFilter() throws IOException, ServletException { // mock creation CasTicketRegistry casTicketRegistry = EasyMock .createMock(CasTicketRegistry.class); HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class); ServletResponse response = EasyMock.createMock(HttpServletResponse.class); FilterChain chain = EasyMock.createMock(FilterChain.class); HttpSession session = EasyMock.createMock(HttpSession.class); ServicesUrlBuilder builder; builder = new ServicesUrlBuilder("http://casurl", "service"); CasLogoutFilter filter = new CasLogoutFilter(casTicketRegistry, builder); // mock recording EasyMock.expect(casTicketRegistry.getSession("ticket1")).andReturn(session); EasyMock.expect(request.getRequestURI()).andReturn( "http://myrequest.com/context/j_acegi_cas_security_check").anyTimes(); EasyMock.expect(request.getContextPath()).andReturn( "/context").anyTimes(); EasyMock.expect(request.getMethod()).andReturn("POST"); EasyMock .expect(request.getParameter("logoutRequest")) .andReturn( "<samlp:LogoutRequest ID=\"111\" Version=\"2.0\"" + " IssueInstant=\"dateandtime\">" + " <saml:NameID>@NOT_USED@</saml:NameID>" + " <samlp:SessionIndex>ticket1</samlp:SessionIndex>" + "</samlp:LogoutRequest>"); session.invalidate(); //mock activation EasyMock.replay(request); EasyMock.replay(session); EasyMock.replay(chain); EasyMock.replay(response); EasyMock.replay(casTicketRegistry); // invoke the method to test filter.doFilter(request, response, chain); //mock verification EasyMock.verify(request); EasyMock.verify(session); EasyMock.verify(response); EasyMock.verify(chain); EasyMock.verify(casTicketRegistry); } }