From b08569f6fdc130810ad73fcec34ebcee72fbe25f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 1 Aug 2026 22:22:44 -0700 Subject: [PATCH] test(gateway): isolate startup event-loop guard (#117842) --- .../server-startup-model-runtime.event-loop.test.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gateway/server-startup-model-runtime.event-loop.test.ts b/src/gateway/server-startup-model-runtime.event-loop.test.ts index 4e4120f08ad2..6fd44f700b3c 100644 --- a/src/gateway/server-startup-model-runtime.event-loop.test.ts +++ b/src/gateway/server-startup-model-runtime.event-loop.test.ts @@ -87,12 +87,13 @@ async function listenHealthz(): Promise<{ port: number; close: () => Promise((resolve) => { setTimeout(resolve, delayMs); }); const response = await fetch(`http://127.0.0.1:${port}/healthz`); - return { elapsedMs: performance.now() - startedAt, response }; + const cpuUsage = process.threadCpuUsage(cpuStartedAt); + return { cpuMs: (cpuUsage.user + cpuUsage.system) / 1_000, response }; } afterEach(() => { @@ -163,11 +164,11 @@ describe("Gateway prepared model runtime startup", () => { logChannels: { info: vi.fn(), error: vi.fn() }, }); - const [{ elapsedMs, response }] = await Promise.all([probe, sidecars]); + const [{ cpuMs, response }] = await Promise.all([probe, sidecars]); expect(response.status).toBe(200); - // The configured model is already resolved from manifest facts. Either provider hook - // would deliberately block the event loop well beyond this responsiveness guard. - expect(elapsedMs).toBeLessThan(1_000); + // Current-thread CPU isolates startup work from runner descheduling. Either provider + // hook would consume well beyond this budget while starving health-probe handling. + expect(cpuMs).toBeLessThan(1_000); expect(providerMocks.staticCatalog).not.toHaveBeenCalled(); expect(providerMocks.liveCatalog).not.toHaveBeenCalled(); },