Skip to content

Commit 8d7104e

Browse files
committed
chore: more explicit logic in test
1 parent 19f37f7 commit 8d7104e

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

application.test.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,10 @@ Deno.test({
11161116
const { signal } = controller;
11171117
const p = app.listen({ signal });
11181118
controller.abort();
1119-
assertRejects(async () => await p, "aborted prematurely before 'listen' event");
1119+
assertRejects(
1120+
async () => await p,
1121+
"aborted prematurely before 'listen' event",
1122+
);
11201123
teardown();
11211124
},
11221125
});
@@ -1130,10 +1133,27 @@ Deno.test({
11301133
ctx.response.body = "hello world";
11311134
});
11321135
const { signal } = controller;
1133-
app.addEventListener("listen", () => controller.abort())
11341136
const p = app.listen({ signal });
1135-
await p;
1136-
teardown();
1137+
app.addEventListener("listen", async () => controller.abort());
1138+
const GRACEFUL_TIME = 1000;
1139+
let timer: number | undefined;
1140+
const raceResult = await Promise.race([
1141+
new Promise(async (resolve) => {
1142+
await p;
1143+
clearTimeout(timer);
1144+
resolve("resolved cleanly");
1145+
}),
1146+
new Promise((resolve) =>
1147+
timer = setTimeout(
1148+
() => resolve("likely forever pending"),
1149+
GRACEFUL_TIME,
1150+
)
1151+
),
1152+
]);
1153+
assert(
1154+
raceResult === "resolved cleanly",
1155+
`'listen promise' should resolve before ${GRACEFUL_TIME} ms`,
1156+
);
11371157
},
11381158
});
11391159

http_server_native.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ export class Server<AS extends State = Record<string, any>>
8181
const { promise, resolve } = createPromiseWithResolvers<Listener>();
8282
if (signal?.aborted) {
8383
// if user somehow aborted before `listen` is invoked, we throw
84-
return Promise.reject(new Error("aborted prematurely before 'listen' event"));
84+
return Promise.reject(
85+
new Error("aborted prematurely before 'listen' event"),
86+
);
8587
}
8688
this.#stream = new ReadableStream<NativeRequest>({
8789
start: (controller) => {
@@ -102,7 +104,9 @@ export class Server<AS extends State = Record<string, any>>
102104
});
103105
// closinng stream, so that the Application listen promise can resolve itself
104106
// https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController/close
105-
signal?.addEventListener("abort", () => controller.close(), { once: true });
107+
signal?.addEventListener("abort", () => controller.close(), {
108+
once: true,
109+
});
106110
},
107111
});
108112

0 commit comments

Comments
 (0)