Files
llama-watch/tests/inflight-tracker.test.ts
T
bzuccaro 07fea457f1 fix: track in-flight requests by id; handle llama-swap upsert/remove events
llama-swap emits inflight events with operation 'upsert' (a single request,
re-emitted as elapsed_ms updates) and id-only 'remove' events. The decoder
ignored 'upsert' and dropped every id-only remove, so the tracker only ever
reflected the connect-time snapshot and the count got stuck (e.g. at '1').

The tracker now keys in-flight state by request id (snapshot/add replace by
id; remove deletes by id), and the decoder normalizes 'upsert' to 'add' and
extracts the id from bare removes.
2026-08-14 12:08:02 -06:00

66 lines
2.4 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { InflightTracker, type FeedEvent } from "../src/lib/inflight-tracker";
test("snapshot rebuilds counts for all in-flight requests", () => {
const tracker = new InflightTracker();
tracker.apply({
type: "inflight",
operation: "snapshot",
requests: [
{ model: "A", id: "1" },
{ model: "A", id: "2" },
{ model: "B", id: "3" },
],
});
assert.equal(tracker.count("A"), 2);
assert.equal(tracker.count("B"), 1);
assert.equal(tracker.count("C"), 0);
});
test("add (upsert) is idempotent per request id", () => {
const tracker = new InflightTracker();
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "2" }] });
assert.equal(tracker.count("A"), 2);
});
test("remove is id-based and decrements the matching request", () => {
const tracker = new InflightTracker();
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }, { model: "B", id: "2" }] });
assert.equal(tracker.count("A"), 1);
assert.equal(tracker.count("B"), 1);
tracker.apply({ type: "inflight", operation: "remove", id: "1" });
assert.equal(tracker.count("A"), 0);
assert.equal(tracker.count("B"), 1);
tracker.apply({ type: "inflight", operation: "remove", id: "999" });
assert.equal(tracker.count("B"), 1);
});
test("snapshot replaces prior in-flight state", () => {
const tracker = new InflightTracker();
tracker.apply({ type: "inflight", operation: "add", requests: [{ model: "A", id: "1" }] });
tracker.apply({ type: "inflight", operation: "snapshot", requests: [{ model: "A", id: "2" }] });
assert.equal(tracker.count("A"), 1);
assert.equal(tracker.count("B"), 0);
});
test("modelStatus normalizes states", () => {
const tracker = new InflightTracker();
tracker.apply({
type: "modelStatus",
models: [
{ id: "A", state: "ready" },
{ id: "B", state: "loading" },
{ id: "C", state: "stopped" },
{ id: "D", state: "weird" },
],
});
assert.equal(tracker.state("A"), "ready");
assert.equal(tracker.state("B"), "loading");
assert.equal(tracker.state("C"), "stopped");
assert.equal(tracker.state("D"), "stopped");
assert.equal(tracker.state("missing"), undefined);
});