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

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

Issue 14864009: Keep track of when a socket has been destroyed (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 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"; 10 import "package:expect/expect.dart";
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 List<int> expected = createTestData(); 150 List<int> expected = createTestData();
151 for (int i = 0; i < messageSize; i++) { 151 for (int i = 0; i < messageSize; i++) {
152 Expect.equals(expected[i], data[i]); 152 Expect.equals(expected[i], data[i]);
153 } 153 }
154 } 154 }
155 155
156 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 156 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
157 server.listen((client) { 157 server.listen((client) {
158 int bytesRead = 0; 158 int bytesRead = 0;
159 int bytesWritten = 0; 159 int bytesWritten = 0;
160 bool closedEventReceived = false;
160 List<int> data = new List<int>(messageSize); 161 List<int> data = new List<int>(messageSize);
161 162
162 client.writeEventsEnabled = false; 163 client.writeEventsEnabled = false;
163 client.listen((event) { 164 client.listen((event) {
164 switch (event) { 165 switch (event) {
165 case RawSocketEvent.READ: 166 case RawSocketEvent.READ:
166 Expect.isTrue(bytesWritten == 0); 167 Expect.isTrue(bytesWritten == 0);
167 Expect.isTrue(client.available() > 0); 168 Expect.isTrue(client.available() > 0);
168 var buffer = client.read(); 169 var buffer = client.read();
169 data.setRange(bytesRead, bytesRead + buffer.length, buffer); 170 data.setRange(bytesRead, bytesRead + buffer.length, buffer);
(...skipping 10 matching lines...) Expand all
180 if (bytesWritten < data.length) { 181 if (bytesWritten < data.length) {
181 client.writeEventsEnabled = true; 182 client.writeEventsEnabled = true;
182 } 183 }
183 if (bytesWritten == data.length) { 184 if (bytesWritten == data.length) {
184 client.shutdown(SocketDirection.SEND); 185 client.shutdown(SocketDirection.SEND);
185 } 186 }
186 break; 187 break;
187 case RawSocketEvent.READ_CLOSED: 188 case RawSocketEvent.READ_CLOSED:
188 server.close(); 189 server.close();
189 break; 190 break;
191 case RawSocketEvent.CLOSED:
192 Expect.isFalse(closedEventReceived);
193 closedEventReceived = true;
194 break;
190 default: throw "Unexpected event $event"; 195 default: throw "Unexpected event $event";
191 } 196 }
192 }); 197 },
198 onDone: () => Expect.isTrue(closedEventReceived));
193 }); 199 });
194 200
195 RawSocket.connect("127.0.0.1", server.port).then((socket) { 201 RawSocket.connect("127.0.0.1", server.port).then((socket) {
196 int bytesRead = 0; 202 int bytesRead = 0;
197 int bytesWritten = 0; 203 int bytesWritten = 0;
204 bool closedEventReceived = false;
198 List<int> data = createTestData(); 205 List<int> data = createTestData();
199 206
200 socket.listen((event) { 207 socket.listen((event) {
201 switch (event) { 208 switch (event) {
202 case RawSocketEvent.READ: 209 case RawSocketEvent.READ:
203 Expect.isTrue(socket.available() > 0); 210 Expect.isTrue(socket.available() > 0);
204 var buffer = socket.read(); 211 var buffer = socket.read();
205 data.setRange(bytesRead, bytesRead + buffer.length, buffer); 212 data.setRange(bytesRead, bytesRead + buffer.length, buffer);
206 bytesRead += buffer.length; 213 bytesRead += buffer.length;
207 break; 214 break;
208 case RawSocketEvent.WRITE: 215 case RawSocketEvent.WRITE:
209 Expect.isTrue(bytesRead == 0); 216 Expect.isTrue(bytesRead == 0);
210 Expect.isFalse(socket.writeEventsEnabled); 217 Expect.isFalse(socket.writeEventsEnabled);
211 bytesWritten += socket.write( 218 bytesWritten += socket.write(
212 data, bytesWritten, data.length - bytesWritten); 219 data, bytesWritten, data.length - bytesWritten);
213 if (bytesWritten < data.length) { 220 if (bytesWritten < data.length) {
214 socket.writeEventsEnabled = true; 221 socket.writeEventsEnabled = true;
215 } else { 222 } else {
216 data = new List<int>(messageSize); 223 data = new List<int>(messageSize);
217 } 224 }
218 break; 225 break;
219 case RawSocketEvent.READ_CLOSED: 226 case RawSocketEvent.READ_CLOSED:
220 verifyTestData(data); 227 verifyTestData(data);
221 socket.close(); 228 socket.close();
222 break; 229 break;
230 case RawSocketEvent.CLOSED:
231 Expect.isFalse(closedEventReceived);
232 closedEventReceived = true;
233 break;
223 default: throw "Unexpected event $event"; 234 default: throw "Unexpected event $event";
224 } 235 }
225 }, 236 },
226 onDone: () => port.close()); 237 onDone: () {
238 Expect.isTrue(closedEventReceived);
239 port.close();
240 });
227 }); 241 });
228 }); 242 });
229 } 243 }
230 244
231 testPauseServerSocket() { 245 testPauseServerSocket() {
232 const int socketCount = 10; 246 const int socketCount = 10;
233 var acceptCount = 0; 247 var acceptCount = 0;
234 var resumed = false; 248 var resumed = false;
235 249
236 ReceivePort port = new ReceivePort(); 250 ReceivePort port = new ReceivePort();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 int bytesWritten = 0; 286 int bytesWritten = 0;
273 int bytesRead = 0; 287 int bytesRead = 0;
274 var writeSubscription; 288 var writeSubscription;
275 var readSubscription; 289 var readSubscription;
276 290
277 ReceivePort port = new ReceivePort(); 291 ReceivePort port = new ReceivePort();
278 292
279 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { 293 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) {
280 Expect.isTrue(server.port > 0); 294 Expect.isTrue(server.port > 0);
281 server.listen((client) { 295 server.listen((client) {
296 bool closedEventReceived = false;
282 List<int> data = new List<int>.filled(messageSize, 0); 297 List<int> data = new List<int>.filled(messageSize, 0);
283 writeSubscription = client.listen((event) { 298 writeSubscription = client.listen((event) {
284 switch (event) { 299 switch (event) {
285 case RawSocketEvent.READ: 300 case RawSocketEvent.READ:
286 throw "Unexpected read event"; 301 throw "Unexpected read event";
287 case RawSocketEvent.WRITE: 302 case RawSocketEvent.WRITE:
288 if (pauseResumeCount == loopCount) return; 303 if (pauseResumeCount == loopCount) return;
289 Expect.isFalse(client.writeEventsEnabled); 304 Expect.isFalse(client.writeEventsEnabled);
290 Expect.equals(0, bytesRead); // Checks that reader is paused. 305 Expect.equals(0, bytesRead); // Checks that reader is paused.
291 bytesWritten += client.write( 306 bytesWritten += client.write(
292 data, bytesWritten, data.length - bytesWritten); 307 data, bytesWritten, data.length - bytesWritten);
293 // Ensure all data is written. When done disable the write 308 // Ensure all data is written. When done disable the write
294 // event and resume the receiver. 309 // event and resume the receiver.
295 if (bytesWritten == data.length) { 310 if (bytesWritten == data.length) {
296 writeSubscription.pause(); 311 writeSubscription.pause();
297 bytesWritten = 0; 312 bytesWritten = 0;
298 connected.future.then((_) { readSubscription.resume(); }); 313 connected.future.then((_) { readSubscription.resume(); });
299 } 314 }
300 client.writeEventsEnabled = true; 315 client.writeEventsEnabled = true;
301 break; 316 break;
302 case RawSocketEvent.READ_CLOSED: 317 case RawSocketEvent.READ_CLOSED:
303 client.close(); 318 client.close();
304 server.close(); 319 server.close();
305 break; 320 break;
321 case RawSocketEvent.CLOSED:
322 Expect.isFalse(closedEventReceived);
323 closedEventReceived = true;
324 break;
306 default: throw "Unexpected event $event"; 325 default: throw "Unexpected event $event";
307 } 326 }
308 }); 327 },
328 onDone: () => Expect.isTrue(closedEventReceived));
309 }); 329 });
310 330
311 RawSocket.connect("127.0.0.1", server.port).then((socket) { 331 RawSocket.connect("127.0.0.1", server.port).then((socket) {
332 bool closedEventReceived = false;
312 socket.writeEventsEnabled = false; 333 socket.writeEventsEnabled = false;
313 readSubscription = socket.listen((event) { 334 readSubscription = socket.listen((event) {
314 switch (event) { 335 switch (event) {
315 case RawSocketEvent.READ: 336 case RawSocketEvent.READ:
316 Expect.equals(0, bytesWritten); // Checks that writer is paused. 337 Expect.equals(0, bytesWritten); // Checks that writer is paused.
317 Expect.isTrue(socket.available() > 0); 338 Expect.isTrue(socket.available() > 0);
318 var buffer = socket.read(); 339 var buffer = socket.read();
319 bytesRead += buffer.length; 340 bytesRead += buffer.length;
320 // Ensure all data is read. When done pause and resume the sender 341 // Ensure all data is read. When done pause and resume the sender
321 if (bytesRead == messageSize) { 342 if (bytesRead == messageSize) {
322 if (++pauseResumeCount == loopCount) { 343 if (++pauseResumeCount == loopCount) {
323 socket.close(); 344 socket.close();
324 port.close(); 345 port.close();
325 } else { 346 } else {
326 readSubscription.pause(); 347 readSubscription.pause();
327 } 348 }
328 // Always resume writer as it needs the read closed 349 // Always resume writer as it needs the read closed
329 // event when done. 350 // event when done.
330 bytesRead = 0; 351 bytesRead = 0;
331 writeSubscription.resume(); 352 writeSubscription.resume();
332 } 353 }
333 break; 354 break;
334 case RawSocketEvent.WRITE: 355 case RawSocketEvent.WRITE:
335 throw "Unexpected write event"; 356 throw "Unexpected write event";
336 case RawSocketEvent.READ_CLOSED: 357 case RawSocketEvent.READ_CLOSED:
337 throw "Unexpected close event"; 358 throw "Unexpected read closed event";
359 case RawSocketEvent.CLOSED:
360 Expect.isFalse(closedEventReceived);
361 closedEventReceived = true;
362 break;
338 default: throw "Unexpected event $event"; 363 default: throw "Unexpected event $event";
339 } 364 }
340 }); 365 },
366 onDone: () => Expect.isTrue(closedEventReceived));
341 readSubscription.pause(); 367 readSubscription.pause();
342 connected.complete(true); 368 connected.complete(true);
343 }); 369 });
344 }); 370 });
345 } 371 }
346 372
347 main() { 373 main() {
348 testArguments(); 374 testArguments();
349 testSimpleBind(); 375 testSimpleBind();
350 testCloseOneEnd("client"); 376 testCloseOneEnd("client");
351 testCloseOneEnd("server"); 377 testCloseOneEnd("server");
352 testInvalidBind(); 378 testInvalidBind();
353 testSimpleConnect(); 379 testSimpleConnect();
354 testServerListenAfterConnect(); 380 testServerListenAfterConnect();
355 testSimpleReadWrite(); 381 testSimpleReadWrite();
356 testPauseServerSocket(); 382 testPauseServerSocket();
357 testPauseSocket(); 383 testPauseSocket();
358 } 384 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698