OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 | 5 |
6 import "package:expect/expect.dart"; | 6 import "package:expect/expect.dart"; |
7 import "dart:isolate"; | 7 import "dart:isolate"; |
8 import "dart:io"; | 8 import "dart:io"; |
9 | 9 |
10 void test(int totalConnections, [String body]) { | 10 void test(int totalConnections, [String body]) { |
11 HttpServer.bind("127.0.0.1", 0).then((server) { | 11 HttpServer.bind("127.0.0.1", 0).then((server) { |
12 | 12 |
13 server.listen((HttpRequest request) { | 13 server.listen((HttpRequest request) { |
14 HttpResponse response = request.response; | 14 HttpResponse response = request.response; |
15 // Cannot mutate request headers. | 15 // Cannot mutate request headers. |
16 Expect.throws(() => request.headers.add("X-Request-Header", "value"), | 16 Expect.throws(() => request.headers.add("X-Request-Header", "value"), |
17 (e) => e is HttpException); | 17 (e) => e is HttpException); |
18 Expect.equals("value", request.headers.value("X-Request-Header")); | 18 Expect.equals("value", request.headers.value("X-Request-Header")); |
19 request.listen((_) {}, onDone: () { | 19 request.listen((_) {}, onDone: () { |
20 // Can still mutate response headers as long as no data has been sent. | 20 // Can still mutate response headers as long as no data has been sent. |
21 response.headers.add("X-Response-Header", "value"); | 21 response.headers.add("X-Response-Header", "value"); |
22 if (body != null) { | 22 if (body != null) { |
23 response.write(body); | 23 response.write(body); |
| 24 // Cannot change state or reason when data has been sent. |
| 25 Expect.throws(() => response.statusCode = 200, |
| 26 (e) => e is StateError); |
| 27 Expect.throws(() => response.reasonPhrase = "OK", |
| 28 (e) => e is StateError); |
24 // Cannot mutate response headers when data has been sent. | 29 // Cannot mutate response headers when data has been sent. |
25 Expect.throws(() => request.headers.add("X-Request-Header", "value2"), | 30 Expect.throws(() => response.headers.add("X-Request-Header", "value2")
, |
26 (e) => e is HttpException); | 31 (e) => e is HttpException); |
27 } | 32 } |
28 response..close(); | 33 response..close(); |
29 // Cannot mutate response headers when data has been sent. | 34 // Cannot change state or reason after connection is closed. |
30 Expect.throws(() => request.headers.add("X-Request-Header", "value3"), | 35 Expect.throws(() => response.statusCode = 200, |
| 36 (e) => e is StateError); |
| 37 Expect.throws(() => response.reasonPhrase = "OK", |
| 38 (e) => e is StateError); |
| 39 // Cannot mutate response headers after connection is closed. |
| 40 Expect.throws(() => response.headers.add("X-Request-Header", "value3"), |
31 (e) => e is HttpException); | 41 (e) => e is HttpException); |
32 }); | 42 }); |
33 }); | 43 }); |
34 | 44 |
35 int count = 0; | 45 int count = 0; |
36 HttpClient client = new HttpClient(); | 46 HttpClient client = new HttpClient(); |
37 for (int i = 0; i < totalConnections; i++) { | 47 for (int i = 0; i < totalConnections; i++) { |
38 client.get("127.0.0.1", server.port, "/") | 48 client.get("127.0.0.1", server.port, "/") |
39 .then((HttpClientRequest request) { | 49 .then((HttpClientRequest request) { |
40 if (body != null) { | 50 if (body != null) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 }); | 82 }); |
73 } | 83 } |
74 | 84 |
75 }); | 85 }); |
76 } | 86 } |
77 | 87 |
78 void main() { | 88 void main() { |
79 test(5); | 89 test(5); |
80 test(5, "Hello and goodbye"); | 90 test(5, "Hello and goodbye"); |
81 } | 91 } |
OLD | NEW |