Chromium Code Reviews| OLD | NEW |
|---|---|
| 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(); |
| 11 server.listen("127.0.0.1", 0, backlog: 5); | 11 server.listen("127.0.0.1", 0, backlog: 5); |
| 12 | 12 |
| 13 void addRedirectHandler(int number, int statusCode) { | 13 void addRedirectHandler(int number, int statusCode) { |
| 14 server.addRequestHandler( | 14 server.addRequestHandler( |
| 15 (HttpRequest request) => request.path == "/$number", | 15 (HttpRequest request) => request.path == "/$number", |
| 16 (HttpRequest request, HttpResponse response) { | 16 (HttpRequest request, HttpResponse response) { |
| 17 response.headers.set(HttpHeaders.LOCATION, | 17 response.headers.set(HttpHeaders.LOCATION, |
| 18 "http://127.0.0.1:${server.port}/${number + 1}"); | 18 "http://127.0.0.1:${server.port}/${number + 1}"); |
| 19 response.statusCode = statusCode; | 19 response.statusCode = statusCode; |
| 20 response.outputStream.close(); | 20 response.outputStream.close(); |
| 21 }); | 21 }); |
| 22 } | 22 } |
| 23 | 23 |
| 24 // Setup simple redirect. | |
| 25 server.addRequestHandler( | |
| 26 (HttpRequest request) => request.path == "/redirect", | |
| 27 (HttpRequest request, HttpResponse response) { | |
| 28 response.headers.set(HttpHeaders.LOCATION, | |
| 29 "http://127.0.0.1:${server.port}/location"); | |
| 30 response.statusCode = HttpStatus.MOVED_PERMANENTLY; | |
| 31 response.outputStream.close(); | |
| 32 } | |
| 33 ); | |
| 34 server.addRequestHandler( | |
| 35 (HttpRequest request) => request.path == "/location", | |
| 36 (HttpRequest request, HttpResponse response) { | |
| 37 response.outputStream.close(); | |
| 38 } | |
| 39 ); | |
| 40 | |
| 24 // Setup redirect chain. | 41 // Setup redirect chain. |
| 25 int n = 1; | 42 int n = 1; |
| 26 addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY); | 43 addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY); |
| 27 addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY); | 44 addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY); |
| 28 addRedirectHandler(n++, HttpStatus.SEE_OTHER); | 45 addRedirectHandler(n++, HttpStatus.SEE_OTHER); |
| 29 addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT); | 46 addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT); |
| 30 for (int i = n; i < 10; i++) { | 47 for (int i = n; i < 10; i++) { |
| 31 addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY); | 48 addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY); |
| 32 } | 49 } |
| 33 | 50 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 87 client.shutdown(); | 104 client.shutdown(); |
| 88 } | 105 } |
| 89 }; | 106 }; |
| 90 }; | 107 }; |
| 91 } | 108 } |
| 92 | 109 |
| 93 void testAutoRedirect() { | 110 void testAutoRedirect() { |
| 94 HttpServer server = setupServer(); | 111 HttpServer server = setupServer(); |
| 95 HttpClient client = new HttpClient(); | 112 HttpClient client = new HttpClient(); |
| 96 | 113 |
| 114 var requestCount = 0; | |
| 115 | |
| 116 void onRequest(HttpClientRequest request) { | |
| 117 requestCount++; | |
| 118 request.outputStream.close(); | |
| 119 } | |
| 120 | |
| 121 void onResponse(HttpClientResponse response) { | |
| 122 response.inputStream.onData = | |
| 123 () => Expect.fail("Response data not expected"); | |
| 124 response.inputStream.onClosed = () { | |
| 125 Expect.equals(1, requestCount); | |
| 126 server.close(); | |
| 127 client.shutdown(); | |
| 128 }; | |
| 129 }; | |
| 130 | |
| 131 HttpClientConnection conn = | |
| 132 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/redirect ")); | |
|
Mads Ager (google)
2012/11/09 09:31:21
Long line.
Søren Gjesse
2012/11/09 09:36:13
Done.
| |
| 133 conn.onRequest = onRequest; | |
| 134 conn.onResponse = onResponse; | |
| 135 conn.onError = (e) => Expect.fail("Error not expected ($e)"); | |
| 136 } | |
| 137 | |
| 138 void testAutoRedirectLimit() { | |
| 139 HttpServer server = setupServer(); | |
| 140 HttpClient client = new HttpClient(); | |
| 141 | |
| 97 HttpClientConnection conn = | 142 HttpClientConnection conn = |
| 98 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); | 143 client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); |
| 99 conn.onResponse = (HttpClientResponse response) { | 144 conn.onResponse = (HttpClientResponse response) { |
| 100 response.inputStream.onData = () => Expect.fail("Response not expected"); | 145 response.inputStream.onData = () => Expect.fail("Response not expected"); |
| 101 response.inputStream.onClosed = () => Expect.fail("Response not expected"); | 146 response.inputStream.onClosed = () => Expect.fail("Response not expected"); |
| 102 }; | 147 }; |
| 103 conn.onError = (e) { | 148 conn.onError = (e) { |
| 104 Expect.isTrue(e is RedirectLimitExceededException); | 149 Expect.isTrue(e is RedirectLimitExceededException); |
| 105 Expect.equals(5, e.redirects.length); | 150 Expect.equals(5, e.redirects.length); |
| 106 server.close(); | 151 server.close(); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 123 Expect.isTrue(e is RedirectLoopException); | 168 Expect.isTrue(e is RedirectLoopException); |
| 124 Expect.equals(2, e.redirects.length); | 169 Expect.equals(2, e.redirects.length); |
| 125 server.close(); | 170 server.close(); |
| 126 client.shutdown(); | 171 client.shutdown(); |
| 127 }; | 172 }; |
| 128 } | 173 } |
| 129 | 174 |
| 130 main() { | 175 main() { |
| 131 testManualRedirect(); | 176 testManualRedirect(); |
| 132 testAutoRedirect(); | 177 testAutoRedirect(); |
| 178 testAutoRedirectRequestBody(); | |
| 179 testAutoRedirectLimit(); | |
| 133 testRedirectLoop(); | 180 testRedirectLoop(); |
| 134 } | 181 } |
| OLD | NEW |