1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package org.apache.commons.httpclient;
32
33 import junit.framework.*;
34 import org.apache.commons.httpclient.methods.*;
35
36 /***
37 * This suite of tests depends upon the httpclienttest webapp,
38 * which is available in the httpclient/src/test-webapp
39 * directory in the CVS tree.
40 * <p>
41 * The webapp should be deployed in the context "httpclienttest"
42 * on a servlet engine running on port 8080 on the localhost
43 * (IP 127.0.0.1).
44 * <p>
45 * You can change the assumed port by setting the
46 * "httpclient.test.localPort" property.
47 * You can change the assumed host by setting the
48 * "httpclient.test.localHost" property.
49 * You can change the assumed context by setting the
50 * "httpclient.test.webappContext" property.
51 *
52 * @author Rodney Waldhoff
53 * @version $Id: TestWebappParameters.java,v 1.10.2.1 2004/02/22 18:21:16 olegk Exp $
54 */
55 public class TestWebappParameters extends TestWebappBase {
56
57 public TestWebappParameters(String testName) {
58 super(testName);
59 }
60
61 public static Test suite() {
62 TestSuite suite = new TestSuite(TestWebappParameters.class);
63 return suite;
64 }
65
66 public static void main(String args[]) {
67 String[] testCaseName = { TestWebappParameters.class.getName() };
68 junit.textui.TestRunner.main(testCaseName);
69 }
70
71
72
73 /***
74 * Test that {@link GetMethod#setQueryString(java.lang.String)}
75 * can include a leading question mark.
76 */
77 public void testGetMethodQueryString() throws Exception {
78 HttpClient client = createHttpClient();
79 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
80 method.setQueryString("?hadQuestionMark=true");
81
82 try {
83 client.executeMethod(method);
84 } catch (Throwable t) {
85 t.printStackTrace();
86 fail("Unable to execute method : " + t.toString());
87 }
88 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
89 assertEquals(200,method.getStatusCode());
90 assertTrue(method.getResponseBodyAsString().indexOf("<p>QueryString=\"hadQuestionMark=true\"</p>") >= 0);
91 }
92
93 /***
94 * Test that {@link GetMethod#setQueryString(java.lang.String)}
95 * doesn't have to include a leading question mark.
96 */
97 public void testGetMethodQueryString2() throws Exception {
98 HttpClient client = createHttpClient();
99 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
100 method.setQueryString("hadQuestionMark=false");
101
102 try {
103 client.executeMethod(method);
104 } catch (Throwable t) {
105 t.printStackTrace();
106 fail("Unable to execute method : " + t.toString());
107 }
108 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
109 assertEquals(200,method.getStatusCode());
110 assertTrue(method.getResponseBodyAsString().indexOf("<p>QueryString=\"hadQuestionMark=false\"</p>") >= 0);
111 }
112
113 /***
114 * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)}
115 * values get added to the query string.
116 */
117 public void testGetMethodParameters() throws Exception {
118 HttpClient client = createHttpClient();
119 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
120 method.setQueryString(new NameValuePair[] { new NameValuePair("param-one","param-value") });
121
122 try {
123 client.executeMethod(method);
124 } catch (Throwable t) {
125 t.printStackTrace();
126 fail("Unable to execute method : " + t.toString());
127 }
128 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
129 assertEquals(200,method.getStatusCode());
130 assertTrue(method.getResponseBodyAsString().indexOf("<p>QueryString=\"param-one=param-value\"</p>") >= 0);
131 }
132
133 /***
134 * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)}
135 * works with multiple parameters.
136 */
137 public void testGetMethodMultiParameters() throws Exception {
138 HttpClient client = createHttpClient();
139 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
140 method.setQueryString(new NameValuePair[] {
141 new NameValuePair("param-one","param-value"),
142 new NameValuePair("param-two","param-value2"),
143 new NameValuePair("special-chars",":/?~.")
144 });
145
146 try {
147 client.executeMethod(method);
148 } catch (Throwable t) {
149 t.printStackTrace();
150 fail("Unable to execute method : " + t.toString());
151 }
152 assertEquals(200,method.getStatusCode());
153 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
154 assertTrue(method.getResponseBodyAsString().indexOf("name=\"special-chars\";value=\":/?~.\"") >= 0);
155 assertTrue(method.getResponseBodyAsString().indexOf("name=\"param-one\";value=\"param-value\"") >= 0);
156 assertTrue(method.getResponseBodyAsString().indexOf("name=\"param-two\";value=\"param-value2\"") >= 0);
157 }
158
159 /***
160 * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)}
161 * works with a parameter name but no value.
162 */
163 public void testGetMethodParameterWithoutValue() throws Exception {
164 HttpClient client = createHttpClient();
165 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
166 method.setQueryString(new NameValuePair[] { new NameValuePair("param-without-value",null) });
167
168 try {
169 client.executeMethod(method);
170 } catch (Throwable t) {
171 t.printStackTrace();
172 fail("Unable to execute method : " + t.toString());
173 }
174 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
175 assertEquals(200,method.getStatusCode());
176 assertTrue(method.getResponseBodyAsString().indexOf("<p>QueryString=\"param-without-value=\"</p>") >= 0);
177 }
178
179 /***
180 * Test that {@link GetMethod#addParameter(java.lang.String,java.lang.String)}
181 * works with a parameter name that occurs more than once.
182 */
183 public void testGetMethodParameterAppearsTwice() throws Exception {
184 HttpClient client = createHttpClient();
185 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
186 method.setQueryString(new NameValuePair[] {
187 new NameValuePair("foo","one"),
188 new NameValuePair("foo","two")
189 });
190
191 try {
192 client.executeMethod(method);
193 } catch (Throwable t) {
194 t.printStackTrace();
195 fail("Unable to execute method : " + t.toString());
196 }
197 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
198 assertEquals(200,method.getStatusCode());
199 assertTrue(method.getResponseBodyAsString().indexOf("name=\"foo\";value=\"one\"") >= 0);
200 assertTrue(method.getResponseBodyAsString().indexOf("name=\"foo\";value=\"two\"") >= 0);
201 }
202
203 public void testGetMethodOverwriteQueryString() throws Exception {
204 HttpClient client = createHttpClient();
205 GetMethod method = new GetMethod("/" + getWebappContext() + "/params");
206 method.setQueryString("query=string");
207 method.setQueryString(new NameValuePair[] {
208 new NameValuePair("param","eter"),
209 new NameValuePair("para","meter")
210 });
211
212 try {
213 client.executeMethod(method);
214 } catch (Throwable t) {
215 t.printStackTrace();
216 fail("Unable to execute method : " + t.toString());
217 }
218 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: GET</title>") >= 0);
219 assertEquals(200,method.getStatusCode());
220 assertTrue(method.getResponseBodyAsString().indexOf("name=\"query\";value=\"string\"") == -1);
221 assertTrue(method.getResponseBodyAsString().indexOf("name=\"param\";value=\"eter\"") >= 0);
222 assertTrue(method.getResponseBodyAsString().indexOf("name=\"para\";value=\"meter\"") >= 0);
223 }
224
225 /***
226 * Test that {@link PostMethod#addParameter(java.lang.String,java.lang.String)}
227 * and {@link PostMethod#setQueryString(java.lang.String)} combine
228 * properly.
229 */
230 public void testPostMethodParameterAndQueryString() throws Exception {
231 HttpClient client = createHttpClient();
232 PostMethod method = new PostMethod("/" + getWebappContext() + "/params");
233 method.setQueryString("query=string");
234 method.setRequestBody(new NameValuePair[] {
235 new NameValuePair("param","eter"),
236 new NameValuePair("para","meter") } );
237
238 try {
239 client.executeMethod(method);
240 } catch (Throwable t) {
241 t.printStackTrace();
242 fail("Unable to execute method : " + t.toString());
243 }
244 assertTrue(method.getResponseBodyAsString().indexOf("<title>Param Servlet: POST</title>") >= 0);
245 assertEquals(200,method.getStatusCode());
246 assertTrue(method.getResponseBodyAsString().indexOf("<p>QueryString=\"query=string\"</p>") >= 0);
247 assertTrue(method.getResponseBodyAsString(),method.getResponseBodyAsString().indexOf("name=\"param\";value=\"eter\"") >= 0);
248 assertTrue(method.getResponseBodyAsString().indexOf("name=\"para\";value=\"meter\"") >= 0);
249 }
250 }
251