1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-29 16:30:56 -05:00
denoland-deno/cli/tests/testdata/websocketstream_test.ts
Andreu Botella 1974eb1021
fix(websocket): bad rid on WebSocketStream abort(#12913)
Fix a bad resource ID error when aborting a WebSocketStream immediately
after its creation.
2021-11-28 12:25:49 +01:00

96 lines
2.7 KiB
TypeScript

// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
import {
assertEquals,
assertRejects,
assertThrows,
} 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([
assertRejects(
() => ws.connection,
Deno.errors.UnexpectedEof,
"tls handshake eof",
),
assertRejects(
() => 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;
});
Deno.test("aborting immediately throws an AbortError", async () => {
const controller = new AbortController();
const wss = new WebSocketStream("ws://localhost:4242", {
signal: controller.signal,
});
controller.abort();
await assertRejects(
() => wss.connection,
DOMException,
"connection was aborted",
);
await assertRejects(() => wss.closed, DOMException, "connection was aborted");
});