Files
RouterOS/RouterOSAssistantTests/VlanEntryTests.swift
T
KayandClaude Sonnet 5 016f57f613 M5: WLAN-Schritt + echte set-Operation im Befehlsmodell
RouterOSCommand unterstützt jetzt neben .add auch .set (bestehenden
Eintrag ändern statt neuen anzulegen) — nötig, weil WLAN-Interfaces
schon vor jeder Konfiguration existieren. SSH löst das per CLI-eigenem
"set [find field=value] ..." inline auf; REST hat dafür keine
Entsprechung und muss den Eintrag erst per GET suchen (matchField/
matchValue), seine .id auslesen, dann PATCH auf restPath/<id> senden
(RestTransport.findItemID). Mit dem Nutzer abgestimmte Entscheidung
gegen die einfachere "WLAN nur über SSH"-Variante.

WifiNetworkConfig: pro erkanntem Legacy-Wireless-Interface
(/interface wireless, type=wlan) eine SSID/Passwort-Konfiguration,
Sicherheitsprofil (WPA2) wird zuerst angelegt, dann per set mit dem
Interface verknüpft. Geräte ohne WLAN zeigen einen Hinweistext statt
des Formulars (User-Anforderung: muss berücksichtigt werden). Geräte
mit dem neueren "wifi"-Treiber (type=wifi, wifiwave2/802.11ax) werden
erkannt, aber bewusst nicht unterstützt -- anderes Menü, eigener
Umbau nötig, dazu Hinweistext.

cliPath wurde in allen bisherigen Command-Buildern (Wan/Lan/Vlan) zu
menuPath + .add migriert, da RouterOSCommand jetzt operation-basiert
ist statt den Aktionswort im Pfad-String zu verstecken.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
2026-09-12 13:41:25 +02:00

31 lines
1.3 KiB
Swift

import XCTest
@testable import RouterOSAssistant
final class VlanEntryTests: XCTestCase {
func testBuildCommandsCreatesVlanInterfaceThenDhcpStack() {
let vlan = VlanEntry(name: "Gäste", vlanID: 20, parentInterface: "bridge")
let commands = vlan.buildCommands()
XCTAssertEqual(commands.count, 5)
XCTAssertEqual(commands[0].menuPath, "/interface vlan")
XCTAssertEqual(commands[0].arguments["vlan-id"], "20")
XCTAssertEqual(commands[0].arguments["interface"], "bridge")
XCTAssertEqual(commands[0].arguments["name"], "vlan20")
XCTAssertEqual(commands[1].menuPath, "/ip address")
XCTAssertEqual(commands[1].arguments["interface"], "vlan20")
XCTAssertEqual(commands[2].menuPath, "/ip pool")
XCTAssertEqual(commands[3].menuPath, "/ip dhcp-server")
XCTAssertEqual(commands[4].menuPath, "/ip dhcp-server network")
}
func testDefaultAddressesAreDerivedFromVlanID() {
let vlan = VlanEntry(vlanID: 30, parentInterface: "bridge")
XCTAssertEqual(vlan.routerAddress, "192.168.30.1/24")
XCTAssertEqual(vlan.networkAddress, "192.168.30.0/24")
XCTAssertEqual(vlan.poolRangeStart, "192.168.30.10")
XCTAssertEqual(vlan.poolRangeEnd, "192.168.30.254")
}
}