    1   /*
    2    * $HeadURL: https://svn.apache.org/repos/asf/jakarta/httpcomponents/oac.hc3x/tags/HTTPCLIENT_3_1/src/test/org/apache/commons/httpclient/cookie/TestCookieVersionSupport.java $
    3    * $Revision: 480424 $
    4    * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
    5    * ====================================================================
    6    *
    7    *  Licensed to the Apache Software Foundation (ASF) under one or more
    8    *  contributor license agreements.  See the NOTICE file distributed with
    9    *  this work for additional information regarding copyright ownership.
    10   *  The ASF licenses this file to You under the Apache License, Version 2.0
    11   *  (the "License"); you may not use this file except in compliance with
    12   *  the License.  You may obtain a copy of the License at
    13   *
    14   *      http://www.apache.org/licenses/LICENSE-2.0
    15   *
    16   *  Unless required by applicable law or agreed to in writing, software
    17   *  distributed under the License is distributed on an "AS IS" BASIS,
    18   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    19   *  See the License for the specific language governing permissions and
    20   *  limitations under the License.
    21   * ====================================================================
    22   *
    23   * This software consists of voluntary contributions made by many
    24   * individuals on behalf of the Apache Software Foundation.  For more
    25   * information on the Apache Software Foundation, please see
    26   * <http://www.apache.org/>.
    27   */
    28
    29  package org.apache.commons.httpclient.cookie;
    30
    31  import java.io.IOException;
    32
    33  import junit.framework.Test;
    34  import junit.framework.TestSuite;
    35
    36  import org.apache.commons.httpclient.Cookie;
    37  import org.apache.commons.httpclient.Header;
    38  import org.apache.commons.httpclient.HttpClientTestBase;
    39  import org.apache.commons.httpclient.HttpState;
    40  import org.apache.commons.httpclient.HttpStatus;
    41  import org.apache.commons.httpclient.HttpVersion;
    42  import org.apache.commons.httpclient.methods.GetMethod;
    43  import org.apache.commons.httpclient.server.HttpService;
    44  import org.apache.commons.httpclient.server.SimpleRequest;
    45  import org.apache.commons.httpclient.server.SimpleResponse;
    46
    47  /**
    48   * Cookie version support tests.
    49   *
    50   * @author Oleg Kalnichevski
    51   *
    52   * @version $Revision: 480424 $
    53   */
    54  public class TestCookieVersionSupport extends HttpClientTestBase {
    55
    56      // ------------------------------------------------------------ Constructor
    57      public TestCookieVersionSupport(final String testName) throws IOException {
    58          super(testName);
    59      }
    60
    61      // ------------------------------------------------------------------- Main
    62      public static void main(String args[]) {
    63          String[] testCaseName = { TestCookieVersionSupport.class.getName() };
    64          junit.textui.TestRunner.main(testCaseName);
    65      }
    66
    67      // ------------------------------------------------------- TestCase Methods
    68
    69      public static Test suite() {
    70          return new TestSuite(TestCookieVersionSupport.class);
    71      }
    72
    73      private static class CookieVer0Service implements HttpService {
    74
    75          public CookieVer0Service() {
    76              super();
    77          }
    78
    79          public boolean process(final SimpleRequest request, final SimpleResponse response)
    80              throws IOException
    81          {
    82              HttpVersion httpversion = request.getRequestLine().getHttpVersion();
    83              response.setStatusLine(httpversion, HttpStatus.SC_OK);
    84              response.addHeader(new Header("Set-Cookie", "name1=value1; path=/test"));
    85              response.setBodyString("whatever");
    86              return true;
    87          }
    88      }
    89
    90
    91      public void testCookieVersionSupportHeader1() throws IOException {
    92          this.server.setHttpService(new CookieVer0Service());
    93          this.client.getParams().setCookiePolicy(CookiePolicy.RFC_2965);
    94          GetMethod httpget1 = new GetMethod("/test/");
    95          try {
    96              this.client.executeMethod(httpget1);
    97          } finally {
    98              httpget1.releaseConnection();
    99          }
    100         GetMethod httpget2 = new GetMethod("/test/");
    101         try {
    102             this.client.executeMethod(httpget2);
    103         } finally {
    104             httpget2.releaseConnection();
    105         }
    106         Header cookiesupport = httpget2.getRequestHeader("Cookie2");
    107         assertNotNull(cookiesupport);
    108         assertEquals("$Version=\"1\"", cookiesupport.getValue());
    109     }
    110
    111     private static class CookieVer1Service implements HttpService {
    112
    113         public CookieVer1Service() {
    114             super();
    115         }
    116
    117         public boolean process(final SimpleRequest request, final SimpleResponse response)
    118             throws IOException
    119         {
    120             HttpVersion httpversion = request.getRequestLine().getHttpVersion();
    121             response.setStatusLine(httpversion, HttpStatus.SC_OK);
    122             response.addHeader(new Header("Set-Cookie", "name1=value1; Path=\"/test\"; Version=\"1\""));
    123             response.addHeader(new Header("Set-Cookie2", "name2=value2; Path=\"/test\"; Version=\"1\""));
    124             response.setBodyString("whatever");
    125             return true;
    126         }
    127     }
    128
    129
    130     public void testCookieVersionSupportHeader2() throws IOException {
    131         this.server.setHttpService(new CookieVer1Service());
    132         this.client.getParams().setCookiePolicy(CookiePolicy.RFC_2965);
    133         GetMethod httpget1 = new GetMethod("/test/");
    134         try {
    135             this.client.executeMethod(httpget1);
    136         } finally {
    137             httpget1.releaseConnection();
    138         }
    139         GetMethod httpget2 = new GetMethod("/test/");
    140         try {
    141             this.client.executeMethod(httpget2);
    142         } finally {
    143             httpget2.releaseConnection();
    144         }
    145         Header cookiesupport = httpget2.getRequestHeader("Cookie2");
    146         assertNull(cookiesupport);
    147     }
    148
    149     private static class CookieVer2Service implements HttpService {
    150
    151         public CookieVer2Service() {
    152             super();
    153         }
    154
    155         public boolean process(final SimpleRequest request, final SimpleResponse response)
    156             throws IOException
    157         {
    158             HttpVersion httpversion = request.getRequestLine().getHttpVersion();
    159             response.setStatusLine(httpversion, HttpStatus.SC_OK);
    160             response.addHeader(new Header("Set-Cookie2", "name2=value2; Path=\"/test\"; Version=\"2\""));
    161             response.setBodyString("whatever");
    162             return true;
    163         }
    164     }
    165
    166
    167     public void testCookieVersionSupportHeader3() throws IOException {
    168         this.server.setHttpService(new CookieVer2Service());
    169         this.client.getParams().setCookiePolicy(CookiePolicy.RFC_2965);
    170         GetMethod httpget1 = new GetMethod("/test/");
    171         try {
    172             this.client.executeMethod(httpget1);
    173         } finally {
    174             httpget1.releaseConnection();
    175         }
    176         GetMethod httpget2 = new GetMethod("/test/");
    177         try {
    178             this.client.executeMethod(httpget2);
    179         } finally {
    180             httpget2.releaseConnection();
    181         }
    182         Header cookiesupport = httpget2.getRequestHeader("Cookie2");
    183         assertNotNull(cookiesupport);
    184         assertEquals("$Version=\"1\"", cookiesupport.getValue());
    185     }
    186
    187     private static class SetCookieVersionMixService implements HttpService {
    188
    189         public SetCookieVersionMixService() {
    190             super();
    191         }
    192
    193         public boolean process(final SimpleRequest request, final SimpleResponse response)
    194             throws IOException
    195         {
    196             HttpVersion httpversion = request.getRequestLine().getHttpVersion();
    197             response.setStatusLine(httpversion, HttpStatus.SC_OK);
    198             response.addHeader(new Header("Set-Cookie", "name=wrong; Path=/test"));
    199             response.addHeader(new Header("Set-Cookie2", "name=right; Path=\"/test\"; Version=\"1\""));
    200             response.setBodyString("whatever");
    201             return true;
    202         }
    203     }
    204
    205     public static class TestHttpState extends HttpState {
    206
    207         public synchronized void addCookie(Cookie cookie) {
    208             if (cookie != null) {
    209                 if ("localhost.local".equals(cookie.getDomain())) {
    210                     cookie.setDomain("localhost");
    211                 }
    212                 super.addCookie(cookie);
    213             }
    214         }
    215     }
    216
    217     public void testSetCookieVersionMix() throws IOException {
    218         this.server.setHttpService(new SetCookieVersionMixService());
    219         this.client.setState(new TestHttpState());
    220         this.client.getParams().setCookiePolicy(CookiePolicy.RFC_2965);
    221         GetMethod httpget1 = new GetMethod("/test/");
    222         try {
    223             this.client.executeMethod(httpget1);
    224         } finally {
    225             httpget1.releaseConnection();
    226         }
    227         Cookie[] cookies = this.client.getState().getCookies();
    228         assertNotNull(cookies);
    229         assertEquals(1, cookies.length);
    230         assertEquals("right", cookies[0].getValue());
    231         assertTrue(cookies[0] instanceof Cookie2);
    232     }
    233
    234
    235 }