OLD | NEW |
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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 Expect.isTrue(server.port > 0); | 121 Expect.isTrue(server.port > 0); |
122 RawSocket.connect("127.0.0.1", server.port).then((_) { | 122 RawSocket.connect("127.0.0.1", server.port).then((_) { |
123 server.listen((_) { | 123 server.listen((_) { |
124 server.close(); | 124 server.close(); |
125 port.close(); | 125 port.close(); |
126 }); | 126 }); |
127 }); | 127 }); |
128 }); | 128 }); |
129 } | 129 } |
130 | 130 |
131 void testSimpleReadWrite() { | 131 void testSimpleReadWrite({bool dropReads}) { |
132 // This test creates a server and a client connects. The client then | 132 // This test creates a server and a client connects. The client then |
133 // writes and the server echos. When the server has finished its | 133 // writes and the server echos. When the server has finished its |
134 // echo it half-closes. When the client gets the close event is | 134 // echo it half-closes. When the client gets the close event is |
135 // closes fully. | 135 // closes fully. |
136 ReceivePort port = new ReceivePort(); | 136 ReceivePort port = new ReceivePort(); |
137 | 137 |
138 const messageSize = 1000; | 138 const messageSize = 1000; |
| 139 int serverReadCount = 0; |
| 140 int clientReadCount = 0; |
139 | 141 |
140 List<int> createTestData() { | 142 List<int> createTestData() { |
141 return new List<int>.generate(messageSize, (index) => index & 0xff); | 143 return new List<int>.generate(messageSize, (index) => index & 0xff); |
142 } | 144 } |
143 | 145 |
144 void verifyTestData(List<int> data) { | 146 void verifyTestData(List<int> data) { |
145 Expect.equals(messageSize, data.length); | 147 Expect.equals(messageSize, data.length); |
146 List<int> expected = createTestData(); | 148 List<int> expected = createTestData(); |
147 for (int i = 0; i < messageSize; i++) { | 149 for (int i = 0; i < messageSize; i++) { |
148 Expect.equals(expected[i], data[i]); | 150 Expect.equals(expected[i], data[i]); |
149 } | 151 } |
150 } | 152 } |
151 | 153 |
152 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { | 154 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { |
153 server.listen((client) { | 155 server.listen((client) { |
154 int bytesRead = 0; | 156 int bytesRead = 0; |
155 int bytesWritten = 0; | 157 int bytesWritten = 0; |
156 List<int> data = new List<int>(messageSize); | 158 List<int> data = new List<int>(messageSize); |
157 | 159 |
158 client.writeEventsEnabled = false; | 160 client.writeEventsEnabled = false; |
159 client.listen((event) { | 161 client.listen((event) { |
160 switch (event) { | 162 switch (event) { |
161 case RawSocketEvent.READ: | 163 case RawSocketEvent.READ: |
| 164 if (dropReads) { |
| 165 if (serverReadCount != 10) { |
| 166 serverReadCount++; |
| 167 break; |
| 168 } else { |
| 169 serverReadCount = 0; |
| 170 } |
| 171 } |
162 Expect.isTrue(bytesWritten == 0); | 172 Expect.isTrue(bytesWritten == 0); |
163 Expect.isTrue(client.available() > 0); | 173 Expect.isTrue(client.available() > 0); |
164 var buffer = client.read(); | 174 var buffer = client.read(200); |
165 data.setRange(bytesRead, bytesRead + buffer.length, buffer); | 175 data.setRange(bytesRead, bytesRead + buffer.length, buffer); |
166 bytesRead += buffer.length; | 176 bytesRead += buffer.length; |
167 if (bytesRead == data.length) { | 177 if (bytesRead == data.length) { |
168 verifyTestData(data); | 178 verifyTestData(data); |
169 client.writeEventsEnabled = true; | 179 client.writeEventsEnabled = true; |
170 } | 180 } |
171 break; | 181 break; |
172 case RawSocketEvent.WRITE: | 182 case RawSocketEvent.WRITE: |
173 Expect.isFalse(client.writeEventsEnabled); | 183 Expect.isFalse(client.writeEventsEnabled); |
174 bytesWritten += client.write( | 184 bytesWritten += client.write( |
(...skipping 15 matching lines...) Expand all Loading... |
190 | 200 |
191 RawSocket.connect("127.0.0.1", server.port).then((socket) { | 201 RawSocket.connect("127.0.0.1", server.port).then((socket) { |
192 int bytesRead = 0; | 202 int bytesRead = 0; |
193 int bytesWritten = 0; | 203 int bytesWritten = 0; |
194 List<int> data = createTestData(); | 204 List<int> data = createTestData(); |
195 | 205 |
196 socket.listen((event) { | 206 socket.listen((event) { |
197 switch (event) { | 207 switch (event) { |
198 case RawSocketEvent.READ: | 208 case RawSocketEvent.READ: |
199 Expect.isTrue(socket.available() > 0); | 209 Expect.isTrue(socket.available() > 0); |
| 210 if (dropReads) { |
| 211 if (clientReadCount != 10) { |
| 212 clientReadCount++; |
| 213 break; |
| 214 } else { |
| 215 clientReadCount = 0; |
| 216 } |
| 217 } |
200 var buffer = socket.read(); | 218 var buffer = socket.read(); |
201 data.setRange(bytesRead, bytesRead + buffer.length, buffer); | 219 data.setRange(bytesRead, bytesRead + buffer.length, buffer); |
202 bytesRead += buffer.length; | 220 bytesRead += buffer.length; |
203 break; | 221 break; |
204 case RawSocketEvent.WRITE: | 222 case RawSocketEvent.WRITE: |
205 Expect.isTrue(bytesRead == 0); | 223 Expect.isTrue(bytesRead == 0); |
206 Expect.isFalse(socket.writeEventsEnabled); | 224 Expect.isFalse(socket.writeEventsEnabled); |
207 bytesWritten += socket.write( | 225 bytesWritten += socket.write( |
208 data, bytesWritten, data.length - bytesWritten); | 226 data, bytesWritten, data.length - bytesWritten); |
209 if (bytesWritten < data.length) { | 227 if (bytesWritten < data.length) { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 } | 359 } |
342 | 360 |
343 main() { | 361 main() { |
344 testArguments(); | 362 testArguments(); |
345 testSimpleBind(); | 363 testSimpleBind(); |
346 testCloseOneEnd("client"); | 364 testCloseOneEnd("client"); |
347 testCloseOneEnd("server"); | 365 testCloseOneEnd("server"); |
348 testInvalidBind(); | 366 testInvalidBind(); |
349 testSimpleConnect(); | 367 testSimpleConnect(); |
350 testServerListenAfterConnect(); | 368 testServerListenAfterConnect(); |
351 testSimpleReadWrite(); | 369 testSimpleReadWrite(dropReads: false); |
| 370 testSimpleReadWrite(dropReads: true); |
352 testPauseServerSocket(); | 371 testPauseServerSocket(); |
353 testPauseSocket(); | 372 testPauseSocket(); |
354 } | 373 } |
OLD | NEW |