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/02 15:41:03 UTC

svn commit: r1621985 - /tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java

Author: markt
Date: Tue Sep  2 13:41:02 2014
New Revision: 1621985

URL: http://svn.apache.org/r1621985
Log:
Expand unit tests to cover old and new implementation

Modified:
    tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java

Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java?rev=1621985&r1=1621984&r2=1621985&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookies.java Tue Sep  2 13:41:02 2014
@@ -28,177 +28,376 @@ import org.apache.tomcat.util.buf.Messag
 
 public class TestCookies {
     private Cookie FOO = new Cookie("foo", "bar");
+    private Cookie FOO_NULL = new Cookie("foo", null);
+    private Cookie FOO_EMPTY = new Cookie("foo", "");
     private Cookie BAR = new Cookie("bar", "rab");
+    private Cookie BAR_NULL = new Cookie("bar", null);
     private Cookie A = new Cookie("a", "b");
+    private Cookie HASH_NULL = new Cookie("#", null);
 
     @Test
-    public void testBasicCookie() {
-        test("foo=bar; a=b", FOO, A);
-        test("foo=bar;a=b", FOO, A);
-        test("foo=bar;a=b;", FOO, A);
-        test("foo=bar;a=b; ", FOO, A);
-        test("foo=bar;a=b; ;", FOO, A);
+    public void testBasicCookieOld() {
+        doTestBasicCookie(false);
     }
 
     @Test
-    public void testNameOnlyAreDropped() {
-        test("foo=;a=b; ;", A);
-        test("foo;a=b; ;", A);
-        test("foo;a=b;bar", A);
-        test("foo;a=b;bar;", A);
-        test("foo;a=b;bar ", A);
-        test("foo;a=b;bar ;", A);
+    public void testBasicCookieNew() {
+        doTestBasicCookie(true);
+    }
+
+    private void doTestBasicCookie(boolean useRfc6265) {
+        test(useRfc6265, "foo=bar; a=b", FOO, A);
+        test(useRfc6265, "foo=bar;a=b", FOO, A);
+        test(useRfc6265, "foo=bar;a=b;", FOO, A);
+        test(useRfc6265, "foo=bar;a=b; ", FOO, A);
+        test(useRfc6265, "foo=bar;a=b; ;", FOO, A);
+    }
+
+    @Test
+    public void testNameOnlyAreDroppedOld() {
+        test(false, "foo=;a=b; ;", A);
+        test(false, "foo;a=b; ;", A);
+        test(false, "foo;a=b;bar", A);
+        test(false, "foo;a=b;bar;", A);
+        test(false, "foo;a=b;bar ", A);
+        test(false, "foo;a=b;bar ;", A);
+
+        // Bug 49000
+        Cookie fred = new Cookie("fred", "1");
+        Cookie jim = new Cookie("jim", "2");
+        Cookie george = new Cookie("george", "3");
+        test(false, "fred=1; jim=2; bob", fred, jim);
+        test(false, "fred=1; jim=2; bob; george=3", fred, jim, george);
+        test(false, "fred=1; jim=2; bob=; george=3", fred, jim, george);
+        test(false, "fred=1; jim=2; bob=", fred, jim);
+    }
+
+    @Test
+    public void testNameOnlyAreDroppedNew() {
+        // Name only cookies are not dropped in RFC6265
+        test(true, "foo=;a=b; ;", FOO_EMPTY, A);
+        test(true, "foo;a=b; ;", FOO_NULL, A);
+        test(true, "foo;a=b;bar", FOO_NULL, A, BAR_NULL);
+        test(true, "foo;a=b;bar;", FOO_NULL, A, BAR_NULL);
+        test(true, "foo;a=b;bar ", FOO_NULL, A, BAR_NULL);
+        test(true, "foo;a=b;bar ;", FOO_NULL, A, BAR_NULL);
 
         // Bug 49000
         Cookie fred = new Cookie("fred", "1");
         Cookie jim = new Cookie("jim", "2");
+        Cookie bobNull = new Cookie("bob", null);
+        Cookie bobEmpty = new Cookie("bob", "");
         Cookie george = new Cookie("george", "3");
-        test("fred=1; jim=2; bob", fred, jim);
-        test("fred=1; jim=2; bob; george=3", fred, jim, george);
-        test("fred=1; jim=2; bob=; george=3", fred, jim, george);
-        test("fred=1; jim=2; bob=", fred, jim);
+        test(true, "fred=1; jim=2; bob", fred, jim, bobNull);
+        test(true, "fred=1; jim=2; bob; george=3", fred, jim, bobNull, george);
+        test(true, "fred=1; jim=2; bob=; george=3", fred, jim, bobEmpty, george);
+        test(true, "fred=1; jim=2; bob=", fred, jim, bobEmpty);
     }
 
     @Test
-    public void testQuotedValue() {
-        test("foo=bar;a=\"b\"", FOO, A);
-        test("foo=bar;a=\"b\";", FOO, A);
+    public void testQuotedValueOld() {
+        doTestQuotedValue(false);
     }
 
     @Test
-    public void testEmptyPairs() {
-        test("foo;a=b; ;bar", A);
-        test("foo;a=b;;bar", A);
-        test("foo;a=b; ;;bar=rab", A, BAR);
-        test("foo;a=b;; ;bar=rab", A, BAR);
-        test("foo;a=b;;#;bar=rab", A, BAR);
-        test("foo;a=b;;\\;bar=rab", A, BAR);
+    public void testQuotedValueNew() {
+        doTestQuotedValue(true);
+    }
+
+    private void doTestQuotedValue(boolean useRfc6265) {
+        test(useRfc6265, "foo=bar;a=\"b\"", FOO, A);
+        test(useRfc6265, "foo=bar;a=\"b\";", FOO, A);
     }
 
     @Test
-    public void testSeparatorsInValue() {
-        test("a=()<>@:\\\"/[]?={}\t; foo=bar", FOO);
+    public void testEmptyPairsOld() {
+        test(false, "foo;a=b; ;bar", A);
+        test(false, "foo;a=b;;bar", A);
+        test(false, "foo;a=b; ;;bar=rab", A, BAR);
+        test(false, "foo;a=b;; ;bar=rab", A, BAR);
+        test(false, "foo;a=b;;#;bar=rab", A, BAR);
+        test(false, "foo;a=b;;\\;bar=rab", A, BAR);
+    }
+
+    @Test
+    public void testEmptyPairsNew() {
+        test(true, "foo;a=b; ;bar", FOO_NULL, A, BAR_NULL);
+        test(true, "foo;a=b;;bar", FOO_NULL, A, BAR_NULL);
+        test(true, "foo;a=b; ;;bar=rab", FOO_NULL, A, BAR);
+        test(true, "foo;a=b;; ;bar=rab", FOO_NULL, A, BAR);
+        test(true, "foo;a=b;;#;bar=rab", FOO_NULL, A, HASH_NULL, BAR);
+        test(true, "foo;a=b;;\\;bar=rab", FOO_NULL, A, BAR);
+    }
+
+    @Test
+    public void testSeparatorsInValueOld() {
+        doTestSeparatorsInValue(false);
+    }
+
+    @Test
+    public void testSeparatorsInValueNew() {
+        doTestSeparatorsInValue(true);
+    }
+
+    private void doTestSeparatorsInValue(boolean useRfc6265) {
+        test(useRfc6265, "a=()<>@:\\\"/[]?={}\t; foo=bar", FOO);
     }
 
 
     @Test
-    public void v1TokenValue() {
+    public void v1TokenValueOld() {
+        doV1TokenValue(false);
+    }
+
+    @Test
+    public void v1TokenValueNew() {
+        doV1TokenValue(true);
+    }
+
+    private void doV1TokenValue(boolean useRfc6265) {
         FOO.setVersion(1);
         A.setVersion(1);
-        test("$Version=1; foo=bar;a=b", FOO, A);
-        test("$Version=1;foo=bar;a=b; ; ", FOO, A);
+        test(useRfc6265, "$Version=1; foo=bar;a=b", FOO, A);
+        test(useRfc6265, "$Version=1;foo=bar;a=b; ; ", FOO, A);
     }
 
     @Test
-    public void v1NameOnlyIsDropped() {
+    public void v1NameOnlyIsDroppedOld() {
+        doV1NameOnlyIsDropped(false);
+    }
+
+    @Test
+    public void v1NameOnlyIsDroppedNew() {
+        doV1NameOnlyIsDropped(true);
+    }
+
+    private void doV1NameOnlyIsDropped(boolean useRfc6265) {
         A.setVersion(1);
-        test("$Version=1;foo=;a=b; ; ", A);
-        test("$Version=1;foo= ;a=b; ; ", A);
-        test("$Version=1;foo;a=b; ; ", A);
+        test(useRfc6265, "$Version=1;foo=;a=b; ; ", A);
+        test(useRfc6265, "$Version=1;foo= ;a=b; ; ", A);
+        test(useRfc6265, "$Version=1;foo;a=b; ; ", A);
+    }
+
+    @Test
+    public void v1QuotedValueOld() {
+        doV1QuotedValue(false);
     }
 
     @Test
-    public void v1QuotedValue() {
+    public void v1QuotedValueNew() {
+        doV1QuotedValue(true);
+    }
+
+    private void doV1QuotedValue(boolean useRfc6265) {
         FOO.setVersion(1);
         A.setVersion(1);
         // presumes quotes are removed
-        test("$Version=1;foo=\"bar\";a=b; ; ", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"bar\";a=b; ; ", FOO, A);
+    }
+
+    @Test
+    public void v1DQuoteInValueOld() {
+        doV1DQuoteInValue(false);
     }
 
     @Test
-    public void v1DQuoteInValue() {
+    public void v1DQuoteInValueNew() {
+        doV1DQuoteInValue(true);
+    }
+
+    private void doV1DQuoteInValue(boolean useRfc6265) {
         FOO.setValue("b");
         FOO.setVersion(1);
         A.setVersion(1);
-        test("$Version=1;foo=\"b\"ar\";a=b", FOO, A); // Incorrectly escaped.
+        test(useRfc6265, "$Version=1;foo=\"b\"ar\";a=b", FOO, A); // Incorrectly escaped.
+    }
+
+    @Test
+    public void v1QuoteInValueOld() {
+        doV1QuoteInValue(false);
     }
 
     @Test
-    public void v1QuoteInValue() {
+    public void v1QuoteInValueNew() {
+        doV1QuoteInValue(true);
+    }
+
+    private void doV1QuoteInValue(boolean useRfc6265) {
         FOO.setValue("b'ar");
         FOO.setVersion(1);
         A.setVersion(1);
-        test("$Version=1;foo=b'ar;a=b", FOO, A);
+        test(useRfc6265, "$Version=1;foo=b'ar;a=b", FOO, A);
     }
 
 
     @Test
-    public void v1QuoteInQuotedValue() {
+    public void v1QuoteInQuotedValueOld() {
+        doV1QuoteInQuotedValue(false);
+    }
+
+    @Test
+    public void v1QuoteInQuotedValueNew() {
+        doV1QuoteInQuotedValue(true);
+    }
+
+    private void doV1QuoteInQuotedValue(boolean useRfc6265) {
         FOO.setValue("b'ar");
         FOO.setVersion(1);
         A.setVersion(1);
-        test("$Version=1;foo=\"b'ar\";a=b", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"b'ar\";a=b", FOO, A);
     }
 
     @Test
-    public void v1EscapedDQuoteInValue() {
+    public void v1EscapedDQuoteInValueOld() {
+        doV1EscapedDQuoteInValue(false);
+    }
+
+    @Test
+    public void v1EscapedDQuoteInValueNew() {
+        doV1EscapedDQuoteInValue(true);
+    }
+
+    private void doV1EscapedDQuoteInValue(boolean useRfc6265) {
         FOO.setValue("b\"ar");
         FOO.setVersion(1);
         A.setVersion(1);
-        test("$Version=1;foo=\"b\\\"ar\";a=b", FOO, A); // correctly escaped.
+        test(useRfc6265, "$Version=1;foo=\"b\\\"ar\";a=b", FOO, A); // correctly escaped.
+    }
+
+    @Test
+    public void v1QuotedValueEndsInBackslashOld() {
+        doV1QuotedValueEndsInBackslash(false);
     }
 
     @Test
-    public void v1QuotedValueEndsInBackslash() {
+    public void v1QuotedValueEndsInBackslashNew() {
+        doV1QuotedValueEndsInBackslash(true);
+    }
+
+    private void doV1QuotedValueEndsInBackslash(boolean useRfc6265) {
         FOO.setVersion(1);
-        test("$Version=1;foo=bar;a=\"b\\\"", FOO);
+        test(useRfc6265, "$Version=1;foo=bar;a=\"b\\\"", FOO);
+    }
+
+    @Test
+    public void v1MismatchedQuotesOld() {
+        doV1MismatchedQuotes(false);
     }
 
     @Test
-    public void v1MismatchedQuotes() {
+    public void v1MismatchedQuotesNew() {
+        doV1MismatchedQuotes(true);
+    }
+
+    private void doV1MismatchedQuotes(boolean useRfc6265) {
         FOO.setVersion(1);
-        test("$Version=1;foo=bar;a=\"b\\", FOO);
+        test(useRfc6265, "$Version=1;foo=bar;a=\"b\\", FOO);
+    }
+
+    @Test
+    public void v1SingleQuotesAreValidTokenCharactersOld() {
+        doV1SingleQuotesAreValidTokenCharacters(false);
     }
 
     @Test
-    public void v1SingleQuotesAreValidTokenCharacters() {
+    public void v1SingleQuotesAreValidTokenCharactersNew() {
+        doV1SingleQuotesAreValidTokenCharacters(true);
+    }
+
+    private void doV1SingleQuotesAreValidTokenCharacters(boolean useRfc6265) {
         FOO.setVersion(1);
         FOO.setValue("'bar'");
-        test("$Version=1; foo='bar'", FOO);
+        test(useRfc6265, "$Version=1; foo='bar'", FOO);
     }
 
     @Test
-    public void v1DomainIsParsed() {
+    public void v1DomainIsParsedOld() {
+        doV1DomainIsParsed(false);
+    }
+
+    @Test
+    public void v1DomainIsParsedNew() {
+        doV1DomainIsParsed(true);
+    }
+
+    private void doV1DomainIsParsed(boolean useRfc6265) {
         FOO.setVersion(1);
         FOO.setDomain("apache.org");
         A.setVersion(1);
         A.setDomain("yahoo.com");
-        test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b;$Domain=yahoo.com", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"bar\";$Domain=apache.org;a=b;$Domain=yahoo.com", FOO, A);
     }
 
     @Test
-    public void v1DomainOnlyAffectsPrecedingCookie() {
+    public void v1DomainOnlyAffectsPrecedingCookieOld() {
+        doV1DomainOnlyAffectsPrecedingCookie(false);
+    }
+
+    @Test
+    public void v1DomainOnlyAffectsPrecedingCookieNew() {
+        doV1DomainOnlyAffectsPrecedingCookie(true);
+    }
+
+    private void doV1DomainOnlyAffectsPrecedingCookie(boolean useRfc6265) {
         FOO.setVersion(1);
         FOO.setDomain("apache.org");
         A.setVersion(1);
-        test("$Version=1;foo=\"bar\";$Domain=apache.org;a=b", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"bar\";$Domain=apache.org;a=b", FOO, A);
+    }
+
+    @Test
+    public void v1PortIsIgnoredOld() {
+        doV1PortIsIgnored(false);
     }
 
     @Test
-    public void v1PortIsIgnored() {
+    public void v1PortIsIgnoredNew() {
+        doV1PortIsIgnored(true);
+    }
+
+    private void doV1PortIsIgnored(boolean useRfc6265) {
         FOO.setVersion(1);
         FOO.setDomain("apache.org");
         A.setVersion(1);
-        test("$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"bar\";$Domain=apache.org;$Port=8080;a=b", FOO, A);
+    }
+
+    @Test
+    public void v1PathAffectsPrecedingCookieOld() {
+        doV1PathAffectsPrecedingCookie(false);
     }
 
     @Test
-    public void v1PathAffectsPrecedingCookie() {
+    public void v1PathAffectsPrecedingCookieNew() {
+        doV1PathAffectsPrecedingCookie(true);
+    }
+
+    private void doV1PathAffectsPrecedingCookie(boolean useRfc6265) {
         FOO.setVersion(1);
         FOO.setPath("/examples");
         A.setVersion(1);
-        test("$Version=1;foo=\"bar\";$Path=/examples;a=b; ; ", FOO, A);
+        test(useRfc6265, "$Version=1;foo=\"bar\";$Path=/examples;a=b; ; ", FOO, A);
+    }
+
+    @Test
+    public void rfc2109Version0Old() {
+        doRfc2109Version0(false);
     }
 
     @Test
-    public void rfc2109Version0() {
+    public void rfc2109Version0New() {
+        doRfc2109Version0(true);
+    }
+
+    private void doRfc2109Version0(boolean useRfc6265) {
         // rfc2109 semantically does not allow $Version to be 0 but it is valid syntax
-        test("$Version=0;foo=bar", FOO);
+        test(useRfc6265, "$Version=0;foo=bar", FOO);
     }
 
-    private void test(String header, Cookie... expected) {
+    private void test(boolean useRfc6265, String header, Cookie... expected) {
         MimeHeaders mimeHeaders = new MimeHeaders();
         Cookies cookies = new Cookies(mimeHeaders);
+        cookies.setUseRfc6265(useRfc6265);
         MessageBytes cookieHeaderValue = mimeHeaders.addValue("Cookie");
         byte[] bytes = header.getBytes(StandardCharsets.UTF_8);
         cookieHeaderValue.setBytes(bytes, 0, bytes.length);



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