From b9262130fec34137e38c922015c6b671c0fa9396 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Thu, 7 Nov 2024 17:12:13 +0530 Subject: feat(ext/http): abort signal when request is cancelled (#26761) Closes https://github.com/denoland/deno/issues/21653 --- tests/unit/serve_test.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'tests/unit/serve_test.ts') diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts index 439d71d55..9822a0ce2 100644 --- a/tests/unit/serve_test.ts +++ b/tests/unit/serve_test.ts @@ -4270,3 +4270,32 @@ 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(); + + 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); +}); -- cgit v1.2.3 From b482a50299ae4f636a186038460e54af65e2b627 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Fri, 8 Nov 2024 18:46:11 +0530 Subject: feat(ext/http): abort event when request is cancelled (#26781) ```js Deno.serve(async (req) => { const { promise, resolve } = Promise.withResolvers(); req.signal.addEventListener("abort", () => { resolve(); }); await promise; return new Response("Ok"); }); ``` --- tests/unit/serve_test.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'tests/unit/serve_test.ts') diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts index 9822a0ce2..7d8c6ca06 100644 --- a/tests/unit/serve_test.ts +++ b/tests/unit/serve_test.ts @@ -4299,3 +4299,31 @@ Deno.test({ assert(cancelled); }); + +Deno.test({ + name: "AbortSignal event aborted when request is cancelled", +}, async () => { + const { promise, resolve } = Promise.withResolvers(); + + const server = Deno.serve({ + hostname: "0.0.0.0", + port: servePort, + onListen: () => resolve(), + }, async (request) => { + const { promise: promiseAbort, resolve: resolveAbort } = Promise + .withResolvers(); + 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(); +}); -- cgit v1.2.3