summaryrefslogtreecommitdiff
path: root/std/ws/test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/ws/test.ts')
-rw-r--r--std/ws/test.ts109
1 files changed, 59 insertions, 50 deletions
diff --git a/std/ws/test.ts b/std/ws/test.ts
index e0050bcf4..820fe1423 100644
--- a/std/ws/test.ts
+++ b/std/ws/test.ts
@@ -21,6 +21,7 @@ import Writer = Deno.Writer;
import Reader = Deno.Reader;
import Conn = Deno.Conn;
import Buffer = Deno.Buffer;
+import { delay } from "../util/async.ts";
test("[ws] read unmasked text frame", async () => {
// unmasked single text frame with payload "Hello"
@@ -296,31 +297,32 @@ function delayedWriter(ms: number, dest: Writer): Writer {
}
};
}
-test("[ws] WebSocket.send(), WebSocket.ping() should be exclusive", async (): Promise<
- void
-> => {
- const buf = new Buffer();
- const conn = dummyConn(new Buffer(), delayedWriter(1, buf));
- const sock = createWebSocket({ conn });
- // Ensure send call
- await Promise.all([
- sock.send("first"),
- sock.send("second"),
- sock.ping(),
- sock.send(new Uint8Array([3]))
- ]);
- const bufr = new BufReader(buf);
- const first = await readFrame(bufr);
- const second = await readFrame(bufr);
- const ping = await readFrame(bufr);
- const third = await readFrame(bufr);
- assertEquals(first.opcode, OpCode.TextFrame);
- assertEquals(decode(first.payload), "first");
- assertEquals(first.opcode, OpCode.TextFrame);
- assertEquals(decode(second.payload), "second");
- assertEquals(ping.opcode, OpCode.Ping);
- assertEquals(third.opcode, OpCode.BinaryFrame);
- assertEquals(bytes.equal(third.payload, new Uint8Array([3])), true);
+test({
+ name: "[ws] WebSocket.send(), WebSocket.ping() should be exclusive",
+ fn: async (): Promise<void> => {
+ const buf = new Buffer();
+ const conn = dummyConn(new Buffer(), delayedWriter(1, buf));
+ const sock = createWebSocket({ conn });
+ // Ensure send call
+ await Promise.all([
+ sock.send("first"),
+ sock.send("second"),
+ sock.ping(),
+ sock.send(new Uint8Array([3]))
+ ]);
+ const bufr = new BufReader(buf);
+ const first = await readFrame(bufr);
+ const second = await readFrame(bufr);
+ const ping = await readFrame(bufr);
+ const third = await readFrame(bufr);
+ assertEquals(first.opcode, OpCode.TextFrame);
+ assertEquals(decode(first.payload), "first");
+ assertEquals(first.opcode, OpCode.TextFrame);
+ assertEquals(decode(second.payload), "second");
+ assertEquals(ping.opcode, OpCode.Ping);
+ assertEquals(third.opcode, OpCode.BinaryFrame);
+ assertEquals(bytes.equal(third.payload, new Uint8Array([3])), true);
+ }
});
test("[ws] createSecKeyHasCorrectLength", () => {
@@ -363,29 +365,36 @@ test("[ws] WebSocket shouldn't throw `Deno.errors.UnexpectedEof` on recive()", a
assertEquals(done, true);
});
-test("[ws] WebSocket should reject sending promise when connection reset forcely", async () => {
- const buf = new Buffer();
- let timer: number | undefined;
- const lazyWriter: Deno.Writer = {
- async write(_: Uint8Array): Promise<number> {
- return new Promise(resolve => {
- timer = setTimeout(() => resolve(0), 1000);
- });
- }
- };
- const conn = dummyConn(buf, lazyWriter);
- const sock = createWebSocket({ conn });
- const onError = (e: unknown): unknown => e;
- const p = Promise.all([
- sock.send("hello").catch(onError),
- sock.send(new Uint8Array([1, 2])).catch(onError),
- sock.ping().catch(onError)
- ]);
- sock.closeForce();
- assertEquals(sock.isClosed, true);
- const [a, b, c] = await p;
- assert(a instanceof Deno.errors.ConnectionReset);
- assert(b instanceof Deno.errors.ConnectionReset);
- assert(c instanceof Deno.errors.ConnectionReset);
- clearTimeout(timer);
+test({
+ name:
+ "[ws] WebSocket should reject sending promise when connection reset forcely",
+ fn: async () => {
+ const buf = new Buffer();
+ let timer: number | undefined;
+ const lazyWriter: Deno.Writer = {
+ async write(_: Uint8Array): Promise<number> {
+ return new Promise(resolve => {
+ timer = setTimeout(() => resolve(0), 1000);
+ });
+ }
+ };
+ const conn = dummyConn(buf, lazyWriter);
+ const sock = createWebSocket({ conn });
+ const onError = (e: unknown): unknown => e;
+ const p = Promise.all([
+ sock.send("hello").catch(onError),
+ sock.send(new Uint8Array([1, 2])).catch(onError),
+ sock.ping().catch(onError)
+ ]);
+ sock.closeForce();
+ assertEquals(sock.isClosed, true);
+ const [a, b, c] = await p;
+ assert(a instanceof Deno.errors.ConnectionReset);
+ assert(b instanceof Deno.errors.ConnectionReset);
+ assert(c instanceof Deno.errors.ConnectionReset);
+ clearTimeout(timer);
+ // Wait for another event loop turn for `timeout` op promise
+ // to resolve, otherwise we'll get "op leak".
+ await delay(10);
+ }
});