From 93b5df31890fe45d306eb0cb45b84c8f562dc2b1 Mon Sep 17 00:00:00 2001 From: teknium1 <127238744+teknium1@users.noreply.github.com> Date: Thu, 4 Jun 2026 06:29:10 -0700 Subject: [PATCH] fix(test): patch async_is_safe_url in web-provider SSRF mocks web_tools.is_safe_url was replaced by async_is_safe_url, but three web-provider test files still monkeypatched the old sync name, raising AttributeError. Patch the async variant with an async lambda. --- tests/tools/test_web_providers_brave_free.py | 5 ++++- tests/tools/test_web_providers_ddgs.py | 5 ++++- tests/tools/test_web_providers_searxng.py | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/tools/test_web_providers_brave_free.py b/tests/tools/test_web_providers_brave_free.py index a75b9d38e..7801b28bd 100644 --- a/tests/tools/test_web_providers_brave_free.py +++ b/tests/tools/test_web_providers_brave_free.py @@ -259,7 +259,10 @@ class TestBraveFreeSearchOnlyErrors: monkeypatch.setattr(web_tools, "_load_web_config", lambda: {"backend": "brave-free"}) monkeypatch.setenv("BRAVE_SEARCH_API_KEY", "BSAkey123") monkeypatch.setattr(web_tools, "_is_tool_gateway_ready", lambda: False) - monkeypatch.setattr(web_tools, "is_safe_url", lambda url: True) + async def _allow_ssrf(_url: str) -> bool: + return True + + monkeypatch.setattr(web_tools, "async_is_safe_url", _allow_ssrf) monkeypatch.setattr("tools.interrupt.is_interrupted", lambda: False, raising=False) result_str = asyncio.get_event_loop().run_until_complete( diff --git a/tests/tools/test_web_providers_ddgs.py b/tests/tools/test_web_providers_ddgs.py index 791993161..283a25f0a 100644 --- a/tests/tools/test_web_providers_ddgs.py +++ b/tests/tools/test_web_providers_ddgs.py @@ -229,7 +229,10 @@ class TestDDGSSearchOnlyErrors: monkeypatch.setattr(web_tools, "_load_web_config", lambda: {"backend": "ddgs"}) monkeypatch.setattr(web_tools, "_ddgs_package_importable", lambda: True) monkeypatch.setattr(web_tools, "_is_tool_gateway_ready", lambda: False) - monkeypatch.setattr(web_tools, "is_safe_url", lambda url: True) + async def _allow_ssrf(_url: str) -> bool: + return True + + monkeypatch.setattr(web_tools, "async_is_safe_url", _allow_ssrf) monkeypatch.setattr("tools.interrupt.is_interrupted", lambda: False, raising=False) result_str = asyncio.get_event_loop().run_until_complete( diff --git a/tests/tools/test_web_providers_searxng.py b/tests/tools/test_web_providers_searxng.py index 31bbaeb47..3a4f6d8d6 100644 --- a/tests/tools/test_web_providers_searxng.py +++ b/tests/tools/test_web_providers_searxng.py @@ -318,7 +318,10 @@ class TestSearXNGOnlyExtractCrawlErrors: monkeypatch.setattr(web_tools, "_load_web_config", lambda: {"backend": "searxng"}) monkeypatch.setenv("SEARXNG_URL", "http://localhost:8080") monkeypatch.setattr(web_tools, "_is_tool_gateway_ready", lambda: False) - monkeypatch.setattr(web_tools, "is_safe_url", lambda url: True) + async def _allow_ssrf(_url: str) -> bool: + return True + + monkeypatch.setattr(web_tools, "async_is_safe_url", _allow_ssrf) monkeypatch.setattr("tools.interrupt.is_interrupted", lambda: False, raising=False) result_str = asyncio.get_event_loop().run_until_complete(