| 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 |