/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.core.web; import java.util.TreeMap; import junit.framework.TestCase; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import static org.easymock.EasyMock.*; /* Tests the request dispatcher servlet. We use jmock here. With jdk-1.5 we * should have gone with easy mock instead. */ public class ModuleContainerServletTest extends TestCase { /* The sample servlets set this variable when the dispatcher calls service on * them. This is used to check that the correct servlet was invoked. */ private String servletCalled; private String pathInfo; private TreeMap<String, ServletAndParameters> usersMap; private ServletConfig config; @SuppressWarnings("serial") protected void setUp() { servletCalled = ""; pathInfo = null; // Mocks the servlet context. ServletContext context = createMock(ServletContext.class); expect(context.getServletContextName()).andReturn("/module"); 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. config = createMock(ServletConfig.class); expect(config.getServletContext()).andReturn(context); expectLastCall().anyTimes(); // Under some conditions, the init method asks the servlet for its name. expect(config.getServletName()).andReturn("ContainerServlet"); expectLastCall().anyTimes(); replay(config); // A sample servlet that will be mapped to *.do. ServletAndParameters doServlet = new ServletAndParameters( new HttpServlet() { public void doGet(HttpServletRequest req, HttpServletResponse resp) { servletCalled = ".do"; pathInfo = req.getPathInfo(); } }); // A sample servlet that will be mapped to *.test. ServletAndParameters testServlet = new ServletAndParameters( new HttpServlet() { public void doGet(HttpServletRequest req, HttpServletResponse resp) { servletCalled = "test"; pathInfo = req.getPathInfo(); } }); // A sample configuration mapping. usersMap = new TreeMap<String, ServletAndParameters>(); usersMap.put(".*\\.do", doServlet); usersMap.put(".*/test", testServlet); } /* Tests if service correctly dispatches a request to *.do. */ public final void testService_dotdo() throws Exception { // Mocks the servlet request. HttpServletRequest request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn( "/katari-i/module/user/welcome.do"); expectLastCall().anyTimes(); expect(request.getRequestURL()).andReturn(new StringBuffer()); expectLastCall().anyTimes(); expect(request.getServletPath()).andReturn("/module"); expectLastCall().anyTimes(); expect(request.getContextPath()).andReturn("/katari-i"); expectLastCall().anyTimes(); expect(request.getPathInfo()).andReturn("/user/welcome.do"); expectLastCall().anyTimes(); expect(request.getMethod()).andReturn("GET"); expectLastCall().anyTimes(); expect(request.getProtocol()).andReturn("http"); expectLastCall().anyTimes(); replay(request); ModuleContainerServlet servlet = new ModuleContainerServlet(); servlet.addModule("user", usersMap); servlet.init(config); servlet.service(request, null); assertEquals(".do", servletCalled); assertNull(pathInfo); } /* Tests if service correctly dispatches a request to 'test' and the pathinfo * is correct. */ public final void testService_testPathInfo() throws Exception { // Mocks the servlet request. HttpServletRequest request = createNiceMock(HttpServletRequest.class); expect(request.getRequestURI()).andReturn( "/katari-i/module/user/welcome.do"); expectLastCall().anyTimes(); expect(request.getRequestURL()).andReturn(new StringBuffer()); expectLastCall().anyTimes(); expect(request.getServletPath()).andReturn("/module"); expectLastCall().anyTimes(); expect(request.getContextPath()).andReturn("/katari-i"); expectLastCall().anyTimes(); expect(request.getPathInfo()).andReturn("/user/test/user/21?action=remove"); expectLastCall().anyTimes(); expect(request.getMethod()).andReturn("GET"); expectLastCall().anyTimes(); expect(request.getProtocol()).andReturn("http"); expectLastCall().anyTimes(); replay(request); ModuleContainerServlet servlet = new ModuleContainerServlet(); servlet.addModule("user", usersMap); servlet.init(config); servlet.service(request, null); assertEquals("test", servletCalled); assertEquals("/user/21?action=remove", pathInfo); } }