|
1 | 1 | import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; |
| 2 | +import { MAX_TIMER_TIMEOUT_MS } from "../shared/number-coercion.js"; |
2 | 3 | |
3 | 4 | const transportReadyMocks = vi.hoisted(() => ({ |
4 | 5 | injectedSleepError: null as Error | null, |
@@ -106,6 +107,29 @@ describe("waitForTransportReady", () => {
|
106 | 107 | expect(runtime.error).toHaveBeenCalled(); |
107 | 108 | }); |
108 | 109 | |
| 110 | +it("caps oversized timeout values before computing the deadline", async () => { |
| 111 | +vi.setSystemTime(1_000); |
| 112 | +const runtime = createRuntime(); |
| 113 | +const waitPromise = waitForTransportReady({ |
| 114 | +label: "test transport", |
| 115 | +timeoutMs: Number.MAX_SAFE_INTEGER, |
| 116 | +logAfterMs: Number.MAX_SAFE_INTEGER, |
| 117 | +pollIntervalMs: Number.MAX_SAFE_INTEGER, |
| 118 | + runtime, |
| 119 | +check: async () => ({ ok: false, error: "still down" }), |
| 120 | +}); |
| 121 | +const asserted = expect(waitPromise).rejects.toThrow("test transport not ready"); |
| 122 | + |
| 123 | +await vi.advanceTimersByTimeAsync(1); |
| 124 | +expect(runtime.error).not.toHaveBeenCalled(); |
| 125 | + |
| 126 | +await vi.advanceTimersByTimeAsync(MAX_TIMER_TIMEOUT_MS - 1); |
| 127 | +await asserted; |
| 128 | +expect(latestRuntimeErrorMessage(runtime)).toContain( |
| 129 | +`not ready after ${MAX_TIMER_TIMEOUT_MS}ms`, |
| 130 | +); |
| 131 | +}); |
| 132 | + |
109 | 133 | it("returns early when aborted", async () => { |
110 | 134 | const runtime = createRuntime(); |
111 | 135 | const controller = new AbortController(); |
|