1   /*
2    * $Header: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappCookie.java,v 1.15 2004/02/22 18:08:50 olegk Exp $
3    * $Revision: 1.15 $
4    * $Date: 2004/02/22 18:08:50 $
5    * ====================================================================
6    *
7    *  Copyright 1999-2004 The Apache Software Foundation
8    *
9    *  Licensed under the Apache License, Version 2.0 (the "License");
10   *  you may not use this file except in compliance with the License.
11   *  You may obtain a copy of the License at
12   *
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   *
15   *  Unless required by applicable law or agreed to in writing, software
16   *  distributed under the License is distributed on an "AS IS" BASIS,
17   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   *  See the License for the specific language governing permissions and
19   *  limitations under the License.
20   * ====================================================================
21   *
22   * This software consists of voluntary contributions made by many
23   * individuals on behalf of the Apache Software Foundation.  For more
24   * information on the Apache Software Foundation, please see
25   * <http://www.apache.org/>.
26   *
27   * [Additional notices, if required by prior licensing conditions]
28   *
29   */
30  
31  package org.apache.commons.httpclient;
32  
33  import junit.framework.*;
34  
35  import org.apache.commons.httpclient.cookie.CookiePolicy;
36  import org.apache.commons.httpclient.methods.*;
37  import org.apache.commons.httpclient.params.HttpMethodParams;
38  
39  /***
40   * This suite of tests depends upon the httpclienttest webapp,
41   * which is available in the httpclient/src/test-webapp
42   * directory in the CVS tree.
43   * <p>
44   * The webapp should be deployed in the context "httpclienttest"
45   * on a servlet engine running on port 8080 on the localhost
46   * (IP 127.0.0.1).
47   * <p>
48   * You can change the assumed port by setting the
49   * "httpclient.test.localPort" property.
50   * You can change the assumed host by setting the
51   * "httpclient.test.localHost" property.
52   * You can change the assumed context by setting the
53   * "httpclient.test.webappContext" property.
54   *
55   * @author Rodney Waldhoff
56   * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
57   * 
58   * @version $Id: TestWebappCookie.java,v 1.15 2004/02/22 18:08:50 olegk Exp $
59   */
60  public class TestWebappCookie extends TestWebappBase {
61  
62      public TestWebappCookie(String testName) {
63          super(testName);
64      }
65  
66      public static Test suite() {
67          TestSuite suite = new TestSuite(TestWebappCookie.class);
68          return suite;
69      }
70  
71      public static void main(String args[]) {
72          String[] testCaseName = { TestWebappCookie.class.getName() };
73          junit.textui.TestRunner.main(testCaseName);
74      }
75  
76  
77      // ------------------------------------------------------------------ Tests
78  
79      public void testSetCookieGet() throws Exception {
80          HttpClient client = createHttpClient();
81          client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
82  
83          GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
84          method.setQueryString("simple=set");
85          
86          try {
87              client.executeMethod(method);
88          } catch (Throwable t) {
89              t.printStackTrace();
90              fail("Unable to execute method : " + t.toString());
91          }
92          assertEquals(200,method.getStatusCode());
93          assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
94          assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
95          assertEquals(1,client.getState().getCookies().length);
96          assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
97          assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
98      }
99  
100     public void testSetCookiePost() throws Exception {
101         HttpClient client = createHttpClient();
102         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
103 
104         PostMethod method = new PostMethod("/" + getWebappContext() + "/cookie/write");
105         method.setRequestBody(new NameValuePair[] { new NameValuePair("simple","set") } );
106         
107         try {
108             client.executeMethod(method);
109         } catch (Throwable t) {
110             t.printStackTrace();
111             fail("Unable to execute method : " + t.toString());
112         }
113         assertEquals(200,method.getStatusCode());
114         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: POST</title>") >= 0);
115         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
116         assertEquals(1,client.getState().getCookies().length);
117         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
118         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
119     }
120 
121     public void testSetCookiePut() throws Exception {
122         HttpClient client = createHttpClient();
123         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
124 
125         PutMethod method = new PutMethod("/" + getWebappContext() + "/cookie/write");
126         method.setQueryString("simple=set");
127         method.setRequestBody("data to be sent via http post");
128         try {
129             client.executeMethod(method);
130         } catch (Throwable t) {
131             t.printStackTrace();
132             fail("Unable to execute method : " + t.toString());
133         }
134         assertEquals(200,method.getStatusCode());
135         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: PUT</title>") >= 0);
136         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
137         assertEquals(1,client.getState().getCookies().length);
138         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
139         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
140     }
141 
142     public void testSetExpiredCookieGet() throws Exception {
143         HttpClient client = createHttpClient();
144         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
145 
146         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
147         method.setQueryString("simple=unset");
148         
149         try {
150             client.executeMethod(method);
151         } catch (Throwable t) {
152             t.printStackTrace();
153             fail("Unable to execute method : " + t.toString());
154         }
155         assertEquals(200,method.getStatusCode());
156         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
157         assertTrue(method.getResponseBodyAsString().indexOf("Deleted simplecookie.<br>") >= 0);
158         assertEquals(0,client.getState().getCookies().length);
159     }
160 
161     public void testSetExpiredCookiePut() throws Exception {
162         HttpClient client = createHttpClient();
163         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
164 
165         PutMethod method = new PutMethod("/" + getWebappContext() + "/cookie/write");
166         method.setQueryString("simple=unset");
167         method.setRequestBody("data to be sent via http post");
168         try {
169             client.executeMethod(method);
170         } catch (Throwable t) {
171             t.printStackTrace();
172             fail("Unable to execute method : " + t.toString());
173         }
174         assertEquals(200,method.getStatusCode());
175         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: PUT</title>") >= 0);
176         assertTrue(method.getResponseBodyAsString().indexOf("Deleted simplecookie.<br>") >= 0);
177         assertEquals(0,client.getState().getCookies().length);
178     }
179 
180     public void testSetUnsetCookieGet() throws Exception {
181         HttpClient client = createHttpClient();
182         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
183 
184         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
185         method.setQueryString("simple=set");
186         
187         try {
188             client.executeMethod(method);
189         } catch (Throwable t) {
190             t.printStackTrace();
191             fail("Unable to execute method : " + t.toString());
192         }
193         assertEquals(200,method.getStatusCode());
194         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
195         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
196         assertEquals(1,client.getState().getCookies().length);
197         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
198         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
199 
200         method.recycle();
201         
202         method.setPath("/" + getWebappContext() + "/cookie/write");
203         method.setQueryString("simple=unset");
204         try {
205             client.executeMethod(method);
206         } catch (Throwable t) {
207             t.printStackTrace();
208             fail("Unable to execute method : " + t.toString());
209         }
210         assertEquals(200,method.getStatusCode());
211         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
212         assertTrue(method.getResponseBodyAsString().indexOf("Deleted simplecookie.<br>") >= 0);
213         assertEquals(0,client.getState().getCookies().length);
214     }
215 
216     public void testSetMultiCookieGetStrict() throws Exception {
217         HttpClient client = createHttpClient();
218         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
219 
220         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
221         method.setQueryString("simple=set&domain=set");
222         
223         try {
224             client.executeMethod(method);
225         } catch (Throwable t) {
226             t.printStackTrace();
227             fail("Unable to execute method : " + t.toString());
228         }
229         assertEquals(200,method.getStatusCode());
230         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
231         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
232         assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
233         assertEquals(2,client.getState().getCookies().length);
234         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
235         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
236         assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
237         assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
238     }
239 
240 
241     public void testMultiSendCookieGetNonstrict() throws Exception {
242         HttpClient client = createHttpClient();
243 
244         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
245         method.setQueryString("simple=set&domain=set");
246         try {
247             client.executeMethod(method);
248         } catch (Throwable t) {
249             t.printStackTrace();
250             fail("Unable to execute method : " + t.toString());
251         }
252         assertEquals(200,method.getStatusCode());
253         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
254         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
255         assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
256         assertEquals(2,client.getState().getCookies().length);
257         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
258         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
259         assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
260         assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
261 
262         GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
263         try {
264             client.executeMethod(method2);
265         } catch (Throwable t) {
266             t.printStackTrace();
267             fail("Unable to execute method : " + t.toString());
268         }
269         assertEquals(200,method2.getStatusCode());
270         String s = method2.getResponseBodyAsString();
271         assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
272         assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"</tt></p>") >= 0);
273         assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
274         assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
275         assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
276     }
277 
278 
279     public void testSetMultiCookiePut() throws Exception {
280         HttpClient client = createHttpClient();
281         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
282 
283         PutMethod method = new PutMethod("/" + getWebappContext() + "/cookie/write");
284         method.setQueryString("simple=set&domain=set");
285         method.setRequestBody("data to be sent via http post");
286         try {
287             client.executeMethod(method);
288         } catch (Throwable t) {
289             t.printStackTrace();
290             fail("Unable to execute method : " + t.toString());
291         }
292         assertEquals(200,method.getStatusCode());
293         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: PUT</title>") >= 0);
294         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
295         assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
296         assertEquals(2,client.getState().getCookies().length);
297         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
298         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
299         assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
300         assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
301     }
302 
303     public void testSendCookieGet() throws Exception {
304         HttpClient client = createHttpClient();
305         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
306 
307         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
308         method.setQueryString("simple=set");
309         
310         try {
311             client.executeMethod(method);
312         } catch (Throwable t) {
313             t.printStackTrace();
314             fail("Unable to execute method : " + t.toString());
315         }
316         assertEquals(200,method.getStatusCode());
317         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
318         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
319         assertEquals(1,client.getState().getCookies().length);
320         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
321         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
322 
323         GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
324         
325         try {
326             client.executeMethod(method2);
327         } catch (Throwable t) {
328             t.printStackTrace();
329             fail("Unable to execute method : " + t.toString());
330         }
331         assertEquals(200,method2.getStatusCode());
332         String s = method2.getResponseBodyAsString();
333         assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
334         assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"</tt></p>") >= 0);
335         assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
336     }
337 
338     public void testMultiSendCookieGet() throws Exception {
339         HttpClient client = createHttpClient();
340         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
341 
342         GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
343         method.setQueryString("simple=set&domain=set");
344         
345         try {
346             client.executeMethod(method);
347         } catch (Throwable t) {
348             t.printStackTrace();
349             fail("Unable to execute method : " + t.toString());
350         }
351         assertEquals(200,method.getStatusCode());
352         assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
353         assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
354         assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
355         assertEquals(2,client.getState().getCookies().length);
356         assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
357         assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
358         assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
359         assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
360 
361         GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
362         
363         try {
364             client.executeMethod(method2);
365         } catch (Throwable t) {
366             t.printStackTrace();
367             fail("Unable to execute method : " + t.toString());
368         }
369         assertEquals(200,method2.getStatusCode());
370         String s = method2.getResponseBodyAsString();
371         assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
372         assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
373         assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
374         assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
375     }
376 
377     public void testDeleteCookieGet() throws Exception {
378         HttpClient client = createHttpClient();
379         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
380 
381 
382         {
383             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
384             method.setQueryString("simple=set&domain=set");
385             
386             try {
387                 client.executeMethod(method);
388             } catch (Throwable t) {
389                 t.printStackTrace();
390                 fail("Unable to execute method : " + t.toString());
391             }
392             assertEquals(200,method.getStatusCode());
393             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
394             assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
395             assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
396             assertEquals(2,client.getState().getCookies().length);
397             assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
398             assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
399             assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
400             assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
401         }
402 
403         {
404             GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
405             
406             try {
407                 client.executeMethod(method2);
408             } catch (Throwable t) {
409                 t.printStackTrace();
410                 fail("Unable to execute method : " + t.toString());
411             }
412             assertEquals(200,method2.getStatusCode());
413             String s = method2.getResponseBodyAsString();
414             assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
415             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
416             assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
417             assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
418         }
419 
420         {
421             GetMethod method3 = new GetMethod("/" + getWebappContext() + "/cookie/write");
422 
423             method3.setQueryString("simple=unset");
424             try {
425                 client.executeMethod(method3);
426             } catch (Throwable t) {
427                 t.printStackTrace();
428                 fail("Unable to execute method : " + t.toString());
429             }
430             assertEquals(200,method3.getStatusCode());
431             assertTrue(method3.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
432             assertTrue(method3.getResponseBodyAsString().indexOf("Deleted simplecookie.<br>") >= 0);
433             assertEquals(1,client.getState().getCookies().length);
434             assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[0])).getName());
435             assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
436         }
437 
438         {
439             GetMethod method4 = new GetMethod("/" + getWebappContext() + "/cookie/read");
440 
441             try {
442                 client.executeMethod(method4);
443             } catch (Throwable t) {
444                 t.printStackTrace();
445                 fail("Unable to execute method : " + t.toString());
446             }
447             assertEquals(200,method4.getStatusCode());
448             String s = method4.getResponseBodyAsString();
449             assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
450             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
451             assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
452         }
453     }
454 
455     public void testDeleteCookiePut() throws Exception {
456         HttpClient client = createHttpClient();
457         client.getParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true);
458         {
459             PutMethod method = new PutMethod("/" + getWebappContext() + "/cookie/write");
460             method.setQueryString("simple=set&domain=set");
461             method.setRequestBody("data to be sent via http post");
462             try {
463                 client.executeMethod(method);
464             } catch (Throwable t) {
465                 t.printStackTrace();
466                 fail("Unable to execute method : " + t.toString());
467             }
468             assertEquals(200,method.getStatusCode());
469             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: PUT</title>") >= 0);
470             assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
471             assertTrue(method.getResponseBodyAsString().indexOf("Wrote domaincookie.<br>") >= 0);
472             assertEquals(2,client.getState().getCookies().length);
473             assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
474             assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
475             assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[1])).getName());
476             assertEquals("value",((Cookie)(client.getState().getCookies()[1])).getValue());
477         }
478 
479         {
480             PutMethod method2 = new PutMethod("/" + getWebappContext() + "/cookie/read");
481             method2.setRequestBody("data to be sent via http post");
482             try {
483                 client.executeMethod(method2);
484             } catch (Throwable t) {
485                 t.printStackTrace();
486                 fail("Unable to execute method : " + t.toString());
487             }
488             assertEquals(200,method2.getStatusCode());
489             String s = method2.getResponseBodyAsString();
490             assertTrue(s, s.indexOf("<title>ReadCookieServlet: PUT</title>") >= 0);
491             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
492             assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
493             assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
494         }
495 
496         {
497             PutMethod method3 = new PutMethod("/" + getWebappContext() + "/cookie/write");
498             method3.setRequestBody("data to be sent via http post");
499             method3.setQueryString("simple=unset");
500             try {
501                 client.executeMethod(method3);
502             } catch (Throwable t) {
503                 t.printStackTrace();
504                 fail("Unable to execute method : " + t.toString());
505             }
506             assertEquals(200,method3.getStatusCode());
507             assertTrue(method3.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: PUT</title>") >= 0);
508             assertTrue(method3.getResponseBodyAsString().indexOf("Deleted simplecookie.<br>") >= 0);
509             assertEquals(1,client.getState().getCookies().length);
510             assertEquals("domaincookie", ((Cookie)(client.getState().getCookies()[0])).getName());
511             assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
512         }
513 
514         {
515             PutMethod method4 = new PutMethod("/" + getWebappContext() + "/cookie/read");
516             method4.setRequestBody("data to be sent via http post");
517             try {
518                 client.executeMethod(method4);
519             } catch (Throwable t) {
520                 t.printStackTrace();
521                 fail("Unable to execute method : " + t.toString());
522             }
523             assertEquals(200,method4.getStatusCode());
524             String s = method4.getResponseBodyAsString();
525             assertTrue(s, s.indexOf("<title>ReadCookieServlet: PUT</title>") >= 0);
526             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; domaincookie=\"value\"; $Domain=\"" + getHost() + "\"</tt></p>") >= 0);
527             assertTrue(s, s.indexOf("<tt>domaincookie=\"value\"</tt><br>") >= 0);
528         }
529     }
530 
531     public void testPathCookie1() throws Exception {
532         HttpClient client = createHttpClient();
533 
534 
535         {
536             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
537             method.setQueryString("path=/");
538             
539             try {
540                 client.executeMethod(method);
541             } catch (Throwable t) {
542                 t.printStackTrace();
543                 fail("Unable to execute method : " + t.toString());
544             }
545             assertEquals(200,method.getStatusCode());
546             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
547             assertTrue(method.getResponseBodyAsString().indexOf("Wrote pathcookie.<br>") >= 0);
548             assertEquals(1,client.getState().getCookies().length);
549             assertEquals("/",((Cookie)(client.getState().getCookies()[0])).getPath());
550         }
551 
552         {
553             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/read");
554             
555             try {
556                 client.executeMethod(method);
557             } catch (Throwable t) {
558                 t.printStackTrace();
559                 fail("Unable to execute method : " + t.toString());
560             }
561             assertEquals(200,method.getStatusCode());
562             String s = method.getResponseBodyAsString();
563             assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
564             assertTrue(s ,s.indexOf("<p><tt>Cookie: $Version=\"1\"; pathcookie=\"value\"; $Path=\"/\"</tt></p>") >= 0);
565             assertTrue(s, s.indexOf("<tt>pathcookie=\"value\"</tt><br>") >= 0);
566         }
567     }
568 
569     public void testPathCookie2() throws Exception {
570         HttpClient client = createHttpClient();
571 
572 
573         {
574             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
575             method.setQueryString("path=/" + getWebappContext());
576             
577             try {
578                 client.executeMethod(method);
579             } catch (Throwable t) {
580                 t.printStackTrace();
581                 fail("Unable to execute method : " + t.toString());
582             }
583             assertEquals(200,method.getStatusCode());
584             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
585             assertTrue(method.getResponseBodyAsString().indexOf("Wrote pathcookie.<br>") >= 0);
586             assertEquals(1,client.getState().getCookies().length);
587             assertEquals("/" + getWebappContext(),((Cookie)(client.getState().getCookies()[0])).getPath());
588         }
589 
590         {
591             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/read");
592             
593             try {
594                 client.executeMethod(method);
595             } catch (Throwable t) {
596                 t.printStackTrace();
597                 fail("Unable to execute method : " + t.toString());
598             }
599             assertEquals(200,method.getStatusCode());
600             String s = method.getResponseBodyAsString();
601             assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
602             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; pathcookie=\"value\"; $Path=\"/" + getWebappContext() +"\"</tt></p>") >= 0);
603             assertTrue(s, s.indexOf("<tt>pathcookie=\"value\"</tt><br>") >= 0);
604         }
605     }
606 
607     public void testPathCookie3() throws Exception {
608         HttpClient client = createHttpClient();
609 
610         {
611             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
612             method.setQueryString("path=/" + getWebappContext() + "/cookie");
613             
614             try {
615                 client.executeMethod(method);
616             } catch (Throwable t) {
617                 t.printStackTrace();
618                 fail("Unable to execute method : " + t.toString());
619             }
620             assertEquals(200,method.getStatusCode());
621             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
622             assertTrue(method.getResponseBodyAsString().indexOf("Wrote pathcookie.<br>") >= 0);
623             assertEquals(1,client.getState().getCookies().length);
624             assertEquals("/" + getWebappContext() + "/cookie",((Cookie)(client.getState().getCookies()[0])).getPath());
625         }
626 
627         {
628             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/read");
629             
630             try {
631                 client.executeMethod(method);
632             } catch (Throwable t) {
633                 t.printStackTrace();
634                 fail("Unable to execute method : " + t.toString());
635             }
636             assertEquals(200,method.getStatusCode());
637             String s = method.getResponseBodyAsString();
638             assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
639             assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; pathcookie=\"value\"; $Path=\"/" + getWebappContext() + "/cookie\"</tt></p>") >= 0);
640             assertTrue(s, s.indexOf("<tt>pathcookie=\"value\"</tt><br>") >= 0);
641         }
642     }
643 
644     public void testPathCookie4() throws Exception {
645         HttpClient client = createHttpClient();
646 
647 
648         {
649             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
650             method.setQueryString("path=/" + getWebappContext() + "/cookie/write");
651             
652             try {
653                 client.executeMethod(method);
654             } catch (Throwable t) {
655                 t.printStackTrace();
656                 fail("Unable to execute method : " + t.toString());
657             }
658             assertEquals(200,method.getStatusCode());
659             assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
660             assertTrue(method.getResponseBodyAsString().indexOf("Wrote pathcookie.<br>") >= 0);
661             assertEquals(1,client.getState().getCookies().length);
662             assertEquals("/" + getWebappContext() + "/cookie/write",((Cookie)(client.getState().getCookies()[0])).getPath());
663         }
664 
665         {
666             GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/read");
667             
668             try {
669                 client.executeMethod(method);
670             } catch (Throwable t) {
671                 t.printStackTrace();
672                 fail("Unable to execute method : " + t.toString());
673             }
674             assertEquals(200,method.getStatusCode());
675             assertTrue(method.getResponseBodyAsString().indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
676             assertTrue(method.getResponseBodyAsString(),method.getResponseBodyAsString().indexOf("<p><tt>Cookie: ") == -1);
677             assertTrue(method.getResponseBodyAsString().indexOf("<tt>pathcookie=value</tt><br>") == -1);
678         }
679     }
680     
681     
682     public void testCookiePolicies() throws Exception  {
683         HttpClient client = createHttpClient();
684 
685 
686         {
687 	        GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
688             method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
689 	        method.setQueryString("simple=set");
690 	        
691 	        try {
692 	            client.executeMethod(method);
693 	        } catch (Throwable t) {
694 	            t.printStackTrace();
695 	            fail("Unable to execute method : " + t.toString());
696 	        }
697 	        assertEquals(200,method.getStatusCode());
698 	        assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
699 	        assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
700 	        assertEquals(1,client.getState().getCookies().length);
701 	        assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
702 	        assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
703 	
704 	        GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
705 	        
706 	        try {
707 	            client.executeMethod(method2);
708 	        } catch (Throwable t) {
709 	            t.printStackTrace();
710 	            fail("Unable to execute method : " + t.toString());
711 	        }
712 	        assertEquals(200,method2.getStatusCode());
713 	        String s = method2.getResponseBodyAsString();
714 	        assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
715 	        assertTrue(s, s.indexOf("<p><tt>Cookie: $Version=\"1\"; simplecookie=\"value\"</tt></p>") >= 0);
716 	        assertTrue(s, s.indexOf("<tt>simplecookie=\"value\"</tt><br>") >= 0);
717         }
718 
719         {
720 	        GetMethod method = new GetMethod("/" + getWebappContext() + "/cookie/write");
721             method.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
722 	        method.setQueryString("simple=set");
723 	        
724 	        try {
725 	            client.executeMethod(method);
726 	        } catch (Throwable t) {
727 	            t.printStackTrace();
728 	            fail("Unable to execute method : " + t.toString());
729 	        }
730 	        assertEquals(200,method.getStatusCode());
731 	        assertTrue(method.getResponseBodyAsString().indexOf("<title>WriteCookieServlet: GET</title>") >= 0);
732 	        assertTrue(method.getResponseBodyAsString().indexOf("Wrote simplecookie.<br>") >= 0);
733 	        assertEquals(1,client.getState().getCookies().length);
734 	        assertEquals("simplecookie", ((Cookie)(client.getState().getCookies()[0])).getName());
735 	        assertEquals("value",((Cookie)(client.getState().getCookies()[0])).getValue());
736 	
737 	        GetMethod method2 = new GetMethod("/" + getWebappContext() + "/cookie/read");
738             method2.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
739 	        
740 	        try {
741 	            client.executeMethod(method2);
742 	        } catch (Throwable t) {
743 	            t.printStackTrace();
744 	            fail("Unable to execute method : " + t.toString());
745 	        }
746 	        assertEquals(200,method2.getStatusCode());
747 	        String s = method2.getResponseBodyAsString();
748 	        assertTrue(s, s.indexOf("<title>ReadCookieServlet: GET</title>") >= 0);
749 	        assertTrue(s, s.indexOf("<p><tt>Cookie: simplecookie=value</tt></p>") >= 0);
750 	        assertTrue(s, s.indexOf("<tt>simplecookie=value</tt><br>") >= 0);
751         }
752     }
753     
754 }
755