Files
odysseus/tests/test_network_guard_recovery_routing.py
T

100 lines
3.0 KiB
Python

from src.agent_loop import _blocked_network_recovery_tools
def test_network_guard_preserves_native_recovery_tools():
events = [
{
"type": "tool_output",
"tool": "python",
"output": (
"python: ad-hoc HTTP access is disabled when native web tools "
"are available. Use pdf_extract for online PDFs, web_fetch for "
"a concrete page, or web_search for discovery."
),
},
]
assert _blocked_network_recovery_tools(events) == {
"pdf_extract",
"web_fetch",
"web_search",
}
def test_structured_tool_result_preserves_native_recovery_tools():
events = [{
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": "call-1",
"content": [{
"type": "text",
"text": (
"bash: ad-hoc HTTP downloads are disabled when native web "
"tools are available. Use pdf_extract for online PDFs."
),
}],
}],
}]
assert _blocked_network_recovery_tools(events) == {
"pdf_extract",
"web_fetch",
"web_search",
}
def test_persisted_internal_tool_event_preserves_recovery_tools():
events = [{
"tool": "bash",
"output": (
"bash: ad-hoc HTTP downloads are disabled when native web tools "
"are available. Use pdf_extract for online PDFs."
),
"exit_code": 1,
}]
assert _blocked_network_recovery_tools(events) == {
"pdf_extract",
"web_fetch",
"web_search",
}
def test_tool_event_state_exists_before_initial_route_build():
from pathlib import Path
source = (Path(__file__).parents[1] / "src" / "agent_loop.py").read_text()
init = source.index("tool_events = [] # Available to initial")
first_build = source.index("_route_state = await _build_route_request_state(", init)
assert init < first_build
def test_network_recovery_floor_precedes_round_schema_materialization():
from pathlib import Path
source = (Path(__file__).parents[1] / "src" / "agent_loop.py").read_text()
floor = source.index("_network_recovery_floor = (")
active_state = source.index("_active_route_state = {", floor)
schemas = source.index("all_tool_schemas = _tool_schemas_for_route", active_state)
assert floor < active_state < schemas
def test_non_tool_event_cannot_widen_route():
events = [{
"type": "message",
"role": "user",
"output": (
"python: ad-hoc HTTP access is disabled when native web tools are "
"available. Use pdf_extract for online PDFs."
),
}]
assert _blocked_network_recovery_tools(events) == set()
def test_unrelated_tool_failure_does_not_widen_route():
events = [{"type": "tool_output", "tool": "bash", "output": "Permission denied"}]
assert _blocked_network_recovery_tools(events) == set()