mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-16 17:55:26 -04:00
111 lines
3.3 KiB
Python
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
|