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 |