GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from app.core.config import Settings
|
|
from app.core.errors import AppError
|
|
from app.services.segmentation_adapter import YoloSegmentationAdapter
|
|
|
|
|
|
def _settings(*, require_cuda: bool, device: str) -> Settings:
|
|
return Settings(
|
|
_env_file=None,
|
|
YOLO_REQUIRE_CUDA=require_cuda,
|
|
YOLO_DEVICE=device,
|
|
)
|
|
|
|
|
|
def test_segmentation_runtime_allows_cpu_only_when_cuda_is_not_required() -> None:
|
|
adapter = YoloSegmentationAdapter(_settings(require_cuda=False, device="cpu"))
|
|
|
|
adapter.validate_runtime()
|
|
|
|
|
|
def test_segmentation_runtime_rejects_missing_cuda(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
monkeypatch.setitem(
|
|
__import__("sys").modules,
|
|
"torch",
|
|
SimpleNamespace(cuda=SimpleNamespace(is_available=lambda: False)),
|
|
)
|
|
adapter = YoloSegmentationAdapter(_settings(require_cuda=True, device="cuda:0"))
|
|
|
|
with pytest.raises(AppError) as exc_info:
|
|
adapter.validate_runtime()
|
|
|
|
assert exc_info.value.code == "SEGMENTATION_ACCELERATOR_UNAVAILABLE"
|
|
|
|
|
|
def test_segmentation_runtime_rejects_cpu_device_when_cuda_is_required(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
) -> None:
|
|
monkeypatch.setitem(
|
|
__import__("sys").modules,
|
|
"torch",
|
|
SimpleNamespace(cuda=SimpleNamespace(is_available=lambda: True)),
|
|
)
|
|
adapter = YoloSegmentationAdapter(_settings(require_cuda=True, device="cpu"))
|
|
|
|
with pytest.raises(AppError) as exc_info:
|
|
adapter.validate_runtime()
|
|
|
|
assert exc_info.value.code == "SEGMENTATION_ACCELERATOR_MISCONFIGURED"
|
|
|
|
|
|
def test_segmentation_runtime_accepts_configured_cuda(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
monkeypatch.setitem(
|
|
__import__("sys").modules,
|
|
"torch",
|
|
SimpleNamespace(cuda=SimpleNamespace(is_available=lambda: True)),
|
|
)
|
|
adapter = YoloSegmentationAdapter(_settings(require_cuda=True, device="cuda:0"))
|
|
|
|
adapter.validate_runtime()
|