mirror of
https://github.com/tiennm99/litellm.git
synced 2026-06-18 03:31:23 +00:00
0c743e1adc
* Add v1 cut of container api * fix lint errors * Add proxy support to container apis & logging support (#16049) * Add proxy support to container apis * Add logging support * Add cost tracking support for containers and documentation * Add new constant documentation * Add container cost in model map * fix failing azure tests * Update tests based on model map changes * fix model map tests * fix model map tests * Container modeshould be container * Container tests fix * Merge branch 'main' into litellm_sameer_oct_staging_2 --------- Co-authored-by: Ishaan Jaffer <ishaanjaffer0324@gmail.com>
214 lines
7.8 KiB
Python
214 lines
7.8 KiB
Python
"""
|
|
Test suite for Container API router functionality.
|
|
Tests that the router method gets called correctly for container operations.
|
|
"""
|
|
|
|
import pytest
|
|
from unittest.mock import Mock, patch, MagicMock
|
|
import litellm
|
|
|
|
|
|
class TestContainerRouter:
|
|
"""Test suite for Container API router functionality"""
|
|
|
|
def setup_method(self):
|
|
"""Setup test fixtures"""
|
|
self.container_name = "Test Container"
|
|
self.container_id = "cntr_123456789"
|
|
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
def test_create_container_router_call_mock(self, mock_handler):
|
|
"""Test that create_container calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"id": self.container_id,
|
|
"object": "container",
|
|
"created_at": 1747857508,
|
|
"status": "running",
|
|
"expires_after": {
|
|
"anchor": "last_active_at",
|
|
"minutes": 20
|
|
},
|
|
"last_active_at": 1747857508,
|
|
"name": self.container_name
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_create_handler.return_value = mock_response
|
|
|
|
# Call the create_container function with mock response
|
|
result = litellm.create_container(
|
|
name=self.container_name,
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a ContainerObject with the expected data
|
|
assert result.id == mock_response["id"]
|
|
assert result.object == mock_response["object"]
|
|
assert result.name == mock_response["name"]
|
|
assert result.status == mock_response["status"]
|
|
assert result.created_at == mock_response["created_at"]
|
|
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
def test_list_containers_router_call_mock(self, mock_handler):
|
|
"""Test that list_containers calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"object": "list",
|
|
"data": [
|
|
{
|
|
"id": "cntr_123",
|
|
"object": "container",
|
|
"created_at": 1747857508,
|
|
"status": "running",
|
|
"name": "Container 1"
|
|
},
|
|
{
|
|
"id": "cntr_456",
|
|
"object": "container",
|
|
"created_at": 1747857509,
|
|
"status": "running",
|
|
"name": "Container 2"
|
|
}
|
|
],
|
|
"has_more": False
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_list_handler.return_value = mock_response
|
|
|
|
# Call the list_containers function with mock response
|
|
result = litellm.list_containers(
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a ContainerListResponse with the expected data
|
|
assert result.object == "list"
|
|
assert len(result.data) == 2
|
|
assert result.data[0].id == "cntr_123"
|
|
assert result.data[1].id == "cntr_456"
|
|
assert result.has_more is False
|
|
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
def test_retrieve_container_router_call_mock(self, mock_handler):
|
|
"""Test that retrieve_container calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"id": self.container_id,
|
|
"object": "container",
|
|
"created_at": 1747857508,
|
|
"status": "running",
|
|
"expires_after": {
|
|
"anchor": "last_active_at",
|
|
"minutes": 20
|
|
},
|
|
"last_active_at": 1747857508,
|
|
"name": self.container_name
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_retrieve_handler.return_value = mock_response
|
|
|
|
# Call the retrieve_container function with mock response
|
|
result = litellm.retrieve_container(
|
|
container_id=self.container_id,
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a ContainerObject with the expected data
|
|
assert result.id == mock_response["id"]
|
|
assert result.object == mock_response["object"]
|
|
assert result.name == mock_response["name"]
|
|
assert result.status == mock_response["status"]
|
|
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
def test_delete_container_router_call_mock(self, mock_handler):
|
|
"""Test that delete_container calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"id": self.container_id,
|
|
"object": "container.deleted",
|
|
"deleted": True
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_delete_handler.return_value = mock_response
|
|
|
|
# Call the delete_container function with mock response
|
|
result = litellm.delete_container(
|
|
container_id=self.container_id,
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a DeleteContainerResult with the expected data
|
|
assert result.id == mock_response["id"]
|
|
assert result.object == mock_response["object"]
|
|
assert result.deleted is True
|
|
|
|
@pytest.mark.asyncio
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
async def test_acreate_container_router_call_mock(self, mock_handler):
|
|
"""Test that acreate_container (async) calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"id": self.container_id,
|
|
"object": "container",
|
|
"created_at": 1747857508,
|
|
"status": "running",
|
|
"name": self.container_name
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_create_handler.return_value = mock_response
|
|
|
|
# Call the async create_container function with mock response
|
|
result = await litellm.acreate_container(
|
|
name=self.container_name,
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a ContainerObject with the expected data
|
|
assert result.id == mock_response["id"]
|
|
assert result.object == mock_response["object"]
|
|
assert result.name == mock_response["name"]
|
|
assert result.status == mock_response["status"]
|
|
|
|
@pytest.mark.asyncio
|
|
@patch("litellm.containers.main.base_llm_http_handler")
|
|
async def test_alist_containers_router_call_mock(self, mock_handler):
|
|
"""Test that alist_containers (async) calls the router method with mock response"""
|
|
# Setup mock response
|
|
mock_response = {
|
|
"object": "list",
|
|
"data": [
|
|
{
|
|
"id": "cntr_123",
|
|
"object": "container",
|
|
"created_at": 1747857508,
|
|
"status": "running",
|
|
"name": "Container 1"
|
|
}
|
|
],
|
|
"has_more": False
|
|
}
|
|
|
|
# Configure the mock handler
|
|
mock_handler.container_list_handler.return_value = mock_response
|
|
|
|
# Call the async list_containers function with mock response
|
|
result = await litellm.alist_containers(
|
|
custom_llm_provider="openai",
|
|
mock_response=mock_response
|
|
)
|
|
|
|
# Verify the result is a ContainerListResponse with the expected data
|
|
assert result.object == "list"
|
|
assert len(result.data) == 1
|
|
assert result.data[0].id == "cntr_123"
|
|
|