Files
SDSAT/tests/test_registrator.py
Hubert Cornet 940ddfbb8f
Some checks failed
CI / test (push) Failing after 12s
Update tests/test_registrator.py
2026-02-14 10:10:56 +01:00

116 lines
3.2 KiB
Python

import importlib
import logging
import sys
from datetime import datetime as real_datetime
import requests
import os
import sys
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_registrator_safely(monkeypatch):
"""
Neutralise logging.basicConfig avant import pour éviter
les erreurs liées au fichier de log.
Importe scripts.registrator (car le fichier est dans scripts/).
"""
monkeypatch.setattr(logging, "basicConfig", lambda *args, **kwargs: None)
module_name = "scripts.registrator"
if module_name in sys.modules:
del sys.modules[module_name]
return importlib.import_module(module_name)
def test_get_hostname_success(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
monkeypatch.setattr(registrator.socket, "gethostname", lambda: "my-host")
assert registrator.get_hostname() == "my-host"
def test_get_hostname_exception(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
def boom():
raise Exception("fail")
monkeypatch.setattr(registrator.socket, "gethostname", boom)
assert registrator.get_hostname() is None
def test_get_public_ip_success(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
class FakeResp:
def json(self):
return {"origin": "1.2.3.4"}
monkeypatch.setattr(registrator.requests, "get", lambda url: FakeResp())
assert registrator.get_public_ip() == "1.2.3.4"
def test_get_public_ip_multiple_addresses(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
class FakeResp:
def json(self):
return {"origin": "1.2.3.4, 5.6.7.8"}
monkeypatch.setattr(registrator.requests, "get", lambda url: FakeResp())
assert registrator.get_public_ip() == "1.2.3.4"
def test_get_public_ip_exception_returns_fallback(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
def boom(url):
raise Exception("network down")
monkeypatch.setattr(registrator.requests, "get", boom)
assert registrator.get_public_ip() == "69.69.69.69"
def test_send_to_api_posts_expected_payload(monkeypatch):
registrator = import_registrator_safely(monkeypatch)
# Fixe la date pour un test déterministe
class FakeDateTime:
@staticmethod
def now():
return real_datetime(2025, 1, 2, 3, 4, 5)
monkeypatch.setattr(registrator, "datetime", FakeDateTime)
captured = {}
class FakePostResp:
status_code = 200
text = "OK"
def fake_post(url, json):
captured["url"] = url
captured["json"] = json
return FakePostResp()
monkeypatch.setattr(registrator.requests, "post", fake_post)
registrator.send_to_api("my-host", "8.8.8.8")
assert captured["url"] == "http://api.test-sdsat.fr:8000/registrator"
assert captured["json"]["host"] == "my-host"
# IMPORTANT :
# Ce test suppose que tu as corrigé registrator.py :
# "IP": IP
assert captured["json"]["IP"] == "8.8.8.8"
assert captured["json"]["Date_registration"] == "2025-01-02T03:04:05"