/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.sso.identity; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import junit.framework.TestCase; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockHttpSession; import com.jinhe.tss.core.sso.AnonymousOperator; import com.jinhe.tss.core.sso.Environment; import com.jinhe.tss.core.sso.IOperator; import com.jinhe.tss.core.sso.IdentityCard; import com.jinhe.tss.core.sso.DemoPWDOperator; import com.jinhe.tss.core.sso.TokenUtil; import com.jinhe.tss.core.sso.context.Context; import com.jinhe.tss.core.sso.context.RequestContext; import com.jinhe.tss.core.sso.identifier.DemoOperator; import com.jinhe.tss.core.sso.identifier.DemoUserIdentifier; import com.jinhe.tss.core.sso.online.OnlineUserManagerFactory; import com.jinhe.tss.core.web.filter.AutoLoginFilter; public class AutoLoginFilterTest extends TestCase { private MockHttpServletRequest request; private MockHttpServletResponse response; private MockHttpSession session; private FilterChain chain; private AutoLoginFilter filter; protected void setUp() throws Exception { super.setUp(); request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); session = new MockHttpSession(); request.setSession(session); request.addHeader(RequestContext.USER_CLIENT_IP, "192.168.0.12"); request.setCharacterEncoding("GBK"); Context.initApplicationContext(MockApplicationContext.getDefaultApplicationContext()); filter = new AutoLoginFilter(); chain = new MockFilterChain(); } protected void tearDown() throws Exception { super.tearDown(); request = null; response = null; session = null; } public final void testDoFilter4Pass() throws IOException, ServletException { String token = "token"; session.setAttribute(RequestContext.USER_TOKEN, token); Cookie[] cookies = new Cookie[] { new Cookie(RequestContext.USER_TOKEN, token) }; request.setCookies(cookies); DemoPWDOperator testPasswordOperator = new DemoPWDOperator(new Long(1)); IdentityCard card = new IdentityCard(token, testPasswordOperator); session.setAttribute(RequestContext.IDENTITY_CARD, card); Context.initRequestContext(request); Context.initIdentityInfo(card); filter.doFilter(request, response, chain); assertNotNull(Context.getRequestContext().getIdentityCard()); assertEquals(testPasswordOperator.getLoginName(), Environment.getOperatorName()); assertEquals(MockFilterChain.RESPONSE_BODY_STRING, response.getContentAsString()); } public final void testDoFilter4AnonymousLogin() throws IOException, ServletException { request.addHeader(RequestContext.ANONYMOUS_REQUEST, "true"); // 允许匿名 Context.initRequestContext(request); filter.doFilter(request, response, chain); assertNotNull(Context.getRequestContext().getIdentityCard()); assertEquals(AnonymousOperator.anonymous.getLoginName(), Environment.getOperatorName()); assertEquals(MockFilterChain.RESPONSE_BODY_STRING, response.getContentAsString()); } public final void testDoFilter4AnonymousException() throws IOException, ServletException { Context.initRequestContext(request); try { filter.doFilter(request, response, chain); fail("应该发生异常而没有发生"); } catch (Exception e) { assertTrue(true); } } public final void testDoFilter4OnlineException2Anonymous() throws IOException, ServletException { request.addHeader(RequestContext.ANONYMOUS_REQUEST, "true"); String token = "token"; Cookie[] cookies = new Cookie[] { new Cookie(RequestContext.USER_TOKEN, token) }; request.setCookies(cookies); Context.initRequestContext(request); filter.doFilter(request, response, chain); assertEquals(AnonymousOperator.anonymous.getLoginName(), Environment.getOperatorName()); assertEquals(MockFilterChain.RESPONSE_BODY_STRING, response.getContentAsString()); } public final void testDoFilter4OnlineException2AnonymousException() throws IOException, ServletException { String token = "token"; Cookie[] cookies = new Cookie[] { new Cookie(RequestContext.USER_TOKEN, token) }; request.setCookies(cookies); Context.initRequestContext(request); try { filter.doFilter(request, response, chain); fail("应该发生异常而没有发生"); } catch (Exception e) { assertTrue(true); } } public final void testDoFilter4OnlineOk() throws IOException, ServletException { request.addHeader(RequestContext.ANONYMOUS_REQUEST, "true"); IOperator operator = new DemoOperator(new Long(2)); String token = TokenUtil.createToken("sessionId", operator.getId()); Cookie[] cookies = new Cookie[] { new Cookie(RequestContext.USER_TOKEN, token) }; request.setCookies(cookies); Context.initRequestContext(request); MockOnlineUserManagerFactory.init(); MockIdentityTranslatorFactory.init(); OnlineUserManagerFactory.getManager().register(token, "appCode", "sessionId", new Long(3), null); filter.doFilter(request, response, chain); assertNotNull(Context.getToken()); assertEquals(new Long(operator.getId().longValue() + 1), Environment.getOperatorId()); assertEquals(MockFilterChain.RESPONSE_BODY_STRING, response.getContentAsString()); } public final void testDoFilter4LoginException() { String token = "token"; Cookie[] cookies = new Cookie[] { new Cookie(RequestContext.USER_TOKEN, token) }; request.setCookies(cookies); request.addHeader("identifier", MockUserIdentifier.class.getName()); Context.initRequestContext(request); try { filter.doFilter(request, response, chain); fail("应该发生异常而没有发生"); } catch (Exception e) { assertTrue(true); } } public final void testDoFilter4LoginOk() throws IOException, ServletException { request.addHeader("identifier", DemoUserIdentifier.class.getName()); Context.initRequestContext(request); filter.doFilter(request, response, chain); assertNotNull(Context.getRequestContext().getIdentityCard()); assertEquals(AnonymousOperator.anonymous.getLoginName(), Environment.getOperatorName()); assertEquals(MockFilterChain.RESPONSE_BODY_STRING, response.getContentAsString()); } }