Index: tests/standalone/io/web_socket_test.dart |
diff --git a/tests/standalone/io/web_socket_test.dart b/tests/standalone/io/web_socket_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a7a0ada41eda0ff86f4994127930834fe1a8baba |
--- /dev/null |
+++ b/tests/standalone/io/web_socket_test.dart |
@@ -0,0 +1,158 @@ |
+// Copyright (c) 2012, 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. |
+// |
+ |
+#import("dart:io"); |
+ |
+void testRequestResponseClientCloses( |
+ int totalConnections, int closeStatus, String closeReason) { |
+ HttpServer server = new HttpServer(); |
+ HttpClient client = new HttpClient(); |
+ |
+ server.listen("127.0.0.1", 0, totalConnections); |
+ |
+ // Create a web socket handler and set is as the HTTP server default |
+ // handler. |
+ WebSocketHandler wsHandler = new WebSocketHandler(); |
+ wsHandler.onOpen = (WebSocketConnection conn) { |
+ var count = 0; |
+ conn.onMessage = (Object message) => conn.send(message); |
+ conn.onClosed = (status, reason) { |
+ Expect.equals(closeStatus, status); |
+ Expect.equals(closeReason, reason); |
+ }; |
+ }; |
+ server.defaultRequestHandler = wsHandler.onRequest; |
+ |
+ int closeCount = 0; |
+ String messageText = "Hello, world!"; |
+ for (int i = 0; i < totalConnections; i++) { |
+ int messageCount = 0; |
+ HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
+ WebSocketClientConnection wsconn = new WebSocketClientConnection(conn); |
+ wsconn.onOpen = () => wsconn.send(messageText); |
+ wsconn.onMessage = (message) { |
+ messageCount++; |
+ if (messageCount < 10) { |
+ Expect.equals(messageText, message); |
+ wsconn.send(message); |
+ } else { |
+ wsconn.close(closeStatus, closeReason); |
+ } |
+ }; |
+ wsconn.onClosed = (status, reason) { |
+ Expect.equals(closeStatus, status); |
+ Expect.isNull(reason); |
+ closeCount++; |
+ if (closeCount == totalConnections) { |
+ client.shutdown(); |
+ server.close(); |
+ } |
+ }; |
+ } |
+} |
+ |
+ |
+void testRequestResponseServerCloses( |
+ int totalConnections, int closeStatus, String closeReason) { |
+ HttpServer server = new HttpServer(); |
+ HttpClient client = new HttpClient(); |
+ |
+ server.listen("127.0.0.1", 0, totalConnections); |
+ |
+ // Create a web socket handler and set is as the HTTP server default |
+ // handler. |
+ int closeCount = 0; |
+ WebSocketHandler wsHandler = new WebSocketHandler(); |
+ wsHandler.onOpen = (WebSocketConnection conn) { |
+ String messageText = "Hello, world!"; |
+ int messageCount = 0; |
+ conn.onMessage = (Object message) { |
+ messageCount++; |
+ if (messageCount < 10) { |
+ Expect.equals(messageText, message); |
+ conn.send(message); |
+ } else { |
+ conn.close(closeStatus, closeReason); |
+ } |
+ }; |
+ conn.onClosed = (status, reason) { |
+ Expect.equals(closeStatus, status); |
+ Expect.isNull(reason); |
+ closeCount++; |
+ if (closeCount == totalConnections) { |
+ client.shutdown(); |
+ server.close(); |
+ } |
+ }; |
+ conn.send(messageText); |
+ }; |
+ server.defaultRequestHandler = wsHandler.onRequest; |
+ |
+ for (int i = 0; i < totalConnections; i++) { |
+ HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
+ WebSocketClientConnection wsconn = new WebSocketClientConnection(conn); |
+ wsconn.onMessage = (message) => wsconn.send(message); |
+ wsconn.onClosed = (status, reason) { |
+ Expect.equals(closeStatus, status); |
+ Expect.equals(closeReason, reason); |
+ }; |
+ } |
+} |
+ |
+void testNoUpgrade() { |
+ HttpServer server = new HttpServer(); |
+ HttpClient client = new HttpClient(); |
+ |
+ server.listen("127.0.0.1", 0, 5); |
+ |
+ // Create a server which always responds with a redirect. |
+ server.defaultRequestHandler = (request, response) { |
+ response.statusCode = HttpStatus.MOVED_PERMANENTLY; |
+ response.outputStream.close(); |
+ }; |
+ |
+ HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); |
+ WebSocketClientConnection wsconn = new WebSocketClientConnection(conn); |
+ wsconn.onNoUpgrade = (response) { |
+ Expect.equals(HttpStatus.MOVED_PERMANENTLY, response.statusCode); |
+ client.shutdown(); |
+ server.close(); |
+ }; |
+} |
+ |
+void testUsePOST() { |
+ HttpServer server = new HttpServer(); |
+ HttpClient client = new HttpClient(); |
+ |
+ server.listen("127.0.0.1", 0, 5); |
+ |
+ // Create a web socket handler and set is as the HTTP server default |
+ // handler. |
+ int closeCount = 0; |
+ WebSocketHandler wsHandler = new WebSocketHandler(); |
+ wsHandler.onOpen = (WebSocketConnection conn) { |
+ Expect.fail("No connection expected"); |
+ }; |
+ server.defaultRequestHandler = wsHandler.onRequest; |
+ |
+ HttpClientConnection conn = client.post("127.0.0.1", server.port, "/"); |
+ WebSocketClientConnection wsconn = new WebSocketClientConnection(conn); |
+ wsconn.onNoUpgrade = (response) { |
+ Expect.equals(HttpStatus.BAD_REQUEST, response.statusCode); |
+ client.shutdown(); |
+ server.close(); |
+ }; |
+} |
+ |
+main() { |
+ testRequestResponseClientCloses(2, null, null); |
+ testRequestResponseClientCloses(2, 3001, null); |
+ testRequestResponseClientCloses(2, 3002, "Got tired"); |
+ testRequestResponseServerCloses(1, null, null); |
+ testRequestResponseServerCloses(2, 3001, null); |
+ testRequestResponseServerCloses(2, 3002, "Got tired"); |
+ testNoUpgrade(); |
+ testUsePOST(); |
+} |