From: markt Date: Sat, 31 Oct 2009 11:46:50 +0000 (+0000) Subject: New cookie unit tests and associated refactoring to get ant test target working. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=ccaad88dd3e3e6b9573a496ba5056a41c486a170;p=tomcat7.0 New cookie unit tests and associated refactoring to get ant test target working. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@831533 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/test/org/apache/catalina/connector/TestKeepAliveCount.java b/test/org/apache/catalina/connector/TestKeepAliveCount.java index 8dc4bc727..631727b8f 100644 --- a/test/org/apache/catalina/connector/TestKeepAliveCount.java +++ b/test/org/apache/catalina/connector/TestKeepAliveCount.java @@ -25,10 +25,10 @@ import javax.servlet.http.HttpServletResponse; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.SimpleHttpClient; -import org.apache.catalina.startup.TestTomcatBase; +import org.apache.catalina.startup.TomcatBaseTest; import org.apache.catalina.startup.Tomcat; -public class TestKeepAliveCount extends TestTomcatBase{ +public class TestKeepAliveCount extends TomcatBaseTest{ public void testHttp10() throws Exception { TestKeepAliveClient client = new TestKeepAliveClient(); diff --git a/test/org/apache/catalina/connector/TestRequest.java b/test/org/apache/catalina/connector/TestRequest.java index 3d526fe92..9bc19dcff 100644 --- a/test/org/apache/catalina/connector/TestRequest.java +++ b/test/org/apache/catalina/connector/TestRequest.java @@ -28,13 +28,13 @@ import javax.servlet.http.HttpServletResponse; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.SimpleHttpClient; -import org.apache.catalina.startup.TestTomcatBase; +import org.apache.catalina.startup.TomcatBaseTest; import org.apache.catalina.startup.Tomcat; /** * Test case for {@link Request}. */ -public class TestRequest extends TestTomcatBase { +public class TestRequest extends TomcatBaseTest { /** * Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=37794 diff --git a/test/org/apache/catalina/core/TestStandardContext.java b/test/org/apache/catalina/core/TestStandardContext.java index 8b6ded283..b9d2b7d48 100644 --- a/test/org/apache/catalina/core/TestStandardContext.java +++ b/test/org/apache/catalina/core/TestStandardContext.java @@ -30,10 +30,10 @@ import javax.servlet.ServletResponse; import org.apache.catalina.deploy.FilterDef; import org.apache.catalina.deploy.FilterMap; import org.apache.catalina.startup.SimpleHttpClient; -import org.apache.catalina.startup.TestTomcatBase; +import org.apache.catalina.startup.TomcatBaseTest; import org.apache.catalina.startup.Tomcat; -public class TestStandardContext extends TestTomcatBase { +public class TestStandardContext extends TomcatBaseTest { private static final String REQUEST = "GET / HTTP/1.1\r\n" + diff --git a/test/org/apache/catalina/startup/TestTomcat.java b/test/org/apache/catalina/startup/TestTomcat.java index 898413740..c7c0cf253 100644 --- a/test/org/apache/catalina/startup/TestTomcat.java +++ b/test/org/apache/catalina/startup/TestTomcat.java @@ -31,7 +31,7 @@ import org.apache.catalina.core.StandardContext; import org.apache.catalina.deploy.ContextEnvironment; import org.apache.tomcat.util.buf.ByteChunk; -public class TestTomcat extends TestTomcatBase { +public class TestTomcat extends TomcatBaseTest { /** * Simple servlet to test in-line registration diff --git a/test/org/apache/catalina/startup/TestTomcatBase.java b/test/org/apache/catalina/startup/TestTomcatBase.java deleted file mode 100644 index 3c6984675..000000000 --- a/test/org/apache/catalina/startup/TestTomcatBase.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.startup; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.tomcat.util.buf.ByteChunk; - -import junit.framework.TestCase; - -/** - * Base test case that provides a Tomcat instance for each test - mainly so we - * don't have to keep writing the cleanup code. - */ -public abstract class TestTomcatBase extends TestCase { - private Tomcat tomcat; - private File tempDir; - private static int port = 8001; - - /** - * Make Tomcat instance accessible to sub-classes. - */ - public Tomcat getTomcatInstance() { - return tomcat; - } - - /** - * Sub-classes need to know port so they can connect - */ - public int getPort() { - return port; - } - - public void setUp() throws Exception { - tempDir = new File("output/tmp"); - tempDir.mkdir(); - - tomcat = new Tomcat(); - tomcat.setBaseDir(tempDir.getAbsolutePath()); - tomcat.getHost().setAppBase(tempDir.getAbsolutePath() + "/webapps"); - - // If each test is running on same port - they - // may interfere with each other (on unix at least) - port++; - tomcat.setPort(port); - } - - public void tearDown() throws Exception { - tomcat.stop(); - ExpandWar.delete(tempDir); - } - - /** - * Simple Hello World servlet for use by test cases - */ - public static final class HelloWorldServlet extends HttpServlet { - - private static final long serialVersionUID = 1L; - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - PrintWriter out = resp.getWriter(); - out.print("

Hello World

"); - } - } - - - /** - * Wrapper for getting the response. - */ - public static ByteChunk getUrl(String path) throws IOException { - ByteChunk out = new ByteChunk(); - getUrl(path, out, null); - return out; - } - - public static int getUrl(String path, - ByteChunk out, - Map> resHead) throws IOException { - URL url = new URL(path); - HttpURLConnection connection = - (HttpURLConnection) url.openConnection(); - connection.setReadTimeout(100000); - connection.connect(); - int rc = connection.getResponseCode(); - if (resHead != null) { - Map> head = connection.getHeaderFields(); - resHead.putAll(head); - } - InputStream is = connection.getInputStream(); - BufferedInputStream bis = new BufferedInputStream(is); - byte[] buf = new byte[2048]; - int rd = 0; - while((rd = bis.read(buf)) > 0) { - out.append(buf, 0, rd); - } - return rc; - } -} diff --git a/test/org/apache/catalina/startup/TomcatBaseTest.java b/test/org/apache/catalina/startup/TomcatBaseTest.java new file mode 100644 index 000000000..2b326467e --- /dev/null +++ b/test/org/apache/catalina/startup/TomcatBaseTest.java @@ -0,0 +1,127 @@ +/* + * 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.startup; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.tomcat.util.buf.ByteChunk; + +import junit.framework.TestCase; + +/** + * Base test case that provides a Tomcat instance for each test - mainly so we + * don't have to keep writing the cleanup code. + */ +public abstract class TomcatBaseTest extends TestCase { + private Tomcat tomcat; + private File tempDir; + private static int port = 8001; + + /** + * Make Tomcat instance accessible to sub-classes. + */ + public Tomcat getTomcatInstance() { + return tomcat; + } + + /** + * Sub-classes need to know port so they can connect + */ + public int getPort() { + return port; + } + + public void setUp() throws Exception { + tempDir = new File("output/tmp"); + tempDir.mkdir(); + + tomcat = new Tomcat(); + tomcat.setBaseDir(tempDir.getAbsolutePath()); + tomcat.getHost().setAppBase(tempDir.getAbsolutePath() + "/webapps"); + + // If each test is running on same port - they + // may interfere with each other (on unix at least) + port++; + tomcat.setPort(port); + } + + public void tearDown() throws Exception { + tomcat.stop(); + ExpandWar.delete(tempDir); + } + + /** + * Simple Hello World servlet for use by test cases + */ + public static final class HelloWorldServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + PrintWriter out = resp.getWriter(); + out.print("

Hello World

"); + } + } + + + /** + * Wrapper for getting the response. + */ + public static ByteChunk getUrl(String path) throws IOException { + ByteChunk out = new ByteChunk(); + getUrl(path, out, null); + return out; + } + + public static int getUrl(String path, + ByteChunk out, + Map> resHead) throws IOException { + URL url = new URL(path); + HttpURLConnection connection = + (HttpURLConnection) url.openConnection(); + connection.setReadTimeout(100000); + connection.connect(); + int rc = connection.getResponseCode(); + if (resHead != null) { + Map> head = connection.getHeaderFields(); + resHead.putAll(head); + } + InputStream is = connection.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(is); + byte[] buf = new byte[2048]; + int rd = 0; + while((rd = bis.read(buf)) > 0) { + out.append(buf, 0, rd); + } + return rc; + } +} diff --git a/test/org/apache/tomcat/util/http/CookiesBaseTest.java b/test/org/apache/tomcat/util/http/CookiesBaseTest.java new file mode 100644 index 000000000..e18fb91e5 --- /dev/null +++ b/test/org/apache/tomcat/util/http/CookiesBaseTest.java @@ -0,0 +1,84 @@ +/* + * 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.tomcat.util.http; + +import java.io.IOException; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.startup.TomcatBaseTest; +import org.apache.catalina.startup.Tomcat; + +/** + * Base Test case for {@link Cookies}. Note because of the use of + * final static constants in {@link Cookies}, each of these tests + * must be executed in a new JVM instance. The tests have been place in separate + * classes to facilitate this when running the unit tests via Ant. + */ +public abstract class CookiesBaseTest extends TomcatBaseTest { + + /** + * Servlet for cookie naming test. + */ + public static class CookieName extends HttpServlet { + + private static final long serialVersionUID = 1L; + + private final String cookieName; + + public CookieName(String cookieName) { + this.cookieName = cookieName; + } + + public void doGet(HttpServletRequest req, HttpServletResponse res) + throws IOException { + try { + Cookie cookie = new Cookie(cookieName,"Value"); + res.addCookie(cookie); + res.getWriter().write("Cookie name ok"); + } catch (IllegalArgumentException iae) { + res.getWriter().write("Cookie name fail"); + } + } + + } + + + public static void addServlets(Tomcat tomcat) { + // Must have a real docBase - just use temp + StandardContext ctx = + tomcat.addContext("/", System.getProperty("java.io.tmpdir")); + + Tomcat.addServlet(ctx, "invalid", new CookieName("na;me")); + ctx.addServletMapping("/invalid", "invalid"); + Tomcat.addServlet(ctx, "invalidFwd", new CookieName("na/me")); + ctx.addServletMapping("/invalidFwd", "invalidFwd"); + Tomcat.addServlet(ctx, "invalidStrict", new CookieName("na?me")); + ctx.addServletMapping("/invalidStrict", "invalidStrict"); + Tomcat.addServlet(ctx, "valid", new CookieName("name")); + ctx.addServletMapping("/valid", "valid"); + + } + + public abstract void testCookiesInstance() throws Exception; + +} diff --git a/test/org/apache/tomcat/util/http/TestCookiesDefaultSysProps.java b/test/org/apache/tomcat/util/http/TestCookiesDefaultSysProps.java new file mode 100644 index 000000000..035bcc096 --- /dev/null +++ b/test/org/apache/tomcat/util/http/TestCookiesDefaultSysProps.java @@ -0,0 +1,51 @@ +/* + * 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.tomcat.util.http; + +import org.apache.catalina.startup.Tomcat; +import org.apache.tomcat.util.buf.ByteChunk; + +/** + * Test case for {@link Cookies}. Note because of the use of final + * static constants in {@link Cookies}, each of these tests must be + * executed in a new JVM instance. The tests have been place in separate classes + * to facilitate this when running the unit tests via Ant. + */ +public class TestCookiesDefaultSysProps extends CookiesBaseTest { + + @Override + public void testCookiesInstance() throws Exception { + + Tomcat tomcat = getTomcatInstance(); + + addServlets(tomcat); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + "/invalid"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidFwd"); + assertEquals("Cookie name ok", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidStrict"); + assertEquals("Cookie name ok", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/valid"); + assertEquals("Cookie name ok", res.toString()); + + } + +} diff --git a/test/org/apache/tomcat/util/http/TestCookiesNoFwdStrictSysProps.java b/test/org/apache/tomcat/util/http/TestCookiesNoFwdStrictSysProps.java new file mode 100644 index 000000000..4db0cc03e --- /dev/null +++ b/test/org/apache/tomcat/util/http/TestCookiesNoFwdStrictSysProps.java @@ -0,0 +1,55 @@ +/* + * 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.tomcat.util.http; + +import org.apache.catalina.startup.Tomcat; +import org.apache.tomcat.util.buf.ByteChunk; + +/** + * Test case for {@link Cookies}. Note because of the use of final + * static constants in {@link Cookies}, each of these tests must be + * executed in a new JVM instance. The tests have been place in separate classes + * to facilitate this when running the unit tests via Ant. + */ +public class TestCookiesNoFwdStrictSysProps extends CookiesBaseTest { + + public void testCookiesInstance() throws Exception { + + System.setProperty("org.apache.catalina.STRICT_SERVLET_COMPLIANCE", + "true"); + System.setProperty("org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR", + "false"); + + Tomcat tomcat = getTomcatInstance(); + + addServlets(tomcat); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + "/invalid"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidFwd"); + assertEquals("Cookie name ok", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidStrict"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/valid"); + assertEquals("Cookie name ok", res.toString()); + + } + +} diff --git a/test/org/apache/tomcat/util/http/TestCookiesNoStrictNamingSysProps.java b/test/org/apache/tomcat/util/http/TestCookiesNoStrictNamingSysProps.java new file mode 100644 index 000000000..b35344525 --- /dev/null +++ b/test/org/apache/tomcat/util/http/TestCookiesNoStrictNamingSysProps.java @@ -0,0 +1,55 @@ +/* + * 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.tomcat.util.http; + +import org.apache.catalina.startup.Tomcat; +import org.apache.tomcat.util.buf.ByteChunk; + +/** + * Test case for {@link Cookies}. Note because of the use of final + * static constants in {@link Cookies}, each of these tests must be + * executed in a new JVM instance. The tests have been place in separate classes + * to facilitate this when running the unit tests via Ant. + */ +public class TestCookiesNoStrictNamingSysProps extends CookiesBaseTest { + + @Override + public void testCookiesInstance() throws Exception { + + System.setProperty("org.apache.catalina.STRICT_SERVLET_COMPLIANCE", + "true"); + System.setProperty("org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING", + "false"); + + Tomcat tomcat = getTomcatInstance(); + + addServlets(tomcat); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + "/invalid"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidFwd"); + assertEquals("Cookie name ok", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidStrict"); + assertEquals("Cookie name ok", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/valid"); + assertEquals("Cookie name ok", res.toString()); + + } +} diff --git a/test/org/apache/tomcat/util/http/TestCookiesStrictSysProps.java b/test/org/apache/tomcat/util/http/TestCookiesStrictSysProps.java new file mode 100644 index 000000000..0aaf46c64 --- /dev/null +++ b/test/org/apache/tomcat/util/http/TestCookiesStrictSysProps.java @@ -0,0 +1,54 @@ +/* + * 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.tomcat.util.http; + +import org.apache.catalina.startup.Tomcat; +import org.apache.tomcat.util.buf.ByteChunk; + +/** + * Test case for {@link Cookies}. Note because of the use of final + * static constants in {@link Cookies}, each of these tests must be + * executed in a new JVM instance. The tests have been place in separate classes + * to facilitate this when running the unit tests via Ant. + */ +public class TestCookiesStrictSysProps extends CookiesBaseTest { + + @Override + public void testCookiesInstance() throws Exception { + + System.setProperty("org.apache.catalina.STRICT_SERVLET_COMPLIANCE", + "true"); + + Tomcat tomcat = getTomcatInstance(); + + addServlets(tomcat); + + tomcat.start(); + + ByteChunk res = getUrl("http://localhost:" + getPort() + "/invalid"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidFwd"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/invalidStrict"); + assertEquals("Cookie name fail", res.toString()); + res = getUrl("http://localhost:" + getPort() + "/valid"); + assertEquals("Cookie name ok", res.toString()); + + } + +}