mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 10:11:36 +00:00
refactor(test): dedupe run-loop signal harness setup
This commit is contained in:
@@ -129,31 +129,21 @@ async function waitForStart(started: Promise<void>) {
|
|||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
await new Promise<void>((resolve) => setImmediate(resolve));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function createSignaledLoopHarness(exitCallOrder?: string[]) {
|
||||||
|
const close = vi.fn(async () => {});
|
||||||
|
const { start, started } = createSignaledStart(close);
|
||||||
|
const { runtime, exited } = createRuntimeWithExitSignal(exitCallOrder);
|
||||||
|
const { loopPromise } = await runLoopWithStart({ start, runtime });
|
||||||
|
await waitForStart(started);
|
||||||
|
return { close, start, runtime, exited, loopPromise };
|
||||||
|
}
|
||||||
|
|
||||||
describe("runGatewayLoop", () => {
|
describe("runGatewayLoop", () => {
|
||||||
it("exits 0 on SIGTERM after graceful close", async () => {
|
it("exits 0 on SIGTERM after graceful close", async () => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
|
|
||||||
await withIsolatedSignals(async () => {
|
await withIsolatedSignals(async () => {
|
||||||
const close = vi.fn(async () => {});
|
const { close, runtime, exited } = await createSignaledLoopHarness();
|
||||||
let resolveStarted: (() => void) | null = null;
|
|
||||||
const started = new Promise<void>((resolve) => {
|
|
||||||
resolveStarted = resolve;
|
|
||||||
});
|
|
||||||
const start = vi.fn(async () => {
|
|
||||||
resolveStarted?.();
|
|
||||||
return { close };
|
|
||||||
});
|
|
||||||
const { runtime, exited } = createRuntimeWithExitSignal();
|
|
||||||
|
|
||||||
vi.resetModules();
|
|
||||||
const { runGatewayLoop } = await import("./run-loop.js");
|
|
||||||
const _loopPromise = runGatewayLoop({
|
|
||||||
start: start as unknown as Parameters<typeof runGatewayLoop>[0]["start"],
|
|
||||||
runtime: runtime as unknown as Parameters<typeof runGatewayLoop>[0]["runtime"],
|
|
||||||
});
|
|
||||||
|
|
||||||
await started;
|
|
||||||
await new Promise<void>((resolve) => setImmediate(resolve));
|
|
||||||
|
|
||||||
process.emit("SIGTERM");
|
process.emit("SIGTERM");
|
||||||
|
|
||||||
@@ -259,19 +249,12 @@ describe("runGatewayLoop", () => {
|
|||||||
pid: 9999,
|
pid: 9999,
|
||||||
});
|
});
|
||||||
|
|
||||||
const close = vi.fn(async () => {});
|
|
||||||
const { start, started } = createSignaledStart(close);
|
|
||||||
|
|
||||||
const exitCallOrder: string[] = [];
|
const exitCallOrder: string[] = [];
|
||||||
const { runtime, exited } = createRuntimeWithExitSignal(exitCallOrder);
|
const { runtime, exited } = await createSignaledLoopHarness(exitCallOrder);
|
||||||
lockRelease.mockImplementation(async () => {
|
lockRelease.mockImplementation(async () => {
|
||||||
exitCallOrder.push("lockRelease");
|
exitCallOrder.push("lockRelease");
|
||||||
});
|
});
|
||||||
|
|
||||||
const { loopPromise: _loopPromise } = await runLoopWithStart({ start, runtime });
|
|
||||||
|
|
||||||
await waitForStart(started);
|
|
||||||
|
|
||||||
process.emit("SIGUSR1");
|
process.emit("SIGUSR1");
|
||||||
|
|
||||||
await exited;
|
await exited;
|
||||||
@@ -329,14 +312,7 @@ describe("runGatewayLoop", () => {
|
|||||||
mode: "disabled",
|
mode: "disabled",
|
||||||
});
|
});
|
||||||
|
|
||||||
const close = vi.fn(async () => {});
|
const { start, exited } = await createSignaledLoopHarness();
|
||||||
const { start, started } = createSignaledStart(close);
|
|
||||||
|
|
||||||
const { runtime, exited } = createRuntimeWithExitSignal();
|
|
||||||
|
|
||||||
const { loopPromise: _loopPromise } = await runLoopWithStart({ start, runtime });
|
|
||||||
|
|
||||||
await waitForStart(started);
|
|
||||||
process.emit("SIGUSR1");
|
process.emit("SIGUSR1");
|
||||||
|
|
||||||
await expect(exited).resolves.toBe(1);
|
await expect(exited).resolves.toBe(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user