48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Tests for Baota server list API fields."""
|
|
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from server.application.services.btpanel_service import BtPanelService
|
|
from server.domain.models import Server
|
|
|
|
|
|
def _server(sid: int, *, is_online: bool = False, agent_version: str | None = None) -> Server:
|
|
return Server(
|
|
id=sid,
|
|
name=f"s{sid}",
|
|
domain=f"1.2.3.{sid}",
|
|
is_online=is_online,
|
|
agent_version=agent_version,
|
|
extra_attrs={},
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_list_server_statuses_includes_live_online_from_redis():
|
|
svc = BtPanelService(AsyncMock())
|
|
servers = [_server(1, agent_version="1.0.0"), _server(2)]
|
|
|
|
mock_redis = MagicMock()
|
|
mock_pipe = MagicMock()
|
|
mock_redis.pipeline.return_value = mock_pipe
|
|
mock_pipe.execute = AsyncMock(return_value=[
|
|
{"is_online": "True", "agent_version": "1.0.0"},
|
|
{},
|
|
])
|
|
|
|
with patch.object(svc.servers, "get_all", AsyncMock(return_value=servers) ), patch(
|
|
"server.infrastructure.redis.client.get_redis",
|
|
return_value=mock_redis,
|
|
), patch(
|
|
"server.utils.agent_version.agent_is_installed",
|
|
side_effect=lambda agent_version_db, heartbeat: bool(agent_version_db or heartbeat),
|
|
):
|
|
rows = await svc.list_server_statuses()
|
|
|
|
assert rows[0]["is_online"] is True
|
|
assert rows[0]["status"] == "online"
|
|
assert rows[1]["is_online"] is False
|
|
assert rows[1]["status"] == "unknown"
|