| Index: tests/standalone/src/io/SocketCloseTest.dart
|
| diff --git a/tests/standalone/src/io/SocketCloseTest.dart b/tests/standalone/src/io/SocketCloseTest.dart
|
| deleted file mode 100644
|
| index 205bfc3eaa98919c9cf83e52aaa2d60f8e5d0a48..0000000000000000000000000000000000000000
|
| --- a/tests/standalone/src/io/SocketCloseTest.dart
|
| +++ /dev/null
|
| @@ -1,389 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -//
|
| -// VMOptions=
|
| -// VMOptions=--short_socket_read
|
| -// VMOptions=--short_socket_write
|
| -// VMOptions=--short_socket_read --short_socket_write
|
| -//
|
| -// Test socket close events.
|
| -
|
| -#import("dart:io");
|
| -#import("dart:isolate");
|
| -
|
| -final SERVERSHUTDOWN = -1;
|
| -final ITERATIONS = 10;
|
| -
|
| -
|
| -class SocketClose {
|
| -
|
| - SocketClose.start(this._mode, this._donePort)
|
| - : _receivePort = new ReceivePort(),
|
| - _sendPort = null,
|
| - _readBytes = 0,
|
| - _dataEvents = 0,
|
| - _closeEvents = 0,
|
| - _errorEvents = 0,
|
| - _iterations = 0 {
|
| - new SocketCloseServer().spawn().then((SendPort port) {
|
| - _sendPort = port;
|
| - start();
|
| - });
|
| - }
|
| -
|
| - void proceed() {
|
| - if (_iterations < ITERATIONS) {
|
| - new Timer(0, sendData);
|
| - } else {
|
| - shutdown();
|
| - }
|
| - }
|
| -
|
| - void sendData(Timer timer) {
|
| -
|
| - void dataHandler() {
|
| - switch (_mode) {
|
| - case 0:
|
| - case 1:
|
| - case 2:
|
| - Expect.fail("No data expected");
|
| - break;
|
| - case 3:
|
| - case 4:
|
| - case 5:
|
| - case 6:
|
| - List<int> b = new List<int>(5);
|
| - _readBytes += _socket.readList(b, 0, 5);
|
| - if ((_readBytes % 5) == 0) {
|
| - _dataEvents++;
|
| - }
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - }
|
| -
|
| - void closeHandler() {
|
| - _closeEvents++;
|
| - switch (_mode) {
|
| - case 0:
|
| - case 1:
|
| - Expect.fail("No close expected");
|
| - break;
|
| - case 2:
|
| - case 3:
|
| - _socket.close();
|
| - proceed();
|
| - break;
|
| - case 4:
|
| - proceed();
|
| - break;
|
| - case 5:
|
| - _socket.close();
|
| - proceed();
|
| - break;
|
| - case 6:
|
| - proceed();
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - }
|
| -
|
| - void errorHandler(Exception e) {
|
| - _errorEvents++;
|
| - _socket.close();
|
| - }
|
| -
|
| - void connectHandler() {
|
| - _socket.onData = dataHandler;
|
| - _socket.onClosed = closeHandler;
|
| - _socket.onError = errorHandler;
|
| -
|
| - void writeHello() {
|
| - int bytesWritten = 0;
|
| - while (bytesWritten != 5) {
|
| - bytesWritten += _socket.writeList("Hello".charCodes(),
|
| - bytesWritten,
|
| - 5 - bytesWritten);
|
| - }
|
| - }
|
| -
|
| - _iterations++;
|
| - switch (_mode) {
|
| - case 0:
|
| - _socket.close();
|
| - proceed();
|
| - break;
|
| - case 1:
|
| - writeHello();
|
| - _socket.close();
|
| - proceed();
|
| - break;
|
| - case 2:
|
| - case 3:
|
| - writeHello();
|
| - break;
|
| - case 4:
|
| - writeHello();
|
| - _socket.close(true);
|
| - break;
|
| - case 5:
|
| - writeHello();
|
| - break;
|
| - case 6:
|
| - writeHello();
|
| - _socket.close(true);
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - }
|
| -
|
| - _socket = new Socket(SocketCloseServer.HOST, _port);
|
| - Expect.equals(true, _socket !== null);
|
| - _socket.onConnect = connectHandler;
|
| - }
|
| -
|
| - void start() {
|
| - _receivePort.receive((var message, SendPort replyTo) {
|
| - _port = message;
|
| - proceed();
|
| - });
|
| - _sendPort.send(_mode, _receivePort.toSendPort());
|
| - }
|
| -
|
| - void shutdown() {
|
| - _sendPort.send(SERVERSHUTDOWN, _receivePort.toSendPort());
|
| - _receivePort.receive((message, ignore) {
|
| - _donePort.send(null);
|
| - _receivePort.close();
|
| - });
|
| -
|
| - switch (_mode) {
|
| - case 0:
|
| - case 1:
|
| - Expect.equals(0, _dataEvents);
|
| - Expect.equals(0, _closeEvents);
|
| - break;
|
| - case 2:
|
| - Expect.equals(0, _dataEvents);
|
| - Expect.equals(ITERATIONS, _closeEvents);
|
| - break;
|
| - case 3:
|
| - case 4:
|
| - case 5:
|
| - case 6:
|
| - Expect.equals(ITERATIONS, _dataEvents);
|
| - Expect.equals(ITERATIONS, _closeEvents);
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - Expect.equals(0, _errorEvents);
|
| - }
|
| -
|
| - int _port;
|
| - ReceivePort _receivePort;
|
| - SendPort _sendPort;
|
| - Socket _socket;
|
| - List<int> _buffer;
|
| - int _readBytes;
|
| - int _dataEvents;
|
| - int _closeEvents;
|
| - int _errorEvents;
|
| - int _iterations;
|
| - int _mode;
|
| - SendPort _donePort;
|
| -}
|
| -
|
| -
|
| -class ConnectionData {
|
| - ConnectionData(Socket this.connection) : readBytes = 0;
|
| - Socket connection;
|
| - int readBytes;
|
| -}
|
| -
|
| -
|
| -class SocketCloseServer extends Isolate {
|
| -
|
| - static final HOST = "127.0.0.1";
|
| -
|
| - SocketCloseServer() : super() {}
|
| -
|
| - void main() {
|
| -
|
| - void connectionHandler(ConnectionData data) {
|
| - var connection = data.connection;
|
| -
|
| - void readBytes(whenFiveBytes) {
|
| - List<int> b = new List<int>(5);
|
| - data.readBytes += connection.readList(b, 0, 5);
|
| - if (data.readBytes == 5) {
|
| - whenFiveBytes();
|
| - }
|
| - }
|
| -
|
| - void writeHello() {
|
| - int bytesWritten = 0;
|
| - while (bytesWritten != 5) {
|
| - bytesWritten += connection.writeList("Hello".charCodes(),
|
| - bytesWritten,
|
| - 5 - bytesWritten);
|
| - }
|
| - }
|
| -
|
| - void dataHandler() {
|
| - switch (_mode) {
|
| - case 0:
|
| - Expect.fail("No data expected");
|
| - break;
|
| - case 1:
|
| - readBytes(() { _dataEvents++; });
|
| - break;
|
| - case 2:
|
| - readBytes(() {
|
| - _dataEvents++;
|
| - connection.close();
|
| - });
|
| - break;
|
| - case 3:
|
| - readBytes(() {
|
| - _dataEvents++;
|
| - writeHello();
|
| - connection.close();
|
| - });
|
| - break;
|
| - case 4:
|
| - readBytes(() {
|
| - _dataEvents++;
|
| - writeHello();
|
| - });
|
| - break;
|
| - case 5:
|
| - case 6:
|
| - readBytes(() {
|
| - _dataEvents++;
|
| - writeHello();
|
| - connection.close(true);
|
| - });
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - }
|
| -
|
| - void closeHandler() {
|
| - _closeEvents++;
|
| - connection.close();
|
| - }
|
| -
|
| - void errorHandler(Exception e) {
|
| - Expect.fail("Socket error $e");
|
| - }
|
| -
|
| - _iterations++;
|
| -
|
| - connection.onData = dataHandler;
|
| - connection.onClosed = closeHandler;
|
| - connection.onError = errorHandler;
|
| - }
|
| -
|
| - void errorHandlerServer(Exception e) {
|
| - Expect.fail("Server socket error");
|
| - }
|
| -
|
| - waitForResult(Timer timer) {
|
| - // Make sure all iterations have been run. In multiple of these
|
| - // scenarios it is possible to get the SERVERSHUTDOWN message
|
| - // before we have received the last close event on the
|
| - // server. In these cases we wait for the correct number of
|
| - // close events.
|
| - if (_iterations == ITERATIONS &&
|
| - (_closeEvents == ITERATIONS || (_mode == 2 || _mode == 3))) {
|
| - switch (_mode) {
|
| - case 0:
|
| - Expect.equals(0, _dataEvents);
|
| - Expect.equals(ITERATIONS, _closeEvents);
|
| - break;
|
| - case 1:
|
| - Expect.equals(ITERATIONS, _dataEvents);
|
| - Expect.equals(ITERATIONS, _closeEvents);
|
| - break;
|
| - case 2:
|
| - case 3:
|
| - Expect.equals(ITERATIONS, _dataEvents);
|
| - Expect.equals(0, _closeEvents);
|
| - break;
|
| - case 4:
|
| - case 5:
|
| - case 6:
|
| - Expect.equals(ITERATIONS, _dataEvents);
|
| - Expect.equals(ITERATIONS, _closeEvents);
|
| - break;
|
| - default:
|
| - Expect.fail("Unknown test mode");
|
| - }
|
| - Expect.equals(0, _errorEvents);
|
| - _server.close();
|
| - this.port.close();
|
| - _donePort.send(null);
|
| - } else {
|
| - new Timer(100, waitForResult);
|
| - }
|
| - }
|
| -
|
| - this.port.receive((message, SendPort replyTo) {
|
| - _donePort = replyTo;
|
| - if (message != SERVERSHUTDOWN) {
|
| - _readBytes = 0;
|
| - _errorEvents = 0;
|
| - _dataEvents = 0;
|
| - _closeEvents = 0;
|
| - _iterations = 0;
|
| - _mode = message;
|
| - _server = new ServerSocket(HOST, 0, 10);
|
| - Expect.equals(true, _server !== null);
|
| - _server.onConnection = (connection) {
|
| - var data = new ConnectionData(connection);
|
| - connectionHandler(data);
|
| - };
|
| - _server.onError = errorHandlerServer;
|
| - replyTo.send(_server.port, null);
|
| - } else {
|
| - new Timer(0, waitForResult);
|
| - }
|
| - });
|
| - }
|
| -
|
| - ServerSocket _server;
|
| - SendPort _donePort;
|
| - int _readBytes;
|
| - int _errorEvents;
|
| - int _dataEvents;
|
| - int _closeEvents;
|
| - int _iterations;
|
| - int _mode;
|
| -}
|
| -
|
| -
|
| -main() {
|
| - // Run the close test in these different "modes".
|
| - // 0: Client closes without sending at all.
|
| - // 1: Client sends and closes.
|
| - // 2: Client sends. Server closes.
|
| - // 3: Client sends. Server responds and closes.
|
| - // 4: Client sends and half-closes. Server responds and closes.
|
| - // 5: Client sends. Server responds and half closes.
|
| - // 6: Client sends and half-closes. Server responds and half closes.
|
| - var tests = 7;
|
| - var port = new ReceivePort();
|
| - var completed = 0;
|
| - port.receive((message, ignore) {
|
| - if (++completed == tests) port.close();
|
| - });
|
| - for (var i = 0; i < tests; i++) {
|
| - new SocketClose.start(i, port.toSendPort());
|
| - }
|
| -}
|
|
|