Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Test script to verify bearer token authentication for all endpoints | |
| """ | |
| import requests | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| # Configuration | |
| BASE_URL = "http://127.0.0.1:8000" # Change to your deployment URL when testing live | |
| HF_API_KEY = os.getenv("HF_API_KEY") | |
| def test_endpoint(endpoint, method="GET", headers=None, json_data=None): | |
| """Test an endpoint and return the response""" | |
| url = f"{BASE_URL}{endpoint}" | |
| try: | |
| if method == "GET": | |
| response = requests.get(url, headers=headers) | |
| elif method == "POST": | |
| response = requests.post(url, headers=headers, json=json_data) | |
| return { | |
| "status_code": response.status_code, | |
| "success": response.status_code < 400, | |
| "response": response.json() if response.headers.get("content-type", "").startswith("application/json") else response.text | |
| } | |
| except Exception as e: | |
| return { | |
| "status_code": None, | |
| "success": False, | |
| "error": str(e) | |
| } | |
| def main(): | |
| """Run authentication tests""" | |
| print("π Testing Bearer Token Authentication") | |
| print("=" * 50) | |
| if not HF_API_KEY: | |
| print("β HF_API_KEY not found in environment variables") | |
| return | |
| # Test headers | |
| auth_headers = { | |
| "Authorization": f"Bearer {HF_API_KEY}", | |
| "Content-Type": "application/json" | |
| } | |
| no_auth_headers = { | |
| "Content-Type": "application/json" | |
| } | |
| invalid_auth_headers = { | |
| "Authorization": "Bearer invalid_token_123", | |
| "Content-Type": "application/json" | |
| } | |
| tests = [ | |
| # Public endpoint (should work without auth) | |
| { | |
| "name": "Public Health Check (No Auth)", | |
| "endpoint": "/api/v1/health/public", | |
| "method": "GET", | |
| "headers": no_auth_headers, | |
| "should_succeed": True | |
| }, | |
| # Protected endpoints without auth (should fail) | |
| { | |
| "name": "Protected Health Check (No Auth)", | |
| "endpoint": "/api/v1/health", | |
| "method": "GET", | |
| "headers": no_auth_headers, | |
| "should_succeed": False | |
| }, | |
| # Protected endpoints with invalid auth (should fail) | |
| { | |
| "name": "Protected Health Check (Invalid Auth)", | |
| "endpoint": "/api/v1/health", | |
| "method": "GET", | |
| "headers": invalid_auth_headers, | |
| "should_succeed": False | |
| }, | |
| # Protected endpoints with valid auth (should succeed) | |
| { | |
| "name": "Protected Health Check (Valid Auth)", | |
| "endpoint": "/api/v1/health", | |
| "method": "GET", | |
| "headers": auth_headers, | |
| "should_succeed": True | |
| }, | |
| # Test generate endpoint with auth | |
| { | |
| "name": "Generate Endpoint (Valid Auth)", | |
| "endpoint": "/api/v1/generate", | |
| "method": "POST", | |
| "headers": auth_headers, | |
| "json_data": { | |
| "terms": ["test", "card"], | |
| "card_date": "2024-01-01", | |
| "lang": "en" | |
| }, | |
| "should_succeed": True | |
| }, | |
| # Test generate endpoint without auth | |
| { | |
| "name": "Generate Endpoint (No Auth)", | |
| "endpoint": "/api/v1/generate", | |
| "method": "POST", | |
| "headers": no_auth_headers, | |
| "json_data": { | |
| "terms": ["test", "card"], | |
| "card_date": "2024-01-01", | |
| "lang": "en" | |
| }, | |
| "should_succeed": False | |
| }, | |
| # Test new user info endpoint | |
| { | |
| "name": "Get Current User (Valid JWT - after login)", | |
| "endpoint": "/api/v1/auth/me", | |
| "method": "GET", | |
| "headers": {}, # Will be filled after login | |
| "should_succeed": True, | |
| "requires_jwt": True | |
| }, | |
| { | |
| "name": "Get Current User (No Auth)", | |
| "endpoint": "/api/v1/auth/me", | |
| "method": "GET", | |
| "headers": no_auth_headers, | |
| "should_succeed": False | |
| }, | |
| { | |
| "name": "Get Current User (HF API Key)", | |
| "endpoint": "/api/v1/auth/me", | |
| "method": "GET", | |
| "headers": auth_headers, | |
| "should_succeed": False # HF API key should not work for user endpoints | |
| }, | |
| ] | |
| results = [] | |
| for test in tests: | |
| print(f"\nπ§ͺ Testing: {test['name']}") | |
| result = test_endpoint( | |
| test["endpoint"], | |
| test["method"], | |
| test["headers"], | |
| test.get("json_data") | |
| ) | |
| expected_success = test["should_succeed"] | |
| actual_success = result["success"] | |
| if expected_success == actual_success: | |
| status = "β PASS" | |
| else: | |
| status = "β FAIL" | |
| print(f" {status} - Status: {result['status_code']}") | |
| if not result["success"] and "error" in result: | |
| print(f" Error: {result['error']}") | |
| elif "response" in result: | |
| # Print first few lines of response for debugging | |
| response_str = str(result["response"]) | |
| if len(response_str) > 100: | |
| response_str = response_str[:100] + "..." | |
| print(f" Response: {response_str}") | |
| results.append({ | |
| "test": test["name"], | |
| "passed": expected_success == actual_success, | |
| "status_code": result["status_code"] | |
| }) | |
| # Summary | |
| print("\n" + "=" * 50) | |
| print("π Test Summary") | |
| print("=" * 50) | |
| passed = sum(1 for r in results if r["passed"]) | |
| total = len(results) | |
| print(f"β Passed: {passed}/{total}") | |
| print(f"β Failed: {total - passed}/{total}") | |
| if passed == total: | |
| print("\nπ All authentication tests passed!") | |
| else: | |
| print("\nβ οΈ Some tests failed. Check the output above.") | |
| print("\nFailed tests:") | |
| for result in results: | |
| if not result["passed"]: | |
| print(f" - {result['test']}") | |
| if __name__ == "__main__": | |
| main() | |