Files
Nexus/tests/test_agent_version.py
T
Nexus Agent 69068e2e39 feat(ops): server_batch 回收、sync_logs 清理与 Agent 安装跳过
部署对齐三项后端能力:启动/周期收尾僵尸批量任务、30 天推送日志 purge、已安装且版本不低于主站时跳过批量安装 Agent。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 15:23:03 +08:00

85 lines
2.5 KiB
Python

"""Agent version comparison and install-skip decision."""
from unittest.mock import AsyncMock, patch
import pytest
from server.application.server_batch_common import agent_install_skip_result
from server.domain.models import Server
from server.utils.agent_version import (
get_central_agent_version,
is_version_at_least,
is_version_lower,
version_tuple,
)
def test_version_tuple():
assert version_tuple("2.0.0") == (2, 0, 0)
assert version_tuple("1.10.3") == (1, 10, 3)
assert version_tuple("") == ()
def test_is_version_lower():
assert is_version_lower("1.9.0", "2.0.0") is True
assert is_version_lower("2.0.0", "2.0.0") is False
assert is_version_lower("2.1.0", "2.0.0") is False
def test_is_version_at_least():
assert is_version_at_least("2.0.0", "2.0.0") is True
assert is_version_at_least("2.0.1", "2.0.0") is True
assert is_version_at_least("1.9.9", "2.0.0") is False
def test_central_agent_version_matches_agent_py():
assert get_central_agent_version() == "2.0.0"
@pytest.mark.asyncio
async def test_agent_install_skip_when_version_current():
server = Server(id=1, name="A", agent_api_key="nxs-k", agent_version="2.0.0")
with patch(
"server.application.server_batch_common.resolve_remote_agent_version",
new_callable=AsyncMock,
return_value="2.0.0",
):
result = await agent_install_skip_result(
server=server,
server_id=1,
server_name="A",
central_version="2.0.0",
)
assert result is not None
assert result["success"] is True
assert "已跳过" in result["stdout"]
@pytest.mark.asyncio
async def test_agent_install_no_skip_when_version_lower():
server = Server(id=2, name="B", agent_api_key="nxs-k", agent_version="1.0.0")
with patch(
"server.application.server_batch_common.resolve_remote_agent_version",
new_callable=AsyncMock,
return_value="1.0.0",
):
result = await agent_install_skip_result(
server=server,
server_id=2,
server_name="B",
central_version="2.0.0",
)
assert result is None
@pytest.mark.asyncio
async def test_agent_install_no_skip_when_never_installed():
server = Server(id=3, name="C", agent_api_key=None, agent_version=None)
result = await agent_install_skip_result(
server=server,
server_id=3,
server_name="C",
central_version="2.0.0",
)
assert result is None