This commit is contained in:
@@ -1 +1,106 @@
|
||||
#
|
||||
import importlib
|
||||
import sys
|
||||
from datetime import datetime as real_datetime
|
||||
|
||||
import logging
|
||||
import pytest
|
||||
|
||||
|
||||
def import_registrator_safely(monkeypatch):
|
||||
"""
|
||||
registrator.py configure logging.basicConfig(filename='/sdsat/logs/..') au top-level.
|
||||
En CI, ce chemin peut ne pas exister et casser l'import.
|
||||
On neutralise basicConfig avant import.
|
||||
"""
|
||||
monkeypatch.setattr(logging, "basicConfig", lambda *args, **kwargs: None)
|
||||
|
||||
if "registrator" in sys.modules:
|
||||
del sys.modules["registrator"]
|
||||
|
||||
return importlib.import_module("registrator")
|
||||
|
||||
|
||||
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.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"
|
||||
|
||||
Reference in New Issue
Block a user