Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: tests/standalone/io/http_redirect_test.dart

Issue 11453006: Fix a number of HTTP issues (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // 4 //
5 5
6 #import("dart:io"); 6 #import("dart:io");
7 #import("dart:uri"); 7 #import("dart:uri");
8 8
9 HttpServer setupServer() { 9 HttpServer setupServer() {
10 HttpServer server = new HttpServer(); 10 HttpServer server = new HttpServer();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 server.addRequestHandler( 61 server.addRequestHandler(
62 (HttpRequest request) => request.path == "/B", 62 (HttpRequest request) => request.path == "/B",
63 (HttpRequest request, HttpResponse response) { 63 (HttpRequest request, HttpResponse response) {
64 response.headers.set(HttpHeaders.LOCATION, 64 response.headers.set(HttpHeaders.LOCATION,
65 "http://127.0.0.1:${server.port}/A"); 65 "http://127.0.0.1:${server.port}/A");
66 response.statusCode = HttpStatus.MOVED_TEMPORARILY; 66 response.statusCode = HttpStatus.MOVED_TEMPORARILY;
67 response.outputStream.close(); 67 response.outputStream.close();
68 } 68 }
69 ); 69 );
70 70
71 // Setup redirect checking headers.
72 server.addRequestHandler(
73 (HttpRequest request) => request.path == "/src",
74 (HttpRequest request, HttpResponse response) {
75 Expect.equals("value", request.headers.value("X-Request-Header"));
76 response.headers.set(HttpHeaders.LOCATION,
77 "http://127.0.0.1:${server.port}/target");
78 response.statusCode = HttpStatus.MOVED_PERMANENTLY;
79 response.outputStream.close();
80 }
81 );
82 server.addRequestHandler(
83 (HttpRequest request) => request.path == "/target",
84 (HttpRequest request, HttpResponse response) {
85 Expect.equals("value", request.headers.value("X-Request-Header"));
86 response.outputStream.close();
87 }
88 );
89
71 return server; 90 return server;
72 } 91 }
73 92
74 void checkRedirects(int redirectCount, HttpClientConnection conn) { 93 void checkRedirects(int redirectCount, HttpClientConnection conn) {
75 if (redirectCount < 2) { 94 if (redirectCount < 2) {
76 Expect.isNull(conn.redirects); 95 Expect.isNull(conn.redirects);
77 } else { 96 } else {
78 Expect.equals(redirectCount - 1, conn.redirects.length); 97 Expect.equals(redirectCount - 1, conn.redirects.length);
79 for (int i = 0; i < redirectCount - 2; i++) { 98 for (int i = 0; i < redirectCount - 2; i++) {
80 Expect.equals(conn.redirects[i].location.path, "/${i + 2}"); 99 Expect.equals(conn.redirects[i].location.path, "/${i + 2}");
(...skipping 19 matching lines...) Expand all
100 conn.redirect(); 119 conn.redirect();
101 } else { 120 } else {
102 Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); 121 Expect.equals(HttpStatus.NOT_FOUND, response.statusCode);
103 server.close(); 122 server.close();
104 client.shutdown(); 123 client.shutdown();
105 } 124 }
106 }; 125 };
107 }; 126 };
108 } 127 }
109 128
129 void testManualRedirectWithHeaders() {
130 HttpServer server = setupServer();
131 HttpClient client = new HttpClient();
132
133 int redirectCount = 0;
134 HttpClientConnection conn =
135 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src"));
136 conn.followRedirects = false;
137 conn.onRequest = (HttpClientRequest request) {
138 request.headers.add("X-Request-Header", "value");
139 request.outputStream.close();
140 };
141 conn.onResponse = (HttpClientResponse response) {
142 response.inputStream.onData = response.inputStream.read;
143 response.inputStream.onClosed = () {
144 redirectCount++;
145 if (redirectCount < 2) {
146 Expect.isTrue(response.isRedirect);
147 conn.redirect();
148 } else {
149 Expect.equals(HttpStatus.OK, response.statusCode);
150 server.close();
151 client.shutdown();
152 }
153 };
154 };
155 }
156
110 void testAutoRedirect() { 157 void testAutoRedirect() {
111 HttpServer server = setupServer(); 158 HttpServer server = setupServer();
112 HttpClient client = new HttpClient(); 159 HttpClient client = new HttpClient();
113 160
114 var requestCount = 0; 161 var requestCount = 0;
115 162
116 void onRequest(HttpClientRequest request) { 163 void onRequest(HttpClientRequest request) {
117 requestCount++; 164 requestCount++;
118 request.outputStream.close(); 165 request.outputStream.close();
119 } 166 }
120 167
121 void onResponse(HttpClientResponse response) { 168 void onResponse(HttpClientResponse response) {
122 response.inputStream.onData = 169 response.inputStream.onData =
123 () => Expect.fail("Response data not expected"); 170 () => Expect.fail("Response data not expected");
124 response.inputStream.onClosed = () { 171 response.inputStream.onClosed = () {
125 Expect.equals(1, requestCount); 172 Expect.equals(1, requestCount);
126 server.close(); 173 server.close();
127 client.shutdown(); 174 client.shutdown();
128 }; 175 };
129 }; 176 };
130 177
131 HttpClientConnection conn = 178 HttpClientConnection conn =
132 client.getUrl( 179 client.getUrl(
133 new Uri.fromString("http://127.0.0.1:${server.port}/redirect")); 180 new Uri.fromString("http://127.0.0.1:${server.port}/redirect"));
134 conn.onRequest = onRequest; 181 conn.onRequest = onRequest;
135 conn.onResponse = onResponse; 182 conn.onResponse = onResponse;
136 conn.onError = (e) => Expect.fail("Error not expected ($e)"); 183 conn.onError = (e) => Expect.fail("Error not expected ($e)");
137 } 184 }
138 185
186 void testAutoRedirectWithHeaders() {
187 HttpServer server = setupServer();
188 HttpClient client = new HttpClient();
189
190 var requestCount = 0;
191
192 void onRequest(HttpClientRequest request) {
193 requestCount++;
194 request.headers.add("X-Request-Header", "value");
195 request.outputStream.close();
196 };
197
198 void onResponse(HttpClientResponse response) {
199 response.inputStream.onData =
200 () => Expect.fail("Response data not expected");
201 response.inputStream.onClosed = () {
202 Expect.equals(1, requestCount);
203 server.close();
204 client.shutdown();
205 };
206 };
207
208 HttpClientConnection conn =
209 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src"));
210 conn.onRequest = onRequest;
211 conn.onResponse = onResponse;
212 conn.onError = (e) => Expect.fail("Error not expected ($e)");
213 }
214
139 void testAutoRedirectLimit() { 215 void testAutoRedirectLimit() {
140 HttpServer server = setupServer(); 216 HttpServer server = setupServer();
141 HttpClient client = new HttpClient(); 217 HttpClient client = new HttpClient();
142 218
143 HttpClientConnection conn = 219 HttpClientConnection conn =
144 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); 220 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1"));
145 conn.onResponse = (HttpClientResponse response) { 221 conn.onResponse = (HttpClientResponse response) {
146 response.inputStream.onData = () => Expect.fail("Response not expected"); 222 response.inputStream.onData = () => Expect.fail("Response not expected");
147 response.inputStream.onClosed = () => Expect.fail("Response not expected"); 223 response.inputStream.onClosed = () => Expect.fail("Response not expected");
148 }; 224 };
(...skipping 19 matching lines...) Expand all
168 conn.onError = (e) { 244 conn.onError = (e) {
169 Expect.isTrue(e is RedirectLoopException); 245 Expect.isTrue(e is RedirectLoopException);
170 Expect.equals(2, e.redirects.length); 246 Expect.equals(2, e.redirects.length);
171 server.close(); 247 server.close();
172 client.shutdown(); 248 client.shutdown();
173 }; 249 };
174 } 250 }
175 251
176 main() { 252 main() {
177 testManualRedirect(); 253 testManualRedirect();
254 testManualRedirectWithHeaders();
178 testAutoRedirect(); 255 testAutoRedirect();
256 testAutoRedirectWithHeaders();
179 testAutoRedirectLimit(); 257 testAutoRedirectLimit();
180 testRedirectLoop(); 258 testRedirectLoop();
181 } 259 }
OLDNEW
« sdk/lib/io/secure_socket.dart ('K') | « tests/standalone/io/http_client_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698