7import cavoke_openapi_client
9from cavoke_openapi_client.api
import default_api
11tictactoe_game_id =
"tictactoe"
14def test_check_tictactoe_available():
16 Checks whether tictactoe game is available
18 with cavoke_openapi_client.ApiClient(pytest.server_config)
as api_client:
19 api_instance = default_api.DefaultApi(api_client)
20 games: List[default_api.GameInfo] = api_instance.list_games()
21 assert any(e.id == tictactoe_game_id
for e
in
22 games), f
"Expected {tictactoe_game_id} in games. All other f{tictactoe_game_id} tests will fail as well."
25def test_simple_game():
27 Creates a tictactoe session and plays a simple round
with itself, checking the state after every move.
29 with cavoke_openapi_client.ApiClient(pytest.server_config)
as api_client:
30 api_instance = default_api.DefaultApi(api_client)
31 alice_id = str(uuid.uuid4())
32 bob_id = str(uuid.uuid4())
34 session: default_api.SessionInfo = api_instance.create_session(tictactoe_game_id, user_id=alice_id)
35 assert session.game_id == tictactoe_game_id
39 s2 = api_instance.join_session(session.session_id, user_id=bob_id)
42 api_instance.start_session(session.session_id, user_id=alice_id)
56 for player_id, move
in moves:
57 assert api_instance.session_info(session.session_id, user_id=bob_id).status == 1
58 api_instance.send_move(session.session_id, user_id=bob_id
if player_id
else alice_id,
59 game_move=default_api.GameMove(move))
62 final_session: default_api.SessionInfo = api_instance.session_info(session.session_id, user_id=bob_id)
63 final_state: default_api.GameState = api_instance.get_update(session.session_id, user_id=alice_id)
64 assert final_session.session_id == session.session_id
65 assert final_session.status == 2
66 assert final_state.state ==
'OXOXXOXOX'
69@pytest.mark.parametrize('execution_number', range(10))
70def test_transaction_isolation_on_game_end(execution_number):
72 Test for correct transaction isolation. There was a bug, when transactions were
not isolated properly,
73 therefore producing invalid a game state
with broken invariant
75 with cavoke_openapi_client.ApiClient(pytest.server_config)
as api_client:
76 api_instance = default_api.DefaultApi(api_client)
77 alice_id = str(uuid.uuid4())
78 bob_id = str(uuid.uuid4())
80 session: default_api.SessionInfo = api_instance.create_session(tictactoe_game_id, user_id=alice_id)
81 assert session.game_id == tictactoe_game_id
83 s2 = api_instance.join_session(session.session_id, user_id=bob_id)
86 api_instance.start_session(session.session_id, user_id=alice_id)
99 for player_id, move
in moves:
100 assert api_instance.session_info(session.session_id, user_id=bob_id).status == 1
101 api_instance.send_move(session.session_id, user_id=bob_id
if player_id
else alice_id,
102 game_move=default_api.GameMove(move))
107 def spam_x6_player_1():
108 logging.debug(
'Commencing spamming')
110 logging.debug(f
'req {i}')
111 api_instance.send_move(session.session_id, user_id=bob_id, game_move=default_api.GameMove(
'X 6'), async_req=
True)
115 logging.debug(
'Spamming stopped')
117 t_spam = threading.Thread(target=spam_x6_player_1)
122 api_instance.send_move(session.session_id, user_id=alice_id, game_move=default_api.GameMove(
'X 6'), _request_timeout=10)
125 logging.debug(
'Spamming stopped. Checking final.')
127 final_session: default_api.SessionInfo = api_instance.session_info(session.session_id, user_id=alice_id)
128 final_state: default_api.GameState = api_instance.get_update(session.session_id, user_id=alice_id)
129 logging.debug(str(final_state))
133 assert final_session.session_id == session.session_id
134 if not final_state.is_terminal:
135 logging.warning(
"Session is not finished! Skipping.")
137 assert final_state.state ==
'OXOXXOXOX'
140@pytest.mark.parametrize('execution_number', range(5))
141def test_requests_flood(execution_number):
143 Makes many requests to internal game (via boost process) and checks that the server
is alive.
144 Previously there was a server segmentation fault caused here.
146 with cavoke_openapi_client.ApiClient(pytest.server_config)
as api_client:
147 api_instance = default_api.DefaultApi(api_client)
148 alice_id = str(uuid.uuid4())
150 session: default_api.SessionInfo = api_instance.create_session(tictactoe_game_id, user_id=alice_id)
151 assert session.game_id == tictactoe_game_id
152 logging.debug(
'Starting spamming...')
154 logging.debug(f
'req {i}')
155 api_instance.validate_session(session.session_id, user_id=alice_id, async_req=
True)
156 logging.debug(
'Spamming stopped.')
157 assert api_instance.health(_request_timeout=10) ==
"OK"