summaryrefslogtreecommitdiff
path: root/tests/unit/serve_test.ts
diff options
context:
space:
mode:
authorhaturau <135221985+haturatu@users.noreply.github.com>2024-11-20 01:20:47 +0900
committerGitHub <noreply@github.com>2024-11-20 01:20:47 +0900
commit85719a67e59c7aa45bead26e4942d7df8b1b42d4 (patch)
treeface0aecaac53e93ce2f23b53c48859bcf1a36ec /tests/unit/serve_test.ts
parent67697bc2e4a62a9670699fd18ad0dd8efc5bd955 (diff)
parent186b52731c6bb326c4d32905c5e732d082e83465 (diff)
Merge branch 'denoland:main' into main
Diffstat (limited to 'tests/unit/serve_test.ts')
-rw-r--r--tests/unit/serve_test.ts57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts
index 439d71d55..7d8c6ca06 100644
--- a/tests/unit/serve_test.ts
+++ b/tests/unit/serve_test.ts
@@ -4270,3 +4270,60 @@ Deno.test({
assertEquals(hostname, "0.0.0.0");
await server.shutdown();
});
+
+Deno.test({
+ name: "AbortSignal aborted when request is cancelled",
+}, async () => {
+ const { promise, resolve } = Promise.withResolvers<void>();
+
+ let cancelled = false;
+
+ const server = Deno.serve({
+ hostname: "0.0.0.0",
+ port: servePort,
+ onListen: () => resolve(),
+ }, async (request) => {
+ request.signal.addEventListener("abort", () => cancelled = true);
+ assert(!request.signal.aborted);
+ await new Promise((resolve) => setTimeout(resolve, 3000)); // abort during waiting
+ assert(request.signal.aborted);
+ return new Response("Ok");
+ });
+
+ await promise;
+ await fetch(`http://localhost:${servePort}/`, {
+ signal: AbortSignal.timeout(1000),
+ }).catch(() => {});
+
+ await server.shutdown();
+
+ assert(cancelled);
+});
+
+Deno.test({
+ name: "AbortSignal event aborted when request is cancelled",
+}, async () => {
+ const { promise, resolve } = Promise.withResolvers<void>();
+
+ const server = Deno.serve({
+ hostname: "0.0.0.0",
+ port: servePort,
+ onListen: () => resolve(),
+ }, async (request) => {
+ const { promise: promiseAbort, resolve: resolveAbort } = Promise
+ .withResolvers<void>();
+ request.signal.addEventListener("abort", () => resolveAbort());
+ assert(!request.signal.aborted);
+
+ await promiseAbort;
+
+ return new Response("Ok");
+ });
+
+ await promise;
+ await fetch(`http://localhost:${servePort}/`, {
+ signal: AbortSignal.timeout(100),
+ }).catch(() => {});
+
+ await server.shutdown();
+});