- Enhanced documentation to clarify the transition from 'Idle' to 'ready (running)' for backend states, improving user understanding of system readiness. - Updated logging messages in the notification system to reflect the new backend status terminology, ensuring accurate feedback during operations. - Refined access link collection logic to better handle tunneled and non-tunneled scenarios, enhancing user experience. - Improved tests to validate the new backend status handling and ensure accurate reporting of access links and notifications.
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
"""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
|
|
|
|
|
|
def test_remote_poll_running_is_ready():
|
|
"""SwarmUI: running = healthy ready; idle = suspended (cannot generate)."""
|
|
assert 'bstat == "running"' in _REMOTE_POLL
|
|
assert "READY backend=running" in _REMOTE_POLL
|
|
assert "READY backend=idle" not in _REMOTE_POLL
|
|
assert "BUSY backend=idle" in _REMOTE_POLL
|
|
|
|
|
|
def test_remote_poll_loading_is_busy():
|
|
assert 'bstat in ("loading", "some_loading")' in _REMOTE_POLL
|
|
assert "Comfy стартует" 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
|