| 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 4df9782b8ec0c3de39b553d2f9cb6935c74976d4..3209496ff0953425a8f4d097637c45bea986c0cb 100644
|
| --- a/tests/standalone/io/http_redirect_test.dart
|
| +++ b/tests/standalone/io/http_redirect_test.dart
|
| @@ -3,386 +3,370 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
| //
|
|
|
| +import "dart:async";
|
| import "dart:io";
|
| import "dart:uri";
|
|
|
| -HttpServer setupServer() {
|
| - HttpServer server = new HttpServer();
|
| - server.listen("127.0.0.1", 0, backlog: 5);
|
| +Future<HttpServer> setupServer() {
|
| + Completer completer = new Completer();
|
| + HttpServer.bind().then((server) {
|
|
|
| - void addRedirectHandler(int number, int statusCode) {
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/$number",
|
| + 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) {
|
| + addRequestHandler(
|
| + "/$number",
|
| + (HttpRequest request, HttpResponse response) {
|
| + response.headers.set(HttpHeaders.LOCATION,
|
| + "http://127.0.0.1:${server.port}/${number + 1}");
|
| + response.statusCode = statusCode;
|
| + response.close();
|
| + });
|
| + }
|
| +
|
| + // Setup simple redirect.
|
| + addRequestHandler(
|
| + "/redirect",
|
| (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.headers.set(HttpHeaders.LOCATION,
|
| + "http://127.0.0.1:${server.port}/location");
|
| + response.statusCode = HttpStatus.MOVED_PERMANENTLY;
|
| + response.close();
|
| + }
|
| + );
|
| + addRequestHandler(
|
| + "/location",
|
| + (HttpRequest request, HttpResponse response) {
|
| + response.close();
|
| + }
|
| + );
|
| +
|
| + // Setup redirect chain.
|
| + int n = 1;
|
| + addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY);
|
| + addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY);
|
| + addRedirectHandler(n++, HttpStatus.SEE_OTHER);
|
| + addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT);
|
| + for (int i = n; i < 10; i++) {
|
| + addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY);
|
| + }
|
|
|
| - // Setup simple redirect.
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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();
|
| - }
|
| - );
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/location",
|
| - (HttpRequest request, HttpResponse response) {
|
| - response.outputStream.close();
|
| - }
|
| - );
|
| -
|
| - // Setup redirect chain.
|
| - int n = 1;
|
| - addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY);
|
| - addRedirectHandler(n++, HttpStatus.MOVED_TEMPORARILY);
|
| - addRedirectHandler(n++, HttpStatus.SEE_OTHER);
|
| - addRedirectHandler(n++, HttpStatus.TEMPORARY_REDIRECT);
|
| - for (int i = n; i < 10; i++) {
|
| - addRedirectHandler(i, HttpStatus.MOVED_PERMANENTLY);
|
| - }
|
| + // Setup redirect loop.
|
| + 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.close();
|
| + }
|
| + );
|
| + 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.close();
|
| + }
|
| + );
|
| +
|
| + // Setup redirect checking headers.
|
| + 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.close();
|
| + }
|
| + );
|
| + addRequestHandler(
|
| + "/target",
|
| + (HttpRequest request, HttpResponse response) {
|
| + Expect.equals("value", request.headers.value("X-Request-Header"));
|
| + response.close();
|
| + }
|
| + );
|
| +
|
| + // Setup redirect for 301 where POST should not redirect.
|
| + addRequestHandler(
|
| + "/301src",
|
| + (HttpRequest request, HttpResponse response) {
|
| + Expect.equals("POST", request.method);
|
| + request.listen(
|
| + (_) {},
|
| + onDone: () {
|
| + response.headers.set(
|
| + HttpHeaders.LOCATION,
|
| + "http://127.0.0.1:${server.port}/301target");
|
| + response.statusCode = HttpStatus.MOVED_PERMANENTLY;
|
| + response.close();
|
| + });
|
| + });
|
| + addRequestHandler(
|
| + "/301target",
|
| + (HttpRequest request, HttpResponse response) {
|
| + Expect.fail("Redirect of POST should not happen");
|
| + }
|
| + );
|
| +
|
| + // Setup redirect for 303 where POST should turn into GET.
|
| + addRequestHandler(
|
| + "/303src",
|
| + (HttpRequest request, HttpResponse response) {
|
| + request.listen((_) {}, onDone: () {
|
| + Expect.equals("POST", request.method);
|
| + request.listen(
|
| + (_) {},
|
| + onDone: () {
|
| + response.headers.set(
|
| + HttpHeaders.LOCATION,
|
| + "http://127.0.0.1:${server.port}/303target");
|
| + response.statusCode = HttpStatus.SEE_OTHER;
|
| + response.close();
|
| + });
|
| + });
|
| + });
|
| + addRequestHandler(
|
| + "/303target",
|
| + (HttpRequest request, HttpResponse response) {
|
| + Expect.equals("GET", request.method);
|
| + response.close();
|
| + });
|
|
|
| - // Setup redirect loop.
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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();
|
| - }
|
| - );
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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();
|
| - }
|
| - );
|
| -
|
| - // Setup redirect checking headers.
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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();
|
| - }
|
| - );
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/target",
|
| - (HttpRequest request, HttpResponse response) {
|
| - Expect.equals("value", request.headers.value("X-Request-Header"));
|
| - response.outputStream.close();
|
| - }
|
| - );
|
| -
|
| - // Setup redirect for 301 where POST should not redirect.
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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();
|
| - }
|
| - );
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/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",
|
| - (HttpRequest request, HttpResponse response) {
|
| - Expect.equals("POST", request.method);
|
| - Expect.equals(10, request.contentLength);
|
| - request.inputStream.onData = request.inputStream.read;
|
| - request.inputStream.onClosed = () {
|
| + // Setup redirect where we close the connection.
|
| + addRequestHandler(
|
| + "/closing",
|
| + (HttpRequest request, HttpResponse response) {
|
| response.headers.set(HttpHeaders.LOCATION,
|
| - "http://127.0.0.1:${server.port}/303target");
|
| - response.statusCode = HttpStatus.SEE_OTHER;
|
| - response.outputStream.close();
|
| - };
|
| - }
|
| - );
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/303target",
|
| - (HttpRequest request, HttpResponse response) {
|
| - Expect.equals("GET", request.method);
|
| - response.outputStream.close();
|
| - }
|
| - );
|
| -
|
| - // Setup redirect where we close the connection.
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/closing",
|
| - (HttpRequest request, HttpResponse response) {
|
| - response.headers.set(HttpHeaders.LOCATION,
|
| - "http://127.0.0.1:${server.port}/");
|
| - response.statusCode = HttpStatus.FOUND;
|
| - response.persistentConnection = false;
|
| - response.outputStream.close();
|
| - }
|
| - );
|
| -
|
| - return server;
|
| + "http://127.0.0.1:${server.port}/");
|
| + response.statusCode = HttpStatus.FOUND;
|
| + response.persistentConnection = false;
|
| + response.close();
|
| + });
|
| +
|
| + completer.complete(server);
|
| + });
|
| + return completer.future;
|
| }
|
|
|
| -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}");
|
| }
|
| }
|
| }
|
|
|
| void testManualRedirect() {
|
| - HttpServer server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| -
|
| - int redirectCount = 0;
|
| - HttpClientConnection conn =
|
| - client.getUrl(Uri.parse("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();
|
| - }
|
| - };
|
| - };
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + int redirectCount = 0;
|
| + 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(Uri.parse("http://127.0.0.1:${server.port}/1"))
|
| + .then((HttpClientRequest request) {
|
| + request.followRedirects = false;
|
| + return request.close();
|
| + })
|
| + .then(handleResponse);
|
| + });
|
| }
|
|
|
| void testManualRedirectWithHeaders() {
|
| - HttpServer server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| -
|
| - int redirectCount = 0;
|
| - HttpClientConnection conn =
|
| - client.getUrl(Uri.parse("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();
|
| - }
|
| - };
|
| - };
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + int redirectCount = 0;
|
| +
|
| + 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(Uri.parse("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(
|
| - Uri.parse("http://127.0.0.1:${server.port}/redirect"));
|
| - conn.onRequest = onRequest;
|
| - conn.onResponse = onResponse;
|
| - conn.onError = (e) => Expect.fail("Error not expected ($e)");
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.getUrl(Uri.parse("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(Uri.parse("http://127.0.0.1:${server.port}/src"));
|
| - conn.onRequest = onRequest;
|
| - conn.onResponse = onResponse;
|
| - conn.onError = (e) => Expect.fail("Error not expected ($e)");
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.getUrl(Uri.parse("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(
|
| - Uri.parse("http://127.0.0.1:${server.port}/301src"));
|
| - conn.onRequest = onRequest;
|
| - conn.onResponse = onResponse;
|
| - conn.onError = (e) => Expect.fail("Error not expected ($e)");
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.postUrl(Uri.parse("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.contentLength = 10;
|
| - request.outputStream.write(new List<int>.fixedLength(10, fill: 0));
|
| - 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(
|
| - Uri.parse("http://127.0.0.1:${server.port}/303src"));
|
| - conn.onRequest = onRequest;
|
| - conn.onResponse = onResponse;
|
| - conn.onError = (e) => Expect.fail("Error not expected ($e)");
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.postUrl(Uri.parse("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(Uri.parse("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();
|
| - };
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.getUrl(Uri.parse("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() {
|
| - HttpServer server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| -
|
| - int redirectCount = 0;
|
| - HttpClientConnection conn =
|
| - client.getUrl(Uri.parse("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();
|
| - };
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + int redirectCount = 0;
|
| + client.getUrl(Uri.parse("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);
|
| + });
|
| }
|
|
|
| void testRedirectClosingConnection() {
|
| - HttpServer server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| -
|
| - int redirectCount = 0;
|
| - HttpClientConnection conn =
|
| - client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/closing"));
|
| -
|
| - conn.followRedirects = true;
|
| - 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 RedirectException);
|
| - Expect.isNull(e.redirects);
|
| - server.close();
|
| - client.shutdown();
|
| - };
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/closing"))
|
| + .then((request) => request.close())
|
| + .then((response) {
|
| + response.listen(
|
| + (_) {},
|
| + onDone: () {
|
| + Expect.equals(1, response.redirects.length);
|
| + server.close();
|
| + client.close();
|
| + });
|
| + });
|
| + });
|
| }
|
|
|
| main() {
|
|
|