Files
clawdbot/src/infra/transport-ready.test.ts
2026-01-16 23:03:12 +00:00

55 lines
1.6 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { waitForTransportReady } from "./transport-ready.js";
describe("waitForTransportReady", () => {
it("returns when the check succeeds and logs after the delay", async () => {
const runtime = { log: vi.fn(), error: vi.fn(), exit: vi.fn() };
let attempts = 0;
await waitForTransportReady({
label: "test transport",
timeoutMs: 500,
logAfterMs: 120,
logIntervalMs: 100,
pollIntervalMs: 80,
runtime,
check: async () => {
attempts += 1;
if (attempts > 4) return { ok: true };
return { ok: false, error: "not ready" };
},
});
expect(runtime.error).toHaveBeenCalled();
});
it("throws after the timeout", async () => {
const runtime = { log: vi.fn(), error: vi.fn(), exit: vi.fn() };
await expect(
waitForTransportReady({
label: "test transport",
timeoutMs: 200,
logAfterMs: 0,
logIntervalMs: 100,
pollIntervalMs: 50,
runtime,
check: async () => ({ ok: false, error: "still down" }),
}),
).rejects.toThrow("test transport not ready");
expect(runtime.error).toHaveBeenCalled();
});
it("returns early when aborted", async () => {
const runtime = { log: vi.fn(), error: vi.fn(), exit: vi.fn() };
const controller = new AbortController();
controller.abort();
await waitForTransportReady({
label: "test transport",
timeoutMs: 200,
runtime,
abortSignal: controller.signal,
check: async () => ({ ok: false, error: "still down" }),
});
expect(runtime.error).not.toHaveBeenCalled();
});
});