Files
napalm-proxmox/tests/test_interfaces.py
2026-05-29 09:24:39 +02:00

110 lines
3.8 KiB
Python

"""Tests for get_interfaces, get_interfaces_ip, get_interfaces_counters."""
from __future__ import annotations
import pytest
from tests.conftest import _build_mock_api, NODE_NETWORK
from unittest.mock import patch
from napalm_proxmox.driver import ProxmoxDriver
class TestGetInterfaces:
def test_returns_all_ifaces(self, driver):
result = driver.get_interfaces()
expected_names = {i["iface"] for i in NODE_NETWORK if i.get("iface")}
assert set(result.keys()) == expected_names
def test_eth0_is_up(self, driver):
result = driver.get_interfaces()
assert result["eth0"]["is_up"] is True
assert result["eth0"]["is_enabled"] is True
def test_ovs_bridge_not_up(self, driver):
result = driver.get_interfaces()
assert result["vmbr1"]["is_up"] is False
def test_mac_address_normalized(self, driver):
result = driver.get_interfaces()
mac = result["eth0"]["mac_address"]
# should be lower-case colon-separated
assert mac == "aa:bb:cc:dd:ee:01"
def test_speed_eth0(self, driver):
result = driver.get_interfaces()
assert result["eth0"]["speed"] == 1000.0
def test_speed_unknown(self, driver):
result = driver.get_interfaces()
assert result["vmbr0"]["speed"] == -1.0
def test_mtu(self, driver):
result = driver.get_interfaces()
assert result["eth1"]["mtu"] == 9000
def test_description(self, driver):
result = driver.get_interfaces()
assert result["eth0"]["description"] == "Management"
def test_last_flapped_minus_one(self, driver):
result = driver.get_interfaces()
assert result["eth0"]["last_flapped"] == -1.0
class TestGetInterfacesIP:
def test_eth0_has_ipv4(self, driver):
result = driver.get_interfaces_ip()
assert "eth0" in result
assert "ipv4" in result["eth0"]
assert "10.0.0.1" in result["eth0"]["ipv4"]
def test_eth0_prefix_length(self, driver):
result = driver.get_interfaces_ip()
assert result["eth0"]["ipv4"]["10.0.0.1"]["prefix_length"] == 24
def test_sdn_vnet_ipv4_gateway(self, driver):
result = driver.get_interfaces_ip()
# vnet0 gateway 10.10.0.1 /24
assert "vnet0" in result
assert "10.10.0.1" in result["vnet0"].get("ipv4", {})
def test_sdn_vnet_ipv6_gateway(self, driver):
result = driver.get_interfaces_ip()
# vnet1 has IPv6 subnet
assert "vnet1" in result
assert "2001:db8:20::1" in result["vnet1"].get("ipv6", {})
def test_iface_without_address_not_in_result(self, driver):
result = driver.get_interfaces_ip()
# eth1 has no address in fixture
assert "eth1" not in result
class TestGetInterfacesCounters:
def test_returns_eth0(self, driver):
result = driver.get_interfaces_counters()
assert "eth0" in result
def test_counters_fields_present(self, driver):
result = driver.get_interfaces_counters()
eth0 = result["eth0"]
for field in (
"tx_errors", "rx_errors", "tx_discards", "rx_discards",
"tx_octets", "rx_octets", "tx_unicast_packets", "rx_unicast_packets",
"tx_multicast_packets", "rx_multicast_packets",
"tx_broadcast_packets", "rx_broadcast_packets",
):
assert field in eth0, f"Missing field: {field}"
def test_counter_values(self, driver):
result = driver.get_interfaces_counters()
eth0 = result["eth0"]
assert eth0["tx_octets"] == 500000
assert eth0["rx_octets"] == 1000000
assert eth0["tx_discards"] == 1
def test_empty_when_no_netstat(self, driver):
driver._node_api().netstat.get.return_value = []
result = driver.get_interfaces_counters()
assert result == {}