Chromium Code Reviews| Index: tests/standalone/io/http_server_response_test.dart |
| diff --git a/tests/standalone/io/http_server_response_test.dart b/tests/standalone/io/http_server_response_test.dart |
| index d27dcc765f7535d76d8733c26629e08db2e3c350..cf1312e012228d5429c69d2282d6ed4cf4bd5b04 100644 |
| --- a/tests/standalone/io/http_server_response_test.dart |
| +++ b/tests/standalone/io/http_server_response_test.dart |
| @@ -12,7 +12,9 @@ import "dart:async"; |
| import "dart:io"; |
| import "dart:typed_data"; |
| -void testServerRequest(void handler(server, request), {int bytes}) { |
| +void testServerRequest(void handler(server, request), |
| + {int bytes, |
| + bool closeClient}) { |
| HttpServer.bind("127.0.0.1", 0).then((server) { |
| server.listen((request) { |
| handler(server, request); |
| @@ -26,8 +28,16 @@ void testServerRequest(void handler(server, request), {int bytes}) { |
| .then((request) => request.close()) |
| .then((response) { |
| int received = 0; |
| - response.listen( |
| - (data) => received += data.length, |
| + var subscription; |
| + subscription = response.listen( |
| + (data) { |
| + if (closeClient == true) { |
| + subscription.cancel(); |
| + client.close(); |
| + } else { |
| + received += data.length; |
| + } |
| + }, |
| onDone: () { |
| if (bytes != null) Expect.equals(received, bytes); |
| client.close(); |
| @@ -42,6 +52,7 @@ void testServerRequest(void handler(server, request), {int bytes}) { |
| }); |
| } |
| + |
| void testResponseDone() { |
| testServerRequest((server, request) { |
| request.response.close(); |
| @@ -67,6 +78,7 @@ void testResponseDone() { |
| }); |
| } |
| + |
| void testResponseAddStream() { |
| int bytes = new File(new Options().script).lengthSync(); |
| @@ -114,6 +126,69 @@ void testResponseAddStream() { |
| }); |
| } |
| + |
| +void testResponseAddStreamClosed() { |
| + testServerRequest((server, request) { |
| + request.response.addStream(new File(new Options().script).openRead()) |
| + .then((response) { |
| + response.close(); |
| + response.done.then((_) => server.close()); |
| + }); |
| + }, closeClient: true); |
| + |
| + testServerRequest((server, request) { |
| + int count = 0; |
| + write() { |
|
Søren Gjesse
2013/05/23 13:48:15
Maybe interleave the addStream calls with some Str
Anders Johnsen
2013/05/23 13:54:50
Done.
|
| + request.response.addStream(new File(new Options().script).openRead()) |
| + .then((response) { |
| + count++; |
| + if (count < 1000) { |
| + write(); |
| + } else { |
| + response.close(); |
| + response.done.then((_) => server.close()); |
| + } |
| + }); |
| + } |
| + write(); |
| + }, closeClient: true); |
| +} |
| + |
| + |
| +void testResponseAddClosed() { |
| + testServerRequest((server, request) { |
| + request.response.add(new File(new Options().script).readAsBytesSync()); |
| + request.response.close(); |
| + request.response.done.then((_) => server.close()); |
| + }, closeClient: true); |
| + |
| + testServerRequest((server, request) { |
| + for (int i = 0; i < 1000; i++) { |
| + request.response.add(new File(new Options().script).readAsBytesSync()); |
| + } |
| + request.response.close(); |
| + request.response.done.then((_) => server.close()); |
| + }, closeClient: true); |
| + |
| + testServerRequest((server, request) { |
| + int count = 0; |
| + write() { |
| + request.response.add(new File(new Options().script).readAsBytesSync()); |
| + Timer.run(() { |
| + count++; |
| + if (count < 1000) { |
| + write(); |
| + } else { |
| + request.response.close(); |
| + request. response.done.then((_) => server.close()); |
| + } |
| + }); |
| + } |
| + write(); |
| + }, closeClient: true); |
| +} |
| + |
| + |
| void testBadResponseAdd() { |
| testServerRequest((server, request) { |
| request.response.contentLength = 0; |
| @@ -146,6 +221,7 @@ void testBadResponseAdd() { |
| }); |
| } |
| + |
| void testBadResponseClose() { |
| testServerRequest((server, request) { |
| request.response.contentLength = 5; |
| @@ -165,9 +241,12 @@ void testBadResponseClose() { |
| }); |
| } |
| + |
| void main() { |
| testResponseDone(); |
| testResponseAddStream(); |
| + testResponseAddStreamClosed(); |
| + testResponseAddClosed(); |
| testBadResponseAdd(); |
| testBadResponseClose(); |
| } |