1 /*
2 * ====================================================================
3 *
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 2003 The Apache Software Foundation. All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. The end-user documentation included with the redistribution, if
22 * any, must include the following acknowlegement:
23 * "This product includes software developed by the
24 * Apache Software Foundation (http://www.apache.org/)."
25 * Alternately, this acknowlegement may appear in the software itself,
26 * if and wherever such third-party acknowlegements normally appear.
27 *
28 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
29 * Foundation" must not be used to endorse or promote products derived
30 * from this software without prior written permission. For written
31 * permission, please contact apache@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache"
34 * nor may "Apache" appear in their names without prior written
35 * permission of the Apache Group.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation. For more
53 * information on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 *
56 * [Additional notices, if required by prior licensing conditions]
57 *
58 */
59 package org.apache.commons.httpclient;
60
61 import junit.framework.*;
62 import org.apache.commons.httpclient.methods.*;
63
64 /***
65 * Tests cases intended to test if entity enclosing methods
66 * can deal with non-compliant HTTP servers or proxies
67 *
68 * @author Oleg Kalnichevski
69 * @author Jeff Dever
70 */
71
72 public class TestWebappNoncompliant extends TestWebappBase
73 {
74 public TestWebappNoncompliant(String s)
75 {
76 super(s);
77 }
78
79 public static Test suite() {
80 TestSuite suite = new TestSuite(TestWebappNoncompliant.class);
81 return suite;
82 }
83
84 public static void main(String args[]) {
85 String[] testCaseName = { TestWebappNoncompliant.class.getName() };
86 junit.textui.TestRunner.main(testCaseName);
87 }
88
89 /***
90 * Tests if client is able able to recover gracefully when
91 * HTTP server or proxy fails to send 100 status code when
92 * expected. The client should resume sending the request body
93 * after a defined timeout without having received "continue"
94 * code.
95 */
96 public void testNoncompliantPostMethodString()
97 {
98 HttpClient client = createHttpClient();
99 NoncompliantPostMethod method = new NoncompliantPostMethod("/" + getWebappContext() + "/body");
100 method.setUseExpectHeader(true);
101 method.setRequestBody("This is data to be sent in the body of an HTTP POST.");
102 try {
103 client.executeMethod(method);
104 } catch (Exception e) {
105 e.printStackTrace();
106 fail("Unexpected exception: " + e.toString());
107 }
108 assertEquals(200,method.getStatusCode());
109 }
110
111 /***
112 */
113 public void testNoncompliantStatusLine()
114 {
115 HttpClient client = createHttpClient();
116 GetMethod method = new GetMethod("/" + getWebappContext() + "/statusline");
117 method.setRequestHeader("Set-StatusCode", 444+"");
118 method.setRequestHeader("Set-StatusMessage", "This status message contains\n"
119 + " a newline and a\r"
120 + " carrage return but that should be OK.");
121 try {
122 client.executeMethod(method);
123 } catch (Exception e) {
124 e.printStackTrace();
125 fail("Unexpected exception: " + e.toString());
126 }
127 assertEquals(444, method.getStatusCode());
128 }
129
130
131 /***
132 * Test if a response to HEAD method from non-compliant server
133 * that contains an unexpected body content can be correctly redirected
134 */
135
136 public void testNoncompliantHeadWithResponseBody()
137 throws Exception {
138 HttpClient client = createHttpClient();
139 HeadMethod method = new NoncompliantHeadMethod("/" + getWebappContext() + "/redirect");
140 method.setBodyCheckTimeout(50);
141 client.executeMethod(method);
142 assertEquals(200,method.getStatusCode());
143 method.releaseConnection();
144 }
145
146 /***
147 * Test if a response to HEAD method from non-compliant server
148 * causes an HttpException to be thrown
149 */
150
151 public void testNoncompliantHeadStrictMode()
152 throws Exception {
153 HttpClient client = createHttpClient();
154 client.setStrictMode(true);
155 HeadMethod method = new NoncompliantHeadMethod("/" + getWebappContext() + "/body");
156 method.setBodyCheckTimeout(50);
157 try {
158 client.executeMethod(method);
159 fail("HttpException should have been thrown");
160 } catch(HttpException e) {
161 // Expected
162 }
163 method.releaseConnection();
164 }
165
166 }
This page was automatically generated by Maven