31 lines
2.2 KiB
TypeScript
31 lines
2.2 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import { test } from "node:test"
|
|
import { buildProbeInterfaces } from "./probe-interface-model.js"
|
|
|
|
const iface = { ".id": "*1", name: "ether1", running: "true", disabled: "false" }
|
|
test("only observed active enabled interfaces are eligible; unknown flags remain visible", () => {
|
|
const result = buildProbeInterfaces([iface, { ...iface, ".id": "*2", name: "unknown", running: "" }, { ...iface, ".id": "*3", name: "down", running: "false" }, { ...iface, ".id": "*4", name: "disabled", disabled: "true" }])
|
|
assert.deepEqual(result.interfaces.map(row => row.name), ["ether1"])
|
|
assert.equal(result.unknownInterfaces[0].name, "unknown"); assert.equal(result.incomplete, true)
|
|
assert.equal(result.forwardingVerified, false)
|
|
})
|
|
test("known static/dynamic IPv4 address rows retain order, uniqueness and observed flags", () => {
|
|
const result = buildProbeInterfaces([iface], [
|
|
{ interface: "ether1", address: "192.0.2.2/24", dynamic: "true", disabled: "false", invalid: "false" },
|
|
{ interface: "ether1", address: "192.0.2.1/24", dynamic: "false", disabled: "false", invalid: "false" },
|
|
{ interface: "ether1", address: "192.0.2.3/24", disabled: "true" },
|
|
])
|
|
assert.deepEqual(result.interfaces[0].addresses, ["192.0.2.1", "192.0.2.2"])
|
|
assert.equal(result.interfaces[0].addressStateVerified, true); assert.equal(result.incomplete, false)
|
|
})
|
|
test("omitted address flags and invalid IPv4 are not confirmed address availability", () => {
|
|
const result = buildProbeInterfaces([iface], [{ interface: "ether1", address: "192.0.2.1/24" }, { interface: "ether1", address: "192.0.2.2/24junk" }])
|
|
assert.deepEqual(result.interfaces[0].addresses, ["192.0.2.1"])
|
|
assert.equal(result.interfaces[0].invalidAddressRows, 1); assert.equal(result.interfaces[0].addressStateVerified, false); assert.equal(result.incomplete, true)
|
|
})
|
|
test("known empty sources stay empty, malformed/duplicate identities are rejected", () => {
|
|
assert.equal(buildProbeInterfaces([], []).incomplete, false)
|
|
for (const payload of [{}, [null], [iface, iface], [iface, { ...iface, name: "ether2" }], [iface, { ...iface, ".id": "*2" }]]) assert.throws(() => buildProbeInterfaces(payload))
|
|
assert.throws(() => buildProbeInterfaces([iface], {}))
|
|
})
|