Spaces:
Runtime error
Runtime error
| """Unit tests for console environment context resolution.""" | |
| from __future__ import annotations | |
| from types import SimpleNamespace | |
| from open_range.protocols import SnapshotSpec | |
| from open_range.server.console import _get_env_context, clear_episode, publish_episode | |
| from open_range.server.environment import RangeEnvironment | |
| from open_range.server.models import RangeState | |
| class _Req: | |
| def __init__(self, app): | |
| self.app = app | |
| def _app_with_state(**kwargs): | |
| return SimpleNamespace(state=SimpleNamespace(**kwargs)) | |
| def test_prefers_active_websocket_session_env(): | |
| clear_episode() | |
| fallback_env = RangeEnvironment(docker_available=False) | |
| ws_env = RangeEnvironment(docker_available=False) | |
| server = SimpleNamespace( | |
| _sessions={"session_a": ws_env}, | |
| _session_info={"session_a": SimpleNamespace(last_activity_at=10.0)}, | |
| ) | |
| request = _Req(_app_with_state(env=fallback_env, openenv_server=server)) | |
| ctx = _get_env_context(request) | |
| assert ctx["env"] is ws_env | |
| assert ctx["state_scope"] == "websocket_session" | |
| assert ctx["session_id"] == "session_a" | |
| assert ctx["warning"] is None | |
| def test_uses_app_state_env_when_no_active_session(): | |
| clear_episode() | |
| fallback_env = RangeEnvironment(docker_available=False) | |
| server = SimpleNamespace(_sessions={}, _session_info={}) | |
| request = _Req(_app_with_state(env=fallback_env, openenv_server=server)) | |
| ctx = _get_env_context(request) | |
| assert ctx["env"] is fallback_env | |
| assert ctx["state_scope"] == "app_state_env" | |
| assert ctx["session_id"] is None | |
| assert isinstance(ctx["warning"], str) and ctx["warning"] | |
| def test_multiple_sessions_selects_most_recent_and_warns(): | |
| clear_episode() | |
| older_env = RangeEnvironment(docker_available=False) | |
| newer_env = RangeEnvironment(docker_available=False) | |
| server = SimpleNamespace( | |
| _sessions={"old": older_env, "new": newer_env}, | |
| _session_info={ | |
| "old": SimpleNamespace(last_activity_at=10.0), | |
| "new": SimpleNamespace(last_activity_at=20.0), | |
| }, | |
| ) | |
| request = _Req(_app_with_state(openenv_server=server)) | |
| ctx = _get_env_context(request) | |
| assert ctx["env"] is newer_env | |
| assert ctx["state_scope"] == "websocket_session" | |
| assert ctx["session_id"] == "new" | |
| assert "active sessions" in (ctx["warning"] or "").lower() | |
| def test_uses_published_episode_before_app_state_fallback(): | |
| clear_episode() | |
| snapshot = SnapshotSpec( | |
| topology={"hosts": ["attacker"], "zones": {"dmz": ["web"]}, "tier": 2}, | |
| flags=[], | |
| golden_path=[], | |
| task={"red_briefing": "r", "blue_briefing": "b"}, | |
| ) | |
| publish_episode( | |
| snapshot, | |
| RangeState(episode_id="published_ep", step_count=4, mode="blue", tier=2), | |
| ) | |
| fallback_env = RangeEnvironment(docker_available=False) | |
| server = SimpleNamespace(_sessions={}, _session_info={}) | |
| request = _Req(_app_with_state(env=fallback_env, openenv_server=server)) | |
| ctx = _get_env_context(request) | |
| assert ctx["env"] is None | |
| assert ctx["published_episode"]["snapshot"]["id"] == "published_ep" | |
| assert ctx["state_scope"] == "published_episode" | |
| assert ctx["session_id"] is None | |
| assert "most recent reset/step state" in (ctx["warning"] or "") | |
| clear_episode() | |