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
31 lines
1.3 KiB
Swift
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")
|
|
}
|
|
}
|