forked from phoenix/litellm-mirror
(feat) add /key/health endpoint to test key based logging (#6073)
* add /key/health endpoint * add /key/health endpoint * fix return from /key/health * update doc string * fix doc string for /key/health * add test for /key/health * fix linting * docs /key/health
This commit is contained in:
parent
4e921bee2b
commit
c84cfe977e
4 changed files with 297 additions and 0 deletions
69
tests/otel_tests/test_key_logging_callbacks.py
Normal file
69
tests/otel_tests/test_key_logging_callbacks.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
"""
|
||||
Tests for Key based logging callbacks
|
||||
|
||||
"""
|
||||
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.mark.asyncio()
|
||||
async def test_key_logging_callbacks():
|
||||
"""
|
||||
Create virtual key with a logging callback set on the key
|
||||
Call /key/health for the key -> it should be unhealthy
|
||||
"""
|
||||
# Generate a key with logging callback
|
||||
generate_url = "http://0.0.0.0:4000/key/generate"
|
||||
generate_headers = {
|
||||
"Authorization": "Bearer sk-1234",
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
generate_payload = {
|
||||
"metadata": {
|
||||
"logging": [
|
||||
{
|
||||
"callback_name": "gcs_bucket",
|
||||
"callback_type": "success_and_failure",
|
||||
"callback_vars": {
|
||||
"gcs_bucket_name": "key-logging-project1",
|
||||
"gcs_path_service_account": "bad-service-account",
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
generate_response = await client.post(
|
||||
generate_url, headers=generate_headers, json=generate_payload
|
||||
)
|
||||
|
||||
assert generate_response.status_code == 200
|
||||
generate_data = generate_response.json()
|
||||
assert "key" in generate_data
|
||||
|
||||
_key = generate_data["key"]
|
||||
|
||||
# Check key health
|
||||
health_url = "http://localhost:4000/key/health"
|
||||
health_headers = {
|
||||
"Authorization": f"Bearer {_key}",
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
health_response = await client.post(health_url, headers=health_headers, json={})
|
||||
|
||||
assert health_response.status_code == 200
|
||||
health_data = health_response.json()
|
||||
print("key_health_data", health_data)
|
||||
# Check the response format and content
|
||||
assert "key" in health_data
|
||||
assert "logging_callbacks" in health_data
|
||||
assert health_data["logging_callbacks"]["callbacks"] == ["gcs_bucket"]
|
||||
assert health_data["logging_callbacks"]["status"] == "unhealthy"
|
||||
assert (
|
||||
"Failed to load vertex credentials"
|
||||
in health_data["logging_callbacks"]["details"]
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue