From a0c850d18816ceb1cc4d71392c4d6934f680afa4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 28 Apr 2026 02:37:21 +0100 Subject: [PATCH] test: stabilize gateway restart loop signals --- src/cli/gateway-cli/run-loop.test.ts | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/cli/gateway-cli/run-loop.test.ts b/src/cli/gateway-cli/run-loop.test.ts index cb9c466bc40..02e3198d0be 100644 --- a/src/cli/gateway-cli/run-loop.test.ts +++ b/src/cli/gateway-cli/run-loop.test.ts @@ -241,20 +241,6 @@ async function waitForStart(started: Promise) { await new Promise((resolve) => setImmediate(resolve)); } -async function waitForAssertion(assertion: () => void, maxTicks = 20) { - for (let tick = 0; tick < maxTicks; tick += 1) { - try { - assertion(); - return; - } catch (err) { - if (tick === maxTicks - 1) { - throw err; - } - await new Promise((resolve) => setImmediate(resolve)); - } - } -} - async function createSignaledLoopHarness(exitCallOrder?: string[]) { const close = vi.fn(async () => {}); const { start, started } = createSignaledStart(close); @@ -292,10 +278,17 @@ describe("runGatewayLoop", () => { const closeFirst = vi.fn(async () => {}); const closeSecond = vi.fn(async () => {}); const { runtime, exited } = createRuntimeWithExitSignal(); + let resolveSecond: (() => void) | null = null; + const startedSecond = new Promise((resolve) => { + resolveSecond = resolve; + }); const start = vi .fn() .mockResolvedValueOnce({ close: closeFirst }) - .mockResolvedValueOnce({ close: closeSecond }); + .mockImplementationOnce(async () => { + resolveSecond?.(); + return { close: closeSecond }; + }); const { runGatewayLoop } = await import("./run-loop.js"); void runGatewayLoop({ start: start as unknown as Parameters[0]["start"], @@ -316,7 +309,9 @@ describe("runGatewayLoop", () => { reason: "gateway restarting", restartExpectedMs: 1500, }); - await waitForAssertion(() => expect(start).toHaveBeenCalledTimes(2)); + await startedSecond; + expect(start).toHaveBeenCalledTimes(2); + await new Promise((resolve) => setImmediate(resolve)); sigint(); await expect(exited).resolves.toBe(0);