litellm/tests/unit/proxy/test_model_deprecations_endpoint.py
devin-ai-integration[bot] 837c6a7481
fix(security): remove the publicly known master key from the repo (#44718)
* fix(security): hash the publicly known master key

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* docs: replace weak master key examples and regenerate artifacts

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test: replace weak key fixtures with generated test keys

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* ci: generate master keys for proxy startup

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix: preserve lens dev key entropy

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix: restore proxy key compatibility in scrub examples

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix: scrub merged SSO fixture and refresh dashboard bundle

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(ci): stabilize test keys and metadata collection

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* chore: drop the rebuilt dashboard bundle

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: mateo <mateo@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-06 10:55:24 -07:00

74 lines
2.3 KiB
Python

from unittest.mock import MagicMock
import pytest
from fastapi.testclient import TestClient
import litellm
from litellm.proxy import proxy_server
from litellm.proxy._types import LitellmUserRoles, UserAPIKeyAuth
from litellm.proxy.auth.user_api_key_auth import user_api_key_auth
from litellm.proxy.proxy_server import app
client = TestClient(app)
@pytest.fixture
def authenticated_client(monkeypatch):
app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth(
user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-9876"
)
monkeypatch.setattr(
litellm,
"model_cost",
{
"sunset-model": {
"deprecation_date": "2020-01-01",
"litellm_provider": "openai",
},
"future-model": {
"deprecation_date": "2099-01-01",
"litellm_provider": "openai",
},
},
)
router = MagicMock()
router.get_model_list.return_value = [
{
"model_name": "sunset-alias",
"litellm_params": {"model": "sunset-model"},
"model_info": {"id": "1"},
},
{
"model_name": "future-alias",
"litellm_params": {"model": "future-model"},
"model_info": {"id": "2"},
},
]
monkeypatch.setattr(proxy_server, "llm_router", router)
yield client
app.dependency_overrides.pop(user_api_key_auth, None)
def test_should_bucket_configured_models_by_urgency(authenticated_client):
response = authenticated_client.get("/model/deprecations")
assert response.status_code == 200
payload = response.json()
assert [m["model_name"] for m in payload["deprecated"]] == ["sunset-alias"]
assert [m["model_name"] for m in payload["upcoming"]] == ["future-alias"]
assert payload["imminent"] == []
assert payload["warn_within_days"] == 30
assert payload["deprecated"][0]["days_until_deprecation"] < 0
def test_should_rebucket_with_warn_within_days_override(authenticated_client):
response = authenticated_client.get(
"/v1/model/deprecations", params={"warn_within_days": 40000}
)
assert response.status_code == 200
payload = response.json()
assert [m["model_name"] for m in payload["imminent"]] == ["future-alias"]
assert payload["upcoming"] == []
assert payload["warn_within_days"] == 40000