fix(tests): isolate flaky files endpoint tests from global proxy state (#21788)

* fix(tests): isolate flaky files endpoint tests from global proxy state

* test(secret_managers): add mocked unit test for write/read JSON secret cycle
This commit is contained in:
Ishaan Jaff 2026-02-21 11:20:32 -08:00 committed by GitHub
parent 2acc5cc457
commit 21a549d78d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 92 additions and 1 deletions

View file

@ -232,6 +232,9 @@ def test_target_storage_invokes_storage_backend(
"""
Ensure target_storage is parsed and invokes the storage backend service.
"""
monkeypatch.setattr("litellm.proxy.proxy_server.master_key", None)
monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", None)
monkeypatch.setattr("litellm.proxy.proxy_server.llm_router", llm_router)
setup_proxy_logging_object(monkeypatch, llm_router)
async_mock = mocker.AsyncMock(
@ -277,6 +280,9 @@ def test_target_storage_with_target_models(
"""
Ensure target_storage and target_model_names are parsed and passed through.
"""
monkeypatch.setattr("litellm.proxy.proxy_server.master_key", None)
monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", None)
monkeypatch.setattr("litellm.proxy.proxy_server.llm_router", llm_router)
setup_proxy_logging_object(monkeypatch, llm_router)
async_mock = mocker.AsyncMock(
@ -869,7 +875,7 @@ def test_managed_files_with_loadbalancing(mocker: MockerFixture, monkeypatch, ll
"""
from litellm.llms.base_llm.files.transformation import BaseFileEndpoints
from litellm.types.llms.openai import OpenAIFileObject
# Enable loadbalancing on batch endpoints
monkeypatch.setattr("litellm.enable_loadbalancing_on_batch_endpoints", True)

View file

@ -0,0 +1,85 @@
"""
Unit tests for AWSSecretsManagerV2 - mocked, no real AWS credentials required.
Tests the write/read/delete cycle for JSON and simple string secrets.
"""
import json
from unittest.mock import AsyncMock, patch
import pytest
from litellm.secret_managers.aws_secret_manager_v2 import AWSSecretsManagerV2
@pytest.mark.asyncio
async def test_write_and_read_json_secret():
"""Test writing and reading a JSON structured secret (mocked)"""
test_secret_name = "litellm_test_abc12345_json"
test_secret_value = {
"api_key": "test_key",
"model": "gpt-4",
"temperature": 0.7,
"metadata": {"team": "ml", "project": "litellm"},
}
json_secret_value = json.dumps(test_secret_value)
write_response = {
"ARN": f"arn:aws:secretsmanager:us-east-1:123456789012:secret:{test_secret_name}",
"Name": test_secret_name,
"VersionId": "mock-version-id",
}
delete_response = {
"ARN": write_response["ARN"],
"Name": test_secret_name,
"DeletionDate": "2099-01-01T00:00:00Z",
}
with patch.object(
AWSSecretsManagerV2,
"async_write_secret",
new_callable=AsyncMock,
return_value=write_response,
):
with patch.object(
AWSSecretsManagerV2,
"async_read_secret",
new_callable=AsyncMock,
return_value=json_secret_value,
):
with patch.object(
AWSSecretsManagerV2,
"async_delete_secret",
new_callable=AsyncMock,
return_value=delete_response,
):
secret_manager = AWSSecretsManagerV2()
# Write JSON secret
response = await secret_manager.async_write_secret(
secret_name=test_secret_name,
secret_value=json_secret_value,
description="LiteLLM JSON Test Secret",
)
assert response is not None
assert "ARN" in response
assert "Name" in response
assert response["Name"] == test_secret_name
# Read and parse JSON secret
read_value = await secret_manager.async_read_secret(
secret_name=test_secret_name
)
assert read_value is not None
parsed_value = json.loads(read_value)
assert parsed_value == test_secret_value
assert parsed_value["api_key"] == "test_key"
assert parsed_value["metadata"]["team"] == "ml"
# Cleanup
delete_resp = await secret_manager.async_delete_secret(
secret_name=test_secret_name
)
assert delete_resp is not None