45 lines
1.9 KiB
Python
45 lines
1.9 KiB
Python
"""Эвристика «физических» сетевых интерфейсов для дашборда."""
|
|
|
|
import importlib.util
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
_ROOT = Path(__file__).resolve().parents[1]
|
|
_SPEC = importlib.util.spec_from_file_location(
|
|
"wesp_admin_system_metrics_testonly",
|
|
_ROOT / "app" / "services" / "admin_system_metrics.py",
|
|
)
|
|
assert _SPEC and _SPEC.loader
|
|
_mod = importlib.util.module_from_spec(_SPEC)
|
|
_SPEC.loader.exec_module(_mod)
|
|
network_interface_is_physical = _mod.network_interface_is_physical
|
|
|
|
|
|
class NetworkInterfacePhysicalTests(unittest.TestCase):
|
|
def test_always_treated_as_virtual(self) -> None:
|
|
self.assertFalse(network_interface_is_physical("lo"))
|
|
self.assertFalse(network_interface_is_physical("lo0"))
|
|
self.assertFalse(network_interface_is_physical("docker0"))
|
|
self.assertFalse(network_interface_is_physical("veth0abc1"))
|
|
self.assertFalse(network_interface_is_physical("br-4e2d9a"))
|
|
self.assertFalse(network_interface_is_physical("br0"))
|
|
self.assertFalse(network_interface_is_physical("virbr0"))
|
|
|
|
@unittest.skipUnless(sys.platform.startswith("linux"), "имена eth*/wlan* — ветка Linux")
|
|
def test_linux_common_nic_names_match_regex_fallback(self) -> None:
|
|
self.assertTrue(network_interface_is_physical("eth0"))
|
|
self.assertTrue(network_interface_is_physical("enp2s0"))
|
|
self.assertTrue(network_interface_is_physical("wlan0"))
|
|
self.assertTrue(network_interface_is_physical("bond0"))
|
|
self.assertTrue(network_interface_is_physical("team0"))
|
|
|
|
@unittest.skipUnless(sys.platform == "darwin", "на macOS физические в основном en*")
|
|
def test_darwin_en(self) -> None:
|
|
self.assertTrue(network_interface_is_physical("en0"))
|
|
self.assertFalse(network_interface_is_physical("bridge0"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|