74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
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"]
|