remove stroing of the Game Board State into Redis or Memory

This commit is contained in:
2026-04-08 08:36:54 +02:00
parent f6e19e18e6
commit a62501cf22
11 changed files with 13 additions and 296 deletions
-108
View File
@@ -1,108 +0,0 @@
import unittest
from typing import Any, cast
from server.GameBoard import GameBoard
from server.game_state_store import GameStateStoreBuilder, MemoryGameBoardStore, RedisGameBoardStore
from snakes.TemplateSnake import TemplateSnake
class _FakeRedis:
def __init__(self):
self.data = {}
async def set(self, key, value, ex=None):
self.data[key] = value
async def get(self, key):
return self.data.get(key)
async def delete(self, key):
self.data.pop(key, None)
async def aclose(self):
return None
class TestGameStateStore(unittest.IsolatedAsyncioTestCase):
def _build_board(self) -> GameBoard:
board = GameBoard(
game_id="game-1",
width=11,
height=11,
ruleset={"name": "standard", "version": "v1.0.0"},
source="custom",
map="standard",
snake_class=TemplateSnake(),
)
board.read_game_data(
{
"turn": 3,
"board": {
"food": [{"x": 1, "y": 1}],
"hazards": [],
"snakes": [
{
"id": "me",
"name": "me",
"health": 99,
"length": 3,
"head": {"x": 2, "y": 2},
"body": [
{"x": 2, "y": 2},
{"x": 2, "y": 1},
{"x": 2, "y": 0},
],
}
],
},
"you": {
"id": "me",
"name": "me",
"health": 99,
"length": 3,
"head": {"x": 2, "y": 2},
"body": [
{"x": 2, "y": 2},
{"x": 2, "y": 1},
{"x": 2, "y": 0},
],
},
"game": {"timeout": 500},
}
)
return board
def test_builder_selects_store_backend(self):
memory_store = GameStateStoreBuilder.build(backend="memory")
redis_store = GameStateStoreBuilder.build(backend="redis")
default_store = GameStateStoreBuilder.build(backend="unknown")
self.assertIsInstance(memory_store, MemoryGameBoardStore)
self.assertIsInstance(redis_store, RedisGameBoardStore)
self.assertIsInstance(default_store, MemoryGameBoardStore)
async def test_memory_backend_roundtrip(self):
store = MemoryGameBoardStore()
board = self._build_board()
await store.save("game-1", board)
loaded = cast(GameBoard, await store.load("game-1"))
self.assertIsNotNone(loaded)
self.assertEqual(loaded.id, "game-1")
await store.delete("game-1")
self.assertIsNone(await store.load("game-1"))
async def test_redis_backend_roundtrip(self):
store = RedisGameBoardStore()
store._redis = cast(Any, _FakeRedis())
board = self._build_board()
await store.save("game-1", board)
loaded = cast(GameBoard, await store.load("game-1"))
self.assertIsNotNone(loaded)
self.assertEqual(loaded.id, "game-1")
self.assertEqual(loaded.get_turn(), 3)
await store.delete("game-1")
self.assertIsNone(await store.load("game-1"))
if __name__ == "__main__":
unittest.main()
-3
View File
@@ -27,7 +27,6 @@ class TestMetricsStoreTemplate(unittest.IsolatedAsyncioTestCase):
"last_game_end_unix": 2,
"last_move_unix": 3,
"games_stuck_removed": 0,
"game_state_local_cache_enabled": False,
"metrics_backend": "memory",
"active_games": 1,
"tracked_games": 1,
@@ -78,7 +77,6 @@ class TestMetricsStoreTemplate(unittest.IsolatedAsyncioTestCase):
"oldest_active_game_age_sec": 5,
"stale_game_timeout_sec": 180,
"active_games_stale": 0,
"game_state_local_cache_enabled": True,
"http_requests_by_endpoint": {
"info": 1,
"start": 1,
@@ -115,7 +113,6 @@ class TestMetricsStoreTemplate(unittest.IsolatedAsyncioTestCase):
"oldest_active_game_age_sec": 7,
"stale_game_timeout_sec": 180,
"active_games_stale": 1,
"game_state_local_cache_enabled": False,
"http_requests_by_endpoint": {
"info": 1,
"start": 1,