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 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: 1425331 $
53 */
54 public class TestCookieVersionSupport extends HttpClientTestBase {
55
56
57 public TestCookieVersionSupport(final String testName) throws IOException {
58 super(testName);
59 }
60
61
62 public static void main(String args[]) {
63 String[] testCaseName = { TestCookieVersionSupport.class.getName() };
64 junit.textui.TestRunner.main(testCaseName);
65 }
66
67
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 }