summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/dts/lib.deno.unstable.d.ts1
-rw-r--r--cli/tests/testdata/websocketstream_test.ts57
2 files changed, 58 insertions, 0 deletions
diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts
index 6b7755ee5..442f5d7d4 100644
--- a/cli/dts/lib.deno.unstable.d.ts
+++ b/cli/dts/lib.deno.unstable.d.ts
@@ -1172,6 +1172,7 @@ declare interface WorkerOptions {
declare interface WebSocketStreamOptions {
protocols?: string[];
signal?: AbortSignal;
+ headers?: HeadersInit;
}
declare interface WebSocketConnection {
diff --git a/cli/tests/testdata/websocketstream_test.ts b/cli/tests/testdata/websocketstream_test.ts
index 1198c4164..b43b90139 100644
--- a/cli/tests/testdata/websocketstream_test.ts
+++ b/cli/tests/testdata/websocketstream_test.ts
@@ -3,6 +3,7 @@
import {
assert,
assertEquals,
+ assertNotEquals,
assertRejects,
assertThrows,
unreachable,
@@ -137,3 +138,59 @@ Deno.test("aborting immediately with a primitive as reason throws that primitive
(e) => assertEquals(e, "Some string"),
);
});
+
+Deno.test("headers", async () => {
+ const listener = Deno.listen({ port: 4501 });
+ const promise = (async () => {
+ const httpConn = Deno.serveHttp(await listener.accept());
+ const { request, respondWith } = (await httpConn.nextRequest())!;
+ assertEquals(request.headers.get("x-some-header"), "foo");
+ const {
+ response,
+ socket,
+ } = Deno.upgradeWebSocket(request);
+ socket.onopen = () => socket.close();
+ await respondWith(response);
+ })();
+
+ const ws = new WebSocketStream("ws://localhost:4501", {
+ headers: [["x-some-header", "foo"]],
+ });
+ await promise;
+ await ws.closed;
+ listener.close();
+});
+
+Deno.test("forbidden headers", async () => {
+ const forbiddenHeaders = [
+ "sec-websocket-accept",
+ "sec-websocket-extensions",
+ "sec-websocket-key",
+ "sec-websocket-protocol",
+ "sec-websocket-version",
+ "upgrade",
+ "connection",
+ ];
+
+ const listener = Deno.listen({ port: 4501 });
+ const promise = (async () => {
+ const httpConn = Deno.serveHttp(await listener.accept());
+ const { request, respondWith } = (await httpConn.nextRequest())!;
+ for (const header of request.headers.keys()) {
+ assertNotEquals(header, "foo");
+ }
+ const {
+ response,
+ socket,
+ } = Deno.upgradeWebSocket(request);
+ socket.onopen = () => socket.close();
+ await respondWith(response);
+ })();
+
+ const ws = new WebSocketStream("ws://localhost:4501", {
+ headers: forbiddenHeaders.map((header) => [header, "foo"]),
+ });
+ await promise;
+ await ws.closed;
+ listener.close();
+});