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

Side by Side Diff: tests/standalone/io/socket_many_connections_test.dart

Issue 27215002: Very simple version of Isolates. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/standalone/io/socket_close_test.dart ('k') | tests/standalone/io/testing_server.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // 4 //
5 // Test creating a large number of socket connections. 5 // Test creating a large number of socket connections.
6 library ServerTest; 6 library ServerTest;
7 7
8 import "package:expect/expect.dart"; 8 import "package:expect/expect.dart";
9 import "package:async_helper/async_helper.dart";
9 import "dart:async"; 10 import "dart:async";
10 import "dart:io"; 11 import "dart:io";
11 import "dart:isolate"; 12 import "dart:isolate";
12 part "testing_server.dart"; 13 part "testing_server.dart";
13 14
14 const CONNECTIONS = 200; 15 const CONNECTIONS = 200;
15 16
16 class SocketManyConnectionsTest { 17 class SocketManyConnectionsTest {
17 18
18 SocketManyConnectionsTest.start() 19 SocketManyConnectionsTest.start()
19 : _receivePort = new ReceivePort(), 20 : _connections = 0,
20 _sendPort = null,
21 _connections = 0,
22 _sockets = new List<Socket>(CONNECTIONS) { 21 _sockets = new List<Socket>(CONNECTIONS) {
23 _sendPort = spawnFunction(startTestServer);
24 initialize(); 22 initialize();
25 } 23 }
26 24
27 void run() { 25 void run() {
28 26
29 void connectHandler() { 27 void connectHandler() {
30 _connections++; 28 _connections++;
31 if (_connections == CONNECTIONS) { 29 if (_connections == CONNECTIONS) {
32 for (int i = 0; i < CONNECTIONS; i++) { 30 for (int i = 0; i < CONNECTIONS; i++) {
33 _sockets[i].destroy(); 31 _sockets[i].destroy();
34 } 32 }
35 close(); 33 close();
36 } 34 }
37 } 35 }
38 36
39 for (int i = 0; i < CONNECTIONS; i++) { 37 for (int i = 0; i < CONNECTIONS; i++) {
40 Socket.connect(TestingServer.HOST, _port).then((socket) { 38 Socket.connect(TestingServer.HOST, _port).then((socket) {
41 Expect.isNotNull(socket); 39 Expect.isNotNull(socket);
42 _sockets[i] = socket; 40 _sockets[i] = socket;
43 connectHandler(); 41 connectHandler();
44 }); 42 });
45 } 43 }
46 } 44 }
47 45
48 void initialize() { 46 void initialize() {
49 _receivePort.receive((var message, SendPort replyTo) { 47 var receivePort = new ReceivePort();
50 _port = message; 48 var remote = Isolate.spawn(startTestServer, receivePort.sendPort);
49 receivePort.first.then((msg) {
50 this._port = msg[0];
51 this._closeSendPort = msg[1];
51 run(); 52 run();
52 }); 53 });
53 _sendPort.send(TestingServer.INIT, _receivePort.toSendPort());
54 } 54 }
55 55
56 void close() { 56 void close() {
57 _sendPort.send(TestingServer.SHUTDOWN, _receivePort.toSendPort()); 57 _closeSendPort.send(null);
58 _receivePort.close(); 58 asyncEnd();
59 } 59 }
60 60
61 int _port; 61 int _port;
62 ReceivePort _receivePort; 62 SendPort _closeSendPort;
63 SendPort _sendPort;
64 List<Socket> _sockets; 63 List<Socket> _sockets;
65 int _connections; 64 int _connections;
66 } 65 }
67 66
68 67
69 void startTestServer() { 68 void startTestServer(SendPort replyPort) {
70 var server = new TestServer(); 69 var server = new TestServer();
71 port.receive(server.dispatch); 70 server.init().then((port) {
71 replyPort.send([port, server.closeSendPort]);
72 });
72 } 73 }
73 74
74 class TestServer extends TestingServer { 75 class TestServer extends TestingServer {
75 76
76 void onConnection(Socket connection) { 77 void onConnection(Socket connection) {
77 Socket _client; 78 Socket _client;
78 79
79 void closeHandler() { 80 void closeHandler() {
80 connection.close(); 81 connection.close();
81 } 82 }
(...skipping 10 matching lines...) Expand all
92 connection.listen( 93 connection.listen(
93 (data) {}, 94 (data) {},
94 onDone: closeHandler, 95 onDone: closeHandler,
95 onError: errorHandler); 96 onError: errorHandler);
96 } 97 }
97 98
98 int _connections = 0; 99 int _connections = 0;
99 } 100 }
100 101
101 main() { 102 main() {
103 asyncStart();
102 SocketManyConnectionsTest test = new SocketManyConnectionsTest.start(); 104 SocketManyConnectionsTest test = new SocketManyConnectionsTest.start();
103 } 105 }
OLDNEW
« no previous file with comments | « tests/standalone/io/socket_close_test.dart ('k') | tests/standalone/io/testing_server.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698