from app.modules.system import service from app.modules.system.service import get_runtime_readiness, parse_nvidia_smi_csv, parse_probe_stdout def test_parse_nvidia_smi_csv(): output = "0, NVIDIA GeForce RTX 4090, 24564, 15, 24069, 0, 37\n" gpus = parse_nvidia_smi_csv(output) assert gpus == [ { "index": 0, "name": "NVIDIA GeForce RTX 4090", "memory_total_mb": 24564, "memory_used_mb": 15, "memory_free_mb": 24069, "utilization_gpu_percent": 0, "temperature_c": 37, } ] def test_parse_probe_stdout_uses_last_json_line(): parsed = parse_probe_stdout( "warning before json\n" '{"checks":[{"module":"torch","passed":true,"version":"2.6.0"}],"extra":{"python":"3.11"}}\n' ) assert parsed["checks"][0]["module"] == "torch" assert parsed["extra"]["python"] == "3.11" def test_runtime_readiness_marks_missing_env(monkeypatch): monkeypatch.setattr(service, "_readiness_cache", None) monkeypatch.setattr(service, "get_conda_envs", lambda: {"available": True, "envs": []}) readiness = get_runtime_readiness(force=True) assert readiness["passed"] is False assert all(not item["exists"] for item in readiness["envs"]) def test_runtime_readiness_aggregates_probe_results(monkeypatch): monkeypatch.setattr(service, "_readiness_cache", None) specs = [ {"role": "task", "name": "seg_smp", "label": "task", "env_file": "envs/seg_smp.yml", "required_imports": []}, {"role": "mmseg", "name": "seg_mmcv", "label": "mmseg", "env_file": "envs/seg_mmcv.yml", "required_imports": []}, ] monkeypatch.setattr(service, "runtime_environment_specs", lambda: specs) monkeypatch.setattr( service, "get_conda_envs", lambda: { "available": True, "envs": [ {"name": "seg_smp", "path": "/envs/seg_smp"}, {"name": "seg_mmcv", "path": "/envs/seg_mmcv"}, ], }, ) monkeypatch.setattr( service, "inspect_conda_env", lambda name, imports: { "passed": True, "checks": [{"module": "torch", "passed": True}], "extra": {"python": "3.11"}, }, ) readiness = get_runtime_readiness(force=True) assert readiness["passed"] is True assert readiness["envs"][0]["path"] == "/envs/seg_smp" assert readiness["specs"]["env_files"] == ["envs/seg_smp.yml", "envs/seg_mmcv.yml"]