Files
INFRAESTRUCTURA/tests/test_lock.py
2026-10-03 17:13:39 +02:00

41 lines
1.3 KiB
Python

# -*- coding: utf-8 -*-
"""Tests de `monitor_estado.lock` — instancia unica (RF-22)."""
import json
import monitor_estado.lock as lock
def test_lock_impide_segunda_instancia(tmp_path, monkeypatch):
"""Una segunda adquisicion con la primera viva debe fallar (RF-22)."""
monkeypatch.setattr(lock, "LOCK_PATH", tmp_path / ".lock")
assert lock.adquirir() is True
# Misma PID viva -> la segunda instancia no arranca.
assert lock.adquirir() is False
lock.liberar()
assert not (tmp_path / ".lock").exists()
assert lock.adquirir() is True
lock.liberar()
def test_lock_recupera_lock_caducado(tmp_path, monkeypatch):
"""Un lock de un PID muerto no debe bloquear (se recupera)."""
ruta = tmp_path / ".lock"
monkeypatch.setattr(lock, "LOCK_PATH", ruta)
ruta.write_text(json.dumps({"pid": 999999, "arranque": "2026-01-01T00:00:00"}), encoding="utf-8")
assert lock.adquirir() is True
lock.liberar()
def test_lock_liberar_no_borra_lock_ajeno(tmp_path, monkeypatch):
"""`liberar` solo elimina el lock si es de nuestro propio PID."""
ruta = tmp_path / ".lock"
monkeypatch.setattr(lock, "LOCK_PATH", ruta)
ruta.write_text(json.dumps({"pid": 999999, "arranque": "x"}), encoding="utf-8")
lock.liberar()
assert ruta.exists() # no era nuestro -> se respeta