diff --git a/ariadne/services/game_mode.py b/ariadne/services/game_mode.py index fa43f1c..f94be3e 100644 --- a/ariadne/services/game_mode.py +++ b/ariadne/services/game_mode.py @@ -81,7 +81,8 @@ class GameModeService: workloads: list[dict[str, Any]] = [] for workload in self._workloads(): desired, current = self._replicas(workload) - set_game_mode_managed_replicas(workload.namespace, workload.name, desired) + effective = desired if desired is not None else current + set_game_mode_managed_replicas(workload.namespace, workload.name, effective) workloads.append( { "kind": workload.kind, @@ -89,11 +90,12 @@ class GameModeService: "name": workload.name, "desired_replicas": desired, "current_replicas": current, + "effective_replicas": effective, "restore_replicas": workload.restore_replicas, } ) - active = bool(workloads) and all(item["desired_replicas"] == 0 for item in workloads) + active = bool(workloads) and all(item["effective_replicas"] == 0 for item in workloads) game = self._current_game or "unknown" set_game_mode_state(settings.game_mode_node_name, game, active) return {"status": "active" if active else "idle", "active": active, "node": settings.game_mode_node_name, "game": game, "workloads": workloads} diff --git a/tests/test_game_mode.py b/tests/test_game_mode.py index 4161d50..0225e65 100644 --- a/tests/test_game_mode.py +++ b/tests/test_game_mode.py @@ -70,6 +70,18 @@ def test_game_mode_ignores_invalid_workloads_and_fallback_replicas(monkeypatch) assert status["workloads"][0]["desired_replicas"] is None +def test_game_mode_status_uses_current_when_desired_missing(monkeypatch) -> None: + monkeypatch.setattr(game_mode_module, "settings", _settings()) + monkeypatch.setattr(game_mode_module, "get_json", lambda _path: {"spec": {}, "status": {"replicas": 0}}) + monkeypatch.setattr(game_mode_module, "set_game_mode_state", lambda *args, **kwargs: None) + monkeypatch.setattr(game_mode_module, "set_game_mode_managed_replicas", lambda *args, **kwargs: None) + + status = GameModeService().status() + + assert status["active"] is True + assert status["workloads"][0]["effective_replicas"] == 0 + + def test_game_mode_rejects_unsupported_kind(monkeypatch) -> None: monkeypatch.setattr(game_mode_module, "settings", _settings([{"kind": "Job", "namespace": "x", "name": "y"}])) monkeypatch.setattr(game_mode_module, "record_game_mode_transition", lambda *args, **kwargs: None)