/* ==================================================================
* 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.context;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import junit.framework.TestCase;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import com.jinhe.tss.core.sso.AnonymousOperator;
import com.jinhe.tss.core.sso.IdentityCard;
import com.jinhe.tss.core.web.filter.ContextFilter;
/**
* <p> ContextFilterTest.java </p>
* <p>
* 上下文信息处理Filter测试类
* </p>
*
* 单个的Mock对象,利用静态导入EasyMock,通过createMock(interfaceName.class)
* 多个Mock对象,通过ImocksControl管理。
*/
public class ContextFilterTest extends TestCase {
private ContextFilter filter;
private IMocksControl mocksControl;
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
protected void setUp() throws Exception {
mocksControl = EasyMock.createControl();
request = mocksControl.createMock(HttpServletRequest.class);
response = mocksControl.createMock(HttpServletResponse.class);
session = mocksControl.createMock(HttpSession.class); // EasyMock.createMock(HttpSession.class);
EasyMock.expect(request.getSession()).andReturn(session).times(0, 8);
EasyMock.expect(request.getHeader(RequestContext.USER_CLIENT_IP)).andReturn("127.0.0.1").times(0, 3);
EasyMock.expect(request.getContextPath()).andReturn("/tss");
EasyMock.expect(request.getRequestURI()).andReturn("/tss/login.do");
EasyMock.expect(session.getId()).andReturn("1").times(0, 3);
filter = new ContextFilter();
}
protected void tearDown() throws Exception {
Context.destroy();
}
/**
* Test method for
* {@link com.jinhe.tss.core.web.filter.ContextFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)}.
*/
public final void testDoFilterNotLogin() throws IOException, ServletException {
EasyMock.expect(session.getAttribute(RequestContext.USER_TOKEN)).andReturn(null).times(0, 3); // 无token
EasyMock.expect(session.getAttribute(RequestContext.IDENTITY_CARD)).andReturn(null).atLeastOnce(); // 无card
mocksControl.replay();
filter.doFilter(request, response, new FilterChain() {
// not Login
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
assertTrue(Context.getRequestContext().getRequest() instanceof HttpServletRequest);
assertEquals(httpServletRequest.getSession(), Context.getRequestContext().getSession());
assertNull(Context.getRequestContext().getIdentityCard());
}
});
assertNull(Context.getRequestContext());
}
/**
* Test method for
* {@link com.jinhe.tss.core.web.filter.ContextFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)}.
*/
public final void testDoFilter4Login() throws IOException, ServletException {
EasyMock.expect(session.getAttribute(RequestContext.USER_TOKEN)).andReturn("token").times(0, 3);
final IdentityCard identityCard = new IdentityCard("token", AnonymousOperator.anonymous);
EasyMock.expect(session.getAttribute(RequestContext.IDENTITY_CARD)).andReturn(identityCard).times(0, 3);
session.setAttribute(RequestContext.IDENTITY_CARD, identityCard);
mocksControl.replay(); // 让mock 准备重放记录的数据
filter.doFilter(request, response, new FilterChain() {
// Login
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
assertTrue(Context.getRequestContext().getRequest() instanceof HttpServletRequest);
assertEquals(httpServletRequest.getSession(), Context.getRequestContext().getSession());
assertEquals(identityCard, Context.getRequestContext().getIdentityCard());
}
});
assertNull(Context.getRequestContext());
}
}