diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-06-14 06:38:50 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-14 06:38:50 +0530 |
commit | e19ee6eecc416a99801231ac53f2c512ba1f81dd (patch) | |
tree | 357c002418e444777c4f4189f216359cd4360bbb /tests/unit_node/http_test.ts | |
parent | 368eb9073bff776b8bb49480b98ca4628ebdc7cd (diff) |
fix(ext/node): `server.close()` does graceful shutdown (#24184)
Diffstat (limited to 'tests/unit_node/http_test.ts')
-rw-r--r-- | tests/unit_node/http_test.ts | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/unit_node/http_test.ts b/tests/unit_node/http_test.ts index 2b2644272..ca3c658ad 100644 --- a/tests/unit_node/http_test.ts +++ b/tests/unit_node/http_test.ts @@ -2,6 +2,7 @@ import EventEmitter from "node:events"; import http, { type RequestOptions } from "node:http"; +import url from "node:url"; import https from "node:https"; import net from "node:net"; import { assert, assertEquals, fail } from "@std/assert/mod.ts"; @@ -1040,3 +1041,66 @@ Deno.test("[node/http] ServerResponse default status code 200", () => { Deno.test("[node/http] maxHeaderSize is defined", () => { assertEquals(http.maxHeaderSize, 16_384); }); + +Deno.test("[node/http] server graceful close", async () => { + const server = http.createServer(function (_, response) { + response.writeHead(200, {}); + response.end("ok"); + server.close(); + }); + + const { promise, resolve } = Promise.withResolvers<void>(); + server.listen(0, function () { + // deno-lint-ignore no-explicit-any + const port = (server.address() as any).port; + const testURL = url.parse( + `http://localhost:${port}`, + ); + + http.request(testURL, function (response) { + assertEquals(response.statusCode, 200); + response.on("data", function () {}); + response.on("end", function () { + resolve(); + }); + }).end(); + }); + + await promise; +}); + +Deno.test("[node/http] server closeAllConnections shutdown", async () => { + const server = http.createServer((_req, res) => { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ + data: "Hello World!", + })); + }); + + server.listen(0); + const { promise, resolve } = Promise.withResolvers<void>(); + setTimeout(() => { + server.close(() => resolve()); + server.closeAllConnections(); + }, 2000); + + await promise; +}); + +Deno.test("[node/http] server closeIdleConnections shutdown", async () => { + const server = http.createServer({ keepAliveTimeout: 60000 }, (_req, res) => { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ + data: "Hello World!", + })); + }); + + server.listen(0); + const { promise, resolve } = Promise.withResolvers<void>(); + setTimeout(() => { + server.close(() => resolve()); + server.closeIdleConnections(); + }, 2000); + + await promise; +}); |