You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/09/26 15:00:36 UTC

svn commit: r1627770 - in /tomcat/trunk/test/org/apache/tomcat/util/http: TestCookieParsing.java TestCookiesAllowEquals.java TestCookiesAllowNameOnly.java

Author: markt
Date: Fri Sep 26 13:00:36 2014
New Revision: 1627770

URL: http://svn.apache.org/r1627770
Log:
Combine test classes and reduce code duplication in tests.
Expand tests to cover both CookieProcessor implementations.

Added:
    tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java   (with props)
Removed:
    tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
    tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java

Added: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java?rev=1627770&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java (added)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java Fri Sep 26 13:00:36 2014
@@ -0,0 +1,216 @@
+/*
+ *  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.ServletException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.startup.SimpleHttpClient;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+
+public class TestCookieParsing extends TomcatBaseTest {
+
+    private static final String[] COOKIES_WITH_EQUALS = new String[] {
+            "name=equals=middle", "name==equalsstart", "name=equalsend=" };
+
+    private static final String[] COOKIEs_WITH_NAME_ONLY = new String[] {
+            "bob", "bob=" };
+
+
+    @Test
+    public void testLegacyWithEquals() throws Exception {
+        doTestLegacyEquals(true);
+    }
+
+    @Test
+    public void testLegacyWithoutEquals() throws Exception {
+        doTestLegacyEquals(false);
+    }
+
+
+    private void doTestLegacyEquals(boolean allowEquals) throws Exception {
+        LegacyCookieProcessor legacyCookieProcessor = new LegacyCookieProcessor();
+        legacyCookieProcessor.setAllowEqualsInValue(allowEquals);
+        // Need to allow name only cookies to handle equals at the start of
+        // the value
+        legacyCookieProcessor.setAllowNameOnly(true);
+
+        String expected;
+        if (allowEquals) {
+            expected = concat(COOKIES_WITH_EQUALS);
+        } else {
+            StringBuilder sb = new StringBuilder();
+            for (String cookie : COOKIES_WITH_EQUALS) {
+                int end = cookie.indexOf('=', cookie.indexOf('=') + 1);
+                sb.append(cookie.substring(0, end));
+            }
+            expected = sb.toString();
+        }
+        TestCookieParsingClient client = new TestCookieParsingClient(
+                legacyCookieProcessor, COOKIES_WITH_EQUALS, expected);
+        client.doRequest();
+    }
+
+
+    @Test
+    public void testRfc6265Equals() throws Exception {
+        // Always allows equals
+        TestCookieParsingClient client = new TestCookieParsingClient(
+                new Rfc6265CookieProcessor(), COOKIES_WITH_EQUALS, concat(COOKIES_WITH_EQUALS));
+        client.doRequest();
+    }
+
+
+    @Test
+    public void testLegacyWithNameOnly() throws Exception {
+        doTestLegacyNameOnly(true);
+    }
+
+    @Test
+    public void testLegacyWithoutNameOnly() throws Exception {
+        doTestLegacyNameOnly(false);
+    }
+
+
+    private void doTestLegacyNameOnly(boolean nameOnly) throws Exception {
+        LegacyCookieProcessor legacyCookieProcessor = new LegacyCookieProcessor();
+        legacyCookieProcessor.setAllowNameOnly(nameOnly);
+
+        String expected;
+        if (nameOnly) {
+            expected = concat(COOKIEs_WITH_NAME_ONLY, true);
+        } else {
+            expected = "";
+        }
+        TestCookieParsingClient client = new TestCookieParsingClient(
+                legacyCookieProcessor, COOKIEs_WITH_NAME_ONLY, expected);
+        client.doRequest();
+    }
+
+
+    @Test
+    public void testRfc6265NameOnly() throws Exception {
+        // Always allows equals
+        TestCookieParsingClient client = new TestCookieParsingClient(
+                new Rfc6265CookieProcessor(), COOKIEs_WITH_NAME_ONLY,
+                concat(COOKIEs_WITH_NAME_ONLY, true));
+        client.doRequest();
+    }
+
+
+    private static String concat(String[] input) {
+        return concat(input, false);
+    }
+
+    private static String concat(String[] input, boolean mustEndInEquals) {
+        StringBuilder result = new StringBuilder();
+        for (String s : input) {
+            result.append(s);
+            if (!s.endsWith("=") && mustEndInEquals) {
+                result.append('=');
+            }
+        }
+        return result.toString();
+    }
+
+
+    private class TestCookieParsingClient extends SimpleHttpClient {
+
+        private final CookieProcessor cookieProcessor;
+        private final String[] cookies;
+        private final String expected;
+
+
+        public TestCookieParsingClient(CookieProcessor cookieProcessor,
+                String[] cookies, String expected) {
+            this.cookieProcessor = cookieProcessor;
+            this.cookies = cookies;
+            this.expected = expected;
+        }
+
+
+        private void doRequest() throws Exception {
+            Tomcat tomcat = getTomcatInstance();
+            Context root = tomcat.addContext("", TEMP_DIR);
+            root.setCookieProcessor(cookieProcessor);
+
+            Tomcat.addServlet(root, "Simple", new SimpleServlet());
+            root.addServletMapping("/test", "Simple");
+
+            tomcat.start();
+            // Open connection
+            setPort(tomcat.getConnector().getLocalPort());
+            connect();
+
+            StringBuilder request = new StringBuilder();
+            request.append("GET /test HTTP/1.0");
+            request.append(CRLF);
+            for (String cookie : cookies) {
+                request.append("Cookie: ");
+                request.append(cookie);
+                request.append(CRLF);
+            }
+            request.append(CRLF);
+            setRequest(new String[] {request.toString()});
+            processRequest(true); // blocks until response has been read
+            String response = getResponseBody();
+
+            // Close the connection
+            disconnect();
+            reset();
+            tomcat.stop();
+
+            Assert.assertEquals(expected, response);
+        }
+
+
+        @Override
+        public boolean isResponseBodyOK() {
+            return true;
+        }
+    }
+
+
+    private static class SimpleServlet extends HttpServlet {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        protected void service(HttpServletRequest req, HttpServletResponse resp)
+        throws ServletException, IOException {
+            Cookie cookies[] = req.getCookies();
+            if (cookies != null) {
+                for (Cookie cookie : cookies) {
+                    resp.getWriter().write(cookie.getName() + "=" +
+                            cookie.getValue());
+                }
+            }
+            resp.flushBuffer();
+        }
+    }
+}

Propchange: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookieParsing.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org