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

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

Issue 23886004: Update dart:io tests to use asyncStart/asyncEnd (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 // VMOptions= 5 // VMOptions=
6 // VMOptions=--short_socket_read 6 // VMOptions=--short_socket_read
7 // VMOptions=--short_socket_write 7 // VMOptions=--short_socket_write
8 // VMOptions=--short_socket_read --short_socket_write 8 // VMOptions=--short_socket_read --short_socket_write
9 9
10 import "package:expect/expect.dart";
11 import "dart:async"; 10 import "dart:async";
12 import "dart:io"; 11 import "dart:io";
13 import "dart:isolate"; 12
13 import "package:async_helper/async_helper.dart";
14 import "package:expect/expect.dart";
14 15
15 void testArguments() { 16 void testArguments() {
16 Expect.throws(() => RawServerSocket.bind("127.0.0.1", 65536)); 17 Expect.throws(() => RawServerSocket.bind("127.0.0.1", 65536));
17 Expect.throws(() => RawServerSocket.bind("127.0.0.1", -1)); 18 Expect.throws(() => RawServerSocket.bind("127.0.0.1", -1));
18 Expect.throws(() => RawServerSocket.bind("127.0.0.1", 0, backlog: -1)); 19 Expect.throws(() => RawServerSocket.bind("127.0.0.1", 0, backlog: -1));
19 } 20 }
20 21
21 void testSimpleBind() { 22 void testSimpleBind() {
22 ReceivePort port = new ReceivePort(); 23 asyncStart();
23 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((s) { 24 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((s) {
24 Expect.isTrue(s.port > 0); 25 Expect.isTrue(s.port > 0);
25 port.close(); 26 asyncEnd();
26 }); 27 });
27 } 28 }
28 29
29 void testInvalidBind() { 30 void testInvalidBind() {
30 int count = 0;
31 ReceivePort port = new ReceivePort();
32 port.receive((_, __) { count++; if (count == 3) port.close(); });
33
34 // Bind to a unknown DNS name. 31 // Bind to a unknown DNS name.
32 asyncStart();
35 RawServerSocket.bind("ko.faar.__hest__", 0) 33 RawServerSocket.bind("ko.faar.__hest__", 0)
36 .then((_) { Expect.fail("Failure expected"); } ) 34 .then((_) { Expect.fail("Failure expected"); } )
37 .catchError((error) { 35 .catchError((error) {
38 Expect.isTrue(error is SocketException); 36 Expect.isTrue(error is SocketException);
39 port.toSendPort().send(1); 37 asyncEnd();
40 }); 38 });
41 39
42 // Bind to an unavaliable IP-address. 40 // Bind to an unavaliable IP-address.
41 asyncStart();
43 RawServerSocket.bind("8.8.8.8", 0) 42 RawServerSocket.bind("8.8.8.8", 0)
44 .then((_) { Expect.fail("Failure expected"); } ) 43 .then((_) { Expect.fail("Failure expected"); } )
45 .catchError((error) { 44 .catchError((error) {
46 Expect.isTrue(error is SocketException); 45 Expect.isTrue(error is SocketException);
47 port.toSendPort().send(1); 46 asyncEnd();
48 }); 47 });
49 48
50 // Bind to a port already in use. 49 // Bind to a port already in use.
50 asyncStart();
51 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0) 51 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0)
52 .then((s) { 52 .then((s) {
53 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, s.port) 53 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, s.port)
54 .then((t) { 54 .then((t) {
55 Expect.fail("Multiple listens on same port"); 55 Expect.fail("Multiple listens on same port");
56 port.toSendPort().send(1); 56 port.toSendPort().send(1);
57 }) 57 })
58 .catchError((error) { 58 .catchError((error) {
59 Expect.isTrue(error is SocketException); 59 Expect.isTrue(error is SocketException);
60 port.toSendPort().send(1); 60 asyncEnd();
61 }); 61 });
62 }); 62 });
63 } 63 }
64 64
65 void testSimpleConnect() { 65 void testSimpleConnect() {
66 ReceivePort port = new ReceivePort(); 66 asyncStart();
67 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 67 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
68 server.listen((_) { }); 68 server.listen((_) { });
69 RawSocket.connect("127.0.0.1", server.port).then((_) { 69 RawSocket.connect("127.0.0.1", server.port).then((_) {
70 server.close(); 70 server.close();
71 port.close(); 71 asyncEnd();
72 }); 72 });
73 }); 73 });
74 } 74 }
75 75
76 void testCloseOneEnd(String toClose) { 76 void testCloseOneEnd(String toClose) {
77 ReceivePort port = new ReceivePort(); 77 asyncStart();
78 Completer serverDone = new Completer(); 78 Completer serverDone = new Completer();
79 Completer serverEndDone = new Completer(); 79 Completer serverEndDone = new Completer();
80 Completer clientEndDone = new Completer(); 80 Completer clientEndDone = new Completer();
81 Future.wait([serverDone.future, serverEndDone.future, clientEndDone.future]) 81 Future.wait([serverDone.future, serverEndDone.future, clientEndDone.future])
82 .then((_) { 82 .then((_) {
83 port.close(); 83 asyncEnd();
84 }); 84 });
85 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 85 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
86 server.listen((serverConnection) { 86 server.listen((serverConnection) {
87 serverConnection.listen((event) { 87 serverConnection.listen((event) {
88 if (toClose == "server" || event == RawSocketEvent.READ_CLOSED) { 88 if (toClose == "server" || event == RawSocketEvent.READ_CLOSED) {
89 serverConnection.shutdown(SocketDirection.SEND); 89 serverConnection.shutdown(SocketDirection.SEND);
90 } 90 }
91 }, 91 },
92 onDone: () { 92 onDone: () {
93 serverEndDone.complete(null); 93 serverEndDone.complete(null);
(...skipping 10 matching lines...) Expand all
104 }, 104 },
105 onDone: () { 105 onDone: () {
106 clientEndDone.complete(null); 106 clientEndDone.complete(null);
107 server.close(); 107 server.close();
108 }); 108 });
109 }); 109 });
110 }); 110 });
111 } 111 }
112 112
113 void testServerListenAfterConnect() { 113 void testServerListenAfterConnect() {
114 ReceivePort port = new ReceivePort(); 114 asyncStart();
115 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 115 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
116 Expect.isTrue(server.port > 0); 116 Expect.isTrue(server.port > 0);
117 RawSocket.connect("127.0.0.1", server.port).then((_) { 117 RawSocket.connect("127.0.0.1", server.port).then((_) {
118 server.listen((_) { 118 server.listen((_) {
119 server.close(); 119 server.close();
120 port.close(); 120 asyncEnd();
121 }); 121 });
122 }); 122 });
123 }); 123 });
124 } 124 }
125 125
126 void testSimpleReadWrite({bool dropReads}) { 126 void testSimpleReadWrite({bool dropReads}) {
127 // This test creates a server and a client connects. The client then 127 // This test creates a server and a client connects. The client then
128 // writes and the server echos. When the server has finished its 128 // writes and the server echos. When the server has finished its
129 // echo it half-closes. When the client gets the close event is 129 // echo it half-closes. When the client gets the close event is
130 // closes fully. 130 // closes fully.
131 ReceivePort port = new ReceivePort(); 131 asyncStart();
132 132
133 const messageSize = 1000; 133 const messageSize = 1000;
134 int serverReadCount = 0; 134 int serverReadCount = 0;
135 int clientReadCount = 0; 135 int clientReadCount = 0;
136 136
137 List<int> createTestData() { 137 List<int> createTestData() {
138 return new List<int>.generate(messageSize, (index) => index & 0xff); 138 return new List<int>.generate(messageSize, (index) => index & 0xff);
139 } 139 }
140 140
141 void verifyTestData(List<int> data) { 141 void verifyTestData(List<int> data) {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 break; 238 break;
239 case RawSocketEvent.CLOSED: 239 case RawSocketEvent.CLOSED:
240 Expect.isFalse(closedEventReceived); 240 Expect.isFalse(closedEventReceived);
241 closedEventReceived = true; 241 closedEventReceived = true;
242 break; 242 break;
243 default: throw "Unexpected event $event"; 243 default: throw "Unexpected event $event";
244 } 244 }
245 }, 245 },
246 onDone: () { 246 onDone: () {
247 Expect.isTrue(closedEventReceived); 247 Expect.isTrue(closedEventReceived);
248 port.close(); 248 asyncEnd();
249 }); 249 });
250 }); 250 });
251 }); 251 });
252 } 252 }
253 253
254 testPauseServerSocket() { 254 testPauseServerSocket() {
255 const int socketCount = 10; 255 const int socketCount = 10;
256 var acceptCount = 0; 256 var acceptCount = 0;
257 var resumed = false; 257 var resumed = false;
258 258
259 ReceivePort port = new ReceivePort(); 259 asyncStart();
260
261 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 260 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
262 Expect.isTrue(server.port > 0); 261 Expect.isTrue(server.port > 0);
263 var subscription = server.listen((_) { 262 var subscription = server.listen((_) {
264 Expect.isTrue(resumed); 263 Expect.isTrue(resumed);
265 if (++acceptCount == socketCount) { 264 if (++acceptCount == socketCount) {
266 server.close(); 265 server.close();
267 port.close(); 266 asyncEnd();
268 } 267 }
269 }); 268 });
270 269
271 // Pause the server socket subscription and resume it after having 270 // Pause the server socket subscription and resume it after having
272 // connected a number client sockets. Then connect more client 271 // connected a number client sockets. Then connect more client
273 // sockets. 272 // sockets.
274 subscription.pause(); 273 subscription.pause();
275 var connectCount = 0; 274 var connectCount = 0;
276 for (int i = 0; i < socketCount / 2; i++) { 275 for (int i = 0; i < socketCount / 2; i++) {
277 RawSocket.connect("127.0.0.1", server.port).then((_) { 276 RawSocket.connect("127.0.0.1", server.port).then((_) {
(...skipping 12 matching lines...) Expand all
290 void testPauseSocket() { 289 void testPauseSocket() {
291 const messageSize = 1000; 290 const messageSize = 1000;
292 const loopCount = 10; 291 const loopCount = 10;
293 Completer connected = new Completer(); 292 Completer connected = new Completer();
294 int pauseResumeCount = 0; 293 int pauseResumeCount = 0;
295 int bytesWritten = 0; 294 int bytesWritten = 0;
296 int bytesRead = 0; 295 int bytesRead = 0;
297 var writeSubscription; 296 var writeSubscription;
298 var readSubscription; 297 var readSubscription;
299 298
300 ReceivePort port = new ReceivePort(); 299 asyncStart();
301
302 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 300 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
303 Expect.isTrue(server.port > 0); 301 Expect.isTrue(server.port > 0);
304 server.listen((client) { 302 server.listen((client) {
305 bool closedEventReceived = false; 303 bool closedEventReceived = false;
306 List<int> data = new List<int>.filled(messageSize, 0); 304 List<int> data = new List<int>.filled(messageSize, 0);
307 writeSubscription = client.listen((event) { 305 writeSubscription = client.listen((event) {
308 switch (event) { 306 switch (event) {
309 case RawSocketEvent.READ: 307 case RawSocketEvent.READ:
310 throw "Unexpected read event"; 308 throw "Unexpected read event";
311 case RawSocketEvent.WRITE: 309 case RawSocketEvent.WRITE:
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 switch (event) { 342 switch (event) {
345 case RawSocketEvent.READ: 343 case RawSocketEvent.READ:
346 Expect.equals(0, bytesWritten); // Checks that writer is paused. 344 Expect.equals(0, bytesWritten); // Checks that writer is paused.
347 Expect.isTrue(socket.available() > 0); 345 Expect.isTrue(socket.available() > 0);
348 var buffer = socket.read(); 346 var buffer = socket.read();
349 bytesRead += buffer.length; 347 bytesRead += buffer.length;
350 // Ensure all data is read. When done pause and resume the sender 348 // Ensure all data is read. When done pause and resume the sender
351 if (bytesRead == messageSize) { 349 if (bytesRead == messageSize) {
352 if (++pauseResumeCount == loopCount) { 350 if (++pauseResumeCount == loopCount) {
353 socket.close(); 351 socket.close();
354 port.close(); 352 asyncEnd();
355 } else { 353 } else {
356 readSubscription.pause(); 354 readSubscription.pause();
357 } 355 }
358 // Always resume writer as it needs the read closed 356 // Always resume writer as it needs the read closed
359 // event when done. 357 // event when done.
360 bytesRead = 0; 358 bytesRead = 0;
361 writeSubscription.resume(); 359 writeSubscription.resume();
362 } 360 }
363 break; 361 break;
364 case RawSocketEvent.WRITE: 362 case RawSocketEvent.WRITE:
365 throw "Unexpected write event"; 363 throw "Unexpected write event";
366 case RawSocketEvent.READ_CLOSED: 364 case RawSocketEvent.READ_CLOSED:
367 throw "Unexpected read closed event"; 365 throw "Unexpected read closed event";
368 case RawSocketEvent.CLOSED: 366 case RawSocketEvent.CLOSED:
369 Expect.isFalse(closedEventReceived); 367 Expect.isFalse(closedEventReceived);
370 closedEventReceived = true; 368 closedEventReceived = true;
371 break; 369 break;
372 default: throw "Unexpected event $event"; 370 default: throw "Unexpected event $event";
373 } 371 }
374 }, 372 },
375 onDone: () => Expect.isTrue(closedEventReceived)); 373 onDone: () => Expect.isTrue(closedEventReceived));
376 readSubscription.pause(); 374 readSubscription.pause();
377 connected.complete(true); 375 connected.complete(true);
378 }); 376 });
379 }); 377 });
380 } 378 }
381 379
382 main() { 380 main() {
381 asyncStart();
383 testArguments(); 382 testArguments();
384 testSimpleBind(); 383 testSimpleBind();
385 testCloseOneEnd("client"); 384 testCloseOneEnd("client");
386 testCloseOneEnd("server"); 385 testCloseOneEnd("server");
387 testInvalidBind(); 386 testInvalidBind();
388 testSimpleConnect(); 387 testSimpleConnect();
389 testServerListenAfterConnect(); 388 testServerListenAfterConnect();
390 testSimpleReadWrite(dropReads: false); 389 testSimpleReadWrite(dropReads: false);
391 testSimpleReadWrite(dropReads: true); 390 testSimpleReadWrite(dropReads: true);
392 testPauseServerSocket(); 391 testPauseServerSocket();
393 testPauseSocket(); 392 testPauseSocket();
393 asyncEnd();
394 } 394 }
OLDNEW
« no previous file with comments | « tests/standalone/io/raw_server_socket_cancel_test.dart ('k') | tests/standalone/io/raw_socket_typed_data_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698