Files
SDSAT/tests/test_interfaces.py
Hubert Cornet 842c1b82fe
Some checks failed
CI / test (push) Failing after 10s
Add tests/test_interfaces.py
2026-02-14 10:37:07 +01:00

161 lines
4.6 KiB
Python

import os
import sys
import importlib
from datetime import datetime as real_datetime
import requests
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
if PROJECT_ROOT not in sys.path:
sys.path.insert(0, PROJECT_ROOT)
def import_interfaces():
module_name = "scripts.interfaces"
if module_name in sys.modules:
del sys.modules[module_name]
return importlib.import_module(module_name)
def test_create_hostname():
interfaces = import_interfaces()
assert interfaces.create_hostname("1.2.3.4") == "SDSAT-1234"
assert interfaces.create_hostname(None) is None
def test_get_public_ip_success(monkeypatch):
interfaces = import_interfaces()
class FakeResp:
def json(self):
return {"ip": "9.9.9.9"}
monkeypatch.setattr(interfaces.requests, "get", lambda *args, **kwargs: FakeResp())
assert interfaces.get_public_ip() == "9.9.9.9"
def test_get_public_ip_failure(monkeypatch):
interfaces = import_interfaces()
def boom(*args, **kwargs):
raise requests.RequestException("nope")
monkeypatch.setattr(interfaces.requests, "get", boom)
assert interfaces.get_public_ip() is None
def test_get_mac_addresses(monkeypatch):
interfaces = import_interfaces()
# Simule 2 interfaces, dont une sans AF_LINK
monkeypatch.setattr(interfaces.netifaces, "interfaces", lambda: ["eth0", "lo"])
def fake_ifaddresses(name):
if name == "eth0":
return {interfaces.netifaces.AF_LINK: [{"addr": "AA:BB:CC:DD:EE:FF"}]}
return {} # lo => KeyError sur AF_LINK
monkeypatch.setattr(interfaces.netifaces, "ifaddresses", fake_ifaddresses)
assert interfaces.get_mac_addresses() == ["AA:BB:CC:DD:EE:FF"]
def test_get_interface_info_found(monkeypatch):
interfaces = import_interfaces()
monkeypatch.setattr(interfaces.netifaces, "interfaces", lambda: ["eth0"])
def fake_ifaddresses(name):
return {
interfaces.netifaces.AF_LINK: [{"addr": "AA:BB"}],
interfaces.netifaces.AF_INET: [{"addr": "192.168.1.10"}],
}
monkeypatch.setattr(interfaces.netifaces, "ifaddresses", fake_ifaddresses)
ip, name = interfaces.get_interface_info("AA:BB")
assert ip == "192.168.1.10"
assert name == "eth0"
def test_get_interface_info_not_found(monkeypatch):
interfaces = import_interfaces()
monkeypatch.setattr(interfaces.netifaces, "interfaces", lambda: ["eth0"])
def fake_ifaddresses(name):
return {
interfaces.netifaces.AF_LINK: [{"addr": "AA:BB"}],
interfaces.netifaces.AF_INET: [{"addr": "192.168.1.10"}],
}
monkeypatch.setattr(interfaces.netifaces, "ifaddresses", fake_ifaddresses)
ip, name = interfaces.get_interface_info("ZZ:ZZ")
assert ip is None
assert name is None
def test_get_network_interface_info(monkeypatch):
interfaces = import_interfaces()
monkeypatch.setattr(interfaces, "get_mac_addresses", lambda: ["M1", "M2"])
def fake_get_interface_info(mac):
if mac == "M1":
return "10.0.0.1", "eth0"
return None, None
monkeypatch.setattr(interfaces, "get_interface_info", fake_get_interface_info)
assert interfaces.get_network_interface_info() == [("M1", "10.0.0.1", "eth0")]
def test_write_log_writes_to_file(monkeypatch, tmp_path):
interfaces = import_interfaces()
# Fixe la date pour un test stable
class FakeDateTime:
@staticmethod
def now():
return real_datetime(2025, 1, 2, 3, 4, 5)
@staticmethod
def strftime(fmt): # pas utilisé ici
return ""
# On patch datetime.datetime.now via le module datetime importé
monkeypatch.setattr(interfaces.datetime, "datetime", FakeDateTime)
interfaces.write_log("hello", log_dir=str(tmp_path))
log_file = tmp_path / "interfaces_check_log.txt"
assert log_file.exists()
content = log_file.read_text(encoding="utf-8")
assert "2025-01-02 03:04:05" in content
assert "hello" in content
def test_main_runs_without_real_side_effects(monkeypatch, tmp_path):
interfaces = import_interfaces()
# On neutralise les dépendances externes
monkeypatch.setattr(interfaces, "get_network_interface_info", lambda: [])
monkeypatch.setattr(interfaces, "get_public_ip", lambda: "1.2.3.4")
# Capture les logs écrits
lines = []
def fake_write_log(action, log_dir=None):
lines.append(action)
monkeypatch.setattr(interfaces, "write_log", fake_write_log)
interfaces.main(log_dir=str(tmp_path))
assert "Aucune carte reseau trouvee." in lines
assert "Adresse IP publique : 1.2.3.4" in lines
assert "Hostname : SDSAT-1234" in lines