mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-22 21:01:40 +00:00
83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import json
|
|
from unittest import mock
|
|
|
|
import diagnostics_hardware as dh
|
|
|
|
|
|
def test_collect_has_required_top_level_keys():
|
|
result = dh.collect()
|
|
assert result["schema"] == "system.hardware.v1"
|
|
for key in ("runtime", "os", "cpu", "memory", "gpu", "notes"):
|
|
assert key in result
|
|
|
|
|
|
def test_runtime_detect_env_override(monkeypatch):
|
|
monkeypatch.setenv("SLOPSMITH_RUNTIME", "electron")
|
|
monkeypatch.delenv("KUBERNETES_SERVICE_HOST", raising=False)
|
|
out = dh.detect_runtime()
|
|
assert out["kind"] == "electron"
|
|
|
|
|
|
def test_runtime_detect_kubernetes(monkeypatch):
|
|
monkeypatch.delenv("SLOPSMITH_RUNTIME", raising=False)
|
|
monkeypatch.setenv("KUBERNETES_SERVICE_HOST", "10.0.0.1")
|
|
out = dh.detect_runtime()
|
|
assert out["in_kubernetes"] is True
|
|
|
|
|
|
def test_safe_run_missing_binary_returns_127():
|
|
rc, stdout, stderr = dh._safe_run(["this-binary-does-not-exist-xyz123"])
|
|
assert rc == 127
|
|
assert stdout == ""
|
|
|
|
|
|
def test_gpu_probe_nvidia_parses_csv():
|
|
fake_out = "NVIDIA GeForce RTX 4070, 550.54.14, 12282\n"
|
|
with mock.patch.object(dh, "_safe_run", return_value=(0, fake_out, "")):
|
|
gpus = dh._probe_gpu_nvidia()
|
|
assert len(gpus) == 1
|
|
assert gpus[0]["name"] == "NVIDIA GeForce RTX 4070"
|
|
assert gpus[0]["driver"] == "550.54.14"
|
|
assert gpus[0]["memory_total_mb"] == 12282
|
|
assert gpus[0]["source"] == "nvidia-smi"
|
|
|
|
|
|
def test_gpu_probe_nvidia_absent_returns_empty():
|
|
with mock.patch.object(dh, "_safe_run", return_value=(127, "", "")):
|
|
assert dh._probe_gpu_nvidia() == []
|
|
|
|
|
|
def test_collect_with_no_gpus_records_note():
|
|
with mock.patch.object(dh, "_probe_gpus", return_value=[]):
|
|
# _probe_gpus internally appends; mock it to also append via spec
|
|
result = dh.collect()
|
|
assert "notes" in result
|
|
|
|
|
|
def test_collect_returns_runtime_kind():
|
|
result = dh.collect()
|
|
assert result["runtime"]["kind"] in ("docker", "electron", "bare")
|
|
|
|
|
|
def test_gpu_probe_rocm_parses_product_and_driver():
|
|
fake_out = json.dumps({
|
|
"card0": {
|
|
"Card series": "AMD Radeon RX 7900 XTX",
|
|
"Driver version": "6.2.4",
|
|
}
|
|
})
|
|
with mock.patch.object(dh, "_safe_run", return_value=(0, fake_out, "")):
|
|
gpus = dh._probe_gpu_rocm()
|
|
assert len(gpus) == 1
|
|
assert gpus[0]["name"] == "AMD Radeon RX 7900 XTX"
|
|
assert gpus[0]["driver"] == "6.2.4"
|
|
assert gpus[0]["source"] == "rocm-smi"
|
|
|
|
|
|
def test_gpu_probe_rocm_absent_driver_omits_field():
|
|
fake_out = json.dumps({"card0": {"Card series": "AMD Radeon RX 6800"}})
|
|
with mock.patch.object(dh, "_safe_run", return_value=(0, fake_out, "")):
|
|
gpus = dh._probe_gpu_rocm()
|
|
assert gpus[0]["name"] == "AMD Radeon RX 6800"
|
|
assert "driver" not in gpus[0]
|