Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1876)

Unified Diff: tests/standalone/io/socket_stream_close_test.dart

Issue 12316036: Merge IO v2 branch to bleeding edge (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased to r18818 Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/standalone/io/socket_port_test.dart ('k') | tests/standalone/io/stream_pipe_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/standalone/io/socket_stream_close_test.dart
diff --git a/tests/standalone/io/socket_stream_close_test.dart b/tests/standalone/io/socket_stream_close_test.dart
deleted file mode 100644
index 4082c81ac8427e98f16a1bf09b93dd3ad46d2c0e..0000000000000000000000000000000000000000
--- a/tests/standalone/io/socket_stream_close_test.dart
+++ /dev/null
@@ -1,418 +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:async';
-import 'dart:io';
-import 'dart:isolate';
-
-const SERVERSHUTDOWN = -1;
-const 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 {
- _sendPort = spawnFunction(startSocketCloseServer);
- initialize();
- }
-
- void proceed() {
- if (_iterations < ITERATIONS) {
- Timer.run(sendData);
- } else {
- shutdown();
- }
- }
-
- void sendData() {
-
- void dataHandler() {
- switch (_mode) {
- case 0:
- case 1:
- case 2:
- Expect.fail("No data expected");
- break;
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- var read = _socket.inputStream.read();
- _readBytes += read.length;
- if ((_readBytes % 5) == 0) {
- _dataEvents++;
- }
- break;
- default:
- Expect.fail("Unknown test mode");
- }
- }
-
- void closeHandler() {
- _closeEvents++;
- switch (_mode) {
- case 0:
- case 1:
- break;
- case 2:
- case 3:
- case 4:
- _socket.outputStream.close();
- proceed();
- break;
- case 5:
- proceed();
- break;
- case 6:
- _socket.outputStream.close();
- proceed();
- break;
- case 7:
- case 8:
- proceed();
- break;
- default:
- Expect.fail("Unknown test mode");
- }
- }
-
- void errorHandler(Exception e) {
- _errorEvents++;
- _socket.close();
- }
-
- void connectHandler() {
- _socket.inputStream.onData = dataHandler;
- _socket.inputStream.onClosed = closeHandler;
- _socket.onError = errorHandler;
-
- _iterations++;
- switch (_mode) {
- case 0:
- _socket.inputStream.close();
- proceed();
- break;
- case 1:
- _socket.outputStream.write("Hello".charCodes);
- _socket.outputStream.onNoPendingWrites = () {
- _socket.inputStream.close();
- proceed();
- };
- break;
- case 2:
- case 3:
- case 4:
- _socket.outputStream.write("Hello".charCodes);
- break;
- case 5:
- _socket.outputStream.write("Hello".charCodes);
- _socket.outputStream.onNoPendingWrites = () {
- _socket.outputStream.close();
- };
- break;
- case 6:
- _socket.outputStream.write("Hello".charCodes);
- break;
- case 7:
- case 8:
- _socket.outputStream.write("Hello".charCodes);
- _socket.outputStream.onNoPendingWrites = () {
- _socket.outputStream.close();
- };
- break;
- default:
- Expect.fail("Unknown test mode");
- }
- }
-
- _socket = new Socket(SocketCloseServer.HOST, _port);
- Expect.equals(true, _socket != null);
- _socket.onConnect = connectHandler;
- }
-
- void initialize() {
- _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:
- Expect.equals(ITERATIONS, _dataEvents);
- Expect.equals(ITERATIONS, _closeEvents);
- break;
- case 4:
- Expect.equals(ITERATIONS, _closeEvents);
- break;
- case 5:
- case 6:
- case 7:
- case 8:
- 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;
-}
-
-
-void startSocketCloseServer() {
- var server = new SocketCloseServer();
- port.receive(server.dispatch);
-}
-
-
-class SocketCloseServer {
-
- static const HOST = "127.0.0.1";
-
- SocketCloseServer() : super() {}
-
- void connectionHandler(ConnectionData data) {
- var connection = data.connection;
-
- void readBytes(whenFiveBytes) {
- var read = connection.inputStream.read();
- data.readBytes += read.length;
- if (data.readBytes == 5) {
- whenFiveBytes();
- }
- }
-
- void dataHandler() {
- switch (_mode) {
- case 0:
- Expect.fail("No data expected");
- break;
- case 1:
- readBytes(() {
- _dataEvents++;
- });
- break;
- case 2:
- readBytes(() {
- _dataEvents++;
- connection.inputStream.close();
- });
- break;
- case 3:
- readBytes(() {
- _dataEvents++;
- connection.outputStream.write("Hello".charCodes);
- connection.outputStream.onNoPendingWrites = () {
- connection.inputStream.close();
- };
- });
- break;
- case 4:
- readBytes(() {
- _dataEvents++;
- connection.outputStream.write("Hello".charCodes);
- connection.inputStream.close();
- });
- break;
- case 5:
- readBytes(() {
- _dataEvents++;
- connection.outputStream.write("Hello".charCodes);
- });
- break;
- case 6:
- case 7:
- readBytes(() {
- _dataEvents++;
- connection.outputStream.write("Hello".charCodes);
- connection.outputStream.onNoPendingWrites = () {
- connection.outputStream.close();
- };
- });
- break;
- case 8:
- readBytes(() {
- _dataEvents++;
- connection.outputStream.write("Hello".charCodes);
- connection.outputStream.close();
- });
- break;
- default:
- Expect.fail("Unknown test mode");
- }
- }
-
- void closeHandler() {
- _closeEvents++;
- connection.outputStream.close();
- }
-
- void errorHandler(Exception e) {
- Expect.fail("Socket error $e");
- }
-
- _iterations++;
-
- connection.inputStream.onData = dataHandler;
- connection.inputStream.onClosed = closeHandler;
- connection.onError = errorHandler;
- }
-
- void errorHandlerServer(Exception e) {
- Expect.fail("Server socket error");
- }
-
- waitForResult() {
- // 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 || _mode == 4))) {
- 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:
- case 4:
- Expect.equals(ITERATIONS, _dataEvents);
- Expect.equals(0, _closeEvents);
- break;
- case 5:
- case 6:
- case 7:
- case 8:
- Expect.equals(ITERATIONS, _dataEvents);
- Expect.equals(ITERATIONS, _closeEvents);
- break;
- default:
- Expect.fail("Unknown test mode");
- }
- Expect.equals(0, _errorEvents);
- _server.close();
- port.close();
- _donePort.send(null);
- } else {
- new Timer(new Duration(milliseconds: 100), waitForResult);
- }
- }
-
- void dispatch(message, 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 {
- Timer.run(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. Server responds and closes without waiting for everything
- // being sent.
- // 5: Client sends and half-closes. Server responds and closes.
- // 6: Client sends. Server responds and half closes.
- // 7: Client sends and half-closes. Server responds and half closes.
- // 8: Client sends and half-closes. Server responds and half closes without
- // explicitly waiting for everything being sent.
- var tests = 9;
- 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());
- }
-}
« no previous file with comments | « tests/standalone/io/socket_port_test.dart ('k') | tests/standalone/io/stream_pipe_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698