summaryrefslogtreecommitdiff
path: root/cli/tests/websocketstream_test.ts
diff options
context:
space:
mode:
authorLeo K <crowlkats@toaxl.com>2021-08-10 00:28:17 +0200
committerGitHub <noreply@github.com>2021-08-10 00:28:17 +0200
commit2db381eba9768acf855219ec9560e20a62659994 (patch)
treec06a693b804c9a2bc3bf76f7ac66a02f57499ccb /cli/tests/websocketstream_test.ts
parent7600a456dfc880a1eeff230f3f34c87978fedc58 (diff)
feat: add experimental WebSocketStream API (#10365)
This commit adds the experimental WebSocketStream API when using the --unstable flag. The explainer for the API can be found here: https://github.com/ricea/websocketstream-explainer
Diffstat (limited to 'cli/tests/websocketstream_test.ts')
-rw-r--r--cli/tests/websocketstream_test.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/cli/tests/websocketstream_test.ts b/cli/tests/websocketstream_test.ts
new file mode 100644
index 000000000..5b4d19f6e
--- /dev/null
+++ b/cli/tests/websocketstream_test.ts
@@ -0,0 +1,82 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+
+import {
+ assertEquals,
+ assertThrows,
+ assertThrowsAsync,
+} from "../../test_util/std/testing/asserts.ts";
+
+Deno.test("fragment", () => {
+ assertThrows(() => new WebSocketStream("ws://localhost:4242/#"));
+ assertThrows(() => new WebSocketStream("ws://localhost:4242/#foo"));
+});
+
+Deno.test("duplicate protocols", () => {
+ assertThrows(() =>
+ new WebSocketStream("ws://localhost:4242", {
+ protocols: ["foo", "foo"],
+ })
+ );
+});
+
+Deno.test("connect & close custom valid code", async () => {
+ const ws = new WebSocketStream("ws://localhost:4242");
+ await ws.connection;
+ ws.close({ code: 1000 });
+ await ws.closed;
+});
+
+Deno.test("connect & close custom invalid reason", async () => {
+ const ws = new WebSocketStream("ws://localhost:4242");
+ await ws.connection;
+ assertThrows(() => ws.close({ code: 1000, reason: "".padEnd(124, "o") }));
+ ws.close();
+ await ws.closed;
+});
+
+Deno.test("echo string", async () => {
+ const ws = new WebSocketStream("ws://localhost:4242");
+ const { readable, writable } = await ws.connection;
+ await writable.getWriter().write("foo");
+ const res = await readable.getReader().read();
+ assertEquals(res.value, "foo");
+ ws.close();
+ await ws.closed;
+});
+
+Deno.test("echo string tls", async () => {
+ const ws = new WebSocketStream("wss://localhost:4243");
+ const { readable, writable } = await ws.connection;
+ await writable.getWriter().write("foo");
+ const res = await readable.getReader().read();
+ assertEquals(res.value, "foo");
+ ws.close();
+ await ws.closed;
+});
+
+Deno.test("websocket error", async () => {
+ const ws = new WebSocketStream("wss://localhost:4242");
+ await Promise.all([
+ assertThrowsAsync(
+ () => ws.connection,
+ Deno.errors.UnexpectedEof,
+ "tls handshake eof",
+ ),
+ assertThrowsAsync(
+ () => ws.closed,
+ Deno.errors.UnexpectedEof,
+ "tls handshake eof",
+ ),
+ ]);
+});
+
+Deno.test("echo uint8array", async () => {
+ const ws = new WebSocketStream("ws://localhost:4242");
+ const { readable, writable } = await ws.connection;
+ const uint = new Uint8Array([102, 111, 111]);
+ await writable.getWriter().write(uint);
+ const res = await readable.getReader().read();
+ assertEquals(res.value, uint);
+ ws.close();
+ await ws.closed;
+});