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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 response.outputStream.close(); | 117 response.outputStream.close(); |
118 } | 118 } |
119 | 119 |
120 // Return a 301 with a custom reason phrase. | 120 // Return a 301 with a custom reason phrase. |
121 void _reasonForMovingHandler(HttpRequest request, HttpResponse response) { | 121 void _reasonForMovingHandler(HttpRequest request, HttpResponse response) { |
122 response.statusCode = HttpStatus.MOVED_PERMANENTLY; | 122 response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
123 response.reasonPhrase = "Don't come looking here any more"; | 123 response.reasonPhrase = "Don't come looking here any more"; |
124 response.outputStream.close(); | 124 response.outputStream.close(); |
125 } | 125 } |
126 | 126 |
127 // Return a 301 with a custom reason phrase. | 127 // Check the "Host" header. |
128 void _hostHandler(HttpRequest request, HttpResponse response) { | 128 void _hostHandler(HttpRequest request, HttpResponse response) { |
129 Expect.equals("www.dartlang.org:1234", request.headers["host"]); | 129 Expect.equals("www.dartlang.org:1234", request.headers["host"]); |
130 response.statusCode = HttpStatus.OK; | 130 response.statusCode = HttpStatus.OK; |
131 response.outputStream.close(); | 131 response.outputStream.close(); |
132 } | 132 } |
133 | 133 |
| 134 // Set the "Expires" header using the expires property. |
| 135 void _expires1Handler(HttpRequest request, HttpResponse response) { |
| 136 Date date = |
| 137 new Date.withTimeZone( |
| 138 1999, Date.JUN, 11, 18, 46, 53, 0, new TimeZone.utc()); |
| 139 response.expires = date; |
| 140 Expect.equals(date, response.expires); |
| 141 response.outputStream.close(); |
| 142 } |
| 143 |
| 144 // Set the "Expires" header. |
| 145 void _expires2Handler(HttpRequest request, HttpResponse response) { |
| 146 response.setHeader("Expires", "Fri, 11 Jun 1999 18:46:53 GMT"); |
| 147 Date date = |
| 148 new Date.withTimeZone( |
| 149 1999, Date.JUN, 11, 18, 46, 53, 0, new TimeZone.utc()); |
| 150 Expect.equals(date, response.expires); |
| 151 response.outputStream.close(); |
| 152 } |
| 153 |
134 void main() { | 154 void main() { |
135 // Setup request handlers. | 155 // Setup request handlers. |
136 _requestHandlers = new Map(); | 156 _requestHandlers = new Map(); |
137 _requestHandlers["/echo"] = (HttpRequest request, HttpResponse response) { | 157 _requestHandlers["/echo"] = (HttpRequest request, HttpResponse response) { |
138 _echoHandler(request, response); | 158 _echoHandler(request, response); |
139 }; | 159 }; |
140 _requestHandlers["/0123456789"] = | 160 _requestHandlers["/0123456789"] = |
141 (HttpRequest request, HttpResponse response) { | 161 (HttpRequest request, HttpResponse response) { |
142 _zeroToTenHandler(request, response); | 162 _zeroToTenHandler(request, response); |
143 }; | 163 }; |
144 _requestHandlers["/reasonformoving"] = | 164 _requestHandlers["/reasonformoving"] = |
145 (HttpRequest request, HttpResponse response) { | 165 (HttpRequest request, HttpResponse response) { |
146 _reasonForMovingHandler(request, response); | 166 _reasonForMovingHandler(request, response); |
147 }; | 167 }; |
148 _requestHandlers["/host"] = | 168 _requestHandlers["/host"] = |
149 (HttpRequest request, HttpResponse response) { | 169 (HttpRequest request, HttpResponse response) { |
150 _hostHandler(request, response); | 170 _hostHandler(request, response); |
151 }; | 171 }; |
| 172 _requestHandlers["/expires1"] = |
| 173 (HttpRequest request, HttpResponse response) { |
| 174 _expires1Handler(request, response); |
| 175 }; |
| 176 _requestHandlers["/expires2"] = |
| 177 (HttpRequest request, HttpResponse response) { |
| 178 _expires2Handler(request, response); |
| 179 }; |
152 | 180 |
153 this.port.receive((var message, SendPort replyTo) { | 181 this.port.receive((var message, SendPort replyTo) { |
154 if (message.isStart) { | 182 if (message.isStart) { |
155 _server = new HttpServer(); | 183 _server = new HttpServer(); |
156 try { | 184 try { |
157 _server.listen("127.0.0.1", 0); | 185 _server.listen("127.0.0.1", 0); |
158 _server.onRequest = (HttpRequest req, HttpResponse rsp) { | 186 _server.onRequest = (HttpRequest req, HttpResponse rsp) { |
159 _requestReceivedHandler(req, rsp); | 187 _requestReceivedHandler(req, rsp); |
160 }; | 188 }; |
161 replyTo.send(new TestServerStatus.started(_server.port), null); | 189 replyTo.send(new TestServerStatus.started(_server.port), null); |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 }; | 466 }; |
439 conn.onResponse = (HttpClientResponse response) { | 467 conn.onResponse = (HttpClientResponse response) { |
440 Expect.equals(HttpStatus.OK, response.statusCode); | 468 Expect.equals(HttpStatus.OK, response.statusCode); |
441 httpClient.shutdown(); | 469 httpClient.shutdown(); |
442 testServerMain.shutdown(); | 470 testServerMain.shutdown(); |
443 }; | 471 }; |
444 }); | 472 }); |
445 testServerMain.start(); | 473 testServerMain.start(); |
446 } | 474 } |
447 | 475 |
| 476 void testExpires() { |
| 477 TestServerMain testServerMain = new TestServerMain(); |
| 478 testServerMain.setServerStartedHandler((int port) { |
| 479 int responses = 0; |
| 480 HttpClient httpClient = new HttpClient(); |
| 481 |
| 482 void processResponse(HttpClientResponse response) { |
| 483 Expect.equals(HttpStatus.OK, response.statusCode); |
| 484 Expect.equals("Fri, 11 Jun 1999 18:46:53 GMT", |
| 485 response.headers["expires"]); |
| 486 Expect.equals( |
| 487 new Date.withTimeZone( |
| 488 1999, Date.JUN, 11, 18, 46, 53, 0, new TimeZone.utc()), |
| 489 response.expires); |
| 490 responses++; |
| 491 if (responses == 2) { |
| 492 httpClient.shutdown(); |
| 493 testServerMain.shutdown(); |
| 494 } |
| 495 } |
| 496 |
| 497 HttpClientConnection conn1 = httpClient.get("127.0.0.1", port, "/expires1"); |
| 498 conn1.onResponse = (HttpClientResponse response) { |
| 499 processResponse(response); |
| 500 }; |
| 501 HttpClientConnection conn2 = httpClient.get("127.0.0.1", port, "/expires2"); |
| 502 conn2.onResponse = (HttpClientResponse response) { |
| 503 processResponse(response); |
| 504 }; |
| 505 }); |
| 506 testServerMain.start(); |
| 507 } |
| 508 |
448 | 509 |
449 void main() { | 510 void main() { |
450 testStartStop(); | 511 testStartStop(); |
451 testGET(); | 512 testGET(); |
452 testPOST(true); | 513 testPOST(true); |
453 testPOST(false); | 514 testPOST(false); |
454 testReadInto(true); | 515 testReadInto(true); |
455 testReadInto(false); | 516 testReadInto(false); |
456 testReadShort(true); | 517 testReadShort(true); |
457 testReadShort(false); | 518 testReadShort(false); |
458 test404(); | 519 test404(); |
459 testReasonPhrase(); | 520 testReasonPhrase(); |
460 testHost(); | 521 testHost(); |
| 522 testExpires(); |
461 } | 523 } |
OLD | NEW |