import pytest import asyncio from src.agents import AgentContext, AgentStatus, executor from src.agents.examples import EchoAgent, SleepAgent, ComputeAgent from src.telemetry import collector @pytest.mark.asyncio async def test_echo_agent(): agent = EchoAgent() ctx = AgentContext(agent_id=agent.agent_id) result = await executor.run(agent, ctx, message="test") assert result.status == AgentStatus.COMPLETED assert result.output["echo"] == "test" assert result.duration_ms is not None @pytest.mark.asyncio async def test_compute_agent(): agent = ComputeAgent() result = await executor.run(agent, numbers=[10, 20, 30]) assert result.status == AgentStatus.COMPLETED assert result.output["sum"] == 60 assert result.output["average"] == 20.0 @pytest.mark.asyncio async def test_agent_timeout(): agent = SleepAgent() result = await executor.run(agent, timeout=1, seconds=5.0) assert result.status == AgentStatus.TIMEOUT assert result.error is not None @pytest.mark.asyncio async def test_retry_succeeds(): agent = EchoAgent() result = await executor.run_with_retry(agent, message="retry_test", retries=2) assert result.status == AgentStatus.COMPLETED def test_telemetry_collector(): from src.telemetry.models import TelemetryEvent, EventType collector.emit(TelemetryEvent(event_type=EventType.LOG, payload={"msg": "hello"})) events = collector.get_events(limit=10) assert len(events) >= 1 def test_telemetry_metric(): from src.telemetry.models import Metric collector.record_metric(Metric(name="test.metric", value=42.0, unit="count")) metrics = collector.get_metrics(limit=10) assert any(m.name == "test.metric" for m in metrics) def test_agent_registry(): from src.agents.registry import registry types = registry.list_types() assert "echo" in types assert "sleep" in types assert "compute" in types