fix(e2e): migrate load suite from e2e_gateway to ProxyClient - #33839
Conversation
Unique batch model names avoid load-balancing onto stale azure-batch deployments that still pointed at the retired gpt-4.1-mini-batch, which only the managed/unified path was hitting. Retry batch retrieve on 500 and /ui/api-keys navigation on ERR_ABORTED. Skip the MCP key-access suite when the compose-only mcp-upstream is unreachable on stage k8s
Register the regional Datadog MCP endpoint with DD-API-KEY / DD-APPLICATION-KEY static headers (CI-safe header auth; browser OAuth is not headless-automatable). Seed a chat completion marked e2e-datadog-mcp-*, assert the proxy shipped it, list tools, call search_datadog_logs for the marker, and delete the server on teardown. Math-upstream key-access tests only skip when that compose service is unreachable
Key-access denial and happy-path MCP e2e both register the real regional Datadog remote MCP server with DD-API-KEY / DD-APPLICATION-KEY headers. Remove the mcp-upstream compose service and FastMCP add/multiply fixture
Document that tests/e2e/mcp must register via datadog_mcp helpers against mcp.<site>/v1/mcp and must not introduce compose or fake MCP upstreams
Keep the FastMCP fixture file; e2e no longer wires it in compose, but the module itself is not part of the Datadog-only cleanup
pytest on the host never inherited compose env_file keys, so DD_API_KEY stayed empty. load_dotenv tests/e2e/.env in e2e_config. Register the dynamically loaded datadog_reader module in sys.modules so dataclasses do not crash under Python 3.12
Put the provider deployment name in every JSONL body so Azure does not depend on a perfect model rewrite. Retry create/retrieve/cancel on transient statuses with backoff. Drop cancel assertions for azure and vertex (registry only has a shared basic cell; create+retrieve prove routing, cancel stays best-effort cleanup)
Post-login client redirects abort the first /ui/api-keys/ goto on stage. Wait off /ui/login after cookie set, then accept the page once Create New Key is visible even if goto raised ERR_ABORTED
API management e2e already covers key generate/update persistence. The UI Models-dropdown sentinel cases only added SPA ERR_ABORTED noise and no unique product signal. Remove the suite and unused browser fixtures
…down Resolve conflicts in management/mcp conftest and mcp_client by keeping our Datadog-only MCP suite, ProxyClient DI from staging, and the removed Playwright key-models-dropdown tests
Replace bare next() over PROVIDERS with _model_for that raises ValueError naming the missing provider and the known list, instead of StopIteration
…tellm_e2e_stage_green_fixes
Stage collection failed with ModuleNotFoundError: e2e_gateway after the Gateway rename. Wire load/conftest and LoadClient to the shared ProxyClient fixture like every other suite
Greptile SummaryThis PR fixes a collection-time
Confidence Score: 5/5Safe to merge — the change is a pure rename/DI fix in test infrastructure with no logic alterations. Both files change only symbol names and the DI wiring; the load SLO logic, fixture scopes, teardown ordering, and cleanup paths are unchanged. LoadClient.proxy satisfies the ProxyClientProvider protocol (both statically and at runtime via hasattr), so the shared resources fixture continues to work correctly. No new code paths are introduced. No files require special attention.
|
| Filename | Overview |
|---|---|
| tests/e2e/load/conftest.py | Replaces Gateway/e2e_gateway with ProxyClient/proxy_client throughout, and injects the session-scoped proxy fixture into client rather than calling the removed build_gateway() internally. |
| tests/e2e/load/load_client.py | Renames the gateway: Gateway field to proxy: ProxyClient and updates build_client to accept a ProxyClient argument, matching the ProxyClientProvider protocol used by the shared resources fixture. |
Reviews (1): Last reviewed commit: "fix(e2e): drop duplicate datadog_mcp_url..." | Re-trigger Greptile
ishaan-berri
left a comment
There was a problem hiding this comment.
GREAT WORK!!!!!!! YOUR THE GOAT
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Relevant issues
Linear ticket
Pre-Submission checklist
@greptileaito re-request a review after pushing changes)Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
Stage e2e collection failed with:
After this change,
pytest load/ --collect-onlycollects the load suite with no import errorType
Bug Fix
Test
Changes
Gateway was renamed to ProxyClient and e2e_gateway.py was removed. The load suite landed on staging still importing the old module, which aborted the whole e2e job at collection. Wire load/conftest and LoadClient to the shared session
proxyfixture andProxyClientlike every other suiteQA runbook
from proxy_client import ProxyClientand noe2e_gatewayunder tests/e2e/loaduv run pytest load/ --collect-only -qexpects 1 test, no ModuleNotFoundErrorFinal Attestation