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

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

Issue 980593002: Recommit "Fix issues with Socket shutdown."" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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
Index: tests/standalone/io/issue_22636_test.dart
diff --git a/tests/standalone/io/issue_22636_test.dart b/tests/standalone/io/issue_22636_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f44b5767851547d287f17fcf840a4a2ffef6a084
--- /dev/null
+++ b/tests/standalone/io/issue_22636_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2015, 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.
+//
+// This test checks that setting writeEventsEnabled on a socket that is
+// closed for read (the other end has closed for write) does not send
+// an additional READ_CLOSED event.
+
+import "dart:io";
+import "dart:async";
+import "package:expect/expect.dart";
+
+final Duration delay = new Duration(seconds: 1);
Søren Gjesse 2015/03/04 13:28:15 Do you need to wait that long?
Bill Hesse 2015/03/04 14:36:41 No. now 100 ms.
+final List data = new List.generate(100, (i) => i % 20 + 65);
+RawServerSocket server;
+RawSocket client;
+bool serverReadClosedReceived = false;
+bool serverFirstWrite = true;
+
+void serverListen(RawSocket serverSide) {
+ void serveData(RawSocketEvent event) {
+ print("server $event");
Søren Gjesse 2015/03/04 13:28:15 Remove print?
Bill Hesse 2015/03/04 14:36:42 Done.
+ switch (event) {
+ case RawSocketEvent.WRITE:
+ serverSide.write(data);
+ if (serverFirstWrite) {
+ serverFirstWrite = false;
+ new Future.delayed(delay, () {
+ serverSide.writeEventsEnabled = true;
+ });
+ } else {
+ new Future.delayed(delay, () {
+ Expect.isTrue(serverReadClosedReceived);
+ serverSide.shutdown(SocketDirection.SEND);
+ server.close();
+ });
+ }
+ break;
+ case RawSocketEvent.READ_CLOSED:
+ Expect.isFalse(serverReadClosedReceived);
+ serverReadClosedReceived = true;
+ break;
+ }
+ }
+ serverSide.listen(serveData);
+}
+
+
+test() async {
+ server = await RawServerSocket.bind("localhost", 0);
Søren Gjesse 2015/03/04 13:28:15 We have been bitten by 'localhost' resolving to 12
Bill Hesse 2015/03/04 14:36:42 How well I remember. Changed to LOOPBACK_IP_V4. Do
+ server.listen(serverListen);
+ client = await RawSocket.connect("localhost", server.port);
+ client.shutdown(SocketDirection.SEND);
+ client.listen((RawSocketEvent event) {
+ if (event == RawSocketEvent.READ) {
+ client.read();
+ }
+ });
+}
+
+
+void main() {
+ test();
+}

Powered by Google App Engine
This is Rietveld 408576698