174 lines
5.8 KiB
Python
174 lines
5.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test script to verify the API changes for camera settings and filename handling.
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import time
|
|
from datetime import datetime
|
|
|
|
# API base URL
|
|
BASE_URL = "http://localhost:8000"
|
|
|
|
def test_api_endpoint(endpoint, method="GET", data=None):
|
|
"""Test an API endpoint and return the response"""
|
|
url = f"{BASE_URL}{endpoint}"
|
|
|
|
try:
|
|
if method == "GET":
|
|
response = requests.get(url)
|
|
elif method == "POST":
|
|
response = requests.post(url, json=data, headers={"Content-Type": "application/json"})
|
|
|
|
print(f"\n{method} {endpoint}")
|
|
print(f"Status: {response.status_code}")
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
print(f"Response: {json.dumps(result, indent=2)}")
|
|
return result
|
|
else:
|
|
print(f"Error: {response.text}")
|
|
return None
|
|
|
|
except requests.exceptions.ConnectionError:
|
|
print(f"Error: Could not connect to {url}")
|
|
print("Make sure the API server is running with: python main.py")
|
|
return None
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
return None
|
|
|
|
def test_camera_recording_with_settings():
|
|
"""Test camera recording with new settings parameters"""
|
|
|
|
print("=" * 60)
|
|
print("Testing Camera Recording API with New Settings")
|
|
print("=" * 60)
|
|
|
|
# Test 1: Basic recording without settings
|
|
print("\n1. Testing basic recording (no settings)")
|
|
basic_request = {
|
|
"camera_name": "camera1",
|
|
"filename": "test_basic.avi"
|
|
}
|
|
|
|
result = test_api_endpoint("/cameras/camera1/start-recording", "POST", basic_request)
|
|
if result and result.get("success"):
|
|
print("✅ Basic recording started successfully")
|
|
print(f" Filename: {result.get('filename')}")
|
|
|
|
# Stop recording
|
|
time.sleep(2)
|
|
test_api_endpoint("/cameras/camera1/stop-recording", "POST")
|
|
else:
|
|
print("❌ Basic recording failed")
|
|
|
|
# Test 2: Recording with camera settings
|
|
print("\n2. Testing recording with camera settings")
|
|
settings_request = {
|
|
"camera_name": "camera1",
|
|
"filename": "test_with_settings.avi",
|
|
"exposure_ms": 2.0,
|
|
"gain": 4.0,
|
|
"fps": 5.0
|
|
}
|
|
|
|
result = test_api_endpoint("/cameras/camera1/start-recording", "POST", settings_request)
|
|
if result and result.get("success"):
|
|
print("✅ Recording with settings started successfully")
|
|
print(f" Filename: {result.get('filename')}")
|
|
|
|
# Stop recording
|
|
time.sleep(2)
|
|
test_api_endpoint("/cameras/camera1/stop-recording", "POST")
|
|
else:
|
|
print("❌ Recording with settings failed")
|
|
|
|
# Test 3: Recording with only settings (no filename)
|
|
print("\n3. Testing recording with settings only (no filename)")
|
|
settings_only_request = {
|
|
"camera_name": "camera1",
|
|
"exposure_ms": 1.5,
|
|
"gain": 3.0,
|
|
"fps": 7.0
|
|
}
|
|
|
|
result = test_api_endpoint("/cameras/camera1/start-recording", "POST", settings_only_request)
|
|
if result and result.get("success"):
|
|
print("✅ Recording with settings only started successfully")
|
|
print(f" Filename: {result.get('filename')}")
|
|
|
|
# Stop recording
|
|
time.sleep(2)
|
|
test_api_endpoint("/cameras/camera1/stop-recording", "POST")
|
|
else:
|
|
print("❌ Recording with settings only failed")
|
|
|
|
# Test 4: Test filename datetime prefix
|
|
print("\n4. Testing filename datetime prefix")
|
|
timestamp_before = datetime.now().strftime("%Y%m%d_%H%M")
|
|
|
|
filename_test_request = {
|
|
"camera_name": "camera1",
|
|
"filename": "my_custom_name.avi"
|
|
}
|
|
|
|
result = test_api_endpoint("/cameras/camera1/start-recording", "POST", filename_test_request)
|
|
if result and result.get("success"):
|
|
returned_filename = result.get('filename', '')
|
|
print(f" Original filename: my_custom_name.avi")
|
|
print(f" Returned filename: {returned_filename}")
|
|
|
|
# Check if datetime prefix was added
|
|
if timestamp_before in returned_filename and "my_custom_name.avi" in returned_filename:
|
|
print("✅ Datetime prefix correctly added to filename")
|
|
else:
|
|
print("❌ Datetime prefix not properly added")
|
|
|
|
# Stop recording
|
|
time.sleep(2)
|
|
test_api_endpoint("/cameras/camera1/stop-recording", "POST")
|
|
else:
|
|
print("❌ Filename test failed")
|
|
|
|
def test_system_status():
|
|
"""Test basic system status to ensure API is working"""
|
|
print("\n" + "=" * 60)
|
|
print("Testing System Status")
|
|
print("=" * 60)
|
|
|
|
# Test system status
|
|
result = test_api_endpoint("/system/status")
|
|
if result:
|
|
print("✅ System status API working")
|
|
print(f" System started: {result.get('system_started')}")
|
|
print(f" MQTT connected: {result.get('mqtt_connected')}")
|
|
else:
|
|
print("❌ System status API failed")
|
|
|
|
# Test camera status
|
|
result = test_api_endpoint("/cameras")
|
|
if result:
|
|
print("✅ Camera status API working")
|
|
for camera_name, camera_info in result.items():
|
|
print(f" {camera_name}: {camera_info.get('status')}")
|
|
else:
|
|
print("❌ Camera status API failed")
|
|
|
|
if __name__ == "__main__":
|
|
print("USDA Vision Camera System - API Changes Test")
|
|
print("This script tests the new camera settings parameters and filename handling")
|
|
print("\nMake sure the system is running with: python main.py")
|
|
|
|
# Test system status first
|
|
test_system_status()
|
|
|
|
# Test camera recording with new features
|
|
test_camera_recording_with_settings()
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Test completed!")
|
|
print("=" * 60)
|