Files
Christian Manivong 3b873d91fe style: ruff format and the lint rules of the driver standard
Mechanical: ruff format, and ruff check --fix with the rule set every NAPALM
driver uses (E, F, I, UP, B at line length 100, Python 3.10). What ruff
cannot fix comes in the next commit.
2026-10-23 08:37:27 +02:00

103 lines
3.8 KiB
Python

"""Tests for SDN-related methods: get_vlans, get_network_instances."""
from __future__ import annotations
from tests.conftest import _build_mock_api
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_membership_derived_from_vm_configs(self, driver):
"""Without OVS ports, VLAN membership comes from each VM's netN config.
This replaces a test for a `bridge vlan show` fallback that no longer
exists — it also asserted an "interfaces" key this method has never
produced, so it could not have passed against any version of the code.
"""
node = driver._node_api()
node.qemu.get.return_value = [{"vmid": 100}]
node.lxc.get.return_value = []
node.qemu.return_value.config.get.return_value = {
"net0": "virtio=AA:BB:CC:DD:EE:FF,bridge=vmbr0,tag=10",
}
result = driver.get_vlans()
assert "vmbr0" in result["10"]["untagged"]
def test_configured_vnets_appear_even_without_members(self, driver):
"""An SDN VNet exists on the node whether or not anything is attached.
Entries with no member ports used to be filtered out of this one return
path while the OVS path returned them, so a configured VLAN was visible
or invisible depending on which branch ran.
"""
result = driver.get_vlans()
assert result["20"]["name"] == "vnet1"
assert result["20"]["untagged"] == []
def test_empty_sdn_returns_dict(self):
from unittest.mock import patch
from napalm_proxmox.driver import ProxmoxDriver
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