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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 #import("dart:crypto");
6 #import("dart:io");
7 #import("dart:uri");
8 #import("dart:utf");
9
10 class Server {
11 HttpServer server;
12
13 Server() : server = new HttpServer();
14
15 void start() {
16 server.listen("127.0.0.1", 0);
17 server.defaultRequestHandler =
18 (HttpRequest request, HttpResponse response) {
19 String username;
20 String password;
21 if (request.path == "/") {
22 username = "username";
23 password = "password";
24 } else {
25 username = request.path.substring(1, 6);
26 password = request.path.substring(1, 6);
27 }
28 Expect.isNotNull(request.headers[HttpHeaders.AUTHORIZATION]);
29 Expect.equals(1, request.headers[HttpHeaders.AUTHORIZATION].length);
30 String authorization = request.headers[HttpHeaders.AUTHORIZATION][0];
31 List<String> tokens = authorization.split(" ");
32 Expect.equals("Basic", tokens[0]);
33 String auth =
34 CryptoUtils.bytesToBase64(encodeUtf8("$username:$password"));
35 Expect.equals(auth, tokens[1]);
36 response.outputStream.close();
37 };
38 }
39
40 void shutdown() {
41 server.close();
42 }
43
44 int get port => server.port;
45 }
46
47 Server setupServer() {
48 Server server = new Server();
49 server.start();
50 return server;
51 }
52
53 void testUrlUserInfo() {
54 Server server = setupServer();
55 HttpClient client = new HttpClient();
56
57 HttpClientConnection conn =
58 client.getUrl(
59 new Uri.fromString(
60 "http://username:password@127.0.0.1:${server.port}/"));
61 conn.onResponse = (HttpClientResponse response) {
62 server.shutdown();
63 client.shutdown();
64 };
65 }
66
67 void testBasicCredentials() {
68 Server server = setupServer();
69 HttpClient client = new HttpClient();
70
71 Future makeRequest(Uri url) {
72 Completer completer = new Completer();
73 HttpClientConnection conn = client.getUrl(url);
74 conn.onResponse = (HttpClientResponse response) {
75 Expect.equals(HttpStatus.OK, response.statusCode);
76 completer.complete(null);
77 };
78 return completer.future;
79 }
80
81 for (int i = 0; i < 5; i++) {
82 client.addCredentials(
83 new Uri.fromString("http://127.0.0.1:${server.port}/test$i"),
84 "realm",
85 new HttpClientBasicCredentials("test$i", "test$i"));
86 }
87
88 var futures = [];
89 for (int i = 0; i < 5; i++) {
90 futures.add(
91 makeRequest(
92 new Uri.fromString("http://127.0.0.1:${server.port}/test$i")));
93 futures.add(
94 makeRequest(
95 new Uri.fromString("http://127.0.0.1:${server.port}/test$i/xxx")));
96 }
97 Futures.wait(futures).then((_) {
98 server.shutdown();
99 client.shutdown();
100 });
101 }
102
103 void testAuthenticateCallback() {
104 Server server = setupServer();
105 HttpClient client = new HttpClient();
106
107 Future makeRequest(Uri url) {
108 Completer completer = new Completer();
109 HttpClientConnection conn = client.getUrl(url);
110 conn.onResponse = (HttpClientResponse response) {
111 Expect.equals(HttpStatus.OK, response.statusCode);
112 completer.complete(null);
113 };
114 return completer.future;
115 }
116
117 for (int i = 0; i < 5; i++) {
118 client.addCredentials(
119 new Uri.fromString("http://127.0.0.1:${server.port}/test$i"),
120 "realm",
121 new HttpClientBasicCredentials("test$i", "test$i"));
122 }
123
124 var futures = [];
125 for (int i = 0; i < 5; i++) {
126 futures.add(
127 makeRequest(
128 new Uri.fromString("http://127.0.0.1:${server.port}/test$i")));
129 futures.add(
130 makeRequest(
131 new Uri.fromString("http://127.0.0.1:${server.port}/test$i/xxx")));
132 }
133 Futures.wait(futures).then((_) {
134 server.shutdown();
135 client.shutdown();
136 });
137 }
138
139 void testLocalServerBasic() {
140 HttpClient client = new HttpClient();
141
142 client.authenticate = (Uri url, String scheme, String realm) {
143 client.addCredentials(
144 new Uri.fromString("http://127.0.0.1/basic"),
145 "test",
146 new HttpClientBasicCredentials("test", "test"));
147 return true;
148 };
149
150 HttpClientConnection conn =
151 client.getUrl(new Uri.fromString("http://127.0.0.1/basic/test"));
152 conn.onResponse = (HttpClientResponse response) {
153 Expect.equals(HttpStatus.OK, response.statusCode);
154 response.inputStream.onData = () => response.inputStream.read();
155 response.inputStream.onClosed = () {
156 client.shutdown();
157 };
158 };
159 }
160
161 void testLocalServerDigest() {
162 HttpClient client = new HttpClient();
163
164 client.authenticate = (Uri url, String scheme, String realm) {
165 print("url: $url, scheme: $scheme, realm: $realm");
166 client.addCredentials(
167 new Uri.fromString("http://127.0.0.1/digest"),
168 "test",
169 new HttpClientDigestCredentials("test", "test"));
170 return true;
171 };
172
173 HttpClientConnection conn =
174 client.getUrl(new Uri.fromString("http://127.0.0.1/digest/test"));
175 conn.onResponse = (HttpClientResponse response) {
176 Expect.equals(HttpStatus.OK, response.statusCode);
177 response.inputStream.onData = () => response.inputStream.read();
178 response.inputStream.onClosed = () {
179 client.shutdown();
180 };
181 };
182 }
183
184 main() {
185 testUrlUserInfo();
186 testBasicCredentials();
187 testAuthenticateCallback();
188 // These teste are not normally run. They can be used for locally
189 // testing with another web server (e.g. Apache).
190 //testLocalServerBasic();
191 //testLocalServerDigest();
192 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698