Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Unified Diff: tests/standalone/io/http_auth_test.dart

Issue 11118021: Add support for authorization of HTTP client requests (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+}

Powered by Google App Engine
This is Rietveld 408576698