From 3d41b486da7dcba49c8a18b45425e356c329d986 Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Tue, 11 Jun 2024 12:39:44 +0200 Subject: fix(ext/node): ServerResponse header array handling (#24149) Previously res.setHeader("foo", ["bar", "baz"]) added a single header with a value of `bar,baz`. Really this should add two separate headers. This is visible in `set-cookie` for example. --- tests/unit_node/http_test.ts | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'tests/unit_node') diff --git a/tests/unit_node/http_test.ts b/tests/unit_node/http_test.ts index 9cb409c39..2b2644272 100644 --- a/tests/unit_node/http_test.ts +++ b/tests/unit_node/http_test.ts @@ -182,6 +182,33 @@ Deno.test("[node/http] server can respond with 101, 204, 205, 304 status", async } }); +Deno.test("[node/http] multiple set-cookie headers", async () => { + const { promise, resolve } = Promise.withResolvers(); + + const server = http.createServer((_req, res) => { + res.setHeader("Set-Cookie", ["foo=bar", "bar=foo"]); + assertEquals(res.getHeader("Set-Cookie"), ["foo=bar", "bar=foo"]); + res.end(); + }); + + server.listen(async () => { + const res = await fetch( + // deno-lint-ignore no-explicit-any + `http://127.0.0.1:${(server.address() as any).port}/`, + ); + assert(res.ok); + + const setCookieHeaders = res.headers.getSetCookie(); + assertEquals(setCookieHeaders, ["foo=bar", "bar=foo"]); + + await res.body!.cancel(); + + server.close(() => resolve()); + }); + + await promise; +}); + Deno.test("[node/http] IncomingRequest socket has remoteAddress + remotePort", async () => { const { promise, resolve } = Promise.withResolvers(); @@ -1000,8 +1027,8 @@ Deno.test("[node/http] ServerResponse getHeaders", () => { const res = new http.ServerResponse(req); res.setHeader("foo", "bar"); res.setHeader("bar", "baz"); - assertEquals(res.getHeaderNames(), ["bar", "foo"]); - assertEquals(res.getHeaders(), { "bar": "baz", "foo": "bar" }); + assertEquals(res.getHeaderNames(), ["foo", "bar"]); + assertEquals(res.getHeaders(), { "foo": "bar", "bar": "baz" }); }); Deno.test("[node/http] ServerResponse default status code 200", () => { -- cgit v1.2.3