summaryrefslogtreecommitdiff
path: root/cli/tests/unit/websocket_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/unit/websocket_test.ts')
-rw-r--r--cli/tests/unit/websocket_test.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/cli/tests/unit/websocket_test.ts b/cli/tests/unit/websocket_test.ts
index 6737edc11..948e2add2 100644
--- a/cli/tests/unit/websocket_test.ts
+++ b/cli/tests/unit/websocket_test.ts
@@ -36,3 +36,49 @@ Deno.test(async function websocketPingPong() {
await promise;
ws.close();
});
+
+// https://github.com/denoland/deno/issues/18700
+Deno.test(
+ { sanitizeOps: false, sanitizeResources: false },
+ async function websocketWriteLock() {
+ const ac = new AbortController();
+ const listeningPromise = deferred();
+
+ const server = Deno.serve({
+ handler: (req) => {
+ const { socket, response } = Deno.upgradeWebSocket(req);
+ socket.onopen = function () {
+ setTimeout(() => socket.send("Hello"), 500);
+ };
+ socket.onmessage = function (e) {
+ assertEquals(e.data, "Hello");
+ ac.abort();
+ };
+ return response;
+ },
+ signal: ac.signal,
+ onListen: () => listeningPromise.resolve(),
+ hostname: "localhost",
+ port: 4246,
+ });
+
+ await listeningPromise;
+ const promise = deferred();
+ const ws = new WebSocket("ws://localhost:4246/");
+ assertEquals(ws.url, "ws://localhost:4246/");
+ ws.onerror = () => fail();
+ ws.onmessage = (e) => {
+ assertEquals(e.data, "Hello");
+ setTimeout(() => {
+ ws.send(e.data);
+ }, 1000);
+ promise.resolve();
+ };
+ ws.onclose = () => {
+ promise.resolve();
+ };
+
+ await Promise.all([promise, server]);
+ ws.close();
+ },
+);