Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1043)

Unified Diff: tests/standalone/io/web_socket_typed_data_test.dart

Issue 16363005: Ensure that only byte values are sent by sockets and web sockets (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed a few bugs Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/standalone/io/raw_socket_typed_data_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/standalone/io/web_socket_typed_data_test.dart
diff --git a/tests/standalone/io/web_socket_typed_data_test.dart b/tests/standalone/io/web_socket_typed_data_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..13aced166bdeaa2363d9234ed104f28c9094927d
--- /dev/null
+++ b/tests/standalone/io/web_socket_typed_data_test.dart
@@ -0,0 +1,210 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// VMOptions=--short_socket_write
+// VMOptions=--short_socket_read --short_socket_write
+
+import "package:expect/expect.dart";
+import "dart:async";
+import "dart:io";
+import "dart:isolate";
+import "dart:typed_data";
+
+Future<HttpServer> createServer() => HttpServer.bind("127.0.0.1", 0);
+
+Future<WebSocket> createClient(int port) =>
+ WebSocket.connect('ws://127.0.0.1:$port/');
+
+void test(expected, testData) {
+ createServer().then((server) {
+ var messageCount = 0;
+ server.transform(new WebSocketTransformer()).listen((webSocket) {
+ webSocket.listen(
+ (message) {
+ Expect.listEquals(expected, message);
+ webSocket.add(testData[messageCount]);
+ messageCount++;
+ },
+ onDone: () => Expect.equals(testData.length, messageCount));
+ });
+
+ createClient(server.port).then((webSocket) {
+ var messageCount = 0;
+ webSocket.listen(
+ (message) {
+ Expect.listEquals(expected, message);
+ messageCount++;
+ if (messageCount == testData.length) webSocket.close();
+ },
+ onDone: server.close);
+ testData.forEach(webSocket.add);
+ });
+ });
+}
+
+testUintLists() {
+ var fillData = new List.generate(256, (index) => index);
+ var testData = [
+ new Uint8List(256),
+ new Uint8ClampedList(256),
+ new Uint16List(256),
+ new Uint32List(256),
+ new Uint64List(256),
+ ];
+ testData.forEach((list) => list.setAll(0, fillData));
+ test(fillData, testData);
+}
+
+testIntLists() {
+ var fillData = new List.generate(128, (index) => index);
+ var testData = [
+ new Int8List(128),
+ new Int16List(128),
+ new Int32List(128),
+ new Int64List(128),
+ ];
+ testData.forEach((list) => list.setAll(0, fillData));
+ test(fillData, testData);
+}
+
+void testOutOfRangeClient() {
+ createServer().then((server) {
+ var messageCount = 0;
+ server.transform(new WebSocketTransformer()).listen((webSocket) {
+ webSocket.listen((message) => Expect.fail("No message expected"));
+ });
+
+ Future clientError(data) {
+ return createClient(server.port).then((webSocket) {
+ var messageCount = 0;
+ webSocket.listen((message) => Expect.fail("No message expected"));
+ webSocket.add(data);
+ webSocket.close();
+ return webSocket.done;
+ });
+ }
+
+ Future expectError(data) {
+ var completer = new Completer();
+ clientError(data)
+ .then((_) => completer.completeError("Message $data did not fail"))
+ .catchError((e) => completer.complete(true));
+ return completer.future;
+ }
+
+
+ var futures = [];
+ var data;
+ data = new Uint16List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data = new Uint32List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data = new Uint64List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data = new Int16List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data[0] = -1;
+ futures.add(expectError(data));
+ data = new Int32List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data[0] = -1;
+ futures.add(expectError(data));
+ data = new Int64List(1);
+ data[0] = 256;
+ futures.add(expectError(data));
+ data[0] = -1;
+ futures.add(expectError(data));
+ futures.add(expectError([-1]));
+ futures.add(expectError([256]));
+
+ Future.wait(futures).then((_) => server.close());
+ });
+}
+
+void testOutOfRangeServer() {
+ var futures = [];
+ var testData = [];
+ var data;
+ data = new Uint16List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Uint32List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Uint64List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Int16List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Int16List(1);
+ data[0] = -1;
+ testData.add(data);
+ data = new Int32List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Int32List(1);
+ data[0] = -1;
+ testData.add(data);
+ data = new Int64List(1);
+ data[0] = 256;
+ testData.add(data);
+ data = new Int64List(1);
+ data[0] = -1;
+ testData.add(data);
+ testData.add([-1]);
+ testData.add([256]);
+
+ var allDone = new Completer();
+
+ Future expectError(future) {
+ var completer = new Completer();
+ future
+ .then((_) => completer.completeError("Message $data did not fail"))
+ .catchError((e) => completer.complete(true));
+ return completer.future;
+ }
+
+ createServer().then((server) {
+ var messageCount = 0;
+ server.transform(new WebSocketTransformer()).listen((webSocket) {
+ webSocket.listen((message) {
+ messageCount++;
+ webSocket.add(testData[message[0]]);
+ webSocket.close();
+ futures.add(expectError(webSocket.done));
+ if (messageCount == testData.length) allDone.complete(true);
+ });
+ });
+
+ Future x(int i) {
+ var completer = new Completer();
+ createClient(server.port).then((webSocket) {
+ webSocket.listen((message) => Expect.fail("No message expected"),
+ onDone: () => completer.complete(true),
+ onError: (e) => completer.completeError(e));
+ webSocket.add(new List()..add(i));
+ });
+ return completer.future;
+ }
+
+ for (int i = 0; i < testData.length; i++) futures.add(x(i));
+ allDone.future.then(
+ (_) => Future.wait(futures).then((_) => server.close()));
+ });
+}
+
+main() {
+ testUintLists();
+ testIntLists();
+ testOutOfRangeClient();
+ testOutOfRangeServer();
+}
« no previous file with comments | « tests/standalone/io/raw_socket_typed_data_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698