Skip to content

Commit 449282d

Browse files
committed
fix: register A2A routes from agent.json
1 parent f4c7e4c commit 449282d

2 files changed

Lines changed: 79 additions & 2 deletions

File tree

src/google/adk/cli/fast_api.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -746,8 +746,6 @@ async def _get_a2a_runner_async() -> Runner:
746746
)
747747

748748
import inspect
749-
import json
750-
751749
from google.adk.agents import Agent
752750
import google.auth
753751
from pydantic import ValidationError as _ValidationError

tests/unittests/cli/test_fast_api.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,85 @@ def test_a2a_agent_discovery(test_app_with_a2a):
19571957
logger.info("A2A agent discovery test passed")
19581958

19591959

1960+
def test_a2a_agent_json_registers_routes(
1961+
mock_session_service,
1962+
mock_artifact_service,
1963+
mock_memory_service,
1964+
mock_agent_loader,
1965+
mock_eval_sets_manager,
1966+
mock_eval_set_results_manager,
1967+
temp_agents_dir_with_a2a,
1968+
monkeypatch,
1969+
):
1970+
"""A2A setup should load agent.json before later optional integrations."""
1971+
with (
1972+
patch("signal.signal", return_value=None),
1973+
patch(
1974+
"google.adk.cli.fast_api.create_session_service_from_options",
1975+
return_value=mock_session_service,
1976+
),
1977+
patch(
1978+
"google.adk.cli.fast_api.create_artifact_service_from_options",
1979+
return_value=mock_artifact_service,
1980+
),
1981+
patch(
1982+
"google.adk.cli.fast_api.create_memory_service_from_options",
1983+
return_value=mock_memory_service,
1984+
),
1985+
patch(
1986+
"google.adk.cli.fast_api.AgentLoader",
1987+
return_value=mock_agent_loader,
1988+
),
1989+
patch(
1990+
"google.adk.cli.fast_api.LocalEvalSetsManager",
1991+
return_value=mock_eval_sets_manager,
1992+
),
1993+
patch(
1994+
"google.adk.cli.fast_api.LocalEvalSetResultsManager",
1995+
return_value=mock_eval_set_results_manager,
1996+
),
1997+
patch(
1998+
"google.adk.cli.fast_api._create_task_store_from_options",
1999+
return_value=MagicMock(),
2000+
),
2001+
patch(
2002+
"google.adk.a2a.executor.a2a_agent_executor.A2aAgentExecutor"
2003+
) as mock_executor,
2004+
patch(
2005+
"a2a.server.request_handlers.DefaultRequestHandler"
2006+
) as mock_handler,
2007+
patch("a2a.types.AgentCard") as mock_agent_card,
2008+
patch("a2a.server.apps.A2AStarletteApplication") as mock_a2a_app,
2009+
):
2010+
mock_executor.return_value = MagicMock()
2011+
mock_handler.return_value = MagicMock()
2012+
mock_agent_card.return_value = MagicMock()
2013+
mock_a2a_app_instance = MagicMock()
2014+
mock_a2a_app_instance.routes.return_value = []
2015+
mock_a2a_app.return_value = mock_a2a_app_instance
2016+
2017+
with monkeypatch.context() as m:
2018+
m.chdir(temp_agents_dir_with_a2a)
2019+
get_fast_api_app(
2020+
agents_dir=".",
2021+
web=True,
2022+
session_service_uri="",
2023+
artifact_service_uri="",
2024+
memory_service_uri="",
2025+
allow_origins=["*"],
2026+
a2a=True,
2027+
host="127.0.0.1",
2028+
port=8000,
2029+
)
2030+
2031+
mock_agent_card.assert_called_once()
2032+
mock_a2a_app.assert_called_once()
2033+
mock_a2a_app_instance.routes.assert_called_once_with(
2034+
rpc_url="/a2a/test_a2a_agent",
2035+
agent_card_url="/a2a/test_a2a_agent/.well-known/agent-card.json",
2036+
)
2037+
2038+
19602039
def test_a2a_request_handler_uses_push_config_store(
19612040
mock_session_service,
19622041
mock_artifact_service,

0 commit comments

Comments
 (0)