diff options
author | 2023-03-02 02:40:11 -0300 | |
---|---|---|
committer | 2023-03-01 21:40:11 -0800 | |
commit | 1be834b073420f4a00a8bb9aaf0de575eb39525d (patch) | |
tree | e0baeef23347e70e41bc193e264aa6e0a87fcf49 /test/bun.js/fetch.test.js | |
parent | b9137dbdc81591f8b30cf95a4d27514bfb1ae71c (diff) | |
download | bun-1be834b073420f4a00a8bb9aaf0de575eb39525d.tar.gz bun-1be834b073420f4a00a8bb9aaf0de575eb39525d.tar.zst bun-1be834b073420f4a00a8bb9aaf0de575eb39525d.zip |
fix bun server segfault with abortsignal (#2261)
* removed redundant tests, fixed server segfault
* fix onRejectStream, safer unassign signal
* fix abort Bun.serve signal.addEventListener on async
* move ctx.signal null check up
* keep original behavior of streams onAborted
Diffstat (limited to 'test/bun.js/fetch.test.js')
-rw-r--r-- | test/bun.js/fetch.test.js | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/test/bun.js/fetch.test.js b/test/bun.js/fetch.test.js index d8422dca4..1946681ad 100644 --- a/test/bun.js/fetch.test.js +++ b/test/bun.js/fetch.test.js @@ -27,115 +27,6 @@ afterEach(() => { const payload = new Uint8Array(1024 * 1024 * 2); crypto.getRandomValues(payload); -describe("AbortSignalStreamTest", async () => { - async function abortOnStage(body, stage) { - let error = undefined; - var abortController = new AbortController(); - { - const server = getServer({ - async fetch(request) { - let chunk_count = 0; - const reader = request.body.getReader(); - return Response( - new ReadableStream({ - async pull(controller) { - while (true) { - chunk_count++; - - const { done, value } = await reader.read(); - if (chunk_count == stage) { - abortController.abort(); - } - - if (done) { - controller.close(); - return; - } - controller.enqueue(value); - } - }, - }), - ); - }, - }); - - try { - const signal = abortController.signal; - - await fetch(`http://127.0.0.1:${server.port}`, { method: "POST", body, signal: signal }).then(res => - res.arrayBuffer(), - ); - } catch (ex) { - error = ex; - } - expect(error.name).toBe("AbortError"); - expect(error.message).toBe("The operation was aborted."); - expect(error instanceof DOMException).toBeTruthy(); - } - } - - for (let i = 1; i < 7; i++) { - it(`Abort after ${i} chunks`, async () => { - await abortOnStage(payload, i); - }); - } -}); - -describe("AbortSignalDirectStreamTest", () => { - async function abortOnStage(body, stage) { - let error = undefined; - var abortController = new AbortController(); - { - const server = getServer({ - async fetch(request) { - let chunk_count = 0; - const reader = request.body.getReader(); - return Response( - new ReadableStream({ - type: "direct", - async pull(controller) { - while (true) { - chunk_count++; - - const { done, value } = await reader.read(); - if (chunk_count == stage) { - abortController.abort(); - } - - if (done) { - controller.end(); - return; - } - controller.write(value); - } - }, - }), - ); - }, - }); - - try { - const signal = abortController.signal; - - await fetch(`http://127.0.0.1:${server.port}`, { method: "POST", body, signal: signal }).then(res => - res.arrayBuffer(), - ); - } catch (ex) { - error = ex; - } - expect(error.name).toBe("AbortError"); - expect(error.message).toBe("The operation was aborted."); - expect(error instanceof DOMException).toBeTruthy(); - } - } - - for (let i = 1; i < 7; i++) { - it(`Abort after ${i} chunks`, async () => { - await abortOnStage(payload, i); - }); - } -}); - describe("AbortSignal", () => { var server; beforeEach(() => { |