Files
bun.sh/test/js/bun/http/serve-direct-readable-stream.test.ts

30 lines
913 B
TypeScript

import { sleep } from "bun";
import { expect, test } from "bun:test";
test("HTTPResponseSink displays correct message", async () => {
let leakedCtrl: any;
using server = Bun.serve({
port: 0,
async fetch(req) {
return new Response(
new ReadableStream({
type: "direct",
async pull(ctrl) {
await ctrl.write("a");
await sleep(10);
await ctrl.write("b");
ctrl.flush();
leakedCtrl = ctrl;
},
} as any),
);
},
});
let response = await fetch(server.url);
expect(await response.text()).toBe("ab");
expect(() => leakedCtrl.write("c")).toThrow(
'This HTTPResponseSink has already been closed. A "direct" ReadableStream terminates its underlying socket once `async pull()` returns.',
);
expect(() => leakedCtrl.write.call({}, "c")).toThrow("Expected HTTPResponseSink");
});