121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
"""Focused tests for the Agent Management read model."""
|
|
|
|
import unittest
|
|
from uuid import UUID
|
|
|
|
from app.agent_registry.service import AgentRegistryService
|
|
from app.identity import required_api_permission
|
|
|
|
|
|
SITE_ID = UUID("00000000-0000-4000-8000-000000001800")
|
|
ZONE_ID = UUID("00000000-0000-4000-8000-000000001801")
|
|
|
|
|
|
class FakeAgentRegistryRepository:
|
|
def list_registry(self):
|
|
return {
|
|
"sites": [
|
|
{
|
|
"id": SITE_ID,
|
|
"name": "Test Site",
|
|
}
|
|
],
|
|
"zones": [
|
|
{
|
|
"id": ZONE_ID,
|
|
"site_id": SITE_ID,
|
|
"site_name": "Test Site",
|
|
"name": "Network A",
|
|
"description": None,
|
|
"is_enabled": True,
|
|
"assigned_agent_id": "agent-test",
|
|
"networks": ["10.50.0.0/24"],
|
|
}
|
|
],
|
|
"agents": [
|
|
{
|
|
"agent_id": "agent-test",
|
|
"display_name": "Test Agent",
|
|
"site_id": SITE_ID,
|
|
"site_name": "Test Site",
|
|
"agent_zone_id": ZONE_ID,
|
|
"agent_zone_name": "Network A",
|
|
"agent_zone_enabled": True,
|
|
"hostname": "test-agent",
|
|
"version": "1.0.0-alpha",
|
|
"ip_address": "10.50.0.10",
|
|
"last_checkin_at": "2026-08-26T20:00:00+00:00",
|
|
"credential_state": "active",
|
|
"credential_created_at": "2026-08-26T19:00:00+00:00",
|
|
"credential_revoked_at": None,
|
|
}
|
|
],
|
|
}
|
|
|
|
|
|
class AgentRegistryServiceTests(unittest.TestCase):
|
|
def test_projection_is_factual_and_zone_aware(self):
|
|
data = AgentRegistryService(
|
|
FakeAgentRegistryRepository()
|
|
).list_registry()
|
|
|
|
self.assertEqual(len(data.agents), 1)
|
|
self.assertEqual(len(data.sites), 1)
|
|
self.assertEqual(len(data.zones), 1)
|
|
|
|
agent = data.agents[0]
|
|
self.assertEqual(agent.agent_id, "agent-test")
|
|
self.assertEqual(agent.credential_state, "active")
|
|
self.assertEqual(agent.routing_state, "assigned")
|
|
self.assertEqual(
|
|
data.zones[0].networks,
|
|
["10.50.0.0/24"],
|
|
)
|
|
|
|
def test_unassigned_and_disabled_routing_are_not_fabricated_online_states(self):
|
|
repository = FakeAgentRegistryRepository()
|
|
|
|
repository.list_registry = lambda: {
|
|
"sites": [],
|
|
"zones": [],
|
|
"agents": [
|
|
{
|
|
"agent_id": "legacy",
|
|
"display_name": None,
|
|
"site_id": None,
|
|
"site_name": "Legacy Site",
|
|
"agent_zone_id": None,
|
|
"agent_zone_name": None,
|
|
"agent_zone_enabled": None,
|
|
"hostname": None,
|
|
"version": None,
|
|
"ip_address": None,
|
|
"last_checkin_at": "2026-08-26T20:00:00+00:00",
|
|
"credential_state": "legacy",
|
|
"credential_created_at": None,
|
|
"credential_revoked_at": None,
|
|
}
|
|
],
|
|
}
|
|
|
|
data = AgentRegistryService(repository).list_registry()
|
|
|
|
self.assertEqual(
|
|
data.agents[0].routing_state,
|
|
"unassigned",
|
|
)
|
|
self.assertEqual(
|
|
data.agents[0].credential_state,
|
|
"legacy",
|
|
)
|
|
|
|
def test_api_permission_mapping_is_explicit(self):
|
|
self.assertEqual(
|
|
required_api_permission("GET", "/api/agents"),
|
|
"agents.view",
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|