Files
litellm/tests/test_litellm/test_container_router.py
T
Sameer Kankute 0c743e1adc Add E2E Container API Support (#16136)
* 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>
2025-11-01 14:03:51 -07:00

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"