"""Tests for SDN-related methods: get_vlans, get_network_instances.""" from __future__ import annotations import pytest from tests.conftest import _build_mock_api, SDN_ZONES, SDN_VNETS class TestGetVlans: def test_sdn_vnets_appear_as_vlans(self, driver): result = driver.get_vlans() # vnet0 tag=10, vnet1 tag=20 assert "10" in result assert "20" in result def test_vlan_name_is_vnet_id(self, driver): result = driver.get_vlans() assert result["10"]["name"] == "vnet0" assert result["20"]["name"] == "vnet1" def test_vlan_100000_for_vxlan(self, driver): result = driver.get_vlans() assert "100000" in result def test_bridge_vlan_show_parsing(self, driver): # Simulate bridge vlan output bridge_output = ( "vmbr0 1\n" " 10\n" " 20\n" "eth0 1\n" ) driver._node_api().execute.post.return_value = {"data": bridge_output} result = driver.get_vlans() # Interface vmbr0 should appear in vlan 1 entry = result.get("1", {}) assert "vmbr0" in entry.get("interfaces", []) def test_empty_sdn_returns_dict(self): from unittest.mock import patch from napalm_proxmox.driver import ProxmoxDriver from tests.conftest import _build_mock_api mock_api = _build_mock_api(sdn_vnets=[], sdn_zones=[]) drv = ProxmoxDriver("pve1", "root", "secret", optional_args={"verify_ssl": False}) with patch("napalm_proxmox.driver.ProxmoxAPI", return_value=mock_api): drv.open() result = drv.get_vlans() assert isinstance(result, dict) class TestGetNetworkInstances: def test_default_instance_always_present(self, driver): result = driver.get_network_instances() assert "default" in result assert result["default"]["type"] == "DEFAULT_INSTANCE" def test_sdn_zones_as_instances(self, driver): result = driver.get_network_instances() assert "zone-vlan" in result assert "zone-vxlan" in result assert "zone-evpn" in result def test_zone_type_mapping(self, driver): result = driver.get_network_instances() assert result["zone-vlan"]["type"] == "L2VPN" assert result["zone-evpn"]["type"] == "L3VRF" def test_vnet_appears_in_zone_interfaces(self, driver): result = driver.get_network_instances() zone_ifaces = result["zone-vlan"]["interfaces"]["interface"] assert "vnet0" in zone_ifaces assert "vnet1" in zone_ifaces def test_filter_by_name(self, driver): result = driver.get_network_instances(name="zone-vlan") assert "zone-vlan" in result assert "zone-vxlan" not in result def test_evpn_route_distinguisher(self, driver): result = driver.get_network_instances() rd = result["zone-evpn"]["state"]["route_distinguisher"] assert rd == 10001 def test_default_interfaces_include_node_ifaces(self, driver): result = driver.get_network_instances() default_ifaces = result["default"]["interfaces"]["interface"] assert "eth0" in default_ifaces assert "vmbr0" in default_ifaces