from datetime import datetime, timedelta, timezone from gpu_rent.local_watchdog import LocalLease, decide_local_tick def _now() -> datetime: return datetime(2026, 8, 21, 12, 0, tzinfo=timezone.utc) def test_noop_when_not_installed(): d = decide_local_tick( installed=False, has_server=True, lease=LocalLease(armed=True, heartbeat_at=_now().isoformat()), now=_now(), process_alive=False, grace_sec=600, ) assert d.kind == "noop" def test_noop_when_detached(): d = decide_local_tick( installed=True, has_server=True, lease=LocalLease(armed=False, detached=True, heartbeat_at=_now().isoformat()), now=_now(), process_alive=False, grace_sec=600, ) assert d.kind == "noop" assert "detached" in d.detail def test_noop_while_pid_alive(): d = decide_local_tick( installed=True, has_server=True, lease=LocalLease( armed=True, pid=1, heartbeat_at=(_now() - timedelta(hours=1)).isoformat(), ), now=_now(), process_alive=True, grace_sec=600, ) assert d.kind == "noop" def test_noop_inside_grace(): hb = _now() - timedelta(minutes=5) d = decide_local_tick( installed=True, has_server=True, lease=LocalLease(armed=True, pid=999, heartbeat_at=hb.isoformat()), now=_now(), process_alive=False, grace_sec=600, ) assert d.kind == "noop" assert "grace" in d.detail def test_stop_when_stale(): hb = _now() - timedelta(minutes=20) d = decide_local_tick( installed=True, has_server=True, lease=LocalLease(armed=True, pid=999, heartbeat_at=hb.isoformat()), now=_now(), process_alive=False, grace_sec=600, ) assert d.kind == "stop" def test_noop_without_lease(): d = decide_local_tick( installed=True, has_server=True, lease=None, now=_now(), process_alive=False, grace_sec=600, ) assert d.kind == "noop"