1 package com.atlassian.seraph.logout;
2
3 import com.atlassian.seraph.auth.Authenticator;
4 import com.atlassian.seraph.config.SecurityConfig;
5 import com.atlassian.seraph.config.SecurityConfigFactory;
6 import com.mockobjects.dynamic.C;
7 import com.mockobjects.dynamic.Mock;
8 import com.mockobjects.servlet.MockHttpServletRequest;
9 import com.mockobjects.servlet.MockHttpServletResponse;
10 import junit.framework.TestCase;
11
12 import javax.servlet.ServletException;
13 import java.io.IOException;
14
15 public class TestLogoutServlet extends TestCase
16 {
17 private MockHttpServletRequest mockRequest;
18 private MockHttpServletResponse mockResponse;
19 Mock mockSecurityConfig;
20 private LogoutServlet logoutServlet;
21 private Mock mockAuthenticator;
22
23 public TestLogoutServlet()
24 {
25 }
26
27 protected void setUp() throws Exception
28 {
29 super.setUp();
30
31
32 mockRequest = new MockHttpServletRequest();
33 mockRequest.setupGetContextPath("/ctx");
34 mockResponse = new MockHttpServletResponse();
35 mockSecurityConfig = new Mock(SecurityConfig.class);
36 mockAuthenticator = new Mock(Authenticator.class);
37 mockAuthenticator.expectAndReturn("logout", C.args(C.isA(MockHttpServletRequest.class), C.isA(MockHttpServletResponse.class)), Boolean.TRUE);
38
39
40 mockSecurityConfig.expectAndReturn("getAuthenticator", mockAuthenticator.proxy());
41 logoutServlet = new LogoutServlet();
42 }
43
44 public void testInternalLogoutPageCausesRedirectWithNoLogoutCalled() throws IOException, ServletException
45 {
46 SecurityConfigFactory.setSecurityConfig((SecurityConfig) mockSecurityConfig.proxy());
47 logoutServlet.init();
48 mockSecurityConfig.expectAndReturn("getLogoutURL", "/logout.jsp");
49 mockSecurityConfig.expectAndReturn("getLogoutURL", "/logout.jsp");
50 mockResponse.setExpectedRedirect("/ctx/logout.jsp");
51 logoutServlet.service(mockRequest, mockResponse);
52 }
53
54 public void testExternalLogoutPageCausesLogoutAndRedirect() throws IOException, ServletException
55 {
56 SecurityConfigFactory.setSecurityConfig((SecurityConfig) mockSecurityConfig.proxy());
57 logoutServlet.init();
58 mockRequest.setupGetContextPath("/ctx");
59 mockSecurityConfig.expectAndReturn("getLogoutURL", "http://some.external.sso.page/");
60 mockSecurityConfig.expectAndReturn("getLogoutURL", "http://some.external.sso.page/");
61 mockResponse.setExpectedRedirect("http://some.external.sso.page/");
62
63 logoutServlet.service(mockRequest, mockResponse);
64 }
65
66 }