netbird-gitops/src/poller/poller.test.ts

79 lines
2.3 KiB
TypeScript

import { assertEquals } from "@std/assert";
import type { NbEvent } from "../netbird/types.ts";
import { processEnrollmentEvents } from "./poller.ts";
/** Helper: build an NbEvent with sensible defaults, overridable per-field. */
function makeEvent(overrides: Partial<NbEvent> = {}): NbEvent {
return {
id: 1,
timestamp: "2025-06-01T12:00:00Z",
activity: "peer setup key added",
activity_code: "peer.setupkey.add",
initiator_id: "init-1",
initiator_name: "admin",
target_id: "peer-1",
meta: { setup_key: "drone-key", name: "drone-01" },
...overrides,
};
}
Deno.test("processEnrollmentEvents detects peer.setupkey.add", () => {
const events: NbEvent[] = [
makeEvent(), // enrollment — should match
makeEvent({
id: 2,
activity_code: "peer.login",
target_id: "peer-2",
}), // not an enrollment
makeEvent({
id: 3,
activity_code: "group.add",
target_id: "group-1",
}), // unrelated event
];
const known = new Set(["drone-key"]);
const result = processEnrollmentEvents(events, known, null);
assertEquals(result.length, 1);
assertEquals(result[0].setupKeyName, "drone-key");
assertEquals(result[0].peerId, "peer-1");
assertEquals(result[0].peerHostname, "drone-01");
assertEquals(result[0].timestamp, "2025-06-01T12:00:00Z");
});
Deno.test("processEnrollmentEvents filters by lastTimestamp", () => {
const events: NbEvent[] = [
makeEvent({ id: 1, timestamp: "2025-06-01T10:00:00Z", target_id: "p1" }),
makeEvent({ id: 2, timestamp: "2025-06-01T12:00:00Z", target_id: "p2" }),
makeEvent({ id: 3, timestamp: "2025-06-01T14:00:00Z", target_id: "p3" }),
];
const known = new Set(["drone-key"]);
// Only events strictly after the watermark should pass.
const result = processEnrollmentEvents(
events,
known,
"2025-06-01T12:00:00Z",
);
assertEquals(result.length, 1);
assertEquals(result[0].peerId, "p3");
assertEquals(result[0].timestamp, "2025-06-01T14:00:00Z");
});
Deno.test("processEnrollmentEvents ignores unknown keys", () => {
const events: NbEvent[] = [
makeEvent({
meta: { setup_key: "rogue-key", name: "rogue-host" },
target_id: "peer-x",
}),
];
const known = new Set(["drone-key", "gcs-key"]);
const result = processEnrollmentEvents(events, known, null);
assertEquals(result.length, 0);
});