| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6ffb7adb68caed2b77c396419815abecf4ca029b
|
| --- /dev/null
|
| +++ b/tests/standalone/io/http_auth_test.dart
|
| @@ -0,0 +1,192 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +#import("dart:crypto");
|
| +#import("dart:io");
|
| +#import("dart:uri");
|
| +#import("dart:utf");
|
| +
|
| +class Server {
|
| + HttpServer server;
|
| +
|
| + Server() : server = new HttpServer();
|
| +
|
| + 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);
|
| + }
|
| + Expect.isNotNull(request.headers[HttpHeaders.AUTHORIZATION]);
|
| + 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"));
|
| + Expect.equals(auth, tokens[1]);
|
| + response.outputStream.close();
|
| + };
|
| + }
|
| +
|
| + void shutdown() {
|
| + server.close();
|
| + }
|
| +
|
| + int get port => server.port;
|
| +}
|
| +
|
| +Server setupServer() {
|
| + Server server = new Server();
|
| + server.start();
|
| + return server;
|
| +}
|
| +
|
| +void testUrlUserInfo() {
|
| + Server server = setupServer();
|
| + HttpClient client = new HttpClient();
|
| +
|
| + HttpClientConnection conn =
|
| + client.getUrl(
|
| + new Uri.fromString(
|
| + "http://username:password@127.0.0.1:${server.port}/"));
|
| + conn.onResponse = (HttpClientResponse response) {
|
| + server.shutdown();
|
| + client.shutdown();
|
| + };
|
| +}
|
| +
|
| +void testBasicCredentials() {
|
| + Server server = setupServer();
|
| + 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);
|
| + completer.complete(null);
|
| + };
|
| + return completer.future;
|
| + }
|
| +
|
| + for (int i = 0; i < 5; i++) {
|
| + client.addCredentials(
|
| + new Uri.fromString("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(
|
| + new Uri.fromString("http://127.0.0.1:${server.port}/test$i")));
|
| + futures.add(
|
| + makeRequest(
|
| + new Uri.fromString("http://127.0.0.1:${server.port}/test$i/xxx")));
|
| + }
|
| + Futures.wait(futures).then((_) {
|
| + server.shutdown();
|
| + client.shutdown();
|
| + });
|
| +}
|
| +
|
| +void testAuthenticateCallback() {
|
| + Server server = setupServer();
|
| + 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);
|
| + completer.complete(null);
|
| + };
|
| + return completer.future;
|
| + }
|
| +
|
| + for (int i = 0; i < 5; i++) {
|
| + client.addCredentials(
|
| + new Uri.fromString("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(
|
| + new Uri.fromString("http://127.0.0.1:${server.port}/test$i")));
|
| + futures.add(
|
| + makeRequest(
|
| + new Uri.fromString("http://127.0.0.1:${server.port}/test$i/xxx")));
|
| + }
|
| + Futures.wait(futures).then((_) {
|
| + server.shutdown();
|
| + client.shutdown();
|
| + });
|
| +}
|
| +
|
| +void testLocalServerBasic() {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.authenticate = (Uri url, String scheme, String realm) {
|
| + client.addCredentials(
|
| + new Uri.fromString("http://127.0.0.1/basic"),
|
| + "test",
|
| + new HttpClientBasicCredentials("test", "test"));
|
| + return true;
|
| + };
|
| +
|
| + HttpClientConnection conn =
|
| + client.getUrl(new Uri.fromString("http://127.0.0.1/basic/test"));
|
| + conn.onResponse = (HttpClientResponse response) {
|
| + Expect.equals(HttpStatus.OK, response.statusCode);
|
| + response.inputStream.onData = () => response.inputStream.read();
|
| + response.inputStream.onClosed = () {
|
| + client.shutdown();
|
| + };
|
| + };
|
| +}
|
| +
|
| +void testLocalServerDigest() {
|
| + HttpClient client = new HttpClient();
|
| +
|
| + client.authenticate = (Uri url, String scheme, String realm) {
|
| + print("url: $url, scheme: $scheme, realm: $realm");
|
| + client.addCredentials(
|
| + new Uri.fromString("http://127.0.0.1/digest"),
|
| + "test",
|
| + new HttpClientDigestCredentials("test", "test"));
|
| + return true;
|
| + };
|
| +
|
| + HttpClientConnection conn =
|
| + client.getUrl(new Uri.fromString("http://127.0.0.1/digest/test"));
|
| + conn.onResponse = (HttpClientResponse response) {
|
| + Expect.equals(HttpStatus.OK, response.statusCode);
|
| + response.inputStream.onData = () => response.inputStream.read();
|
| + response.inputStream.onClosed = () {
|
| + client.shutdown();
|
| + };
|
| + };
|
| +}
|
| +
|
| +main() {
|
| + testUrlUserInfo();
|
| + testBasicCredentials();
|
| + testAuthenticateCallback();
|
| + // These teste are not normally run. They can be used for locally
|
| + // testing with another web server (e.g. Apache).
|
| + //testLocalServerBasic();
|
| + //testLocalServerDigest();
|
| +}
|
|
|