From ccaad88dd3e3e6b9573a496ba5056a41c486a170 Mon Sep 17 00:00:00 2001 From: markt Date: Sat, 31 Oct 2009 11:46:50 +0000 Subject: [PATCH] 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 --- .../catalina/connector/TestKeepAliveCount.java | 4 +- .../org/apache/catalina/connector/TestRequest.java | 4 +- .../apache/catalina/core/TestStandardContext.java | 4 +- test/org/apache/catalina/startup/TestTomcat.java | 2 +- .../{TestTomcatBase.java => TomcatBaseTest.java} | 2 +- .../apache/tomcat/util/http/CookiesBaseTest.java | 84 ++++++++++++++++++++++ .../util/http/TestCookiesDefaultSysProps.java | 51 +++++++++++++ .../util/http/TestCookiesNoFwdStrictSysProps.java | 55 ++++++++++++++ .../http/TestCookiesNoStrictNamingSysProps.java | 55 ++++++++++++++ .../util/http/TestCookiesStrictSysProps.java | 54 ++++++++++++++ 10 files changed, 307 insertions(+), 8 deletions(-) rename test/org/apache/catalina/startup/{TestTomcatBase.java => TomcatBaseTest.java} (98%) create mode 100644 test/org/apache/tomcat/util/http/CookiesBaseTest.java create mode 100644 test/org/apache/tomcat/util/http/TestCookiesDefaultSysProps.java create mode 100644 test/org/apache/tomcat/util/http/TestCookiesNoFwdStrictSysProps.java create mode 100644 test/org/apache/tomcat/util/http/TestCookiesNoStrictNamingSysProps.java create mode 100644 test/org/apache/tomcat/util/http/TestCookiesStrictSysProps.java 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/TomcatBaseTest.java similarity index 98% rename from test/org/apache/catalina/startup/TestTomcatBase.java rename to test/org/apache/catalina/startup/TomcatBaseTest.java index 3c6984675..2b326467e 100644 --- a/test/org/apache/catalina/startup/TestTomcatBase.java +++ b/test/org/apache/catalina/startup/TomcatBaseTest.java @@ -39,7 +39,7 @@ 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 { +public abstract class TomcatBaseTest extends TestCase { private Tomcat tomcat; private File tempDir; private static int port = 8001; 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()); + + } + +} -- 2.11.0