test: bound canvas auth helper waits

This commit is contained in:
Peter Steinberger
2026-04-14 02:23:03 +01:00
parent 36820f1676
commit 366ee11a80

View File

@@ -13,6 +13,8 @@ import { withTempConfig } from "./test-temp-config.js";
const WS_REJECT_TIMEOUT_MS = 2_000;
const WS_CONNECT_TIMEOUT_MS = 5_000;
const HTTP_REQUEST_TIMEOUT_MS = 5_000;
const SERVER_CLOSE_TIMEOUT_MS = 5_000;
function isConnectionReset(value: unknown): boolean {
let current: unknown = value;
@@ -30,13 +32,33 @@ function isConnectionReset(value: unknown): boolean {
}
async function fetchCanvas(input: string, init?: RequestInit): Promise<Response> {
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), HTTP_REQUEST_TIMEOUT_MS);
try {
return await fetch(input, init);
return await fetch(input, { ...init, signal: controller.signal });
} catch (err) {
if (isConnectionReset(err)) {
return await fetch(input, init);
return await fetch(input, { ...init, signal: controller.signal });
}
throw err;
} finally {
clearTimeout(timer);
}
}
async function withTimeout<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T> {
let timer: ReturnType<typeof setTimeout> | undefined;
try {
return await Promise.race([
promise,
new Promise<never>((_, reject) => {
timer = setTimeout(() => reject(new Error(`${label} timed out`)), timeoutMs);
}),
]);
} finally {
if (timer) {
clearTimeout(timer);
}
}
}
@@ -65,8 +87,12 @@ async function listen(
for (const socket of sockets) {
socket.destroy();
}
await new Promise<void>((resolve, reject) =>
server.close((err) => (err ? reject(err) : resolve())),
await withTimeout(
new Promise<void>((resolve, reject) =>
server.close((err) => (err ? reject(err) : resolve())),
),
SERVER_CLOSE_TIMEOUT_MS,
"gateway test server close",
);
},
};