| OLD | NEW |
| (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 } |
| OLD | NEW |