Files
Unraid-AppOps-Gateway-Public/backend/tests/test_runner_inventory_visibility.py
T

94 lines
3.4 KiB
Python

"""Complete display inventory must never authorize recovery of fenced runners."""
from datetime import UTC, datetime, timedelta
from backend.app.core.config import settings
from backend.tests.test_runner_scheduler_liveness_recovery import _configure
def _snapshot(
monkeypatch, *, busy=False, queued=False, apply_filter=True, incomplete=False
):
connector = _configure(monkeypatch)
monkeypatch.setitem(
settings.apis,
"GITEA_RUNNER_TARGETS_JSON",
'{"linux-validation":"itworx-ci-backend"}',
)
runners = [
{
"id": 71 + index,
"name": f"itworx-ci-{profile}",
"status": "online" if busy and profile == "backend" else "offline",
"busy": busy and profile == "backend",
"disabled": True,
"labels": ["linux-validation"],
"token": "fixture-secret",
}
for index, profile in enumerate(
("checks", "backend", "frontend", "security", "browser", "build")
)
]
requests = []
def request(path, params=None):
requests.append((path, params))
if path.endswith("/runners"):
rows = [] if apply_filter and params.get("disabled") == "false" else runners
return {"total_count": len(rows) + int(incomplete), "runners": rows}
jobs = []
if queued and params.get("status") == "queued":
jobs = [
{
"id": 9,
"status": "queued",
"runner_id": 0,
"labels": ["linux-validation"],
"created_at": (
datetime.now(UTC) - timedelta(minutes=20)
).isoformat(),
}
]
return {"total_count": len(jobs), "jobs": jobs}
monkeypatch.setattr(connector, "_request", request)
return connector.snapshot(refresh=True), requests
def test_standby_fleet_remains_visible_and_does_not_appear_broken(monkeypatch):
result, requests = _snapshot(monkeypatch)
assert len(result["runners"]) == 6
assert result["summary"]["disabled"] == 6
assert result["summary"]["available"] == 0
assert result["inventory"] == {"scope": "all_registrations", "complete": True}
assert result["severity"] == "healthy"
assert result["recommendedAction"] is None
assert "fixture-secret" not in repr(result)
assert requests[0][1] == {"page": 1, "limit": 100}
def test_fenced_busy_runner_is_counted_without_becoming_claimable(monkeypatch):
result, _ = _snapshot(monkeypatch, busy=True)
assert result["summary"]["busy"] == 1
assert result["summary"]["online"] == 0
assert result["summary"]["available"] == 0
assert result["summary"]["disabled"] == 6
assert result["runners"][1]["busy"] is True
assert result["runners"][1]["disabled"] is True
def test_disabled_runner_never_receives_restart_guidance_for_a_stalled_queue(
monkeypatch,
):
result, _ = _snapshot(monkeypatch, queued=True, apply_filter=False)
assert result["severity"] == "critical"
assert result["queue"]["queued"] == 1
assert result["recommendedAction"] is None
def test_incomplete_runner_sample_is_not_reported_as_complete(monkeypatch):
result, _ = _snapshot(monkeypatch, incomplete=True)
assert len(result["runners"]) == 6
assert result["inventory"] == {"scope": "all_registrations", "complete": False}
assert result["recommendedAction"] is None