mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 10:21:24 +00:00
refactor(test): share gateway server start helper
This commit is contained in:
@@ -331,6 +331,43 @@ export async function startGatewayServer(port: number, opts?: GatewayServerOptio
|
||||
return await mod.startGatewayServer(port, resolvedOpts);
|
||||
}
|
||||
|
||||
async function startGatewayServerWithRetries(params: {
|
||||
port: number;
|
||||
opts?: GatewayServerOptions;
|
||||
}): Promise<{ port: number; server: Awaited<ReturnType<typeof startGatewayServer>> }> {
|
||||
let port = params.port;
|
||||
for (let attempt = 0; attempt < 10; attempt++) {
|
||||
try {
|
||||
return {
|
||||
port,
|
||||
server: await startGatewayServer(port, params.opts),
|
||||
};
|
||||
} catch (err) {
|
||||
const code = (err as { cause?: { code?: string } }).cause?.code;
|
||||
if (code !== "EADDRINUSE") {
|
||||
throw err;
|
||||
}
|
||||
port = await getFreePort();
|
||||
}
|
||||
}
|
||||
throw new Error("failed to start gateway server after retries");
|
||||
}
|
||||
|
||||
export async function withGatewayServer<T>(
|
||||
fn: (ctx: { port: number; server: Awaited<ReturnType<typeof startGatewayServer>> }) => Promise<T>,
|
||||
opts?: { port?: number; serverOptions?: GatewayServerOptions },
|
||||
): Promise<T> {
|
||||
const started = await startGatewayServerWithRetries({
|
||||
port: opts?.port ?? (await getFreePort()),
|
||||
opts: opts?.serverOptions,
|
||||
});
|
||||
try {
|
||||
return await fn({ port: started.port, server: started.server });
|
||||
} finally {
|
||||
await started.server.close();
|
||||
}
|
||||
}
|
||||
|
||||
export async function startServerWithClient(
|
||||
token?: string,
|
||||
opts?: GatewayServerOptions & { wsHeaders?: Record<string, string> },
|
||||
@@ -352,22 +389,9 @@ export async function startServerWithClient(
|
||||
process.env.OPENCLAW_GATEWAY_TOKEN = fallbackToken;
|
||||
}
|
||||
|
||||
let server: Awaited<ReturnType<typeof startGatewayServer>> | null = null;
|
||||
for (let attempt = 0; attempt < 10; attempt++) {
|
||||
try {
|
||||
server = await startGatewayServer(port, gatewayOpts);
|
||||
break;
|
||||
} catch (err) {
|
||||
const code = (err as { cause?: { code?: string } }).cause?.code;
|
||||
if (code !== "EADDRINUSE") {
|
||||
throw err;
|
||||
}
|
||||
port = await getFreePort();
|
||||
}
|
||||
}
|
||||
if (!server) {
|
||||
throw new Error("failed to start gateway server after retries");
|
||||
}
|
||||
const started = await startGatewayServerWithRetries({ port, opts: gatewayOpts });
|
||||
port = started.port;
|
||||
const server = started.server;
|
||||
|
||||
const ws = new WebSocket(
|
||||
`ws://127.0.0.1:${port}`,
|
||||
|
||||
Reference in New Issue
Block a user