mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Add a request.signal test with Bun.serve
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { file, gc, serve } from "bun";
|
||||
import { file, gc, Serve, serve, Server } from "bun";
|
||||
import { afterEach, describe, it, expect, afterAll } from "bun:test";
|
||||
import { readFileSync, writeFileSync } from "fs";
|
||||
import { resolve } from "path";
|
||||
@@ -7,19 +7,18 @@ afterEach(() => gc(true));
|
||||
|
||||
const count = 200;
|
||||
let port = 10000;
|
||||
let server;
|
||||
let server: Server | undefined;
|
||||
|
||||
async function runTest(serverOptions, test) {
|
||||
async function runTest({ port, ...serverOptions }: Serve<any>, test: (server: Serve<any>) => Promise<void> | void) {
|
||||
if (server) {
|
||||
server.reload(serverOptions);
|
||||
server.reload({ ...serverOptions, port: 0 });
|
||||
} else {
|
||||
while (!server) {
|
||||
try {
|
||||
serverOptions.port = port++;
|
||||
server = serve(serverOptions);
|
||||
server = serve({ ...serverOptions, port: 0 });
|
||||
break;
|
||||
} catch (e: any) {
|
||||
if (e?.message !== `Failed to start server. Is port ${serverOptions.port} in use?`) {
|
||||
if (e?.message !== `Failed to start server `) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
@@ -85,6 +84,35 @@ it("should display a welcome message when the response value type is incorrect",
|
||||
);
|
||||
});
|
||||
|
||||
it("request.signal works in trivial case", async () => {
|
||||
var aborty = new AbortController();
|
||||
var didAbort = false;
|
||||
await runTest(
|
||||
{
|
||||
async fetch(req) {
|
||||
req.signal.addEventListener("abort", () => {
|
||||
didAbort = true;
|
||||
});
|
||||
expect(didAbort).toBe(false);
|
||||
aborty.abort();
|
||||
await Bun.sleep(2);
|
||||
return new Response("Test failed!");
|
||||
},
|
||||
},
|
||||
async server => {
|
||||
try {
|
||||
await fetch(`http://${server.hostname}:${server.port}`, { signal: aborty.signal });
|
||||
throw new Error("Expected fetch to throw");
|
||||
} catch (e: any) {
|
||||
expect(e.name).toBe("AbortError");
|
||||
}
|
||||
await Bun.sleep(1);
|
||||
|
||||
expect(didAbort).toBe(true);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
it("should work for a file", async () => {
|
||||
const fixture = resolve(import.meta.dir, "./fetch.js.txt");
|
||||
const textToExpect = readFileSync(fixture, "utf-8");
|
||||
|
||||
Reference in New Issue
Block a user