From 019a2b172e37e8e51da0c2c3ffcce12294ef8e64 Mon Sep 17 00:00:00 2001 From: kkolinko Date: Thu, 29 Apr 2010 10:24:14 +0000 Subject: [PATCH] Tests for Servlet 3.0 support of bundling static resources in META-INF/resources subdirectory of a jar file. It is a separate web application, because the old "webapp-3.0" has metadata-complete="true". The tests in TestStandardContextResources are currently failing, and thus are disabled until a solution is found. See the comment in TestStandardContextResources.java git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@939253 13f79535-47bb-0310-9956-ffa450edef68 --- .../core/TestStandardContextResources.java | 153 +++++++++++++++++++++ .../webapp-3.0-fragments/WEB-INF/lib/resources.jar | Bin 0 -> 18534 bytes test/webapp-3.0-fragments/WEB-INF/web.xml | 30 ++++ test/webapp-3.0-fragments/folder/resourceC.jsp | 21 +++ test/webapp-3.0-fragments/folder/resourceE.jsp | 20 +++ test/webapp-3.0-fragments/resourceA.jsp | 21 +++ 6 files changed, 245 insertions(+) create mode 100644 test/org/apache/catalina/core/TestStandardContextResources.java create mode 100644 test/webapp-3.0-fragments/WEB-INF/lib/resources.jar create mode 100644 test/webapp-3.0-fragments/WEB-INF/web.xml create mode 100644 test/webapp-3.0-fragments/folder/resourceC.jsp create mode 100644 test/webapp-3.0-fragments/folder/resourceE.jsp create mode 100644 test/webapp-3.0-fragments/resourceA.jsp diff --git a/test/org/apache/catalina/core/TestStandardContextResources.java b/test/org/apache/catalina/core/TestStandardContextResources.java new file mode 100644 index 000000000..5f6d72d96 --- /dev/null +++ b/test/org/apache/catalina/core/TestStandardContextResources.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.catalina.core; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.catalina.startup.Tomcat; +import org.apache.catalina.startup.TomcatBaseTest; +import org.apache.tomcat.util.buf.ByteChunk; + +public class TestStandardContextResources extends TomcatBaseTest { + + public void testResources() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0-fragments"); + // app dir is relative to server home + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + + tomcat.start(); + + if (false) { + // FIXME: These tests are currently failing. See comment in testResources2() below. + + assertPageContains("/test/resourceA.jsp", + "

resourceA.jsp in the web application

"); + assertPageContains("/test/resourceB.jsp", + "

resourceB.jsp in resources.jar

"); + assertPageContains("/test/folder/resourceC.jsp", + "

resourceC.jsp in the web application

"); + assertPageContains("/test/folder/resourceD.jsp", + "

resourceD.jsp in resources.jar

"); + assertPageContains("/test/folder/resourceE.jsp", + "

resourceE.jsp in the web application

"); + } + } + + public void testResources2() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0-fragments"); + // app dir is relative to server home + StandardContext ctx = (StandardContext) tomcat.addWebapp(null, "/test", + appDir.getAbsolutePath()); + + Tomcat.addServlet(ctx, "getresource", new GetResourceServlet()); + ctx.addServletMapping("/getresource", "getresource"); + + tomcat.start(); + + // FIXME: These tests are currently failing. + // + // I do not have a fix yet, but I know the following: + // when trying to get "/resourceB.jsp" in ApplicationContext#getResource() + // an Exception is caught and silently swallowed. That exception is + // + // java.lang.IllegalStateException: zip file closed + // at java.util.jar.JarFile.getMetaInfEntryNames(Native Method) + // at java.util.jar.JarFile.maybeInstantiateVerifier(JarFile.java:277) + // at java.util.jar.JarFile.getInputStream(JarFile.java:381) + // at org.apache.naming.resources.WARDirContext$WARResource.streamContent(WARDirContext.java:951) + // at org.apache.naming.resources.ProxyDirContext.cacheLoad(ProxyDirContext.java:1578) + // at org.apache.naming.resources.ProxyDirContext.cacheLookup(ProxyDirContext.java:1458) + // at org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:292) + // at org.apache.catalina.core.ApplicationContext.getResource(ApplicationContext.java:506) + // at org.apache.catalina.core.ApplicationContextFacade.getResource(ApplicationContextFacade.java:196) + // at org.apache.catalina.core.TestStandardContextResources$GetResourceServlet.doGet(TestStandardContextResources.java:126) + // + if (false) { + + assertPageContains("/test/getresource?path=/resourceA.jsp", + "

