scam / scripts /test_deployment.py
Gankit12's picture
Upload 129 files
31f0e50 verified
Raw
History Blame Contribute Delete
6.67 kB
#!/usr/bin/env python
"""
Deployment Test Script.
Tests deployed API endpoint to verify functionality:
- Health check
- Scam detection
- Multi-turn engagement
- Intelligence extraction
Run this script to validate a deployed instance.
"""
import sys
import time
import argparse
# Try to import requests, provide helpful message if not available
try:
import requests
except ImportError:
print("Error: 'requests' package not installed")
print("Run: pip install requests")
sys.exit(1)
DEFAULT_BASE_URL = "http://localhost:8000"
def test_health(base_url: str) -> bool:
"""Test health endpoint."""
print("Testing health endpoint...")
try:
response = requests.get(f"{base_url}/api/v1/health", timeout=10)
if response.status_code == 200:
data = response.json()
print(f" Status: {data.get('status')}")
print(f" Version: {data.get('version')}")
return data.get("status") == "healthy"
else:
print(f" [FAIL] Status code: {response.status_code}")
return False
except requests.RequestException as e:
print(f" [FAIL] Request failed: {e}")
return False
def test_engage_scam(base_url: str) -> bool:
"""Test engage endpoint with scam message."""
print("\nTesting engage endpoint (scam message)...")
payload = {
"message": "Congratulations! You won 10 lakh rupees. Share your OTP now!",
"language": "auto",
}
try:
response = requests.post(
f"{base_url}/api/v1/honeypot/engage",
json=payload,
timeout=30,
)
if response.status_code == 200:
data = response.json()
print(f" Status: {data.get('status')}")
print(f" Scam Detected: {data.get('scam_detected')}")
print(f" Confidence: {data.get('confidence')}")
print(f" Session ID: {data.get('session_id')}")
return True
else:
print(f" [FAIL] Status code: {response.status_code}")
print(f" Response: {response.text}")
return False
except requests.RequestException as e:
print(f" [FAIL] Request failed: {e}")
return False
def test_engage_legitimate(base_url: str) -> bool:
"""Test engage endpoint with legitimate message."""
print("\nTesting engage endpoint (legitimate message)...")
payload = {
"message": "Hi, how are you doing today?",
"language": "en",
}
try:
response = requests.post(
f"{base_url}/api/v1/honeypot/engage",
json=payload,
timeout=30,
)
if response.status_code == 200:
data = response.json()
print(f" Status: {data.get('status')}")
print(f" Scam Detected: {data.get('scam_detected')}")
return True
else:
print(f" [FAIL] Status code: {response.status_code}")
return False
except requests.RequestException as e:
print(f" [FAIL] Request failed: {e}")
return False
def test_batch(base_url: str) -> bool:
"""Test batch endpoint."""
print("\nTesting batch endpoint...")
payload = {
"messages": [
{"id": "1", "message": "You won a prize!"},
{"id": "2", "message": "Hello, how are you?"},
]
}
try:
response = requests.post(
f"{base_url}/api/v1/honeypot/batch",
json=payload,
timeout=30,
)
if response.status_code == 200:
data = response.json()
print(f" Status: {data.get('status')}")
print(f" Processed: {data.get('processed')}")
print(f" Failed: {data.get('failed')}")
return True
else:
print(f" [FAIL] Status code: {response.status_code}")
return False
except requests.RequestException as e:
print(f" [FAIL] Request failed: {e}")
return False
def measure_response_time(base_url: str) -> float:
"""Measure average response time."""
print("\nMeasuring response time...")
times = []
for i in range(3):
start = time.time()
try:
requests.post(
f"{base_url}/api/v1/honeypot/engage",
json={"message": "Test message"},
timeout=30,
)
elapsed = time.time() - start
times.append(elapsed)
print(f" Request {i+1}: {elapsed:.2f}s")
except:
print(f" Request {i+1}: FAILED")
if times:
avg = sum(times) / len(times)
print(f" Average: {avg:.2f}s")
return avg
return 0
def main():
"""Main entry point for deployment testing."""
parser = argparse.ArgumentParser(description="Test ScamShield AI deployment")
parser.add_argument(
"--url",
default=DEFAULT_BASE_URL,
help=f"Base URL of API (default: {DEFAULT_BASE_URL})",
)
args = parser.parse_args()
base_url = args.url.rstrip("/")
print("=" * 60)
print("ScamShield AI - Deployment Test")
print("=" * 60)
print(f"\nBase URL: {base_url}")
print()
results = {
"health": test_health(base_url),
"engage_scam": test_engage_scam(base_url),
"engage_legitimate": test_engage_legitimate(base_url),
"batch": test_batch(base_url),
}
avg_time = measure_response_time(base_url)
# Summary
print("\n" + "=" * 60)
print("Test Summary")
print("=" * 60)
passed = sum(1 for v in results.values() if v)
total = len(results)
for test, result in results.items():
status = "PASS" if result else "FAIL"
print(f" {test}: {status}")
print(f"\nResults: {passed}/{total} tests passed")
if avg_time > 0:
if avg_time < 2.0:
print(f"Response time: {avg_time:.2f}s (Target: <2s)")
else:
print(f"Response time: {avg_time:.2f}s (ABOVE target of 2s)")
if passed == total:
print("\nDeployment verification SUCCESSFUL!")
sys.exit(0)
else:
print("\nDeployment verification FAILED!")
sys.exit(1)
if __name__ == "__main__":
main()