110 lines
3.8 KiB
Python
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 == {}
|