claude-code-openai-wrapper/test_basic.py
2025-08-11 20:22:47 +05:30

187 lines
No EOL
5.7 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Basic test to verify the Claude Code OpenAI wrapper works.
Run this after starting the server to ensure everything is set up correctly.
"""
import sys
import os
import requests
from openai import OpenAI
def get_api_key():
"""Get the appropriate API key for testing."""
# Check if user provided API key via environment
if os.getenv("TEST_API_KEY"):
return os.getenv("TEST_API_KEY")
# Check server auth status
try:
response = requests.get("http://localhost:8000/v1/auth/status")
if response.status_code == 200:
auth_data = response.json()
server_info = auth_data.get("server_info", {})
if not server_info.get("api_key_required", False):
# No auth required, use a dummy key
return "no-auth-required"
else:
# Auth required but no key provided
print("⚠️ Server requires API key but none provided.")
print(" Set TEST_API_KEY environment variable with your server's API key")
print(" Example: TEST_API_KEY=your-server-key python test_basic.py")
return None
except Exception as e:
print(f"⚠️ Could not check server auth status: {e}")
print(" Assuming no authentication required")
return "fallback-dummy-key"
def test_health_check():
"""Test the health endpoint."""
print("Testing health check...")
try:
response = requests.get("http://localhost:8000/health")
if response.status_code == 200:
print("✓ Health check passed")
return True
else:
print(f"✗ Health check failed: {response.status_code}")
return False
except Exception as e:
print(f"✗ Cannot connect to server: {e}")
return False
def test_models_endpoint():
"""Test the models endpoint."""
print("\nTesting models endpoint...")
try:
response = requests.get("http://localhost:8000/v1/models")
if response.status_code == 200:
data = response.json()
print(f"✓ Models endpoint works. Found {len(data['data'])} models")
return True
else:
print(f"✗ Models endpoint failed: {response.status_code}")
return False
except Exception as e:
print(f"✗ Models endpoint error: {e}")
return False
def test_openai_sdk():
"""Test with OpenAI SDK."""
print("\nTesting OpenAI SDK integration...")
api_key = get_api_key()
if api_key is None:
print("✗ Cannot run test - API key required but not provided")
return False
try:
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key=api_key
)
# Simple test
response = client.chat.completions.create(
model="claude-3-5-sonnet-20241022",
messages=[
{"role": "user", "content": "Say 'Hello, World!' and nothing else."}
],
max_tokens=50
)
content = response.choices[0].message.content
print(f"✓ OpenAI SDK test passed")
print(f" Response: {content}")
return True
except Exception as e:
print(f"✗ OpenAI SDK test failed: {e}")
return False
def test_streaming():
"""Test streaming functionality."""
print("\nTesting streaming...")
api_key = get_api_key()
if api_key is None:
print("✗ Cannot run test - API key required but not provided")
return False
try:
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key=api_key
)
stream = client.chat.completions.create(
model="claude-3-5-sonnet-20241022",
messages=[
{"role": "user", "content": "Count from 1 to 3."}
],
stream=True
)
chunks_received = 0
content = ""
for chunk in stream:
chunks_received += 1
if chunk.choices[0].delta.content:
content += chunk.choices[0].delta.content
if chunks_received > 0:
print(f"✓ Streaming test passed ({chunks_received} chunks)")
print(f" Response: {content[:50]}...")
return True
else:
print("✗ No streaming chunks received")
return False
except Exception as e:
print(f"✗ Streaming test failed: {e}")
return False
def main():
"""Run all tests."""
print("Claude Code OpenAI Wrapper - Basic Tests")
print("="*50)
print("Make sure the server is running: python main.py")
print("="*50)
# Show API key status
api_key = get_api_key()
if api_key:
if api_key == "no-auth-required":
print("🔓 Server authentication: Not required")
else:
print("🔑 Server authentication: Required (using provided key)")
else:
print("❌ Server authentication: Required but no key available")
print("="*50)
tests = [
test_health_check,
test_models_endpoint,
test_openai_sdk,
test_streaming
]
passed = 0
for test in tests:
if test():
passed += 1
print("\n" + "="*50)
print(f"Tests completed: {passed}/{len(tests)} passed")
if passed == len(tests):
print("✓ All tests passed! The wrapper is working correctly.")
return 0
else:
print("✗ Some tests failed. Check the server logs for details.")
return 1
if __name__ == "__main__":
sys.exit(main())