Skip to content

Commit dddd41d

Browse files
lucarligjonpspri
authored andcommitted
test: fix a2a diff-cover regressions
Signed-off-by: lucarlig <luca.carlig@ibm.com>
1 parent 45f0882 commit dddd41d

File tree

5 files changed

+743
-0
lines changed

5 files changed

+743
-0
lines changed

tests/unit/mcpgateway/services/test_a2a_protocol.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,52 @@ def test_prepare_a2a_invocation_api_key_auth():
621621
assert prepared.headers["Authorization"] == "Bearer my-api-key"
622622

623623

624+
def test_prepare_a2a_invocation_api_key_auth_falls_back_to_raw_value_on_decode_error(monkeypatch):
625+
monkeypatch.setattr("mcpgateway.services.a2a_protocol.decode_auth", MagicMock(side_effect=ValueError("boom")))
626+
627+
prepared = prepare_a2a_invocation(
628+
agent_type="generic",
629+
endpoint_url="https://example.com/",
630+
protocol_version="1.0.0",
631+
parameters={"query": "hi"},
632+
interaction_type="query",
633+
auth_type="api_key",
634+
auth_value="raw-api-key", # pragma: allowlist secret
635+
)
636+
637+
assert prepared.headers["Authorization"] == "Bearer raw-api-key" # pragma: allowlist secret
638+
639+
640+
def test_prepare_a2a_invocation_api_key_auth_uses_decoded_scalar(monkeypatch):
641+
monkeypatch.setattr("mcpgateway.services.a2a_protocol.decode_auth", lambda _val: "decoded-key")
642+
643+
prepared = prepare_a2a_invocation(
644+
agent_type="generic",
645+
endpoint_url="https://example.com/",
646+
protocol_version="1.0.0",
647+
parameters={"query": "hi"},
648+
interaction_type="query",
649+
auth_type="api_key",
650+
auth_value="encrypted-api-key", # pragma: allowlist secret
651+
)
652+
653+
assert prepared.headers["Authorization"] == "Bearer decoded-key" # pragma: allowlist secret
654+
655+
656+
def test_prepare_a2a_invocation_api_key_auth_from_mapping_uses_first_value():
657+
prepared = prepare_a2a_invocation(
658+
agent_type="generic",
659+
endpoint_url="https://example.com/",
660+
protocol_version="1.0.0",
661+
parameters={"query": "hi"},
662+
interaction_type="query",
663+
auth_type="api_key",
664+
auth_value={"x-api-key": "mapped-key"}, # pragma: allowlist secret
665+
)
666+
667+
assert prepared.headers["Authorization"] == "Bearer mapped-key" # pragma: allowlist secret
668+
669+
624670
def test_prepare_a2a_invocation_rejects_non_mapping_decoded_auth(monkeypatch):
625671
"""A decoded auth value that is not a mapping should raise ValueError."""
626672
monkeypatch.setattr("mcpgateway.services.a2a_protocol.decode_auth", lambda _val: "not-a-mapping")

tests/unit/mcpgateway/services/test_a2a_server_service.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ def test_get_server_agent_card_aggregates_skills_from_enabled_agents(self, servi
149149
assert len(card["skills"]) == 1
150150
assert card["skills"][0]["id"] == "summarize"
151151

152+
def test_get_server_agent_card_hidden_server_returns_none(self, service, mock_db):
153+
server = _make_server(name="private-server")
154+
server.visibility = "private"
155+
server.owner_email = "other@example.com"
156+
mock_db.execute.return_value.scalar_one_or_none.return_value = server
157+
158+
result = service.get_server_agent_card(mock_db, "private-server", user_email="user@example.com", token_teams=[])
159+
160+
assert result is None
161+
152162
# ------------------------------------------------------------------
153163
# resolve_server_agent
154164
# ------------------------------------------------------------------
@@ -198,6 +208,27 @@ def test_resolve_server_agent_protocol_version_defaults_to_1_0(self, service, mo
198208
assert result is not None
199209
assert result["protocol_version"] == "1.0"
200210

211+
def test_resolve_server_agent_hidden_server_returns_none(self, service, mock_db):
212+
server = _make_server(name="private-server")
213+
server.visibility = "private"
214+
server.owner_email = "other@example.com"
215+
mock_db.execute.return_value.scalar_one_or_none.return_value = server
216+
217+
result = service.resolve_server_agent(mock_db, "private-server", user_email="user@example.com", token_teams=[])
218+
219+
assert result is None
220+
221+
def test_resolve_server_agent_without_a2a_interface_returns_none(self, service, mock_db):
222+
server = _make_server(name="srv")
223+
mock_db.execute.side_effect = [
224+
MagicMock(**{"scalar_one_or_none.return_value": server}),
225+
MagicMock(**{"scalar_one_or_none.return_value": None}),
226+
]
227+
228+
result = service.resolve_server_agent(mock_db, "srv")
229+
230+
assert result is None
231+
201232
# ------------------------------------------------------------------
202233
# select_downstream_agent
203234
# ------------------------------------------------------------------

0 commit comments

Comments
 (0)