/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.core.web; import static org.easymock.EasyMock.anyLong; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.same; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.springframework.web.context.WebApplicationContext; public class SpringBootstrapFilterTest extends TestCase { HttpServletRequest request = null; HttpServletResponse response = null; FilterChain chain = null; Filter filter = null; public void setUp() throws Exception { // Mocks the servlet request. request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn( "/module/user/static/test_image.gif"); expectLastCall().anyTimes(); expect(request.getRequestURL()).andReturn(new StringBuffer()); expectLastCall().anyTimes(); expect(request.getServletPath()).andReturn("/static/test_image.gif"); expectLastCall().anyTimes(); expect(request.getDateHeader("If-Modified-Since")).andReturn(0l); expect(request.getContextPath()).andReturn("/katari-web"); expectLastCall().anyTimes(); expect(request.getMethod()).andReturn("GET"); expectLastCall().anyTimes(); expect(request.getProtocol()).andReturn("http"); expectLastCall().anyTimes(); expect(request.getPathInfo()).andReturn("/user/welcome.do"); expectLastCall().anyTimes(); replay(request); // Mocks the Response's output stream ServletOutputStream mockOutputStream = createMock(ServletOutputStream.class); mockOutputStream.write(isA(byte[].class), eq(0), eq(776)); mockOutputStream.flush(); replay(mockOutputStream); // Mocks the servlet response. response = createMock(HttpServletResponse.class); expect(response.getOutputStream()).andReturn(mockOutputStream); expectLastCall().anyTimes(); response.setContentType("image/gif"); expectLastCall().anyTimes(); response.setDateHeader(same("Date"), anyLong()); expectLastCall().anyTimes(); response.setDateHeader(same("Expires"), anyLong()); expectLastCall().anyTimes(); response.setDateHeader(same("Retry-After"), anyLong()); expectLastCall().anyTimes(); response.setHeader(same("Cache-Control"), (String) anyObject()); expectLastCall().anyTimes(); response.setDateHeader(same("Last-Modified"), anyLong()); expectLastCall().anyTimes(); replay(response); chain = createMock(FilterChain.class); // A sample filter. filter = createMock(Filter.class); filter.init(isA(FilterConfig.class)); filter.doFilter(isA(ServletRequest.class), isA(ServletResponse.class), isA(FilterChain.class)); filter.destroy(); replay(filter); } private final FilterConfig createConfig(final String beanName) throws Exception { // Mocks the Web Application Context WebApplicationContext wac = createMock(WebApplicationContext.class); if (beanName == null) { expect(wac.getBean("katari.moduleFilterProxy")).andReturn(filter); } else { expect(wac.getBean(beanName)).andReturn(filter); } expectLastCall().anyTimes(); replay(wac); // Mocks the servlet context. ServletContext context = createMock(ServletContext.class); expect(context.getServletContextName()).andReturn("/module/user"); expect(context.getAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) ).andReturn(wac); expectLastCall().anyTimes(); // Under some conditions, the init method asks context to log the call. context.log(isA(String.class)); expectLastCall().anyTimes(); replay(context); // Mocks the servlet config. FilterConfig config = createMock(FilterConfig.class); expect(config.getServletContext()).andReturn(context); expect(config.getInitParameter("filterBeanName")).andReturn(beanName); expectLastCall().anyTimes(); replay(config); return config; } /* * Tests if doFilter correctly dispatches the request. */ public final void testDoFilterDefaulBeanName() throws Exception { FilterConfig config = createConfig(null); SpringBootstrapFilter springBootstrapFilter = new SpringBootstrapFilter(); springBootstrapFilter.init(config); springBootstrapFilter.doFilter(request, response, chain); springBootstrapFilter.destroy(); verify(filter); } /* * Tests if doFilter correctly dispatches the request. */ public final void testDoFilterSpecificBeanName() throws Exception { FilterConfig config = createConfig("SomeBeanName"); SpringBootstrapFilter springBootstrapFilter = new SpringBootstrapFilter(); springBootstrapFilter.init(config); springBootstrapFilter.doFilter(request, response, chain); springBootstrapFilter.destroy(); verify(filter); } }