mirror of
https://github.com/tiennm99/litellm.git
synced 2026-06-17 18:48:36 +00:00
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
import os
|
|
import sys
|
|
from unittest import mock
|
|
|
|
sys.path.insert(0, os.path.abspath("../.."))
|
|
|
|
import httpx
|
|
import pytest
|
|
|
|
from litellm.proxy.proxy_server import app
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_favicon_default():
|
|
"""Test that get_favicon returns the default favicon when no URL set."""
|
|
os.environ.pop("LITELLM_FAVICON_URL", None)
|
|
|
|
async with httpx.AsyncClient(
|
|
transport=httpx.ASGITransport(app=app), base_url="http://testserver"
|
|
) as ac:
|
|
response = await ac.get("/get_favicon")
|
|
|
|
assert response.status_code in [200, 404]
|
|
if response.status_code == 200:
|
|
assert response.headers["content-type"] == "image/x-icon"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_favicon_with_custom_url():
|
|
"""Test that get_favicon fetches from a custom URL."""
|
|
os.environ["LITELLM_FAVICON_URL"] = "https://example.com/favicon.ico"
|
|
|
|
mock_response = mock.Mock()
|
|
mock_response.status_code = 200
|
|
mock_response.content = b"\x00\x00\x01\x00"
|
|
mock_response.headers = {"content-type": "image/x-icon"}
|
|
|
|
try:
|
|
with mock.patch(
|
|
"litellm.llms.custom_httpx.http_handler.AsyncHTTPHandler.get"
|
|
) as mock_get:
|
|
mock_get.return_value = mock_response
|
|
|
|
async with httpx.AsyncClient(
|
|
transport=httpx.ASGITransport(app=app),
|
|
base_url="http://testserver",
|
|
) as ac:
|
|
response = await ac.get("/get_favicon")
|
|
|
|
assert response.status_code == 200
|
|
assert response.headers["content-type"] == "image/x-icon"
|
|
finally:
|
|
os.environ.pop("LITELLM_FAVICON_URL", None)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_favicon_url_error_fallback():
|
|
"""Test that get_favicon falls back to default on error."""
|
|
os.environ["LITELLM_FAVICON_URL"] = "https://invalid.com/favicon.ico"
|
|
|
|
try:
|
|
with mock.patch(
|
|
"litellm.llms.custom_httpx.http_handler.AsyncHTTPHandler.get"
|
|
) as mock_get:
|
|
mock_get.side_effect = httpx.ConnectError("unreachable")
|
|
|
|
async with httpx.AsyncClient(
|
|
transport=httpx.ASGITransport(app=app),
|
|
base_url="http://testserver",
|
|
) as ac:
|
|
response = await ac.get("/get_favicon")
|
|
|
|
assert response.status_code in [200, 404]
|
|
finally:
|
|
os.environ.pop("LITELLM_FAVICON_URL", None)
|