| 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"; |
| 11 import "dart:async"; | 11 import "dart:async"; |
| 12 import "dart:io"; | 12 import "dart:io"; |
| 13 import "dart:isolate"; | 13 import "dart:isolate"; |
| 14 import "dart:typed_data"; | 14 import "dart:typed_data"; |
| 15 | 15 |
| 16 Future<HttpServer> createServer() => HttpServer.bind("127.0.0.1", 0); | 16 Future<HttpServer> createServer() => HttpServer.bind("127.0.0.1", 0); |
| 17 | 17 |
| 18 Future<WebSocket> createClient(int port) => | 18 Future<WebSocket> createClient(int port, bool compression) => |
| 19 WebSocket.connect('ws://127.0.0.1:$port/'); | 19 compression ? WebSocket.connect('ws://127.0.0.1:$port/') |
| 20 : WebSocket.connect('ws://127.0.0.1:$port/', |
| 21 compression: CompressionOptions.OFF); |
| 20 | 22 |
| 21 void test(expected, testData) { | 23 void test(expected, testData, compression) { |
| 22 createServer().then((server) { | 24 createServer().then((server) { |
| 23 var messageCount = 0; | 25 var messageCount = 0; |
| 24 server.transform(new WebSocketTransformer()).listen((webSocket) { | 26 var transformer = compression ? new WebSocketTransformer() |
| 27 : new WebSocketTransformer(compression: CompressionOptions.OFF); |
| 28 server.transform(transformer).listen((webSocket) { |
| 25 webSocket.listen( | 29 webSocket.listen( |
| 26 (message) { | 30 (message) { |
| 27 Expect.listEquals(expected, message); | 31 Expect.listEquals(expected, message); |
| 28 webSocket.add(testData[messageCount]); | 32 webSocket.add(testData[messageCount]); |
| 29 messageCount++; | 33 messageCount++; |
| 30 }, | 34 }, |
| 31 onDone: () => Expect.equals(testData.length, messageCount)); | 35 onDone: () => Expect.equals(testData.length, messageCount)); |
| 32 }); | 36 }); |
| 33 | 37 |
| 34 createClient(server.port).then((webSocket) { | 38 createClient(server.port, compression).then((webSocket) { |
| 35 var messageCount = 0; | 39 var messageCount = 0; |
| 36 webSocket.listen( | 40 webSocket.listen( |
| 37 (message) { | 41 (message) { |
| 38 Expect.listEquals(expected, message); | 42 Expect.listEquals(expected, message); |
| 39 messageCount++; | 43 messageCount++; |
| 40 if (messageCount == testData.length) webSocket.close(); | 44 if (messageCount == testData.length) webSocket.close(); |
| 41 }, | 45 }, |
| 42 onDone: server.close); | 46 onDone: server.close); |
| 43 testData.forEach(webSocket.add); | 47 testData.forEach(webSocket.add); |
| 44 }); | 48 }); |
| 45 }); | 49 }); |
| 46 } | 50 } |
| 47 | 51 |
| 48 testUintLists() { | 52 testUintLists({bool compression: false}) { |
| 49 var fillData = new List.generate(256, (index) => index); | 53 var fillData = new List.generate(256, (index) => index); |
| 50 var testData = [ | 54 var testData = [ |
| 51 new Uint8List(256), | 55 new Uint8List(256), |
| 52 new Uint8ClampedList(256), | 56 new Uint8ClampedList(256), |
| 53 new Uint16List(256), | 57 new Uint16List(256), |
| 54 new Uint32List(256), | 58 new Uint32List(256), |
| 55 new Uint64List(256), | 59 new Uint64List(256), |
| 56 ]; | 60 ]; |
| 57 testData.forEach((list) => list.setAll(0, fillData)); | 61 testData.forEach((list) => list.setAll(0, fillData)); |
| 58 test(fillData, testData); | 62 test(fillData, testData, compression); |
| 59 } | 63 } |
| 60 | 64 |
| 61 testIntLists() { | 65 testIntLists({bool compression: false}) { |
| 62 var fillData = new List.generate(128, (index) => index); | 66 var fillData = new List.generate(128, (index) => index); |
| 63 var testData = [ | 67 var testData = [ |
| 64 new Int8List(128), | 68 new Int8List(128), |
| 65 new Int16List(128), | 69 new Int16List(128), |
| 66 new Int32List(128), | 70 new Int32List(128), |
| 67 new Int64List(128), | 71 new Int64List(128), |
| 68 ]; | 72 ]; |
| 69 testData.forEach((list) => list.setAll(0, fillData)); | 73 testData.forEach((list) => list.setAll(0, fillData)); |
| 70 test(fillData, testData); | 74 test(fillData, testData, compression); |
| 71 } | 75 } |
| 72 | 76 |
| 73 void testOutOfRangeClient() { | 77 void testOutOfRangeClient({bool compression: false}) { |
| 74 createServer().then((server) { | 78 createServer().then((server) { |
| 75 var messageCount = 0; | 79 var messageCount = 0; |
| 76 server.transform(new WebSocketTransformer()).listen((webSocket) { | 80 var transformer = compression ? new WebSocketTransformer() |
| 81 : new WebSocketTransformer(compression: CompressionOptions.OFF); |
| 82 server.transform(transformer).listen((webSocket) { |
| 77 webSocket.listen((message) => Expect.fail("No message expected")); | 83 webSocket.listen((message) => Expect.fail("No message expected")); |
| 78 }); | 84 }); |
| 79 | 85 |
| 80 Future clientError(data) { | 86 Future clientError(data) { |
| 81 return createClient(server.port).then((webSocket) { | 87 return createClient(server.port, compression).then((webSocket) { |
| 82 var messageCount = 0; | 88 var messageCount = 0; |
| 83 webSocket.listen((message) => Expect.fail("No message expected")); | 89 webSocket.listen((message) => Expect.fail("No message expected")); |
| 84 webSocket.add(data); | 90 webSocket.add(data); |
| 85 webSocket.close(); | 91 webSocket.close(); |
| 86 return webSocket.done; | 92 return webSocket.done; |
| 87 }); | 93 }); |
| 88 } | 94 } |
| 89 | 95 |
| 90 Future expectError(data) { | 96 Future expectError(data) { |
| 91 var completer = new Completer(); | 97 var completer = new Completer(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 122 futures.add(expectError(data)); | 128 futures.add(expectError(data)); |
| 123 data[0] = -1; | 129 data[0] = -1; |
| 124 futures.add(expectError(data)); | 130 futures.add(expectError(data)); |
| 125 futures.add(expectError([-1])); | 131 futures.add(expectError([-1])); |
| 126 futures.add(expectError([256])); | 132 futures.add(expectError([256])); |
| 127 | 133 |
| 128 Future.wait(futures).then((_) => server.close()); | 134 Future.wait(futures).then((_) => server.close()); |
| 129 }); | 135 }); |
| 130 } | 136 } |
| 131 | 137 |
| 132 void testOutOfRangeServer() { | 138 void testOutOfRangeServer({bool compression: false}) { |
| 133 var futures = []; | 139 var futures = []; |
| 134 var testData = []; | 140 var testData = []; |
| 135 var data; | 141 var data; |
| 136 data = new Uint16List(1); | 142 data = new Uint16List(1); |
| 137 data[0] = 256; | 143 data[0] = 256; |
| 138 testData.add(data); | 144 testData.add(data); |
| 139 data = new Uint32List(1); | 145 data = new Uint32List(1); |
| 140 data[0] = 256; | 146 data[0] = 256; |
| 141 testData.add(data); | 147 testData.add(data); |
| 142 data = new Uint64List(1); | 148 data = new Uint64List(1); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 168 Future expectError(future) { | 174 Future expectError(future) { |
| 169 var completer = new Completer(); | 175 var completer = new Completer(); |
| 170 future | 176 future |
| 171 .then((_) => completer.completeError("Message $data did not fail")) | 177 .then((_) => completer.completeError("Message $data did not fail")) |
| 172 .catchError((e) => completer.complete(true)); | 178 .catchError((e) => completer.complete(true)); |
| 173 return completer.future; | 179 return completer.future; |
| 174 } | 180 } |
| 175 | 181 |
| 176 createServer().then((server) { | 182 createServer().then((server) { |
| 177 var messageCount = 0; | 183 var messageCount = 0; |
| 178 server.transform(new WebSocketTransformer()).listen((webSocket) { | 184 var transformer = compression ? new WebSocketTransformer() |
| 185 : new WebSocketTransformer(compression: CompressionOptions.OFF); |
| 186 server.transform(transformer).listen((webSocket) { |
| 179 webSocket.listen((message) { | 187 webSocket.listen((message) { |
| 180 messageCount++; | 188 messageCount++; |
| 181 webSocket.add(testData[message[0]]); | 189 webSocket.add(testData[message[0]]); |
| 182 webSocket.close(); | 190 webSocket.close(); |
| 183 futures.add(expectError(webSocket.done)); | 191 futures.add(expectError(webSocket.done)); |
| 184 if (messageCount == testData.length) allDone.complete(true); | 192 if (messageCount == testData.length) allDone.complete(true); |
| 185 }); | 193 }); |
| 186 }); | 194 }); |
| 187 | 195 |
| 188 Future x(int i) { | 196 Future x(int i) { |
| 189 var completer = new Completer(); | 197 var completer = new Completer(); |
| 190 createClient(server.port).then((webSocket) { | 198 createClient(server.port, compression).then((webSocket) { |
| 191 webSocket.listen((message) => Expect.fail("No message expected"), | 199 webSocket.listen((message) => Expect.fail("No message expected"), |
| 192 onDone: () => completer.complete(true), | 200 onDone: () => completer.complete(true), |
| 193 onError: (e) => completer.completeError(e)); | 201 onError: (e) => completer.completeError(e)); |
| 194 webSocket.add(new List()..add(i)); | 202 webSocket.add(new List()..add(i)); |
| 195 }); | 203 }); |
| 196 return completer.future; | 204 return completer.future; |
| 197 } | 205 } |
| 198 | 206 |
| 199 for (int i = 0; i < testData.length; i++) futures.add(x(i)); | 207 for (int i = 0; i < testData.length; i++) futures.add(x(i)); |
| 200 allDone.future.then( | 208 allDone.future.then( |
| 201 (_) => Future.wait(futures).then((_) => server.close())); | 209 (_) => Future.wait(futures).then((_) => server.close())); |
| 202 }); | 210 }); |
| 203 } | 211 } |
| 204 | 212 |
| 205 main() { | 213 main() { |
| 206 testUintLists(); | 214 testUintLists(); |
| 215 testUintLists(compression: true); |
| 207 testIntLists(); | 216 testIntLists(); |
| 217 testIntLists(compression: true); |
| 208 testOutOfRangeClient(); | 218 testOutOfRangeClient(); |
| 219 testOutOfRangeClient(compression: true); |
| 209 // testOutOfRangeServer(); | 220 // testOutOfRangeServer(); |
| 221 // testOutOfRangeServer(compression: true); |
| 210 } | 222 } |
| OLD | NEW |