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 363f8d0c684bcc848df83ae810ea566212aafc52..43e1760a07dc67d12281dc3583867b7d3c1c483b 100644 |
--- a/tests/standalone/io/http_redirect_test.dart |
+++ b/tests/standalone/io/http_redirect_test.dart |
@@ -57,6 +57,50 @@ Future<HttpServer> setupServer() { |
} |
); |
+ // Setup redirects with relative url. |
+ addRequestHandler( |
+ "/redirectUrl", |
+ (HttpRequest request, HttpResponse response) { |
+ response.headers.set(HttpHeaders.LOCATION, "/some/relativeUrl"); |
+ response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
+ response.close(); |
+ } |
+ ); |
+ |
+ addRequestHandler( |
+ "/some/redirectUrl", |
+ (HttpRequest request, HttpResponse response) { |
+ response.headers.set(HttpHeaders.LOCATION, "relativeUrl"); |
+ response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
+ response.close(); |
+ } |
+ ); |
+ |
+ addRequestHandler( |
+ "/some/relativeUrl", |
+ (HttpRequest request, HttpResponse response) { |
+ response.close(); |
+ } |
+ ); |
+ |
+ addRequestHandler( |
+ "/redirectUrl2", |
+ (HttpRequest request, HttpResponse response) { |
+ response.headers.set(HttpHeaders.LOCATION, "location"); |
+ response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
+ response.close(); |
+ } |
+ ); |
+ |
+ addRequestHandler( |
+ "/redirectUrl3", |
+ (HttpRequest request, HttpResponse response) { |
+ response.headers.set(HttpHeaders.LOCATION, "./location"); |
+ response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
+ response.close(); |
+ } |
+ ); |
+ |
// Setup redirect chain. |
int n = 1; |
addRedirectHandler(n++, HttpStatus.MOVED_PERMANENTLY); |
@@ -370,6 +414,76 @@ void testRedirectClosingConnection() { |
}); |
} |
+void testRedirectRelativeUrl() { |
+ setupServer().then((server) { |
+ HttpClient client = new HttpClient(); |
+ |
+ client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/redirectUrl")) |
+ .then((request) => request.close()) |
+ .then((response) { |
+ response.listen( |
+ (_) {}, |
+ onDone: () { |
+ Expect.equals(HttpStatus.OK, response.statusCode); |
+ Expect.equals(1, response.redirects.length); |
+ server.close(); |
+ client.close(); |
+ }); |
+ }); |
+ }); |
+ |
+ setupServer().then((server) { |
+ HttpClient client = new HttpClient(); |
+ |
+ client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/some/redirectUrl")) |
+ .then((request) => request.close()) |
+ .then((response) { |
+ response.listen( |
+ (_) {}, |
+ onDone: () { |
+ Expect.equals(HttpStatus.OK, response.statusCode); |
+ Expect.equals(1, response.redirects.length); |
+ server.close(); |
+ client.close(); |
+ }); |
+ }); |
+ }); |
+ |
+ setupServer().then((server) { |
+ HttpClient client = new HttpClient(); |
+ |
+ client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/redirectUrl2")) |
+ .then((request) => request.close()) |
+ .then((response) { |
+ response.listen( |
+ (_) {}, |
+ onDone: () { |
+ Expect.equals(HttpStatus.OK, response.statusCode); |
+ Expect.equals(1, response.redirects.length); |
+ server.close(); |
+ client.close(); |
+ }); |
+ }); |
+ }); |
+ |
+ setupServer().then((server) { |
+ HttpClient client = new HttpClient(); |
+ |
+ client.getUrl(Uri.parse("http://127.0.0.1:${server.port}/redirectUrl3")) |
+ .then((request) => request.close()) |
+ .then((response) { |
+ response.listen( |
+ (_) {}, |
+ onDone: () { |
+ Expect.equals(HttpStatus.OK, response.statusCode); |
+ Expect.equals(1, response.redirects.length); |
+ server.close(); |
+ client.close(); |
+ }); |
+ }); |
+ }); |
+} |
+ |
main() { |
testManualRedirect(); |
testManualRedirectWithHeaders(); |
@@ -380,4 +494,5 @@ main() { |
testAutoRedirectLimit(); |
testRedirectLoop(); |
testRedirectClosingConnection(); |
+ testRedirectRelativeUrl(); |
} |