Files
odysseus/tests/test_hwfit_container_visibility_warning.py
T

111 lines
3.3 KiB
Python

"""Tests for Cookbook hardware probe context and container visibility warnings."""
import pytest
from services.hwfit import hardware
@pytest.mark.area_services
@pytest.mark.area_unit
def test_container_no_gpu_gets_visibility_warning(monkeypatch):
"""Warn when a containerized local probe cannot see a GPU."""
monkeypatch.setattr(hardware, "_is_containerized", lambda: True)
result = {
"total_ram_gb": 7.7,
"available_ram_gb": 6.4,
"cpu_cores": 12,
"cpu_name": "Test CPU",
"has_gpu": False,
"gpu_name": None,
"gpu_vram_gb": None,
"gpu_count": 0,
"backend": "cpu_x86",
"gpu_error": None,
}
out = hardware._attach_probe_context(result, host="")
assert out["containerized"] is True
assert out["probe_scope"] == "container"
assert out["hardware_visibility_warning"]["code"] == "container_no_gpu_visible"
assert "manual_hardware" in out["hardware_visibility_warning"]["actions"]
@pytest.mark.area_services
@pytest.mark.area_unit
def test_native_no_gpu_does_not_get_container_warning(monkeypatch):
"""Do not warn for a native local probe that genuinely has no GPU."""
monkeypatch.setattr(hardware, "_is_containerized", lambda: False)
result = {
"total_ram_gb": 16,
"available_ram_gb": 10,
"cpu_cores": 12,
"cpu_name": "Test CPU",
"has_gpu": False,
"gpu_name": None,
"gpu_vram_gb": None,
"gpu_count": 0,
"backend": "cpu_x86",
"gpu_error": None,
}
out = hardware._attach_probe_context(result, host="")
assert out["containerized"] is False
assert out["probe_scope"] == "native"
assert "hardware_visibility_warning" not in out
@pytest.mark.area_services
@pytest.mark.area_unit
def test_remote_probe_does_not_get_local_container_warning(monkeypatch):
"""Do not apply local container warnings to remote hardware probes."""
monkeypatch.setattr(hardware, "_is_containerized", lambda: True)
result = {
"total_ram_gb": 16,
"available_ram_gb": 10,
"cpu_cores": 12,
"cpu_name": "Remote CPU",
"has_gpu": False,
"gpu_name": None,
"gpu_vram_gb": None,
"gpu_count": 0,
"backend": "cpu_x86",
"gpu_error": None,
}
out = hardware._attach_probe_context(result, host="user@example.com")
assert out["containerized"] is False
assert out["probe_scope"] == "remote"
assert "hardware_visibility_warning" not in out
@pytest.mark.area_services
@pytest.mark.area_unit
def test_gpu_driver_error_does_not_show_container_no_gpu_warning(monkeypatch):
"""Preserve GPU driver errors instead of replacing them with Docker warnings."""
monkeypatch.setattr(hardware, "_is_containerized", lambda: True)
result = {
"total_ram_gb": 16,
"available_ram_gb": 10,
"cpu_cores": 12,
"cpu_name": "Test CPU",
"has_gpu": False,
"gpu_name": None,
"gpu_vram_gb": None,
"gpu_count": 0,
"backend": "cpu_x86",
"gpu_error": "NVIDIA driver/library version mismatch",
}
out = hardware._attach_probe_context(result, host="")
assert out["containerized"] is True
assert out["probe_scope"] == "container"
assert "hardware_visibility_warning" not in out