"""Tests for wait_backend_idle READY semantics and install helpers.""" from gpu_rent.ready import _REMOTE_POLL def test_remote_poll_empty_is_busy_not_ready(): assert 'bstat == "empty"' in _REMOTE_POLL assert 'BUSY backend=empty' in _REMOTE_POLL # Must not treat empty as READY anymore assert '("idle", "disabled", "all_disabled", "empty")' not in _REMOTE_POLL def test_remote_poll_idle_is_ready(): assert 'bstat == "idle"' in _REMOTE_POLL assert "READY backend=" in _REMOTE_POLL def test_remote_poll_loading_running_humanized(): assert "Comfy стартует" in _REMOTE_POLL assert "Comfy прогрев" in _REMOTE_POLL assert 'bstat == "loading"' in _REMOTE_POLL assert 'bstat == "running"' in _REMOTE_POLL def test_install_swarm_comfy_script_payload(): from importlib.resources import files text = files("gpu_rent.remote").joinpath("install_swarm_comfy.py").read_text( encoding="utf-8" ) assert "InstallConfirmWS" in text assert '"backend": "comfyui"' in text assert '"models": "none"' in text assert "modern_dark" in text assert "detect_stage" in text assert "dlbackend=" in text assert 'end="\\r"' in text or "end=\"\\r\"" in text def test_verify_gpu_env_fail_fast_empty_dlbackend(monkeypatch): import json from gpu_rent.errors import CloudError from gpu_rent.ready import verify_gpu_env import gpu_rent.ssh_ops as ssh_ops class Cfg: enable_swarmui = True payload = { "ok": False, "checks": [ {"name": "nvidia-smi", "required": True, "ok": True, "detail": "ok"}, {"name": "cuda", "required": True, "ok": True, "detail": "ok"}, { "name": "torch", "required": True, "ok": False, "detail": "ComfyUI venv python не найден (dlbackend пуст — SwarmUI Install не прогоняли)", }, ], } calls = {"n": 0} def fake(*a, **k): calls["n"] += 1 return json.dumps(payload) monkeypatch.setattr(ssh_ops, "run_python", fake) logs: list[str] = [] try: verify_gpu_env(Cfg(), "1.2.3.4", logs.append, timeout=600.0, poll_every=0.1) assert False, "expected CloudError" except CloudError as exc: assert "fail-fast" in str(exc).lower() or "torch" in str(exc).lower() assert calls["n"] == 1