fix(ui): сохранять переходные и неизвестные состояния OSPF
This commit is contained in:
1 parent
c18c148a23
commit
3dc25628af
9 files changed
+82
-22
No files matched your search
@@ -0,0 +1,17 @@
|
||||
import assert from "node:assert/strict"
|
||||
import { test } from "node:test"
|
||||
import { normalizeOspfState, normalizeBfdState, ospfNodeState } from "./ospf-state"
|
||||
test("RouterOS states keep transitional adjacency separate from failure", () => {
|
||||
assert.deepEqual(["full", "2-way", "ExStart", "exchange", "loading", "attempt", "init", "down"].map(normalizeOspfState), ["Full", "2-Way", "ExStart", "Exchange", "Loading", "Attempt", "Init", "Down"])
|
||||
assert.equal(normalizeOspfState("future-state"), "Unknown")
|
||||
assert.equal(normalizeBfdState(""), "Unknown")
|
||||
assert.equal(normalizeBfdState(" UP "), "Up")
|
||||
})
|
||||
test("topology does not infer Down from missing or transitional evidence", () => {
|
||||
assert.equal(ospfNodeState([]), "none")
|
||||
assert.equal(ospfNodeState(["Down"]), "Down")
|
||||
assert.equal(ospfNodeState(["Down", "Unknown"]), "Unknown")
|
||||
assert.equal(ospfNodeState(["Exchange", "Loading"]), "Pending")
|
||||
assert.equal(ospfNodeState(["2-Way", "Down"]), "2-Way")
|
||||
assert.equal(ospfNodeState(["Full", "Unknown"]), "Full")
|
||||
})
|
||||
@@ -0,0 +1,14 @@
|
||||
export type OspfNeighborState = "Full" | "2-Way" | "ExStart" | "Down" | "Attempt" | "Init" | "Exchange" | "Loading" | "Unknown"
|
||||
export type BfdState = "Up" | "Down" | "Init" | "AdminDown" | "Unknown"
|
||||
const neighborStates: Record<string, OspfNeighborState> = { full: "Full", "2-way": "2-Way", exstart: "ExStart", down: "Down", attempt: "Attempt", init: "Init", exchange: "Exchange", loading: "Loading" }
|
||||
const bfdStates: Record<string, BfdState> = { up: "Up", down: "Down", init: "Init", admindown: "AdminDown" }
|
||||
export function normalizeOspfState(value: string): OspfNeighborState { return neighborStates[value.trim().toLowerCase()] ?? "Unknown" }
|
||||
export function normalizeBfdState(value: string): BfdState { return bfdStates[value.trim().toLowerCase()] ?? "Unknown" }
|
||||
export function ospfNodeState(states: OspfNeighborState[]): "Full" | "2-Way" | "Pending" | "Down" | "Unknown" | "none" {
|
||||
if (!states.length) return "none"
|
||||
if (states.includes("Full")) return "Full"
|
||||
if (states.includes("Unknown")) return "Unknown"
|
||||
if (states.includes("2-Way")) return "2-Way"
|
||||
if (states.some(state => state !== "Down")) return "Pending"
|
||||
return "Down"
|
||||
}
|
||||
Reference in new issue
Block a user