diff options
Diffstat (limited to 'test/bun.js')
-rw-r--r-- | test/bun.js/bun-server.test.ts | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/test/bun.js/bun-server.test.ts b/test/bun.js/bun-server.test.ts index d5aae537e..6e0eab6fd 100644 --- a/test/bun.js/bun-server.test.ts +++ b/test/bun.js/bun-server.test.ts @@ -48,4 +48,118 @@ describe("Server", () => { server.stop(true); } }); + + test("abort signal on server should only fire if aborted", async () => { + { + const abortController = new AbortController(); + + let signalOnServer = false; + const server = Bun.serve({ + async fetch(req) { + req.signal.addEventListener("abort", () => { + signalOnServer = true; + }); + return new Response("Hello"); + }, + port: 0, + }); + + try { + await fetch(`http://${server.hostname}:${server.port}`, { signal: abortController.signal }); + } catch {} + expect(signalOnServer).toBe(false); + server.stop(true); + } + }); + + test("abort signal on server with direct stream", async () => { + { + let signalOnServer = false; + const abortController = new AbortController(); + + const server = Bun.serve({ + async fetch(req) { + req.signal.addEventListener("abort", () => { + signalOnServer = true; + }); + return new Response( + new ReadableStream({ + type: "direct", + async pull(controller) { + abortController.abort(); + + const buffer = await Bun.file(import.meta.dir + "/fixture.html.gz").arrayBuffer(); + controller.write(buffer); + + //wait to detect the connection abortion + await Bun.sleep(15); + + controller.close(); + }, + }), + { + headers: { + "Content-Encoding": "gzip", + "Content-Type": "text/html; charset=utf-8", + "Content-Length": "1", + }, + }, + ); + }, + port: 0, + }); + + try { + await fetch(`http://${server.hostname}:${server.port}`, { signal: abortController.signal }); + } catch {} + await Bun.sleep(10); + expect(signalOnServer).toBe(true); + server.stop(true); + } + }); + + test("abort signal on server with stream", async () => { + { + let signalOnServer = false; + const abortController = new AbortController(); + + const server = Bun.serve({ + async fetch(req) { + req.signal.addEventListener("abort", () => { + signalOnServer = true; + }); + return new Response( + new ReadableStream({ + async pull(controller) { + abortController.abort(); + + const buffer = await Bun.file(import.meta.dir + "/fixture.html.gz").arrayBuffer(); + controller.enqueue(buffer); + + //wait to detect the connection abortion + await Bun.sleep(15); + + controller.close(); + }, + }), + { + headers: { + "Content-Encoding": "gzip", + "Content-Type": "text/html; charset=utf-8", + "Content-Length": "1", + }, + }, + ); + }, + port: 0, + }); + + try { + await fetch(`http://${server.hostname}:${server.port}`, { signal: abortController.signal }); + } catch {} + await Bun.sleep(10); + expect(signalOnServer).toBe(true); + server.stop(true); + } + }); }); |