| Index: runtime/tests/vm/dart/hello_fuchsia_test.dart
|
| diff --git a/runtime/tests/vm/dart/hello_fuchsia_test.dart b/runtime/tests/vm/dart/hello_fuchsia_test.dart
|
| index 100cb04cd2c32ee2e55a9e31220f5f19c9c2146c..e29fb3ed9060d80a1e1da5afec5beb055197e1e6 100644
|
| --- a/runtime/tests/vm/dart/hello_fuchsia_test.dart
|
| +++ b/runtime/tests/vm/dart/hello_fuchsia_test.dart
|
| @@ -45,7 +45,145 @@ testSimpleConnect() async {
|
| await socket.close();
|
| }
|
|
|
| -testSimpleReadWrite({bool dropReads}) async {
|
| +testSimpleReadWriteClose() async {
|
| + // This test creates a server and a client connects. The client then
|
| + // writes and the server echos. When the client finishes fully reading the
|
| + // echo, it closes the socket. When the server receives the close event, it
|
| + // closes its end of the socket too.
|
| +
|
| + const messageSize = 1000;
|
| + int serverReadCount = 0;
|
| + int clientReadCount = 0;
|
| +
|
| + List<int> createTestData() {
|
| + return new List<int>.generate(messageSize, (index) => index & 0xff);
|
| + }
|
| +
|
| + void verifyTestData(List<int> data) {
|
| + assert(messageSize == data.length);
|
| + List<int> expected = createTestData();
|
| + for (int i = 0; i < messageSize; i++) {
|
| + assert(expected[i] == data[i]);
|
| + }
|
| + }
|
| +
|
| + var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
|
| + server.listen((client) {
|
| + int bytesRead = 0;
|
| + int bytesWritten = 0;
|
| + bool closedEventReceived = false;
|
| + List<int> data = new List<int>(messageSize);
|
| + bool doneReading = false;
|
| +
|
| + client.writeEventsEnabled = false;
|
| + client.listen((event) {
|
| + switch (event) {
|
| + case RawSocketEvent.READ:
|
| + if (doneReading) {
|
| + break;
|
| + }
|
| + print("client READ event bytesRead = $bytesRead");
|
| + assert(bytesWritten == 0);
|
| + assert(client.available() > 0);
|
| + var buffer = client.read(200);
|
| + print("client READ event: read ${buffer.length} more bytes");
|
| + data.setRange(bytesRead, bytesRead + buffer.length, buffer);
|
| + bytesRead += buffer.length;
|
| + if (bytesRead == data.length) {
|
| + verifyTestData(data);
|
| + print("client READ event. Done reading, enabling writes");
|
| + client.writeEventsEnabled = true;
|
| + doneReading = true;
|
| + }
|
| + break;
|
| + case RawSocketEvent.WRITE:
|
| + assert(!client.writeEventsEnabled);
|
| + bytesWritten += client.write(
|
| + data, bytesWritten, data.length - bytesWritten);
|
| + print("client WRITE event: $bytesWritten written");
|
| + if (bytesWritten < data.length) {
|
| + client.writeEventsEnabled = true;
|
| + }
|
| + if (bytesWritten == data.length) {
|
| + print("client WRITE event: done writing.");
|
| + }
|
| + break;
|
| + case RawSocketEvent.READ_CLOSED:
|
| + print("client READ_CLOSED event");
|
| + client.close();
|
| + server.close();
|
| + break;
|
| + case RawSocketEvent.CLOSED:
|
| + assert(!closedEventReceived);
|
| + print("client CLOSED event");
|
| + closedEventReceived = true;
|
| + break;
|
| + default: throw "Unexpected event $event";
|
| + }
|
| + },
|
| + onError: (e) { print("client ERROR $e"); },
|
| + onDone: () {assert(closedEventReceived);});
|
| + });
|
| +
|
| + {
|
| + var completer = new Completer();
|
| + var socket = await RawSocket.connect("127.0.0.1", server.port);
|
| + int bytesRead = 0;
|
| + int bytesWritten = 0;
|
| + bool closedEventReceived = false;
|
| + List<int> data = createTestData();
|
| +
|
| + socket.listen((event) {
|
| + switch (event) {
|
| + case RawSocketEvent.READ:
|
| + assert(socket.available() > 0);
|
| + print("server READ event: ${bytesRead} read");
|
| + var buffer = socket.read();
|
| + print("server READ event: read ${buffer.length} more bytes");
|
| + data.setRange(bytesRead, bytesRead + buffer.length, buffer);
|
| + bytesRead += buffer.length;
|
| + if (bytesRead == messageSize) {
|
| + print("server READ event: done reading");
|
| + socket.close();
|
| + }
|
| + break;
|
| + case RawSocketEvent.WRITE:
|
| + assert(bytesRead == 0);
|
| + assert(!socket.writeEventsEnabled);
|
| + bytesWritten += socket.write(
|
| + data, bytesWritten, data.length - bytesWritten);
|
| + print("server WRITE event: ${bytesWritten} written");
|
| + if (bytesWritten < data.length) {
|
| + socket.writeEventsEnabled = true;
|
| + } else {
|
| + print("server WRITE event: done writing");
|
| + data = new List<int>(messageSize);
|
| + }
|
| + break;
|
| + case RawSocketEvent.READ_CLOSED:
|
| + print("server READ_CLOSED event");
|
| + verifyTestData(data);
|
| + socket.close();
|
| + break;
|
| + case RawSocketEvent.CLOSED:
|
| + assert(!closedEventReceived);
|
| + print("server CLOSED event");
|
| + closedEventReceived = true;
|
| + break;
|
| + default: throw "Unexpected event $event";
|
| + }
|
| + },
|
| + onError: (e) { print("server ERROR $e"); },
|
| + onDone: () {
|
| + assert(closedEventReceived);
|
| + completer.complete(null);
|
| + });
|
| +
|
| + return completer.future;
|
| + }
|
| +}
|
| +
|
| +testSimpleReadWriteShutdown({bool dropReads}) async {
|
| // This test creates a server and a client connects. The client then
|
| // writes and the server echos. When the server has finished its
|
| // echo it half-closes. When the client gets the close event is
|
| @@ -199,8 +337,9 @@ Future testGoogleUrl(SecurityContext context, String outcome) async {
|
| // built-in root certificate authority.
|
| try {
|
| // First, check if the lookup works.
|
| - await InternetAddress.lookup('www.google.com');
|
| - var request = await client.getUrl(Uri.parse('http://www.google.com'));
|
| + var address = await InternetAddress.lookup('www.google.com');
|
| + print(address);
|
| + var request = await client.getUrl(Uri.parse('http://www.google.com/'));
|
| request.followRedirects = false;
|
| var response = await request.close();
|
| assert('pass' == outcome);
|
| @@ -230,10 +369,14 @@ main() async {
|
| await testSimpleConnect();
|
| print("testSimpleConnect done");
|
|
|
| + print("testSimpleReadWriteClose");
|
| + await testSimpleReadWriteClose();
|
| + print("testSimpleReadWriteClose done");
|
| +
|
| // TODO(US-81): Enable.
|
| - // print("testSimpleReadWrite");
|
| - // await testSimpleReadWrite(dropReads: false);
|
| - // print("testSimpleReadWrite done");
|
| + // print("testSimpleReadWriteShutdown");
|
| + // await testSimpleReadWriteShutdown(dropReads: false);
|
| + // print("testSimpleReadWriteShutdown done");
|
|
|
| print("testGoogleUrl");
|
| await testGoogleUrl(null, 'pass');
|
|
|