From 8748bff9eab85e0a12e1417cfcbc0933bf4e11a5 Mon Sep 17 00:00:00 2001 From: Hubert Cornet Date: Sat, 14 Feb 2026 10:44:31 +0100 Subject: [PATCH] Add tests/test_hostname.py --- tests/test_hostname.py | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 tests/test_hostname.py diff --git a/tests/test_hostname.py b/tests/test_hostname.py new file mode 100644 index 0000000..a0f3573 --- /dev/null +++ b/tests/test_hostname.py @@ -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( + "OLD1", + 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("1", 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"