Chromium Code Reviews| 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(); |
| +} |