feat: add agent management
This commit is contained in:
1 parent
d9f0da694b
commit
b9b5e5e36f
17 files changed
+1644
-1
No files matched your search
@@ -0,0 +1,120 @@
|
||||
"""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()
|
||||
Reference in new issue
Block a user