03-oct: superguardado automático
This commit is contained in:
40
tests/test_lock.py
Normal file
40
tests/test_lock.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# -*- 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
|
||||
Reference in New Issue
Block a user