resourceA.jsp in the web application

"); + assertPageContains("/test/getresource?path=/resourceB.jsp", + "

resourceB.jsp in resources.jar

"); + assertPageContains("/test/getresource?path=/folder/resourceC.jsp", + "

resourceC.jsp in the web application

"); + assertPageContains("/test/getresource?path=/folder/resourceD.jsp", + "

resourceD.jsp in resources.jar

"); + assertPageContains("/test/getresource?path=/folder/resourceE.jsp", + "

resourceE.jsp in the web application

"); + } + } + + /** + * A servlet that prints the requested resource. The path to the requested + * resource is passed as a parameter, path. + */ + public static class GetResourceServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + + resp.setContentType("text/plain"); + + ServletContext context = getServletContext(); + + // Check resources individually + URL url = context.getResource(req.getParameter("path")); + if (url == null) { + resp.getWriter().println("Not found"); + return; + } + + InputStream input = url.openStream(); + OutputStream output = resp.getOutputStream(); + try { + byte[] buffer = new byte[4000]; + for (int len; (len = input.read(buffer)) > 0;) { + output.write(buffer, 0, len); + } + } finally { + input.close(); + output.close(); + } + } + } + + private void assertPageContains(String pageUrl, String expected) + throws IOException { + ByteChunk res = getUrl("http://localhost:" + getPort() + pageUrl); + + String result = res.toString(); + assertTrue(result, result.indexOf(expected) > 0); + } +} diff --git a/test/webapp-3.0-fragments/WEB-INF/lib/resources.jar b/test/webapp-3.0-fragments/WEB-INF/lib/resources.jar new file mode 100644 index 0000000000000000000000000000000000000000..77ee6e97497ebe91aee76b35ff6e82869e2580d1 GIT binary patch literal 18534 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 Gf_MPRt#2s+ literal 0 HcmV?d00001 diff --git a/test/webapp-3.0-fragments/WEB-INF/web.xml b/test/webapp-3.0-fragments/WEB-INF/web.xml new file mode 100644 index 000000000..024539c7b --- /dev/null +++ b/test/webapp-3.0-fragments/WEB-INF/web.xml @@ -0,0 +1,30 @@ + + + + + Tomcat Test Application + + Used as part of the Tomcat unit tests when a full web application is + required. + + \ No newline at end of file diff --git a/test/webapp-3.0-fragments/folder/resourceC.jsp b/test/webapp-3.0-fragments/folder/resourceC.jsp new file mode 100644 index 000000000..df079ab0a --- /dev/null +++ b/test/webapp-3.0-fragments/folder/resourceC.jsp @@ -0,0 +1,21 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--%> +<%-- + Resource file that is present both in the web application and in the + WEB-INF/lib/resources.jar file. The one in the web application should win. +--%> +

resourceC.jsp in the web application

diff --git a/test/webapp-3.0-fragments/folder/resourceE.jsp b/test/webapp-3.0-fragments/folder/resourceE.jsp new file mode 100644 index 000000000..f94a9cac8 --- /dev/null +++ b/test/webapp-3.0-fragments/folder/resourceE.jsp @@ -0,0 +1,20 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--%> +<%-- + Resource file that is present in the web application only. +--%> +

resourceE.jsp in the web application

diff --git a/test/webapp-3.0-fragments/resourceA.jsp b/test/webapp-3.0-fragments/resourceA.jsp new file mode 100644 index 000000000..8a8d423c2 --- /dev/null +++ b/test/webapp-3.0-fragments/resourceA.jsp @@ -0,0 +1,21 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--%> +<%-- + Resource file that is present both in the web application and in the + WEB-INF/lib/resources.jar file. The one in the web application should win. +--%> +

resourceA.jsp in the web application

-- 2.11.0