Chromium Code Reviews| Index: tests/standalone/io/http_redirect_test.dart |
| diff --git a/tests/standalone/io/http_redirect_test.dart b/tests/standalone/io/http_redirect_test.dart |
| index 3e8bcb47f2da8fb64e2f3a2f55b3dc5331d00a04..4e3c73d0e912c19ea39fcd76d3d07c54264bbff7 100644 |
| --- a/tests/standalone/io/http_redirect_test.dart |
| +++ b/tests/standalone/io/http_redirect_test.dart |
| @@ -7,34 +7,50 @@ import "dart:io"; |
| import "dart:uri"; |
| HttpServer setupServer() { |
| - HttpServer server = new HttpServer(); |
| - server.listen("127.0.0.1", 0, backlog: 5); |
| + HttpServer server = new HttpServer("127.0.0.1", 0); |
| + |
| + var handlers = new Map<String, Function>(); |
| + addRequestHandler(String path, void handler(HttpRequest request, |
| + HttpResponse response)) { |
| + handlers[path] = handler; |
| + } |
| + |
| + server.listen((HttpRequest request) { |
| + if (handlers.containsKey(request.uri.path)) { |
| + handlers[request.uri.path](request, request.response); |
| + } else { |
| + request.listen((_) {}, onDone: () { |
| + request.response.statusCode = 404; |
| + request.response.close(); |
| + }); |
| + } |
| + }); |
| void addRedirectHandler(int number, int statusCode) { |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/$number", |
| + addRequestHandler( |
| + "/$number", |
| (HttpRequest request, HttpResponse response) { |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/${number + 1}"); |
| response.statusCode = statusCode; |
| - response.outputStream.close(); |
| + response.close(); |
| }); |
| } |
| // Setup simple redirect. |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/redirect", |
| + addRequestHandler( |
| + "/redirect", |
| (HttpRequest request, HttpResponse response) { |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/location"); |
| response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/location", |
| + addRequestHandler( |
| + "/location", |
| (HttpRequest request, HttpResponse response) { |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| @@ -49,91 +65,91 @@ HttpServer setupServer() { |
| } |
| // Setup redirect loop. |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/A", |
| + addRequestHandler( |
| + "/A", |
| (HttpRequest request, HttpResponse response) { |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/B"); |
| response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/B", |
| + addRequestHandler( |
| + "/B", |
| (HttpRequest request, HttpResponse response) { |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/A"); |
| response.statusCode = HttpStatus.MOVED_TEMPORARILY; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| // Setup redirect checking headers. |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/src", |
| + addRequestHandler( |
| + "/src", |
| (HttpRequest request, HttpResponse response) { |
| Expect.equals("value", request.headers.value("X-Request-Header")); |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/target"); |
| response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/target", |
| + addRequestHandler( |
| + "/target", |
| (HttpRequest request, HttpResponse response) { |
| Expect.equals("value", request.headers.value("X-Request-Header")); |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| // Setup redirect for 301 where POST should not redirect. |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/301src", |
| + addRequestHandler( |
| + "/301src", |
| (HttpRequest request, HttpResponse response) { |
| Expect.equals("POST", request.method); |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/301target"); |
| response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/301target", |
| + addRequestHandler( |
| + "/301target", |
| (HttpRequest request, HttpResponse response) { |
| Expect.fail("Redirect of POST should not happen"); |
| } |
| ); |
| // Setup redirect for 303 where POST should turn into GET. |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/303src", |
| + addRequestHandler( |
| + "/303src", |
| (HttpRequest request, HttpResponse response) { |
| Expect.equals("POST", request.method); |
| response.headers.set(HttpHeaders.LOCATION, |
| "http://127.0.0.1:${server.port}/303target"); |
| response.statusCode = HttpStatus.SEE_OTHER; |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| - server.addRequestHandler( |
| - (HttpRequest request) => request.path == "/303target", |
| + addRequestHandler( |
| + "/303target", |
| (HttpRequest request, HttpResponse response) { |
| Expect.equals("GET", request.method); |
| - response.outputStream.close(); |
| + response.close(); |
| } |
| ); |
| return server; |
| } |
| -void checkRedirects(int redirectCount, HttpClientConnection conn) { |
| +void checkRedirects(int redirectCount, HttpClientResponse response) { |
| if (redirectCount < 2) { |
| - Expect.isNull(conn.redirects); |
| + Expect.isTrue(response.redirects.isEmpty); |
| } else { |
| - Expect.equals(redirectCount - 1, conn.redirects.length); |
| + Expect.equals(redirectCount - 1, response.redirects.length); |
| for (int i = 0; i < redirectCount - 2; i++) { |
| - Expect.equals(conn.redirects[i].location.path, "/${i + 2}"); |
| + Expect.equals(response.redirects[i].location.path, "/${i + 2}"); |
| } |
| } |
| } |
| @@ -143,24 +159,28 @@ void testManualRedirect() { |
| HttpClient client = new HttpClient(); |
| int redirectCount = 0; |
| - HttpClientConnection conn = |
| - client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); |
| - conn.followRedirects = false; |
| - conn.onResponse = (HttpClientResponse response) { |
| - response.inputStream.onData = response.inputStream.read; |
| - response.inputStream.onClosed = () { |
| - redirectCount++; |
| - if (redirectCount < 10) { |
| - Expect.isTrue(response.isRedirect); |
| - checkRedirects(redirectCount, conn); |
| - conn.redirect(); |
| - } else { |
| - Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); |
| - server.close(); |
| - client.shutdown(); |
| - } |
| - }; |
| - }; |
| + handleResponse(HttpClientResponse response) { |
| + response.listen( |
| + (_) {}, |
|
Søren Gjesse
2013/01/09 08:43:49
Maybe add Expect.fail here as no data is expected.
Anders Johnsen
2013/01/09 10:03:00
Done.
|
| + onDone: () { |
| + redirectCount++; |
| + if (redirectCount < 10) { |
| + Expect.isTrue(response.isRedirect); |
| + checkRedirects(redirectCount, response); |
| + response.redirect().then(handleResponse); |
| + } else { |
| + Expect.equals(HttpStatus.NOT_FOUND, response.statusCode); |
| + server.close(); |
| + client.close(); |
| + } |
| + }); |
| + } |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")) |
| + .then((HttpClientRequest request) { |
| + request.followRedirects = false; |
| + return request.close(); |
| + }) |
| + .then(handleResponse); |
| } |
| void testManualRedirectWithHeaders() { |
| @@ -168,163 +188,119 @@ void testManualRedirectWithHeaders() { |
| HttpClient client = new HttpClient(); |
| int redirectCount = 0; |
| - HttpClientConnection conn = |
| - client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src")); |
| - conn.followRedirects = false; |
| - conn.onRequest = (HttpClientRequest request) { |
| - request.headers.add("X-Request-Header", "value"); |
| - request.outputStream.close(); |
| - }; |
| - conn.onResponse = (HttpClientResponse response) { |
| - response.inputStream.onData = response.inputStream.read; |
| - response.inputStream.onClosed = () { |
| + |
| + handleResponse(HttpClientResponse response) { |
| + response.listen((_) {}, onDone: () { |
|
Søren Gjesse
2013/01/09 08:43:49
Ditto.
Anders Johnsen
2013/01/09 10:03:00
Done.
|
| redirectCount++; |
| if (redirectCount < 2) { |
| Expect.isTrue(response.isRedirect); |
| - conn.redirect(); |
| + response.redirect().then(handleResponse); |
| } else { |
| Expect.equals(HttpStatus.OK, response.statusCode); |
| server.close(); |
| - client.shutdown(); |
| + client.close(); |
| } |
| - }; |
| - }; |
| + }); |
| + } |
| + |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src")) |
| + .then((HttpClientRequest request) { |
| + request.followRedirects = false; |
| + request.headers.add("X-Request-Header", "value"); |
| + return request.close(); |
| + }).then(handleResponse); |
| } |
| void testAutoRedirect() { |
| HttpServer server = setupServer(); |
| HttpClient client = new HttpClient(); |
| - var requestCount = 0; |
| - |
| - void onRequest(HttpClientRequest request) { |
| - requestCount++; |
| - request.outputStream.close(); |
| - } |
| - |
| - void onResponse(HttpClientResponse response) { |
| - response.inputStream.onData = |
| - () => Expect.fail("Response data not expected"); |
| - response.inputStream.onClosed = () { |
| - Expect.equals(1, requestCount); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| - }; |
| - |
| - HttpClientConnection conn = |
| - client.getUrl( |
| - new Uri.fromString("http://127.0.0.1:${server.port}/redirect")); |
| - conn.onRequest = onRequest; |
| - conn.onResponse = onResponse; |
| - conn.onError = (e) => Expect.fail("Error not expected ($e)"); |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/redirect")) |
| + .then((HttpClientRequest request) { |
| + return request.close(); |
| + }) |
| + .then((HttpClientResponse response) { |
| + response.listen( |
| + (_) => Expect.fail("Response data not expected"), |
| + onDone: () { |
| + Expect.equals(1, response.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }); |
| + }); |
| } |
| void testAutoRedirectWithHeaders() { |
| HttpServer server = setupServer(); |
| HttpClient client = new HttpClient(); |
| - var requestCount = 0; |
| - |
| - void onRequest(HttpClientRequest request) { |
| - requestCount++; |
| - request.headers.add("X-Request-Header", "value"); |
| - request.outputStream.close(); |
| - }; |
| - |
| - void onResponse(HttpClientResponse response) { |
| - response.inputStream.onData = |
| - () => Expect.fail("Response data not expected"); |
| - response.inputStream.onClosed = () { |
| - Expect.equals(1, requestCount); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| - }; |
| - |
| - HttpClientConnection conn = |
| - client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src")); |
| - conn.onRequest = onRequest; |
| - conn.onResponse = onResponse; |
| - conn.onError = (e) => Expect.fail("Error not expected ($e)"); |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/src")) |
| + .then((HttpClientRequest request) { |
| + request.headers.add("X-Request-Header", "value"); |
| + return request.close(); |
| + }) |
| + .then((HttpClientResponse response) { |
| + response.listen( |
| + (_) => Expect.fail("Response data not expected"), |
| + onDone: () { |
| + Expect.equals(1, response.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }); |
| + }); |
| } |
| void testAutoRedirect301POST() { |
| HttpServer server = setupServer(); |
| HttpClient client = new HttpClient(); |
| - var requestCount = 0; |
| - |
| - void onRequest(HttpClientRequest request) { |
| - requestCount++; |
| - request.outputStream.close(); |
| - }; |
| - |
| - void onResponse(HttpClientResponse response) { |
| - Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode); |
| - response.inputStream.onData = |
| - () => Expect.fail("Response data not expected"); |
| - response.inputStream.onClosed = () { |
| - Expect.equals(1, requestCount); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| - }; |
| - |
| - HttpClientConnection conn = |
| - client.postUrl( |
| - new Uri.fromString("http://127.0.0.1:${server.port}/301src")); |
| - conn.onRequest = onRequest; |
| - conn.onResponse = onResponse; |
| - conn.onError = (e) => Expect.fail("Error not expected ($e)"); |
| + client.postUrl(new Uri.fromString("http://127.0.0.1:${server.port}/301src")) |
| + .then((HttpClientRequest request) { |
| + return request.close(); |
| + }) |
| + .then((HttpClientResponse response) { |
| + Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode); |
| + response.listen( |
| + (_) => Expect.fail("Response data not expected"), |
| + onDone: () { |
| + Expect.equals(0, response.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }); |
| + }); |
| } |
| void testAutoRedirect303POST() { |
| HttpServer server = setupServer(); |
| HttpClient client = new HttpClient(); |
| - var requestCount = 0; |
| - |
| - void onRequest(HttpClientRequest request) { |
| - requestCount++; |
| - request.outputStream.close(); |
| - }; |
| - |
| - void onResponse(HttpClientResponse response) { |
| - Expect.equals(HttpStatus.OK, response.statusCode); |
| - response.inputStream.onData = |
| - () => Expect.fail("Response data not expected"); |
| - response.inputStream.onClosed = () { |
| - Expect.equals(1, requestCount); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| - }; |
| - |
| - HttpClientConnection conn = |
| - client.postUrl( |
| - new Uri.fromString("http://127.0.0.1:${server.port}/303src")); |
| - conn.onRequest = onRequest; |
| - conn.onResponse = onResponse; |
| - conn.onError = (e) => Expect.fail("Error not expected ($e)"); |
| + client.postUrl(new Uri.fromString("http://127.0.0.1:${server.port}/303src")) |
| + .then((HttpClientRequest request) { |
| + return request.close(); |
| + }) |
| + .then((HttpClientResponse response) { |
| + Expect.equals(HttpStatus.OK, response.statusCode); |
| + response.listen( |
| + (_) => Expect.fail("Response data not expected"), |
| + onDone: () { |
| + Expect.equals(1, response.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }); |
| + }); |
| } |
| void testAutoRedirectLimit() { |
| HttpServer server = setupServer(); |
| HttpClient client = new HttpClient(); |
| - HttpClientConnection conn = |
| - client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")); |
| - conn.onResponse = (HttpClientResponse response) { |
| - response.inputStream.onData = () => Expect.fail("Response not expected"); |
| - response.inputStream.onClosed = () => Expect.fail("Response not expected"); |
| - }; |
| - conn.onError = (e) { |
| - Expect.isTrue(e is RedirectLimitExceededException); |
| - Expect.equals(5, e.redirects.length); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1")) |
| + .then((HttpClientRequest request) => request.close()) |
| + .catchError((e) { |
| + Expect.equals(5, e.error.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }, test: (e) => e is RedirectLimitExceededException); |
| } |
| void testRedirectLoop() { |
| @@ -332,27 +308,22 @@ void testRedirectLoop() { |
| HttpClient client = new HttpClient(); |
| int redirectCount = 0; |
| - HttpClientConnection conn = |
| - client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/A")); |
| - conn.onResponse = (HttpClientResponse response) { |
| - response.inputStream.onData = () => Expect.fail("Response not expected"); |
| - response.inputStream.onClosed = () => Expect.fail("Response not expected"); |
| - }; |
| - conn.onError = (e) { |
| - Expect.isTrue(e is RedirectLoopException); |
| - Expect.equals(2, e.redirects.length); |
| - server.close(); |
| - client.shutdown(); |
| - }; |
| + client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/A")) |
| + .then((HttpClientRequest request) => request.close()) |
| + .catchError((e) { |
| + Expect.equals(2, e.error.redirects.length); |
| + server.close(); |
| + client.close(); |
| + }, test: (e) => e is RedirectLoopException); |
| } |
| main() { |
| testManualRedirect(); |
| - testManualRedirectWithHeaders(); |
| - testAutoRedirect(); |
| - testAutoRedirectWithHeaders(); |
| - testAutoRedirect301POST(); |
| - testAutoRedirect303POST(); |
| - testAutoRedirectLimit(); |
| - testRedirectLoop(); |
| +// testManualRedirectWithHeaders(); |
|
Søren Gjesse
2013/01/09 08:43:49
Why are these tests still commented out?
Anders Johnsen
2013/01/09 10:03:00
Argh, fixed!!
|
| +// testAutoRedirect(); |
| +// testAutoRedirectWithHeaders(); |
| +// testAutoRedirect301POST(); |
| +// testAutoRedirect303POST(); |
| +// testAutoRedirectLimit(); |
| +// testRedirectLoop(); |
| } |