| 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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 List<int> expected = createTestData(); | 143 List<int> expected = createTestData(); |
| 144 for (int i = 0; i < messageSize; i++) { | 144 for (int i = 0; i < messageSize; i++) { |
| 145 Expect.equals(expected[i], data[i]); | 145 Expect.equals(expected[i], data[i]); |
| 146 } | 146 } |
| 147 } | 147 } |
| 148 | 148 |
| 149 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { | 149 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { |
| 150 server.listen((client) { | 150 server.listen((client) { |
| 151 int bytesRead = 0; | 151 int bytesRead = 0; |
| 152 int bytesWritten = 0; | 152 int bytesWritten = 0; |
| 153 bool closedEventReceived = false; |
| 153 List<int> data = new List<int>(messageSize); | 154 List<int> data = new List<int>(messageSize); |
| 154 | 155 |
| 155 client.writeEventsEnabled = false; | 156 client.writeEventsEnabled = false; |
| 156 client.listen((event) { | 157 client.listen((event) { |
| 157 switch (event) { | 158 switch (event) { |
| 158 case RawSocketEvent.READ: | 159 case RawSocketEvent.READ: |
| 159 if (dropReads) { | 160 if (dropReads) { |
| 160 if (serverReadCount != 10) { | 161 if (serverReadCount != 10) { |
| 161 serverReadCount++; | 162 serverReadCount++; |
| 162 break; | 163 break; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 181 if (bytesWritten < data.length) { | 182 if (bytesWritten < data.length) { |
| 182 client.writeEventsEnabled = true; | 183 client.writeEventsEnabled = true; |
| 183 } | 184 } |
| 184 if (bytesWritten == data.length) { | 185 if (bytesWritten == data.length) { |
| 185 client.shutdown(SocketDirection.SEND); | 186 client.shutdown(SocketDirection.SEND); |
| 186 } | 187 } |
| 187 break; | 188 break; |
| 188 case RawSocketEvent.READ_CLOSED: | 189 case RawSocketEvent.READ_CLOSED: |
| 189 server.close(); | 190 server.close(); |
| 190 break; | 191 break; |
| 192 case RawSocketEvent.CLOSED: |
| 193 Expect.isFalse(closedEventReceived); |
| 194 closedEventReceived = true; |
| 195 break; |
| 191 default: throw "Unexpected event $event"; | 196 default: throw "Unexpected event $event"; |
| 192 } | 197 } |
| 193 }); | 198 }, |
| 199 onDone: () => Expect.isTrue(closedEventReceived)); |
| 194 }); | 200 }); |
| 195 | 201 |
| 196 RawSocket.connect("127.0.0.1", server.port).then((socket) { | 202 RawSocket.connect("127.0.0.1", server.port).then((socket) { |
| 197 int bytesRead = 0; | 203 int bytesRead = 0; |
| 198 int bytesWritten = 0; | 204 int bytesWritten = 0; |
| 205 bool closedEventReceived = false; |
| 199 List<int> data = createTestData(); | 206 List<int> data = createTestData(); |
| 200 | 207 |
| 201 socket.listen((event) { | 208 socket.listen((event) { |
| 202 switch (event) { | 209 switch (event) { |
| 203 case RawSocketEvent.READ: | 210 case RawSocketEvent.READ: |
| 204 Expect.isTrue(socket.available() > 0); | 211 Expect.isTrue(socket.available() > 0); |
| 205 if (dropReads) { | 212 if (dropReads) { |
| 206 if (clientReadCount != 10) { | 213 if (clientReadCount != 10) { |
| 207 clientReadCount++; | 214 clientReadCount++; |
| 208 break; | 215 break; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 222 if (bytesWritten < data.length) { | 229 if (bytesWritten < data.length) { |
| 223 socket.writeEventsEnabled = true; | 230 socket.writeEventsEnabled = true; |
| 224 } else { | 231 } else { |
| 225 data = new List<int>(messageSize); | 232 data = new List<int>(messageSize); |
| 226 } | 233 } |
| 227 break; | 234 break; |
| 228 case RawSocketEvent.READ_CLOSED: | 235 case RawSocketEvent.READ_CLOSED: |
| 229 verifyTestData(data); | 236 verifyTestData(data); |
| 230 socket.close(); | 237 socket.close(); |
| 231 break; | 238 break; |
| 239 case RawSocketEvent.CLOSED: |
| 240 Expect.isFalse(closedEventReceived); |
| 241 closedEventReceived = true; |
| 242 break; |
| 232 default: throw "Unexpected event $event"; | 243 default: throw "Unexpected event $event"; |
| 233 } | 244 } |
| 234 }, | 245 }, |
| 235 onDone: () => port.close()); | 246 onDone: () { |
| 247 Expect.isTrue(closedEventReceived); |
| 248 port.close(); |
| 249 }); |
| 236 }); | 250 }); |
| 237 }); | 251 }); |
| 238 } | 252 } |
| 239 | 253 |
| 240 testPauseServerSocket() { | 254 testPauseServerSocket() { |
| 241 const int socketCount = 10; | 255 const int socketCount = 10; |
| 242 var acceptCount = 0; | 256 var acceptCount = 0; |
| 243 var resumed = false; | 257 var resumed = false; |
| 244 | 258 |
| 245 ReceivePort port = new ReceivePort(); | 259 ReceivePort port = new ReceivePort(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 int bytesWritten = 0; | 295 int bytesWritten = 0; |
| 282 int bytesRead = 0; | 296 int bytesRead = 0; |
| 283 var writeSubscription; | 297 var writeSubscription; |
| 284 var readSubscription; | 298 var readSubscription; |
| 285 | 299 |
| 286 ReceivePort port = new ReceivePort(); | 300 ReceivePort port = new ReceivePort(); |
| 287 | 301 |
| 288 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { | 302 RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0).then((server) { |
| 289 Expect.isTrue(server.port > 0); | 303 Expect.isTrue(server.port > 0); |
| 290 server.listen((client) { | 304 server.listen((client) { |
| 305 bool closedEventReceived = false; |
| 291 List<int> data = new List<int>.filled(messageSize, 0); | 306 List<int> data = new List<int>.filled(messageSize, 0); |
| 292 writeSubscription = client.listen((event) { | 307 writeSubscription = client.listen((event) { |
| 293 switch (event) { | 308 switch (event) { |
| 294 case RawSocketEvent.READ: | 309 case RawSocketEvent.READ: |
| 295 throw "Unexpected read event"; | 310 throw "Unexpected read event"; |
| 296 case RawSocketEvent.WRITE: | 311 case RawSocketEvent.WRITE: |
| 297 if (pauseResumeCount == loopCount) return; | 312 if (pauseResumeCount == loopCount) return; |
| 298 Expect.isFalse(client.writeEventsEnabled); | 313 Expect.isFalse(client.writeEventsEnabled); |
| 299 Expect.equals(0, bytesRead); // Checks that reader is paused. | 314 Expect.equals(0, bytesRead); // Checks that reader is paused. |
| 300 bytesWritten += client.write( | 315 bytesWritten += client.write( |
| 301 data, bytesWritten, data.length - bytesWritten); | 316 data, bytesWritten, data.length - bytesWritten); |
| 302 // Ensure all data is written. When done disable the write | 317 // Ensure all data is written. When done disable the write |
| 303 // event and resume the receiver. | 318 // event and resume the receiver. |
| 304 if (bytesWritten == data.length) { | 319 if (bytesWritten == data.length) { |
| 305 writeSubscription.pause(); | 320 writeSubscription.pause(); |
| 306 bytesWritten = 0; | 321 bytesWritten = 0; |
| 307 connected.future.then((_) { readSubscription.resume(); }); | 322 connected.future.then((_) { readSubscription.resume(); }); |
| 308 } | 323 } |
| 309 client.writeEventsEnabled = true; | 324 client.writeEventsEnabled = true; |
| 310 break; | 325 break; |
| 311 case RawSocketEvent.READ_CLOSED: | 326 case RawSocketEvent.READ_CLOSED: |
| 312 client.close(); | 327 client.close(); |
| 313 server.close(); | 328 server.close(); |
| 314 break; | 329 break; |
| 330 case RawSocketEvent.CLOSED: |
| 331 Expect.isFalse(closedEventReceived); |
| 332 closedEventReceived = true; |
| 333 break; |
| 315 default: throw "Unexpected event $event"; | 334 default: throw "Unexpected event $event"; |
| 316 } | 335 } |
| 317 }); | 336 }, |
| 337 onDone: () => Expect.isTrue(closedEventReceived)); |
| 318 }); | 338 }); |
| 319 | 339 |
| 320 RawSocket.connect("127.0.0.1", server.port).then((socket) { | 340 RawSocket.connect("127.0.0.1", server.port).then((socket) { |
| 341 bool closedEventReceived = false; |
| 321 socket.writeEventsEnabled = false; | 342 socket.writeEventsEnabled = false; |
| 322 readSubscription = socket.listen((event) { | 343 readSubscription = socket.listen((event) { |
| 323 switch (event) { | 344 switch (event) { |
| 324 case RawSocketEvent.READ: | 345 case RawSocketEvent.READ: |
| 325 Expect.equals(0, bytesWritten); // Checks that writer is paused. | 346 Expect.equals(0, bytesWritten); // Checks that writer is paused. |
| 326 Expect.isTrue(socket.available() > 0); | 347 Expect.isTrue(socket.available() > 0); |
| 327 var buffer = socket.read(); | 348 var buffer = socket.read(); |
| 328 bytesRead += buffer.length; | 349 bytesRead += buffer.length; |
| 329 // Ensure all data is read. When done pause and resume the sender | 350 // Ensure all data is read. When done pause and resume the sender |
| 330 if (bytesRead == messageSize) { | 351 if (bytesRead == messageSize) { |
| 331 if (++pauseResumeCount == loopCount) { | 352 if (++pauseResumeCount == loopCount) { |
| 332 socket.close(); | 353 socket.close(); |
| 333 port.close(); | 354 port.close(); |
| 334 } else { | 355 } else { |
| 335 readSubscription.pause(); | 356 readSubscription.pause(); |
| 336 } | 357 } |
| 337 // Always resume writer as it needs the read closed | 358 // Always resume writer as it needs the read closed |
| 338 // event when done. | 359 // event when done. |
| 339 bytesRead = 0; | 360 bytesRead = 0; |
| 340 writeSubscription.resume(); | 361 writeSubscription.resume(); |
| 341 } | 362 } |
| 342 break; | 363 break; |
| 343 case RawSocketEvent.WRITE: | 364 case RawSocketEvent.WRITE: |
| 344 throw "Unexpected write event"; | 365 throw "Unexpected write event"; |
| 345 case RawSocketEvent.READ_CLOSED: | 366 case RawSocketEvent.READ_CLOSED: |
| 346 throw "Unexpected close event"; | 367 throw "Unexpected read closed event"; |
| 368 case RawSocketEvent.CLOSED: |
| 369 Expect.isFalse(closedEventReceived); |
| 370 closedEventReceived = true; |
| 371 break; |
| 347 default: throw "Unexpected event $event"; | 372 default: throw "Unexpected event $event"; |
| 348 } | 373 } |
| 349 }); | 374 }, |
| 375 onDone: () => Expect.isTrue(closedEventReceived)); |
| 350 readSubscription.pause(); | 376 readSubscription.pause(); |
| 351 connected.complete(true); | 377 connected.complete(true); |
| 352 }); | 378 }); |
| 353 }); | 379 }); |
| 354 } | 380 } |
| 355 | 381 |
| 356 main() { | 382 main() { |
| 357 testArguments(); | 383 testArguments(); |
| 358 testSimpleBind(); | 384 testSimpleBind(); |
| 359 testCloseOneEnd("client"); | 385 testCloseOneEnd("client"); |
| 360 testCloseOneEnd("server"); | 386 testCloseOneEnd("server"); |
| 361 testInvalidBind(); | 387 testInvalidBind(); |
| 362 testSimpleConnect(); | 388 testSimpleConnect(); |
| 363 testServerListenAfterConnect(); | 389 testServerListenAfterConnect(); |
| 364 testSimpleReadWrite(dropReads: false); | 390 testSimpleReadWrite(dropReads: false); |
| 365 testSimpleReadWrite(dropReads: true); | 391 testSimpleReadWrite(dropReads: true); |
| 366 testPauseServerSocket(); | 392 testPauseServerSocket(); |
| 367 testPauseSocket(); | 393 testPauseSocket(); |
| 368 } | 394 } |
| OLD | NEW |