79 lines
2.3 KiB
TypeScript
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);
|
|
});
|