| 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(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |