41 lines
1.3 KiB
Python
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
|