/******************************************************************************* * Copyright (c) 2008, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VMware Inc. - initial contribution *******************************************************************************/ package org.eclipse.virgo.web.test; import static javax.servlet.http.HttpServletResponse.SC_OK; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.eclipse.virgo.nano.deployer.api.core.DeploymentIdentity; import org.junit.Test; public class ServletCapabilityTests extends AbstractWebIntegrationTests { final Map<String, List<String>> expectations = new HashMap<String, List<String>>(); final List<String> expectedContent = new ArrayList<String>(); final CountDownLatch latch = new CountDownLatch(1); @Test public void directJspRequest() throws Exception { expectedContent.add("index"); latch.await(5, TimeUnit.SECONDS); assertDeployAndUndeployBehavior("webtest", new File( "src/test/apps/webfeature.tests.war"), "index.jsp"); } @Test public void directServletRequest() throws Exception { expectations.put("test", Arrays.asList("Test Servlet")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestDispatcherForwardServletRequest() throws Exception { expectations.put("forward/index.htm?foo=bar", Arrays.asList( "javax.servlet.forward.request_uri:/webtest/forward/index.htm", "javax.servlet.forward.context_path:/webtest", "javax.servlet.forward.servlet_path:/forward", "javax.servlet.forward.path_info:/index.htm", "javax.servlet.forward.query_string:foo=bar", "requestURI:/webtest/fa", "ContextPath:/webtest", "ServletPath:/fa", "PathInfo:null", "QueryString:foo=bar")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestDispatcherMultipleForwardServletRequest() throws Exception { expectations.put("rd?test=forward-servlet", Arrays.asList( "javax.servlet.forward.request_uri:/webtest/rd", "javax.servlet.forward.context_path:/webtest", "javax.servlet.forward.servlet_path:/rd", "javax.servlet.forward.path_info:null", "javax.servlet.forward.query_string:test=forward-servlet", "requestURI:/webtest/fa", "ContextPath:/webtest", "ServletPath:/fa", "PathInfo:null", "QueryString:test=forward-servlet")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void forwardWithPathTranslationPathMapping() throws Exception { expectations .put( "rd?test=forward-path-translation", Arrays .asList( "javax.servlet.forward.request_uri:/webtest/rd", "javax.servlet.forward.context_path:/webtest", "javax.servlet.forward.servlet_path:/rd", "javax.servlet.forward.path_info:null", "javax.servlet.forward.query_string:test=forward-path-translation", "requestURI:/webtest/fa/1", "ContextPath:/webtest", "ServletPath:/fa", "PathInfo:/1", "QueryString:test=forward-path-translation")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestDispatcherIncludeServletRequest() throws Exception { expectations.put("rd?test=include-servlet", Arrays.asList( "Before forwarding the request to /ia in DispatcherServlet", "javax.servlet.include.request_uri:/webtest/ia", "javax.servlet.include.context_path:/webtest", "javax.servlet.include.servlet_path:/ia", "javax.servlet.include.path_info:null", "javax.servlet.include.query_string:null", "requestURI:/webtest/rd", "ContextPath:/webtest", "ServletPath:/rd", "PathInfo:null", "QueryString:test=include-servlet", "After forwarding the request to /ia in DispatcherServlet")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void includeWithPathTranslationPathMapping() throws Exception { expectations.put("rd?test=include-path-translation", Arrays.asList( "javax.servlet.include.request_uri:/webtest/ia/1", "javax.servlet.include.context_path:/webtest", "javax.servlet.include.servlet_path:/ia", "javax.servlet.include.path_info:/1", "javax.servlet.include.query_string:null", "requestURI:/webtest/rd", "ContextPath:/webtest", "ServletPath:/rd", "PathInfo:null", "QueryString:test=include-path-translation")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestDispatcherForwardJspRequest() throws Exception { expectations.put("rd?test=forward-jsp", Arrays.asList("index")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestDispatcherIncludeJspRequest() throws Exception { expectations.put("rd?test=include-jsp", Arrays.asList("index")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestPathTranslationPathMapping() throws Exception { expectations.put("rd?test=path-translation", Arrays.asList( "RequestUri=/webtest/path/1", "ContextPath=/webtest", "ServletPath=/path", "PathInfo=/1")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } @Test public void requestPathTranslationExact() throws Exception { expectations.put("rd?test=path-exact", Arrays.asList( "RequestUri=/webtest/exact", "ContextPath=/webtest", "ServletPath=/exact", "PathInfo=null")); latch.await(5, TimeUnit.SECONDS); DeploymentIdentity wardeploymentIdentity = assertDeployBehavior( "webtest", new File("src/test/apps/webfeature.tests.war"), expectations); for (String resource : expectations.keySet()) { List<String> expectedContents = expectations.get(resource); assertGetRequest("webtest", resource, SC_OK, expectedContents); } this.appDeployer.undeploy(wardeploymentIdentity); } }