Add admin port support with other major refactorations
Some checks failed
Continuous Integration / lint-and-security (pull_request) Failing after 39s
Continuous Integration / tests-and-coverage (pull_request) Successful in 24s

This commit is contained in:
2026-06-29 19:47:48 +02:00
parent df629b2922
commit aebd5f4ef5
22 changed files with 1746 additions and 67 deletions

View File

@@ -77,8 +77,9 @@ async def test_client_error_handling():
client.shutdown_event.clear()
await client.receive_ServerError(None, 10) # WrongPassword
await client.receive_ServerError(None, 11) # NameInUse
await client.receive_ServerError(None, 17) # Timeout
await client.receive_ServerError(None, 9) # NameInUse
await client.receive_ServerError(None, 11) # CompanyMismatch
await client.receive_ServerError(None, 17) # TimeoutComputer
@pytest.mark.asyncio
async def test_client_server_full_banned():
@@ -165,3 +166,75 @@ async def test_client_full_handshake_flow():
client._transport.close()
await client.quit()
# --- Game Client Edge Cases & Callback Unit Tests ---
@pytest.mark.asyncio
async def test_unit_client_connection_failure(server_config):
client = OpenTTDClient(host=server_config["host"], port=9999)
with pytest.raises(OSError):
await client.connect()
@pytest.mark.asyncio
async def test_unit_client_already_joined_warning(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
client.joined.set()
await client.join_company(255)
assert client.joined.is_set()
@pytest.mark.asyncio
async def test_unit_client_disconnect(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
client.disconnect(None)
assert client.shutdown_event.is_set()
@pytest.mark.asyncio
async def test_unit_client_receive_chat_no_callback(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
client.on_chat = None
await client.receive_ServerChat(None, 1, "hello")
assert client.on_chat is None
@pytest.mark.asyncio
async def test_unit_client_receive_chat_with_callback(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
chats = []
client.on_chat = lambda cid, msg: chats.append((cid, msg))
await client.receive_ServerChat(None, 2, "world")
assert chats == [(2, "world")]
@pytest.mark.asyncio
async def test_unit_client_receive_auth_request_invalid_type(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
await client.receive_ServerAuthenticationRequest(None, 2, b"")
assert not client.encryption_enabled
@pytest.mark.asyncio
async def test_unit_client_noop_callbacks(server_config):
client = OpenTTDClient(host=server_config["host"], port=server_config["game_port"])
client.connected(None)
await client.receive_ServerUnused(None)
await client.receive_ServerCompanyUpdate(None)
await client.receive_ServerClientInfo(None)
await client.receive_ServerSync(None)
await client.receive_ServerClientJoined(None)
await client.receive_ServerMapBegin(None)
await client.receive_ServerMapSize(None)
await client.receive_ServerMapData(None)
await client.receive_ServerConfigurationUpdate(None)
await client.receive_ServerExternalChat(None)
await client.receive_ServerCommand(None)
await client.receive_ServerFull(None)
await client.receive_ServerBanned(None)
await client.receive_ClientAck(None)
await client.receive_ClientIdentify(None)
assert not client.shutdown_event.is_set()
assert not client.joined.is_set()
def test_unit_exclude_call_check_decorator():
from openttd import exclude_call_check
@exclude_call_check
def dummy(): pass
assert dummy.__exclude_call_check__ is True