Download tests/plugins/test_a2a_tools_gate.py from SaylorTwift/hermes-agent: direct link, hf CLI and curl.
- Browser
- Download file 2.27 kB
-
https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/tests/plugins/test_a2a_tools_gate.py
- Command line
-
hf download hf://SaylorTwift/hermes-agent/tests/plugins/test_a2a_tools_gate.py
-
curl -L -o test_a2a_tools_gate.py https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/tests/plugins/test_a2a_tools_gate.py
2.27 kB
| """a2a client tools config gate (#95681, maintainer-directed). | |
| The 5 outbound a2a_* tools registered unconditionally — every session on | |
| every install paid ~561 tok/call for a toolset whose only possible output | |
| without config is "no peers configured". A2A is NOT the Bot Mode | |
| mechanism (bots talk over gateway RPCs); it is opt-in foreign-agent | |
| plumbing. Gate: serve only when a2a_agents is non-empty, the inbound | |
| platform is enabled, or A2A_PORT is set. Fail closed. | |
| """ | |
| import os | |
| import sys | |
| import unittest | |
| from unittest.mock import patch | |
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..")) | |
| import plugins.platforms.a2a.tools as a2at | |
| class TestA2AToolsGate(unittest.TestCase): | |
| def setUp(self): | |
| os.environ.pop("A2A_PORT", None) | |
| def _avail(self, cfg): | |
| with patch.object(a2at, "_load_config", return_value=cfg): | |
| return a2at._a2a_tools_available() | |
| def test_unconfigured_install_serves_nothing(self): | |
| self.assertFalse(self._avail({})) | |
| self.assertFalse(self._avail({"a2a_agents": {}})) | |
| def test_peers_configured_serves(self): | |
| self.assertTrue(self._avail({"a2a_agents": {"r": {"url": "http://x"}}})) | |
| def test_inbound_platform_enabled_serves(self): | |
| self.assertTrue(self._avail({"platforms": {"a2a": {"enabled": True}}})) | |
| def test_a2a_port_env_serves(self): | |
| os.environ["A2A_PORT"] = "9999" | |
| try: | |
| self.assertTrue(self._avail({})) | |
| finally: | |
| os.environ.pop("A2A_PORT", None) | |
| def test_config_crash_fails_closed(self): | |
| with patch.object(a2at, "_load_config", side_effect=RuntimeError("boom")): | |
| self.assertFalse(a2at._a2a_tools_available()) | |
| def test_all_five_tools_carry_the_gate(self): | |
| """Every a2a_* registration must pass the check_fn — a sixth tool | |
| added without it would silently reopen the hole.""" | |
| seen = {} | |
| class Ctx: | |
| def register_tool(self, name, **kw): | |
| seen[name] = kw.get("check_fn") | |
| a2at.register_tools(Ctx()) | |
| self.assertEqual(len(seen), 5, sorted(seen)) | |
| for name, fn in seen.items(): | |
| self.assertIs(fn, a2at._a2a_tools_available, name) | |
| if __name__ == "__main__": | |
| unittest.main() | |