test(mcp): retire the last file of the dead tests/litellm mirror

tests/litellm/ was a second mirror beside tests/test_litellm/ that no workflow,
Makefile target, or CircleCI job ever named. Its other 33 files were reconciled
during August 2026; this one stayed behind under a ci-coverage-allowlist entry
asking a later pass to decide which of its five orphan behaviours still hold.

They no longer hold as written: 25 of its 32 cases fail against today's code,
because the file froze on the day it stopped being collected and the endpoints
kept moving. Three of the five are already covered by the live twin, and better.
test_get_request_base_url_xff_trust_gate parametrizes the trust gate in both
directions, including the exact untrusted-caller case the orphan asserted, and
the standard and legacy protected-resource shapes are both exercised through
use_standard_pattern.

The other two were the only tests anywhere for validate_trusted_redirect_uri
under that same gate, so they are ported rather than dropped, rebuilt on the
live file's request-mock conventions. Both directions are load-bearing: forcing
is_request_from_trusted_proxy to True fails the untrusted case, forcing it to
False fails the trusted one.

313 tests pass in the live file, up from 311. Dropping the dead file clears one
zero-assert TQ001 violation, so its ceiling ratchets down with it.
This commit is contained in:
Yuneng Jiang 2026-08-21 04:41:21 -07:00
parent ff02d5cfc0
commit 13d4074492
No known key found for this signature in database
4 changed files with 50 additions and 1279 deletions

View file

@ -48,16 +48,6 @@ test_paths:
choice it informed is settled
paths:
- tests/code_coverage_tests/test_aio_http_image_conversion.py
- reason: >-
The last file of a second mirror that sat beside tests/test_litellm and ran nowhere. Its
other 33 files landed in the real mirror during August 2026, 30 as moves and 3 by merging
their bodies into the live file of the same name. This one cannot follow either route yet:
its live twin was rewritten from 1268 lines to 9434, and of the 19 tests here 5 have no
counterpart while 25 assertions fail against today's code, so what survives that rewrite
is a judgement about the endpoints, not a merge. Revisit by deciding which of the five
behaviours still hold
paths:
- tests/litellm/proxy/_experimental/mcp_server/test_discoverable_endpoints.py
- reason: >-
No job invokes this suite and its files mix pure transformation tests with ones driving live
vendor vector stores, so assigning them needs a per-file decision

View file

@ -1,6 +1,6 @@
{
"TQ001": {
"limit": 750
"limit": 746
},
"TQ002": {
"limit": 742

View file

@ -2957,6 +2957,55 @@ def test_validate_trusted_redirect_uri_logs_diagnostic_on_rejection(caplog, monk
assert "X-Forwarded-Host" in msg
@pytest.mark.parametrize(
"direct_ip,expect_accepted",
[
("10.0.0.7", True),
("203.0.113.5", False),
],
)
def test_validate_trusted_redirect_uri_follows_the_xff_trust_gate(direct_ip, expect_accepted, monkeypatch):
try:
from fastapi import HTTPException, Request
from litellm.proxy._experimental.mcp_server.oauth_utils import (
validate_trusted_redirect_uri,
)
except ImportError:
pytest.skip("MCP oauth_utils not available")
monkeypatch.delenv("PROXY_BASE_URL", raising=False)
monkeypatch.delenv("MCP_TRUSTED_REDIRECT_ORIGINS", raising=False)
mock_request = MagicMock(spec=Request)
mock_request.base_url = "http://localhost:4000/"
mock_request.client = MagicMock()
mock_request.client.host = direct_ip
headers = {
"X-Forwarded-Proto": "https",
"X-Forwarded-Host": "proxy.example.com",
}
mock_request.headers.get = lambda name, default=None: headers.get(name, default)
mock_request.headers.__contains__ = lambda self_, name: name in headers
redirect_uri = "https://proxy.example.com/callback"
general_settings = {
"use_x_forwarded_for": True,
"mcp_trusted_proxy_ranges": ["10.0.0.0/8"],
}
with patch("litellm.proxy.proxy_server.general_settings", general_settings, create=True):
if expect_accepted:
validate_trusted_redirect_uri(mock_request, redirect_uri)
return
with pytest.raises(HTTPException) as exc_info:
validate_trusted_redirect_uri(mock_request, redirect_uri)
assert exc_info.value.status_code == 400
assert "proxy.example.com" in str(exc_info.value.detail)
@pytest.mark.parametrize(
"bad_value",
[