"""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