| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // | 4 // |
| 5 // VMOptions= | 5 // VMOptions= |
| 6 // VMOptions=--short_socket_read | 6 // VMOptions=--short_socket_read |
| 7 // VMOptions=--short_socket_write | 7 // VMOptions=--short_socket_write |
| 8 // VMOptions=--short_socket_read --short_socket_write | 8 // VMOptions=--short_socket_read --short_socket_write |
| 9 | 9 |
| 10 #import("dart:isolate"); | 10 #import("dart:isolate"); |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 } else { | 248 } else { |
| 249 _notFoundHandler(request, response); | 249 _notFoundHandler(request, response); |
| 250 } | 250 } |
| 251 } | 251 } |
| 252 | 252 |
| 253 HttpServer _server; // HTTP server instance. | 253 HttpServer _server; // HTTP server instance. |
| 254 Map _requestHandlers; | 254 Map _requestHandlers; |
| 255 bool _chunkedEncoding = false; | 255 bool _chunkedEncoding = false; |
| 256 } | 256 } |
| 257 | 257 |
| 258 void testHost() { | 258 Future testHost() { |
| 259 Completer completer = new Completer(); |
| 259 TestServerMain testServerMain = new TestServerMain(); | 260 TestServerMain testServerMain = new TestServerMain(); |
| 260 testServerMain.setServerStartedHandler((int port) { | 261 testServerMain.setServerStartedHandler((int port) { |
| 261 HttpClient httpClient = new HttpClient(); | 262 HttpClient httpClient = new HttpClient(); |
| 262 HttpClientConnection conn = | 263 HttpClientConnection conn = |
| 263 httpClient.get("127.0.0.1", port, "/host"); | 264 httpClient.get("127.0.0.1", port, "/host"); |
| 264 conn.onRequest = (HttpClientRequest request) { | 265 conn.onRequest = (HttpClientRequest request) { |
| 265 Expect.equals("127.0.0.1:$port", request.headers["host"][0]); | 266 Expect.equals("127.0.0.1:$port", request.headers["host"][0]); |
| 266 request.headers.host = "www.dartlang.com"; | 267 request.headers.host = "www.dartlang.com"; |
| 267 Expect.equals("www.dartlang.com:$port", request.headers["host"][0]); | 268 Expect.equals("www.dartlang.com:$port", request.headers["host"][0]); |
| 268 Expect.equals("www.dartlang.com", request.headers.host); | 269 Expect.equals("www.dartlang.com", request.headers.host); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 281 Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); | 282 Expect.equals(HttpClient.DEFAULT_HTTP_PORT, request.headers.port); |
| 282 request.headers.set("Host", "www.dartlang.org:1234"); | 283 request.headers.set("Host", "www.dartlang.org:1234"); |
| 283 Expect.equals("www.dartlang.org", request.headers.host); | 284 Expect.equals("www.dartlang.org", request.headers.host); |
| 284 Expect.equals(1234, request.headers.port); | 285 Expect.equals(1234, request.headers.port); |
| 285 request.outputStream.close(); | 286 request.outputStream.close(); |
| 286 }; | 287 }; |
| 287 conn.onResponse = (HttpClientResponse response) { | 288 conn.onResponse = (HttpClientResponse response) { |
| 288 Expect.equals(HttpStatus.OK, response.statusCode); | 289 Expect.equals(HttpStatus.OK, response.statusCode); |
| 289 httpClient.shutdown(); | 290 httpClient.shutdown(); |
| 290 testServerMain.shutdown(); | 291 testServerMain.shutdown(); |
| 292 completer.complete(true); |
| 291 }; | 293 }; |
| 292 }); | 294 }); |
| 293 testServerMain.start(); | 295 testServerMain.start(); |
| 296 return completer.future; |
| 294 } | 297 } |
| 295 | 298 |
| 296 void testExpires() { | 299 Future testExpires() { |
| 300 Completer completer = new Completer(); |
| 297 TestServerMain testServerMain = new TestServerMain(); | 301 TestServerMain testServerMain = new TestServerMain(); |
| 298 testServerMain.setServerStartedHandler((int port) { | 302 testServerMain.setServerStartedHandler((int port) { |
| 299 int responses = 0; | 303 int responses = 0; |
| 300 HttpClient httpClient = new HttpClient(); | 304 HttpClient httpClient = new HttpClient(); |
| 301 | 305 |
| 302 void processResponse(HttpClientResponse response) { | 306 void processResponse(HttpClientResponse response) { |
| 303 Expect.equals(HttpStatus.OK, response.statusCode); | 307 Expect.equals(HttpStatus.OK, response.statusCode); |
| 304 Expect.equals("Fri, 11 Jun 1999 18:46:53 GMT", | 308 Expect.equals("Fri, 11 Jun 1999 18:46:53 GMT", |
| 305 response.headers["expires"][0]); | 309 response.headers["expires"][0]); |
| 306 Expect.equals(new Date.utc(1999, Date.JUN, 11, 18, 46, 53, 0), | 310 Expect.equals(new Date.utc(1999, Date.JUN, 11, 18, 46, 53, 0), |
| 307 response.headers.expires); | 311 response.headers.expires); |
| 308 responses++; | 312 responses++; |
| 309 if (responses == 2) { | 313 if (responses == 2) { |
| 310 httpClient.shutdown(); | 314 httpClient.shutdown(); |
| 311 testServerMain.shutdown(); | 315 testServerMain.shutdown(); |
| 316 completer.complete(true); |
| 312 } | 317 } |
| 313 } | 318 } |
| 314 | 319 |
| 315 HttpClientConnection conn1 = httpClient.get("127.0.0.1", port, "/expires1"); | 320 HttpClientConnection conn1 = httpClient.get("127.0.0.1", port, "/expires1"); |
| 316 conn1.onResponse = (HttpClientResponse response) { | 321 conn1.onResponse = (HttpClientResponse response) { |
| 317 processResponse(response); | 322 processResponse(response); |
| 318 }; | 323 }; |
| 319 HttpClientConnection conn2 = httpClient.get("127.0.0.1", port, "/expires2"); | 324 HttpClientConnection conn2 = httpClient.get("127.0.0.1", port, "/expires2"); |
| 320 conn2.onResponse = (HttpClientResponse response) { | 325 conn2.onResponse = (HttpClientResponse response) { |
| 321 processResponse(response); | 326 processResponse(response); |
| 322 }; | 327 }; |
| 323 }); | 328 }); |
| 324 testServerMain.start(); | 329 testServerMain.start(); |
| 330 return completer.future; |
| 325 } | 331 } |
| 326 | 332 |
| 327 void testContentType() { | 333 Future testContentType() { |
| 334 Completer completer = new Completer(); |
| 328 TestServerMain testServerMain = new TestServerMain(); | 335 TestServerMain testServerMain = new TestServerMain(); |
| 329 testServerMain.setServerStartedHandler((int port) { | 336 testServerMain.setServerStartedHandler((int port) { |
| 330 int responses = 0; | 337 int responses = 0; |
| 331 HttpClient httpClient = new HttpClient(); | 338 HttpClient httpClient = new HttpClient(); |
| 332 | 339 |
| 333 void processResponse(HttpClientResponse response) { | 340 void processResponse(HttpClientResponse response) { |
| 334 Expect.equals(HttpStatus.OK, response.statusCode); | 341 Expect.equals(HttpStatus.OK, response.statusCode); |
| 335 Expect.equals("text/html; charset=utf-8", | 342 Expect.equals("text/html; charset=utf-8", |
| 336 response.headers.contentType.toString()); | 343 response.headers.contentType.toString()); |
| 337 Expect.equals("text/html", response.headers.contentType.value); | 344 Expect.equals("text/html", response.headers.contentType.value); |
| 338 Expect.equals("text", response.headers.contentType.primaryType); | 345 Expect.equals("text", response.headers.contentType.primaryType); |
| 339 Expect.equals("html", response.headers.contentType.subType); | 346 Expect.equals("html", response.headers.contentType.subType); |
| 340 Expect.equals("utf-8", | 347 Expect.equals("utf-8", |
| 341 response.headers.contentType.parameters["charset"]); | 348 response.headers.contentType.parameters["charset"]); |
| 342 responses++; | 349 responses++; |
| 343 if (responses == 2) { | 350 if (responses == 2) { |
| 344 httpClient.shutdown(); | 351 httpClient.shutdown(); |
| 345 testServerMain.shutdown(); | 352 testServerMain.shutdown(); |
| 353 completer.complete(true); |
| 346 } | 354 } |
| 347 } | 355 } |
| 348 | 356 |
| 349 HttpClientConnection conn1 = | 357 HttpClientConnection conn1 = |
| 350 httpClient.get("127.0.0.1", port, "/contenttype1"); | 358 httpClient.get("127.0.0.1", port, "/contenttype1"); |
| 351 conn1.onRequest = (HttpClientRequest request) { | 359 conn1.onRequest = (HttpClientRequest request) { |
| 352 ContentType contentType = new ContentType(); | 360 ContentType contentType = new ContentType(); |
| 353 contentType.value = "text/html"; | 361 contentType.value = "text/html"; |
| 354 contentType.parameters["charset"] = "utf-8"; | 362 contentType.parameters["charset"] = "utf-8"; |
| 355 request.headers.contentType = contentType; | 363 request.headers.contentType = contentType; |
| 356 request.outputStream.close(); | 364 request.outputStream.close(); |
| 357 }; | 365 }; |
| 358 conn1.onResponse = (HttpClientResponse response) { | 366 conn1.onResponse = (HttpClientResponse response) { |
| 359 processResponse(response); | 367 processResponse(response); |
| 360 }; | 368 }; |
| 361 HttpClientConnection conn2 = | 369 HttpClientConnection conn2 = |
| 362 httpClient.get("127.0.0.1", port, "/contenttype2"); | 370 httpClient.get("127.0.0.1", port, "/contenttype2"); |
| 363 conn2.onRequest = (HttpClientRequest request) { | 371 conn2.onRequest = (HttpClientRequest request) { |
| 364 request.headers.set(HttpHeaders.CONTENT_TYPE, | 372 request.headers.set(HttpHeaders.CONTENT_TYPE, |
| 365 "text/html; charset = utf-8"); | 373 "text/html; charset = utf-8"); |
| 366 request.outputStream.close(); | 374 request.outputStream.close(); |
| 367 }; | 375 }; |
| 368 conn2.onResponse = (HttpClientResponse response) { | 376 conn2.onResponse = (HttpClientResponse response) { |
| 369 processResponse(response); | 377 processResponse(response); |
| 370 }; | 378 }; |
| 371 }); | 379 }); |
| 372 testServerMain.start(); | 380 testServerMain.start(); |
| 381 return completer.future; |
| 373 } | 382 } |
| 374 | 383 |
| 375 void testCookies() { | 384 Future testCookies() { |
| 385 Completer completer = new Completer(); |
| 376 TestServerMain testServerMain = new TestServerMain(); | 386 TestServerMain testServerMain = new TestServerMain(); |
| 377 testServerMain.setServerStartedHandler((int port) { | 387 testServerMain.setServerStartedHandler((int port) { |
| 378 int responses = 0; | 388 int responses = 0; |
| 379 HttpClient httpClient = new HttpClient(); | 389 HttpClient httpClient = new HttpClient(); |
| 380 | 390 |
| 381 HttpClientConnection conn1 = | 391 HttpClientConnection conn1 = |
| 382 httpClient.get("127.0.0.1", port, "/cookie1"); | 392 httpClient.get("127.0.0.1", port, "/cookie1"); |
| 383 conn1.onResponse = (HttpClientResponse response) { | 393 conn1.onResponse = (HttpClientResponse response) { |
| 384 Expect.equals(2, response.cookies.length); | 394 Expect.equals(2, response.cookies.length); |
| 385 response.cookies.forEach((cookie) { | 395 response.cookies.forEach((cookie) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 401 HttpClientConnection conn2 = | 411 HttpClientConnection conn2 = |
| 402 httpClient.get("127.0.0.1", port, "/cookie2"); | 412 httpClient.get("127.0.0.1", port, "/cookie2"); |
| 403 conn2.onRequest = (HttpClientRequest request) { | 413 conn2.onRequest = (HttpClientRequest request) { |
| 404 request.cookies.add(response.cookies[0]); | 414 request.cookies.add(response.cookies[0]); |
| 405 request.cookies.add(response.cookies[1]); | 415 request.cookies.add(response.cookies[1]); |
| 406 request.outputStream.close(); | 416 request.outputStream.close(); |
| 407 }; | 417 }; |
| 408 conn2.onResponse = (HttpClientResponse ignored) { | 418 conn2.onResponse = (HttpClientResponse ignored) { |
| 409 httpClient.shutdown(); | 419 httpClient.shutdown(); |
| 410 testServerMain.shutdown(); | 420 testServerMain.shutdown(); |
| 421 completer.complete(true); |
| 411 }; | 422 }; |
| 412 }; | 423 }; |
| 413 }); | 424 }); |
| 414 testServerMain.start(); | 425 testServerMain.start(); |
| 426 return completer.future; |
| 415 } | 427 } |
| 416 | 428 |
| 417 void testFlush() { | 429 Future testFlush() { |
| 430 Completer completer = new Completer(); |
| 418 TestServerMain testServerMain = new TestServerMain(); | 431 TestServerMain testServerMain = new TestServerMain(); |
| 419 testServerMain.setServerStartedHandler((int port) { | 432 testServerMain.setServerStartedHandler((int port) { |
| 420 HttpClient httpClient = new HttpClient(); | 433 HttpClient httpClient = new HttpClient(); |
| 421 | 434 |
| 422 HttpClientConnection conn = httpClient.get("127.0.0.1", port, "/flush"); | 435 HttpClientConnection conn = httpClient.get("127.0.0.1", port, "/flush"); |
| 423 conn.onRequest = (HttpClientRequest request) { | 436 conn.onRequest = (HttpClientRequest request) { |
| 424 request.outputStream.flush(); | 437 request.outputStream.flush(); |
| 425 request.outputStream.close(); | 438 request.outputStream.close(); |
| 426 }; | 439 }; |
| 427 conn.onResponse = (HttpClientResponse response) { | 440 conn.onResponse = (HttpClientResponse response) { |
| 428 Expect.equals(HttpStatus.OK, response.statusCode); | 441 Expect.equals(HttpStatus.OK, response.statusCode); |
| 429 httpClient.shutdown(); | 442 httpClient.shutdown(); |
| 430 testServerMain.shutdown(); | 443 testServerMain.shutdown(); |
| 444 completer.complete(true); |
| 431 }; | 445 }; |
| 432 }); | 446 }); |
| 433 testServerMain.start(); | 447 testServerMain.start(); |
| 448 return completer.future; |
| 434 } | 449 } |
| 435 | 450 |
| 436 void main() { | 451 void main() { |
| 437 testHost(); | 452 print('testHost()'); |
| 438 testExpires(); | 453 testHost().chain((_) { |
| 439 testContentType(); | 454 print('testExpires()'); |
| 440 testCookies(); | 455 return testExpires().chain((_) { |
| 441 testFlush(); | 456 print('testContentType()'); |
| 457 return testContentType().chain((_) { |
| 458 print('testCookies()'); |
| 459 return testCookies().chain((_) { |
| 460 print('testFlush()'); |
| 461 return testFlush(); |
| 462 }); |
| 463 }); |
| 464 }); |
| 465 }).then((_) { |
| 466 print('done'); |
| 467 }); |
| 442 } | 468 } |
| OLD | NEW |