""" ``_get_httpx_client`` + ``HTTPHandler.post`` (same pattern as Azure Anthropic sync path: ``_get_httpx_client(params={"timeout": ...})`` then ``post(..., timeout=...)``). Uses https://httpbin.org/delay/10 with ``timeout=5`` — the handler must raise :class:`~litellm.exceptions.Timeout` before the 10s delay completes. Skips if httpbin is unreachable. Lives under ``local_testing`` (not ``make test-unit``). """ import json import os import sys import httpx import pytest sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))) from litellm.exceptions import Timeout as LitellmTimeout from litellm.llms.custom_httpx.http_handler import _get_httpx_client _HTTPBIN_DELAY_S = 10 _PER_REQUEST_TIMEOUT_S = 5.0 _CLIENT_DEFAULT_TIMEOUT_S = 60.0 def test_post_delay_exceeds_per_request_timeout_raises(): try: httpx.get("https://httpbin.org/get", timeout=5.0) except Exception as e: pytest.skip(f"httpbin.org unreachable: {e}") handler = _get_httpx_client(params={"timeout": _CLIENT_DEFAULT_TIMEOUT_S}) try: with pytest.raises(LitellmTimeout): handler.post( f"https://httpbin.org/delay/{_HTTPBIN_DELAY_S}", headers={"content-type": "application/json"}, data=json.dumps({"model": "claude", "messages": []}), timeout=_PER_REQUEST_TIMEOUT_S, ) finally: handler.close()