diff --git a/src/main/windowsJobObject.test.ts b/src/main/windowsJobObject.test.ts index f43c3e1..3e7779b 100644 --- a/src/main/windowsJobObject.test.ts +++ b/src/main/windowsJobObject.test.ts @@ -70,7 +70,7 @@ function createMockChild() { return child; } -describe.skipIf(process.platform !== "win32")("WindowsJobObjectManager", () => { +describe("WindowsJobObjectManager", () => { const platformDescriptor = Object.getOwnPropertyDescriptor(process, "platform"); beforeEach(() => { @@ -138,6 +138,39 @@ describe.skipIf(process.platform !== "win32")("WindowsJobObjectManager", () => { await expect(pending).rejects.toThrow(/failed to start/i); }); + it("allows slow helper startup beyond the old five second watchdog", async () => { + vi.useFakeTimers(); + const child = createMockChild(); + spawnMock.mockReturnValue(child); + + const manager = new WindowsJobObjectManager(); + const pending = manager.start(); + + await vi.advanceTimersByTimeAsync(5_000); + child.stdout.write('{"type":"ready"}\n'); + + await expect(pending).resolves.toBeUndefined(); + }); + + it("rejects startup when the helper never becomes ready", async () => { + vi.useFakeTimers(); + const child = createMockChild(); + spawnMock.mockReturnValue(child); + + const manager = new WindowsJobObjectManager(); + const pending = manager.start(); + let startupError: unknown; + const handledPending = pending.catch((error: unknown) => { + startupError = error; + }); + + await vi.advanceTimersByTimeAsync(30_000); + + await handledPending; + expect(startupError).toBeInstanceOf(Error); + expect((startupError as Error).message).toMatch(/timed out after 30000ms/i); + }); + it("sends an exit command and ends stdin on dispose", async () => { const child = createMockChild(); const writes: string[] = []; diff --git a/src/main/windowsJobObject.ts b/src/main/windowsJobObject.ts index b1f7d78..9f1157f 100644 --- a/src/main/windowsJobObject.ts +++ b/src/main/windowsJobObject.ts @@ -25,7 +25,7 @@ interface HelperErrorMessage { type HelperMessage = HelperReadyMessage | HelperAssignedMessage | HelperErrorMessage; -const START_TIMEOUT_MS = 5_000; +const START_TIMEOUT_MS = 30_000; const DISPOSE_GRACE_MS = 500; function buildHelperScript(): string {