Bug 28: dynamische Routen (distance=0) nicht mehr über die Übersicht editierbar

Eine dynamische/verbundene Route (automatisch angelegt durch eine
IP-Adresse auf einem Interface) scheiterte beim Bearbeiten mit "no such
item (4)" — bestätigt per /ip route print detail: D-Flag, distance=0.
RouterOS' "dynamic"-Flag steht nicht zuverlässig in print terse
(dasselbe Problem schon bei DHCP-Leases dokumentiert), aber distance=0
ist ein verlässliches Signal, da keine echte statische Route das je
haben kann. Solche Routen bekommen jetzt kein editTarget mehr — ihre
.id ist ohnehin nicht stabil, RouterOS kann sie jederzeit neu anlegen.

59 Unit-Tests grün (neuer Test OverviewGraphTests.
testDynamicRouteHasNoEditTarget).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
This commit is contained in:
Kay
2026-09-15 13:54:11 +02:00
co-authored by Claude Sonnet 5
parent f25d02af17
commit 18fefc76a8
4 changed files with 67 additions and 18 deletions
@@ -135,4 +135,19 @@ final class OverviewGraphTests: XCTestCase {
let addressList = graph.nodes.first { $0.id == "Firewall & NAT:addrlist:gesperrt" }
XCTAssertNil(addressList?.editTarget)
}
/// A dynamic/connected route (distance=0, auto-created by an interface address) must not be
/// offered for editing confirmed live: RouterOS rejects resending its own distance=0
/// ("value of distance out of range (1...255)"), and its .id isn't stable either.
func testDynamicRouteHasNoEditTarget() {
let graph = OverviewViewModel.buildGraph(
interfaces: [], bridgePorts: [], vlans: [], wireguardPeers: [], addresses: [],
pools: [], dhcpServers: [], dhcpNetworks: [], dhcpClients: [],
routes: [item(["dst-address": "192.168.88.0/24", "gateway": "bridge", "distance": "0"], id: "*201C5060")],
filterRules: [], natRules: [], addressLists: []
)
let route = graph.nodes.first { $0.id == "route:0" }
XCTAssertNil(route?.editTarget)
}
}