Add tests/test_hostname.py
All checks were successful
CI / test (push) Successful in 13s

This commit is contained in:
2026-02-14 10:44:31 +01:00
parent 3172335f8e
commit 8748bff9ea

111
tests/test_hostname.py Normal file
View File

@@ -0,0 +1,111 @@
import os
import sys
import importlib
import xml.etree.ElementTree as ET
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_hostname():
module_name = "scripts.hostname"
if module_name in sys.modules:
del sys.modules[module_name]
return importlib.import_module(module_name)
def test_generate_random_string_length_and_charset():
hostname = import_hostname()
s = hostname.generate_random_string(10)
assert len(s) == 10
assert s.islower()
assert s.isalpha()
def test_update_config_hostname_updates_xml(tmp_path):
hostname = import_hostname()
xml_path = tmp_path / "config.xml"
xml_path.write_text(
"<config><hostname>OLD</hostname><other>1</other></config>",
encoding="utf-8",
)
old, changed = hostname.update_config_hostname(str(xml_path), "NEWNAME")
assert changed is True
assert old == "OLD"
# Vérifie que le fichier a été modifié
tree = ET.parse(str(xml_path))
root = tree.getroot()
assert root.find("hostname").text == "NEWNAME"
def test_update_config_hostname_no_hostname_element(tmp_path):
hostname = import_hostname()
xml_path = tmp_path / "config.xml"
xml_path.write_text("<config><other>1</other></config>", encoding="utf-8")
old, changed = hostname.update_config_hostname(str(xml_path), "NEWNAME")
assert changed is False
assert old is None
def test_main_does_nothing_when_hostname_different(monkeypatch):
hostname = import_hostname()
# Hostname différent => pas de changement
monkeypatch.setattr(hostname.socket, "gethostname", lambda: "already-set")
calls = {"apply": 0, "update": 0}
def fake_update(path, new):
calls["update"] += 1
return ("OLD", True)
def fake_apply(new):
calls["apply"] += 1
return 0
monkeypatch.setattr(hostname, "update_config_hostname", fake_update)
monkeypatch.setattr(hostname, "apply_hostname", fake_apply)
monkeypatch.setattr(hostname, "configure_logging", lambda: None)
hostname.main(expected_hostname="sd-satxx.dtx.io", config_path="/tmp/config.xml")
assert calls["update"] == 0
assert calls["apply"] == 0
def test_main_changes_when_expected_hostname(monkeypatch):
hostname = import_hostname()
# Hostname attendu => change
monkeypatch.setattr(hostname.socket, "gethostname", lambda: "sd-satxx.dtx.io")
monkeypatch.setattr(hostname, "configure_logging", lambda: None)
# Fige le random
monkeypatch.setattr(hostname, "generate_random_string", lambda n: "abcdefghij")
captured = {"new": None, "config_path": None, "applied": None}
def fake_update(path, new):
captured["config_path"] = path
captured["new"] = new
return ("OLDHOST", True)
def fake_apply(new):
captured["applied"] = new
return 0
monkeypatch.setattr(hostname, "update_config_hostname", fake_update)
monkeypatch.setattr(hostname, "apply_hostname", fake_apply)
hostname.main(expected_hostname="sd-satxx.dtx.io", config_path="/conf/config.xml")
assert captured["new"] == "DTX-SDSAT-abcdefghij"
assert captured["applied"] == "DTX-SDSAT-abcdefghij"
assert captured["config_path"] == "/conf/config.xml"