| Index: tests/standalone/io/http_auth_test.dart
|
| diff --git a/tests/standalone/io/http_auth_test.dart b/tests/standalone/io/http_auth_test.dart
|
| index 7c8274fd863614c05c18874f5e0a9a10cfa63d08..cfc692bb6e6e33c87521e5f8e07ec420ce2656a7 100644
|
| --- a/tests/standalone/io/http_auth_test.dart
|
| +++ b/tests/standalone/io/http_auth_test.dart
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| @@ -13,50 +13,53 @@ class Server {
|
| HttpServer server;
|
| bool passwordChanged = false;
|
|
|
| - Server() : server = new HttpServer();
|
| + Future<Server> start() {
|
| + var completer = new Completer();
|
| + HttpServer.bind().then((s) {
|
| + server = s;
|
| + server.listen((HttpRequest request) {
|
| + var response = request.response;
|
| + if (request.uri.path == "/passwdchg") {
|
| + passwordChanged = true;
|
| + response.close();
|
| + return;
|
| + };
|
|
|
| - void start() {
|
| - server.listen("127.0.0.1", 0);
|
| - server.defaultRequestHandler =
|
| - (HttpRequest request, HttpResponse response) {
|
| - String username;
|
| - String password;
|
| - if (request.path == "/") {
|
| - username = "username";
|
| - password = "password";
|
| - } else {
|
| - username = request.path.substring(1, 6);
|
| - password = request.path.substring(1, 6);
|
| - }
|
| - if (passwordChanged) password = "${password}1";
|
| - if (request.headers[HttpHeaders.AUTHORIZATION] != null) {
|
| - Expect.equals(1, request.headers[HttpHeaders.AUTHORIZATION].length);
|
| - String authorization =
|
| - request.headers[HttpHeaders.AUTHORIZATION][0];
|
| - List<String> tokens = authorization.split(" ");
|
| - Expect.equals("Basic", tokens[0]);
|
| - String auth =
|
| - CryptoUtils.bytesToBase64(encodeUtf8("$username:$password"));
|
| - if (passwordChanged && auth != tokens[1]) {
|
| - response.statusCode = HttpStatus.UNAUTHORIZED;
|
| - response.headers.set(HttpHeaders.WWW_AUTHENTICATE,
|
| - "Basic, realm=realm");
|
| - } else {
|
| - Expect.equals(auth, tokens[1]);
|
| - }
|
| - } else {
|
| + String username;
|
| + String password;
|
| + if (request.uri.path == "/") {
|
| + username = "username";
|
| + password = "password";
|
| + } else {
|
| + username = request.uri.path.substring(1, 6);
|
| + password = request.uri.path.substring(1, 6);
|
| + }
|
| + if (passwordChanged) password = "${password}1";
|
| + if (request.headers[HttpHeaders.AUTHORIZATION] != null) {
|
| + Expect.equals(1, request.headers[HttpHeaders.AUTHORIZATION].length);
|
| + String authorization =
|
| + request.headers[HttpHeaders.AUTHORIZATION][0];
|
| + List<String> tokens = authorization.split(" ");
|
| + Expect.equals("Basic", tokens[0]);
|
| + String auth =
|
| + CryptoUtils.bytesToBase64(encodeUtf8("$username:$password"));
|
| + if (passwordChanged && auth != tokens[1]) {
|
| response.statusCode = HttpStatus.UNAUTHORIZED;
|
| response.headers.set(HttpHeaders.WWW_AUTHENTICATE,
|
| "Basic, realm=realm");
|
| + } else {
|
| + Expect.equals(auth, tokens[1]);
|
| }
|
| - response.outputStream.close();
|
| - };
|
| - server.addRequestHandler(
|
| - (HttpRequest request) => request.path == "/passwdchg",
|
| - (HttpRequest request, HttpResponse response) {
|
| - passwordChanged = true;
|
| - response.outputStream.close();
|
| - });
|
| + } else {
|
| + response.statusCode = HttpStatus.UNAUTHORIZED;
|
| + response.headers.set(HttpHeaders.WWW_AUTHENTICATE,
|
| + "Basic, realm=realm");
|
| + }
|
| + response.close();
|
| + });
|
| + completer.complete(this);
|
| + });
|
| + return completer.future;
|
| }
|
|
|
| void shutdown() {
|
| @@ -66,128 +69,76 @@ class Server {
|
| int get port => server.port;
|
| }
|
|
|
| -Server setupServer() {
|
| - Server server = new Server();
|
| - server.start();
|
| - return server;
|
| +Future<Server> setupServer() {
|
| + return new Server().start();
|
| }
|
|
|
| void testUrlUserInfo() {
|
| - Server server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
|
|
| - HttpClientConnection conn =
|
| - client.getUrl(
|
| - Uri.parse(
|
| - "http://username:password@127.0.0.1:${server.port}/"));
|
| - conn.onResponse = (HttpClientResponse response) {
|
| - response.inputStream.onData = response.inputStream.read;
|
| - response.inputStream.onClosed = () {
|
| - server.shutdown();
|
| - client.shutdown();
|
| - };
|
| - };
|
| + client.getUrl(Uri.parse(
|
| + "http://username:password@127.0.0.1:${server.port}/"))
|
| + .then((request) => request.close())
|
| + .then((HttpClientResponse response) {
|
| + response.listen((_) {}, onDone: () {
|
| + server.shutdown();
|
| + client.close();
|
| + });
|
| + });
|
| + });
|
| }
|
|
|
| void testBasicNoCredentials() {
|
| - Server server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
|
|
| - Future makeRequest(Uri url) {
|
| - Completer completer = new Completer();
|
| - HttpClientConnection conn = client.getUrl(url);
|
| - conn.onResponse = (HttpClientResponse response) {
|
| - Expect.equals(HttpStatus.UNAUTHORIZED, response.statusCode);
|
| - response.inputStream.onData = response.inputStream.read;
|
| - response.inputStream.onClosed = () => completer.complete(null);
|
| - };
|
| - return completer.future;
|
| - }
|
| + Future makeRequest(Uri url) {
|
| + return client.getUrl(url)
|
| + .then((HttpClientRequest request) => request.close())
|
| + .then((HttpClientResponse response) {
|
| + Expect.equals(HttpStatus.UNAUTHORIZED, response.statusCode);
|
| + return response.reduce(null, (x, y) {});
|
| + });
|
| + }
|
|
|
| - var futures = [];
|
| - for (int i = 0; i < 5; i++) {
|
| - futures.add(
|
| - makeRequest(
|
| - Uri.parse("http://127.0.0.1:${server.port}/test$i")));
|
| - futures.add(
|
| - makeRequest(
|
| - Uri.parse("http://127.0.0.1:${server.port}/test$i/xxx")));
|
| - }
|
| - Future.wait(futures).then((_) {
|
| - server.shutdown();
|
| - client.shutdown();
|
| + var futures = [];
|
| + for (int i = 0; i < 5; i++) {
|
| + futures.add(
|
| + makeRequest(
|
| + Uri.parse("http://127.0.0.1:${server.port}/test$i")));
|
| + futures.add(
|
| + makeRequest(
|
| + Uri.parse(
|
| + "http://127.0.0.1:${server.port}/test$i/xxx")));
|
| + }
|
| + Future.wait(futures).then((_) {
|
| + server.shutdown();
|
| + client.close();
|
| + });
|
| });
|
| }
|
|
|
| void testBasicCredentials() {
|
| - Server server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
|
|
| - Future makeRequest(Uri url) {
|
| - Completer completer = new Completer();
|
| - HttpClientConnection conn = client.getUrl(url);
|
| - conn.onResponse = (HttpClientResponse response) {
|
| - Expect.equals(HttpStatus.OK, response.statusCode);
|
| - response.inputStream.onData = response.inputStream.read;
|
| - response.inputStream.onClosed = () => completer.complete(null);
|
| - };
|
| - return completer.future;
|
| - }
|
| -
|
| - for (int i = 0; i < 5; i++) {
|
| - client.addCredentials(
|
| - Uri.parse("http://127.0.0.1:${server.port}/test$i"),
|
| - "realm",
|
| - new HttpClientBasicCredentials("test$i", "test$i"));
|
| - }
|
| -
|
| - var futures = [];
|
| - for (int i = 0; i < 5; i++) {
|
| - futures.add(
|
| - makeRequest(
|
| - Uri.parse("http://127.0.0.1:${server.port}/test$i")));
|
| - futures.add(
|
| - makeRequest(
|
| - Uri.parse("http://127.0.0.1:${server.port}/test$i/xxx")));
|
| - }
|
| - Future.wait(futures).then((_) {
|
| - server.shutdown();
|
| - client.shutdown();
|
| - });
|
| -}
|
| -
|
| -void testBasicAuthenticateCallback() {
|
| - Server server = setupServer();
|
| - HttpClient client = new HttpClient();
|
| - bool passwordChanged = false;
|
| + Future makeRequest(Uri url) {
|
| + return client.getUrl(url)
|
| + .then((HttpClientRequest request) => request.close())
|
| + .then((HttpClientResponse response) {
|
| + Expect.equals(HttpStatus.OK, response.statusCode);
|
| + return response.reduce(null, (x, y) {});
|
| + });
|
| + }
|
|
|
| - client.authenticate = (Uri url, String scheme, String realm) {
|
| - Expect.equals("Basic", scheme);
|
| - Expect.equals("realm", realm);
|
| - String username = url.path.substring(1, 6);
|
| - String password = url.path.substring(1, 6);
|
| - if (passwordChanged) password = "${password}1";
|
| - Completer completer = new Completer();
|
| - new Timer(const Duration(milliseconds: 10), () {
|
| + for (int i = 0; i < 5; i++) {
|
| client.addCredentials(
|
| - url, realm, new HttpClientBasicCredentials(username, password));
|
| - completer.complete(true);
|
| - });
|
| - return completer.future;
|
| - };
|
| -
|
| - Future makeRequest(Uri url) {
|
| - Completer completer = new Completer();
|
| - HttpClientConnection conn = client.getUrl(url);
|
| - conn.onResponse = (HttpClientResponse response) {
|
| - Expect.equals(HttpStatus.OK, response.statusCode);
|
| - response.inputStream.onData = response.inputStream.read;
|
| - response.inputStream.onClosed = () => completer.complete(null);
|
| - };
|
| - return completer.future;
|
| - }
|
| + Uri.parse("http://127.0.0.1:${server.port}/test$i"),
|
| + "realm",
|
| + new HttpClientBasicCredentials("test$i", "test$i"));
|
| + }
|
|
|
| - List<Future> makeRequests() {
|
| var futures = [];
|
| for (int i = 0; i < 5; i++) {
|
| futures.add(
|
| @@ -198,17 +149,63 @@ void testBasicAuthenticateCallback() {
|
| Uri.parse(
|
| "http://127.0.0.1:${server.port}/test$i/xxx")));
|
| }
|
| - return futures;
|
| - }
|
| + Future.wait(futures).then((_) {
|
| + server.shutdown();
|
| + client.close();
|
| + });
|
| + });
|
| +}
|
|
|
| - Future.wait(makeRequests()).then((_) {
|
| - makeRequest(
|
| - Uri.parse(
|
| - "http://127.0.0.1:${server.port}/passwdchg")).then((_) {
|
| - passwordChanged = true;
|
| - Future.wait(makeRequests()).then((_) {
|
| - server.shutdown();
|
| - client.shutdown();
|
| +void testBasicAuthenticateCallback() {
|
| + setupServer().then((server) {
|
| + HttpClient client = new HttpClient();
|
| + bool passwordChanged = false;
|
| +
|
| + client.authenticate = (Uri url, String scheme, String realm) {
|
| + Expect.equals("Basic", scheme);
|
| + Expect.equals("realm", realm);
|
| + String username = url.path.substring(1, 6);
|
| + String password = url.path.substring(1, 6);
|
| + if (passwordChanged) password = "${password}1";
|
| + Completer completer = new Completer();
|
| + new Timer(10, (_) {
|
| + client.addCredentials(
|
| + url, realm, new HttpClientBasicCredentials(username, password));
|
| + completer.complete(true);
|
| + });
|
| + return completer.future;
|
| + };
|
| +
|
| + Future makeRequest(Uri url) {
|
| + return client.getUrl(url)
|
| + .then((HttpClientRequest request) => request.close())
|
| + .then((HttpClientResponse response) {
|
| + Expect.equals(HttpStatus.OK, response.statusCode);
|
| + return response.reduce(null, (x, y) {});
|
| + });
|
| + }
|
| +
|
| + List<Future> makeRequests() {
|
| + var futures = [];
|
| + for (int i = 0; i < 5; i++) {
|
| + futures.add(
|
| + makeRequest(
|
| + Uri.parse("http://127.0.0.1:${server.port}/test$i")));
|
| + futures.add(
|
| + makeRequest(
|
| + Uri.parse("http://127.0.0.1:${server.port}/test$i/xxx")));
|
| + }
|
| + return futures;
|
| + }
|
| +
|
| + Future.wait(makeRequests()).then((_) {
|
| + makeRequest(
|
| + Uri.parse("http://127.0.0.1:${server.port}/passwdchg")).then((_) {
|
| + passwordChanged = true;
|
| + Future.wait(makeRequests()).then((_) {
|
| + server.shutdown();
|
| + client.close();
|
| + });
|
| });
|
| });
|
| });
|
|
|