| Index: tests/standalone/io/http_server_early_client_close_test.dart
|
| diff --git a/tests/standalone/io/http_server_early_client_close_test.dart b/tests/standalone/io/http_server_early_client_close_test.dart
|
| index 57a922b0209c027c364a8e269b9747be3d83fca4..ee80a1d26ddc7ada05c8bedbbedfb986da99bbd1 100644
|
| --- a/tests/standalone/io/http_server_early_client_close_test.dart
|
| +++ b/tests/standalone/io/http_server_early_client_close_test.dart
|
| @@ -12,62 +12,66 @@ import "dart:async";
|
| import "dart:io";
|
| import "dart:isolate";
|
|
|
| -void sendData(List<int> data, int port) {
|
| - Socket.connect("127.0.0.1", port).then((socket) {
|
| +Future sendData(List<int> data, int port) {
|
| + return Socket.connect("127.0.0.1", port).then((socket) {
|
| socket.listen((data) {
|
| Expect.fail("No data response was expected");
|
| });
|
| socket.add(data);
|
| - socket.close();
|
| socket.done.then((_) {
|
| socket.destroy();
|
| });
|
| + return socket.close();
|
| });
|
| }
|
|
|
| class EarlyCloseTest {
|
| EarlyCloseTest(this.data,
|
| - String this.exception,
|
| - [bool this.expectRequest = false]);
|
| -
|
| - Future execute(HttpServer server) {
|
| - Completer c = new Completer();
|
| -
|
| - bool calledOnRequest = false;
|
| - bool calledOnError = false;
|
| - ReceivePort port = new ReceivePort();
|
| - server.listen(
|
| - (request) {
|
| - Expect.isTrue(expectRequest);
|
| - Expect.isFalse(calledOnError);
|
| - Expect.isFalse(calledOnRequest, "onRequest called multiple times");
|
| - calledOnRequest = true;
|
| - request.listen(
|
| - (_) {},
|
| - onError: (error) {
|
| - Expect.isFalse(calledOnError);
|
| - Expect.equals(exception, error.message);
|
| - calledOnError = true;
|
| - port.close();
|
| - c.complete(null);
|
| - });
|
| - },
|
| - onError: (error) {
|
| - Expect.isFalse(calledOnError);
|
| - Expect.equals(exception, error.message);
|
| - Expect.equals(expectRequest, calledOnRequest);
|
| - calledOnError = true;
|
| - port.close();
|
| - c.complete(null);
|
| - });
|
| + [String this.exception,
|
| + bool this.expectRequest = false]);
|
| +
|
| + Future execute() {
|
| + return HttpServer.bind("127.0.0.1", 0).then((server) {
|
| + Completer c = new Completer();
|
| +
|
| + bool calledOnRequest = false;
|
| + bool calledOnError = false;
|
| + bool calledOnDone = false;
|
| + ReceivePort port = new ReceivePort();
|
| + server.listen(
|
| + (request) {
|
| + Expect.isTrue(expectRequest);
|
| + Expect.isFalse(calledOnError);
|
| + Expect.isFalse(calledOnRequest, "onRequest called multiple times");
|
| + calledOnRequest = true;
|
| + request.listen(
|
| + (_) {},
|
| + onError: (error) {
|
| + Expect.isFalse(calledOnError);
|
| + Expect.equals(exception, error.message);
|
| + calledOnError = true;
|
| + if (exception != null) port.close();
|
| + });
|
| + server.close();
|
| + },
|
| + onDone: () {
|
| + Expect.equals(expectRequest, calledOnRequest);
|
| + calledOnDone = true;
|
| + if (exception == null) port.close();
|
| + c.complete(null);
|
| + });
|
|
|
| - List<int> d;
|
| - if (data is List<int>) d = data;
|
| - if (data is String) d = data.codeUnits;
|
| - if (d == null) Expect.fail("Invalid data");
|
| - sendData(d, server.port);
|
| + List<int> d;
|
| + if (data is List<int>) d = data;
|
| + if (data is String) d = data.codeUnits;
|
| + if (d == null) Expect.fail("Invalid data");
|
| + sendData(d, server.port)
|
| + .then((_) {
|
| + if (!expectRequest) server.close();
|
| + });
|
|
|
| - return c.future;
|
| + return c.future;
|
| + });
|
| }
|
|
|
| final data;
|
| @@ -77,33 +81,29 @@ class EarlyCloseTest {
|
|
|
| void testEarlyClose1() {
|
| List<EarlyCloseTest> tests = new List<EarlyCloseTest>();
|
| - void add(Object data, String exception, {bool expectRequest: false}) {
|
| + void add(Object data, [String exception, bool expectRequest = false]) {
|
| tests.add(new EarlyCloseTest(data, exception, expectRequest));
|
| }
|
| // The empty packet is valid.
|
|
|
| // Close while sending header
|
| - String message = "Connection closed before full header was received";
|
| - add("G", message);
|
| - add("GET /", message);
|
| - add("GET / HTTP/1.1", message);
|
| - add("GET / HTTP/1.1\r\n", message);
|
| + add("G");
|
| + add("GET /");
|
| + add("GET / HTTP/1.1");
|
| + add("GET / HTTP/1.1\r\n");
|
|
|
| // Close while sending content
|
| add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n",
|
| "Connection closed while receiving data",
|
| - expectRequest: true);
|
| + true);
|
| add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n1",
|
| "Connection closed while receiving data",
|
| - expectRequest: true);
|
| + true);
|
|
|
| void runTest(Iterator it) {
|
| if (it.moveNext()) {
|
| - HttpServer.bind("127.0.0.1", 0).then((server) {
|
| - it.current.execute(server).then((_) {
|
| - runTest(it);
|
| - server.close();
|
| - });
|
| + it.current.execute().then((_) {
|
| + runTest(it);
|
| });
|
| }
|
| }
|
|
|