Mock ToolManager with configurable per-tool delays for batch timeout tests.
| 501 | |
| 502 | |
| 503 | class SlowMockToolManager: |
| 504 | """Mock ToolManager with configurable per-tool delays for batch timeout tests.""" |
| 505 | |
| 506 | def __init__( |
| 507 | self, delays: dict[str, float] | None = None, default_delay: float = 0.0 |
| 508 | ): |
| 509 | self.tool_timeout = 30.0 |
| 510 | self.delays = delays or {} |
| 511 | self.default_delay = default_delay |
| 512 | self.executed_tools: list[str] = [] |
| 513 | |
| 514 | async def execute_tool( |
| 515 | self, |
| 516 | tool_name: str, |
| 517 | arguments: dict, |
| 518 | namespace: str | None = None, |
| 519 | timeout: float | None = None, |
| 520 | ) -> ToolCallResult: |
| 521 | delay = self.delays.get(tool_name, self.default_delay) |
| 522 | await asyncio.sleep(delay) |
| 523 | self.executed_tools.append(tool_name) |
| 524 | return ToolCallResult( |
| 525 | tool_name=tool_name, |
| 526 | success=True, |
| 527 | result={"output": f"result from {tool_name}"}, |
| 528 | ) |
| 529 | |
| 530 | |
| 531 | @pytest.mark.asyncio |
no outgoing calls