diff --git a/src/agents/pi-embedded-runner/run/llm-idle-timeout.test.ts b/src/agents/pi-embedded-runner/run/llm-idle-timeout.test.ts index ea3d51d5770..1eb8432da4e 100644 --- a/src/agents/pi-embedded-runner/run/llm-idle-timeout.test.ts +++ b/src/agents/pi-embedded-runner/run/llm-idle-timeout.test.ts @@ -127,6 +127,18 @@ describe("streamWithIdleTimeout", () => { }; } + function createNeverYieldingStream(): AsyncIterable { + return { + [Symbol.asyncIterator]() { + return { + async next() { + return new Promise>(() => {}); + }, + }; + }, + }; + } + it("wraps stream function", () => { const mockStream = createMockAsyncIterable([]); const baseFn = vi.fn().mockReturnValue(mockStream); @@ -150,18 +162,7 @@ describe("streamWithIdleTimeout", () => { it("throws on idle timeout", async () => { vi.useFakeTimers(); - // Create a stream that never yields - const slowStream: AsyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - // Never resolves - simulates hung LLM - return new Promise>(() => {}); - }, - }; - }, - }; - + const slowStream = createNeverYieldingStream(); const baseFn = vi.fn().mockReturnValue(slowStream); const wrapped = streamWithIdleTimeout(baseFn, 50); // 50ms timeout @@ -242,18 +243,7 @@ describe("streamWithIdleTimeout", () => { it("calls timeout hook on idle timeout", async () => { vi.useFakeTimers(); - // Create a stream that never yields - const slowStream: AsyncIterable = { - [Symbol.asyncIterator]() { - return { - async next() { - // Never resolves - simulates hung LLM - return new Promise>(() => {}); - }, - }; - }, - }; - + const slowStream = createNeverYieldingStream(); const baseFn = vi.fn().mockReturnValue(slowStream); const onIdleTimeout = vi.fn(); const wrapped = streamWithIdleTimeout(baseFn, 50, onIdleTimeout); // 50ms timeout