Files
harness-tools/__archived/extensions/_workflows/controller.test.ts
T

70 lines
2.3 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { MAX_AGENT_CALLS, RunController } from "./controller.ts";
const delay = (milliseconds: number) =>
new Promise<void>((resolve) => setTimeout(resolve, milliseconds));
test("RunController reserves calls synchronously and caps global fanout", async () => {
const controller = new RunController(undefined, 4);
let active = 0;
let peak = 0;
const tasks = Array.from({ length: 12 }, (_, index) =>
controller.schedule(async () => {
active++;
peak = Math.max(peak, active);
await delay(5);
active--;
return index;
}),
);
assert.deepEqual(
await Promise.all(tasks),
Array.from({ length: 12 }, (_, i) => i),
);
assert.equal(peak, 4);
assert.equal(await controller.settle(), true);
});
test("RunController propagates invocation cancellation without aborting the run", async () => {
const controller = new RunController(undefined, 1);
const invocation = new AbortController();
const pending = controller.schedule(
(signal) =>
new Promise<string>((resolve) => {
signal.addEventListener("abort", () => resolve("stopped"), {
once: true,
});
}),
invocation.signal,
);
invocation.abort(new Error("Workflow agent request was cancelled"));
await assert.rejects(pending, /request was cancelled/);
assert.equal(controller.signal.aborted, false);
assert.equal(await controller.schedule(async () => "recovered"), "recovered");
assert.equal(await controller.settle(), true);
});
test("RunController enforces call budget and aborts queued tasks", async () => {
const controller = new RunController(undefined, 1);
const blocker = controller.schedule(
(signal) =>
new Promise<void>((resolve) =>
signal.addEventListener("abort", () => resolve(), { once: true }),
),
);
const queued = Array.from({ length: MAX_AGENT_CALLS - 1 }, () =>
controller.schedule(async () => "queued"),
);
await assert.rejects(
controller.schedule(async () => "too many"),
/exceeded the limit/,
);
controller.abort();
await blocker;
const results = await Promise.allSettled(queued);
assert.ok(results.every((result) => result.status === "rejected"));
assert.equal(await controller.settle({ abort: true }), true);
});