This commit is contained in:
111
tests/test_hostname.py
Normal file
111
tests/test_hostname.py
Normal 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"
|
||||
Reference in New Issue
Block a user