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

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

Issue 12328037: Add missing files from previous commit (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4 //
5 // VMOptions=
6 // VMOptions=--short_socket_read
7 // VMOptions=--short_socket_write
8 // VMOptions=--short_socket_read --short_socket_write
9
10 import "dart:async";
11 import "dart:io";
12 import "dart:isolate";
13
14 const SERVER_ADDRESS = "127.0.0.1";
15 const HOST_NAME = "localhost";
16 const CERTIFICATE = "localhost_cert";
17
18 void testCloseOneEnd(String toClose) {
19 ReceivePort port = new ReceivePort();
20 Completer serverDone = new Completer();
21 Completer serverEndDone = new Completer();
22 Completer clientEndDone = new Completer();
23 Future.wait([serverDone.future, serverEndDone.future, clientEndDone.future])
24 .then((_) {
25 port.close();
26 });
27 SecureServerSocket.bind(SERVER_ADDRESS, 0, 5, CERTIFICATE).then((server) {
28 server.listen((serverConnection) {
29 serverConnection.listen(
30 (data) {
31 Expect.fail("No data should be received by server");
32 },
33 onDone: () {
34 serverConnection.close();
35 serverEndDone.complete(null);
36 server.close();
37 });
38 if (toClose == "server") {
39 serverConnection.close();
40 }
41 },
42 onDone: () {
43 serverDone.complete(null);
44 });
45 SecureSocket.connect(HOST_NAME, server.port).then((clientConnection) {
46 clientConnection.listen(
47 (data) {
48 Expect.fail("No data should be received by client");
49 },
50 onDone: () {
51 clientConnection.close();
52 clientEndDone.complete(null);
53 });
54 if (toClose == "client") {
55 clientConnection.close();
56 }
57 });
58 });
59 }
60
61 void testCloseBothEnds() {
62 ReceivePort port = new ReceivePort();
63 SecureServerSocket.bind(SERVER_ADDRESS, 0, 5, CERTIFICATE).then((server) {
64 var clientEndFuture = SecureSocket.connect(HOST_NAME, server.port);
65 server.listen((serverEnd) {
66 clientEndFuture.then((clientEnd) {
67 clientEnd.destroy();
68 serverEnd.destroy();
69 server.close();
70 port.close();
71 });
72 });
73 });
74 }
75
76 testPauseServerSocket() {
77 const int socketCount = 10;
78 var acceptCount = 0;
79 var resumed = false;
80
81 ReceivePort port = new ReceivePort();
82
83 SecureServerSocket.bind(SERVER_ADDRESS,
84 0,
85 2 * socketCount,
86 CERTIFICATE).then((server) {
87 Expect.isTrue(server.port > 0);
88 var subscription;
89 subscription = server.listen((connection) {
90 Expect.isTrue(resumed);
91 connection.close();
92 if (++acceptCount == 2 * socketCount) {
93 server.close();
94 port.close();
95 }
96 });
97
98 // Pause the server socket subscription and resume it after having
99 // connected a number client sockets. Then connect more client
100 // sockets.
101 subscription.pause();
102 var connectCount = 0;
103 for (int i = 0; i < socketCount; i++) {
104 SecureSocket.connect(HOST_NAME, server.port).then((connection) {
105 connection.close();
106 });
107 }
108 new Timer(500, (_) {
109 subscription.resume();
110 resumed = true;
111 for (int i = 0; i < socketCount; i++) {
112 SecureSocket.connect(HOST_NAME, server.port).then((connection) {
113 connection.close();
114 });
115 }
116 });
117 });
118 }
119
120
121 testCloseServer() {
122 const int socketCount = 3;
123 var endCount = 0;
124 ReceivePort port = new ReceivePort();
125 List ends = [];
126
127 SecureServerSocket.bind(SERVER_ADDRESS, 0, 15, CERTIFICATE).then((server) {
128 Expect.isTrue(server.port > 0);
129 void checkDone() {
130 if (ends.length < 2 * socketCount) return;
131 for (var end in ends) {
132 end.destroy();
133 }
134 server.close();
135 port.close();
136 }
137
138 server.listen((connection) {
139 ends.add(connection);
140 checkDone();
141 });
142
143 for (int i = 0; i < socketCount; i++) {
144 SecureSocket.connect(HOST_NAME, server.port).then((connection) {
145 ends.add(connection);
146 checkDone();
147 });
148 }
149 });
150 }
151
152
153 main() {
154 Path scriptDir = new Path(new Options().script).directoryPath;
155 Path certificateDatabase = scriptDir.append('pkcert');
156 SecureSocket.initialize(database: certificateDatabase.toNativePath(),
157 password: 'dartdart',
158 useBuiltinRoots: false);
159
160 testCloseOneEnd("client");
161 testCloseOneEnd("server");
162 testCloseBothEnds();
163 testPauseServerSocket();
164 testCloseServer();
165 // TODO(whesse): Add testPauseSocket from raw_socket_test.dart.
166 // TODO(whesse): Add testCancelResubscribeSocket from raw_socket_test.dart.
167 }
OLDNEW
« no previous file with comments | « tests/standalone/io/secure_multiple_client_server_test.dart ('k') | tests/standalone/io/secure_server_socket_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698