| 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..861b7f56bdb2aae84ac04a14e779323c3aec42d9 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(
|
| + (_) => Expect.fail("Response data not expected"),
|
| + 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,121 @@ 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 = () {
|
| - redirectCount++;
|
| - if (redirectCount < 2) {
|
| - Expect.isTrue(response.isRedirect);
|
| - conn.redirect();
|
| - } else {
|
| - Expect.equals(HttpStatus.OK, response.statusCode);
|
| - server.close();
|
| - client.shutdown();
|
| - }
|
| - };
|
| - };
|
| +
|
| + handleResponse(HttpClientResponse response) {
|
| + response.listen(
|
| + (_) => Expect.fail("Response data not expected"),
|
| + onDone: () {
|
| + redirectCount++;
|
| + if (redirectCount < 2) {
|
| + Expect.isTrue(response.isRedirect);
|
| + response.redirect().then(handleResponse);
|
| + } else {
|
| + Expect.equals(HttpStatus.OK, response.statusCode);
|
| + server.close();
|
| + 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,18 +310,13 @@ 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() {
|
|
|