diff options
author | Satya Rohith <me@satyarohith.com> | 2024-03-07 19:28:46 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 19:28:46 +0530 |
commit | 588dd5e66961999cfafd4504444e685629a92173 (patch) | |
tree | 1e64ad6f88e4d77f6d12d2e09f8b038563844b24 /tests | |
parent | 0fb67ce43ea828db17fefc8df0ef8ec30b1a25c3 (diff) |
fix(ext/node): http2.createServer (#22708)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/serve_test.ts | 28 | ||||
-rw-r--r-- | tests/unit/test_util.ts | 33 | ||||
-rw-r--r-- | tests/unit_node/http2_test.ts | 57 |
3 files changed, 63 insertions, 55 deletions
diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts index 5d83aa5fc..9b2870ebd 100644 --- a/tests/unit/serve_test.ts +++ b/tests/unit/serve_test.ts @@ -8,6 +8,8 @@ import { assertEquals, assertStringIncludes, assertThrows, + curlRequest, + curlRequestWithStdErr, execCode, fail, tmpUnixSocketPath, @@ -3793,32 +3795,6 @@ Deno.test( }, ); -async function curlRequest(args: string[]) { - const { success, stdout, stderr } = await new Deno.Command("curl", { - args, - stdout: "piped", - stderr: "piped", - }).output(); - assert( - success, - `Failed to cURL ${args}: stdout\n\n${stdout}\n\nstderr:\n\n${stderr}`, - ); - return new TextDecoder().decode(stdout); -} - -async function curlRequestWithStdErr(args: string[]) { - const { success, stdout, stderr } = await new Deno.Command("curl", { - args, - stdout: "piped", - stderr: "piped", - }).output(); - assert( - success, - `Failed to cURL ${args}: stdout\n\n${stdout}\n\nstderr:\n\n${stderr}`, - ); - return [new TextDecoder().decode(stdout), new TextDecoder().decode(stderr)]; -} - Deno.test("Deno.HttpServer is not thenable", async () => { // deno-lint-ignore require-await async function serveTest() { diff --git a/tests/unit/test_util.ts b/tests/unit/test_util.ts index c73f52b15..ba9bf1839 100644 --- a/tests/unit/test_util.ts +++ b/tests/unit/test_util.ts @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import * as colors from "@std/fmt/colors.ts"; +import { assert } from "@std/assert/mod.ts"; export { colors }; import { join, resolve } from "@std/path/mod.ts"; export { @@ -85,3 +86,35 @@ export function tmpUnixSocketPath(): string { const folder = Deno.makeTempDirSync(); return join(folder, "socket"); } + +export async function curlRequest(args: string[]) { + const { success, stdout, stderr } = await new Deno.Command("curl", { + args, + stdout: "piped", + stderr: "piped", + }).output(); + const decoder = new TextDecoder(); + assert( + success, + `Failed to cURL ${args}: stdout\n\n${ + decoder.decode(stdout) + }\n\nstderr:\n\n${decoder.decode(stderr)}`, + ); + return decoder.decode(stdout); +} + +export async function curlRequestWithStdErr(args: string[]) { + const { success, stdout, stderr } = await new Deno.Command("curl", { + args, + stdout: "piped", + stderr: "piped", + }).output(); + const decoder = new TextDecoder(); + assert( + success, + `Failed to cURL ${args}: stdout\n\n${ + decoder.decode(stdout) + }\n\nstderr:\n\n${decoder.decode(stderr)}`, + ); + return [decoder.decode(stdout), decoder.decode(stderr)]; +} diff --git a/tests/unit_node/http2_test.ts b/tests/unit_node/http2_test.ts index fd9cdd0ec..872e6641e 100644 --- a/tests/unit_node/http2_test.ts +++ b/tests/unit_node/http2_test.ts @@ -3,6 +3,7 @@ import * as http2 from "node:http2"; import * as net from "node:net"; import { assert, assertEquals } from "@std/assert/mod.ts"; +import { curlRequest } from "../unit/test_util.ts"; for (const url of ["http://127.0.0.1:4246", "https://127.0.0.1:4247"]) { Deno.test(`[node/http2 client] ${url}`, { @@ -108,35 +109,6 @@ Deno.test(`[node/http2 client createConnection]`, { assertEquals(receivedData, "hello world\n"); }); -// TODO(bartlomieju): reenable sanitizers -Deno.test("[node/http2 server]", { sanitizeOps: false }, async () => { - const server = http2.createServer(); - server.listen(0); - const port = (<net.AddressInfo> server.address()).port; - const sessionPromise = new Promise<http2.Http2Session>((resolve) => - server.on("session", resolve) - ); - - const responsePromise = fetch(`http://localhost:${port}/path`, { - method: "POST", - body: "body", - }); - - const session = await sessionPromise; - const stream = await new Promise<http2.ServerHttp2Stream>((resolve) => - session.on("stream", resolve) - ); - await new Promise((resolve) => stream.on("headers", resolve)); - await new Promise((resolve) => stream.on("data", resolve)); - await new Promise((resolve) => stream.on("end", resolve)); - stream.respond(); - stream.end(); - const resp = await responsePromise; - await resp.text(); - - await new Promise((resolve) => server.close(resolve)); -}); - Deno.test("[node/http2 client GET https://www.example.com]", async () => { const clientSession = http2.connect("https://www.example.com"); const req = clientSession.request({ @@ -165,3 +137,30 @@ Deno.test("[node/http2 client GET https://www.example.com]", async () => { assertEquals(status, 200); assert(chunk.length > 0); }); + +Deno.test("[node/http2.createServer()]", { + // TODO(satyarohith): enable the test on windows. + ignore: Deno.build.os === "windows", +}, async () => { + const server = http2.createServer((_req, res) => { + res.setHeader("Content-Type", "text/html"); + res.setHeader("X-Foo", "bar"); + res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" }); + res.write("Hello, World!"); + res.end(); + }); + server.listen(0); + const port = (<net.AddressInfo> server.address()).port; + const endpoint = `http://localhost:${port}`; + + const response = await curlRequest([ + endpoint, + "--http2-prior-knowledge", + ]); + assertEquals(response, "Hello, World!"); + server.close(); + // Wait to avoid leaking the timer from here + // https://github.com/denoland/deno/blob/749b6e45e58ac87188027f79fe403d130f86bd73/ext/node/polyfills/net.ts#L2396-L2402 + // Issue: https://github.com/denoland/deno/issues/22764 + await new Promise<void>((resolve) => server.on("close", resolve)); +}); |