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 |
index 2e45a39fe8419d005ff897ec9a183e1c2dc9f6fc..27a903e1ed326aca99f7f6da0976ccb1d78a989a 100644 |
--- a/tests/standalone/io/web_socket_test.dart |
+++ b/tests/standalone/io/web_socket_test.dart |
@@ -12,9 +12,12 @@ import "dart:io"; |
import "dart:typed_data"; |
import "package:async_helper/async_helper.dart"; |
+import "package:crypto/crypto.dart"; |
import "package:expect/expect.dart"; |
import "package:path/path.dart"; |
+const WEB_SOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; |
+ |
const String CERT_NAME = 'localhost_cert'; |
const String HOST_NAME = 'localhost'; |
@@ -383,6 +386,42 @@ class SecurityConfiguration { |
}); |
} |
+ testFromSocket() { |
+ createServer().then((server) { |
+ server.listen((request) { |
+ Expect.equals('Upgrade', request.headers.value(HttpHeaders.CONNECTION)); |
+ Expect.equals('websocket', request.headers.value(HttpHeaders.UPGRADE)); |
+ |
+ var key = request.headers.value('Sec-WebSocket-Key'); |
+ var sha1 = new SHA1()..add("$key$WEB_SOCKET_GUID".codeUnits); |
+ var accept = CryptoUtils.bytesToBase64(sha1.close()); |
+ request.response |
+ ..statusCode = HttpStatus.SWITCHING_PROTOCOLS |
+ ..headers.add(HttpHeaders.CONNECTION, "Upgrade") |
+ ..headers.add(HttpHeaders.UPGRADE, "websocket") |
+ ..headers.add("Sec-WebSocket-Accept", accept); |
+ request.response.contentLength = 0; |
+ return request.response.detachSocket() |
kustermann
2014/04/29 20:36:50
The 'return' here has no effect right?
nweiz
2014/04/30 22:33:27
Removed.
|
+ .then((socket) => new WebSocket.fromUpgradedSocket(socket)) |
+ .then((websocket) { |
+ websocket.add("Hello"); |
+ websocket.close(); |
+ }); |
+ }); |
+ |
+ var url = '${secure ? "wss" : "ws"}://$HOST_NAME:${server.port}/'; |
+ |
+ var client = new HttpClient(); |
+ var completer = new Completer(); |
kustermann
2014/04/29 20:36:50
[client] and [completer] seem to be unused.
nweiz
2014/04/30 22:33:27
Removed.
|
+ WebSocket.connect(url).then((websocket) { |
+ return websocket.listen((message) { |
+ Expect.equals("Hello", message); |
+ websocket.close(); |
+ }).asFuture(); |
+ }).then((_) => server.close()); |
+ }); |
+ } |
+ |
void runTests() { |
testRequestResponseClientCloses(2, null, null); |
testRequestResponseClientCloses(2, 3001, null); |
@@ -403,6 +442,7 @@ class SecurityConfiguration { |
testUsePOST(); |
testConnections(10, 3002, "Got tired"); |
testIndividualUpgrade(5); |
+ testFromSocket(); |
} |
} |