aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/bun.js/serve.test.ts42
1 files changed, 35 insertions, 7 deletions
diff --git a/test/bun.js/serve.test.ts b/test/bun.js/serve.test.ts
index f1fdabd00..d5581cf7c 100644
--- a/test/bun.js/serve.test.ts
+++ b/test/bun.js/serve.test.ts
@@ -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");