litellm/tests/e2e/management
Yuneng Jiang bf9c717d77
test(e2e): stop the config suite locking itself out of the shared proxy
Two tests in the config/misc management suite were failing every run against
the Buildkite e2e stack, and one of them took the rest of the build with it.

test_add_allowed_ip_does_not_store_unrelated_config_value posted 127.0.0.1 to
/add/allowed_ip. That route sets the live general_settings["allowed_ips"] that
auth_utils._check_valid_ip reads before it persists anything, and the check is
exact string membership with no CIDR support, so from the moment the POST
returns only 127.0.0.1 can reach the proxy. The runner 403s on its very next
call, and the deferred /delete/allowed_ip sits behind the same auth dependency,
so the cleanup is locked out too and every later test in the build 403s. Build
254's first attempt lost 459 of its 465 failures to that one cascade.

There is no safe way to exercise the route against a shared proxy: nothing
reports the caller's address as the proxy sees it, so a test cannot allowlist
itself first. Move the claim to the route's own TestClient suite, where the
auth dependency is overridden and general_settings is per-test, and record the
route in the module docstring beside /cache/settings and the Vault override so
it is not re-added. save_config's end of the contract was already covered by
test_ProxyConfig_save_config_merges_changed_keys_without_copying_file_settings;
the new test covers the route's end, that what it hands save_config differs
from the loaded config in allowed_ips and nothing else.

The unrelated-key probe also only ever worked on one lane: max_parallel_requests
was added to tests/e2e/gateway/stage_mirror_ci_config.yml and never to the
Buildkite stack's config, where resolve() reports it as "unset" rather than
"config". That key is now unused, so drop it again.

test_config_update_persists_router_setting_to_get wrote router_settings.
num_retries, which both lanes declare in their config file, so the config-
ownership work correctly refuses it with a 400. Switch to retry_after, which is
declared by neither lane, is accepted by /config/update, and is reported back by
GET /router/settings. Verified against a live proxy: max_fallbacks also takes
the write but never reads back, so the read-back poll is what picks the key.
2026-09-19 12:51:54 -07:00
..
conftest.py test: bind management E2E callers and isolate JWT actors 2026-09-12 13:29:04 -07:00
jwt_actors.py test: enforce isolated actors and stop OIDC process groups 2026-09-12 13:49:49 -07:00
management_client.py test: enforce isolated actors and stop OIDC process groups 2026-09-12 13:49:49 -07:00
test_budget_customer_user_org_e2e.py test(e2e): un-skip the per-model budget update case 2026-08-26 18:09:10 -07:00
test_config_misc_endpoints_e2e.py test(e2e): stop the config suite locking itself out of the shared proxy 2026-09-19 12:51:54 -07:00
test_jwt_management_e2e.py test: enforce isolated actors and stop OIDC process groups 2026-09-12 13:49:49 -07:00
test_key_lifecycle_e2e.py test(e2e): read a deleted key back as deleted, not as a 404 2026-09-17 02:38:27 +00:00
test_key_management_e2e.py fix(keys): preserve audit null and qualify split deployments 2026-09-11 22:33:36 -07:00
test_management_e2e.py test(e2e): require a 200 inside the regenerate grace window and drop the helper docstrings 2026-09-05 11:53:22 -07:00
test_mcp_lifecycle_e2e.py fix(mcp): honor an explicit null on toolset update, cover MCP lifecycle e2e (#40022) 2026-09-08 22:50:13 -07:00
test_model_tag_accessgroup_e2e.py test(model_management): drive /model/block and /model/unblock through response serialization 2026-08-29 21:39:07 -07:00
test_model_test_connection_e2e.py test(e2e): retry timeout-shaped Mantle test_connection probes 2026-08-25 11:05:38 -07:00
test_team_management_e2e.py fix(proxy): refuse a team admin's budget write when the budget changed mid-request 2026-09-16 18:11:53 -07:00