mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
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:
parent
2acc5cc457
commit
21a549d78d
2 changed files with 92 additions and 1 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Reference in a new issue