""" Test the modular video streaming functionality. This test verifies that the video module integrates correctly with the existing system and provides the expected streaming capabilities. """ import asyncio import logging from pathlib import Path # Configure logging for tests logging.basicConfig(level=logging.INFO) async def test_video_module_integration(): """Test video module integration with the existing system""" print("\nšŸŽ¬ Testing Video Module Integration...") try: # Import the necessary components from usda_vision_system.core.config import Config from usda_vision_system.storage.manager import StorageManager from usda_vision_system.core.state_manager import StateManager from usda_vision_system.video.integration import create_video_module print("āœ… Successfully imported video module components") # Initialize core components config = Config() state_manager = StateManager() storage_manager = StorageManager(config, state_manager) print("āœ… Core components initialized") # Create video module video_module = create_video_module( config=config, storage_manager=storage_manager, enable_caching=True, enable_conversion=False # Disable conversion for testing ) print("āœ… Video module created successfully") # Test module status status = video_module.get_module_status() print(f"šŸ“Š Video module status: {status}") # Test video service videos = await video_module.video_service.get_all_videos(limit=5) print(f"šŸ“¹ Found {len(videos)} video files") for video in videos[:3]: # Show first 3 videos print(f" - {video.file_id} ({video.camera_name}) - {video.file_size_bytes} bytes") # Test streaming service if videos: video_file = videos[0] streaming_info = await video_module.streaming_service.get_video_info(video_file.file_id) if streaming_info: print(f"šŸŽÆ Streaming test: {streaming_info.file_id} is streamable: {streaming_info.is_streamable}") # Test API routes creation api_routes = video_module.get_api_routes() admin_routes = video_module.get_admin_routes() print(f"šŸ›£ļø API routes created: {len(api_routes.routes)} routes") print(f"šŸ”§ Admin routes created: {len(admin_routes.routes)} routes") # List some of the available routes print("šŸ“‹ Available video endpoints:") for route in api_routes.routes: if hasattr(route, 'path') and hasattr(route, 'methods'): methods = ', '.join(route.methods) if route.methods else 'N/A' print(f" {methods} {route.path}") # Cleanup await video_module.cleanup() print("āœ… Video module cleanup completed") return True except Exception as e: print(f"āŒ Video module test failed: {e}") import traceback traceback.print_exc() return False async def test_video_streaming_endpoints(): """Test video streaming endpoints with a mock FastAPI app""" print("\n🌐 Testing Video Streaming Endpoints...") try: from fastapi import FastAPI from fastapi.testclient import TestClient from usda_vision_system.core.config import Config from usda_vision_system.storage.manager import StorageManager from usda_vision_system.core.state_manager import StateManager from usda_vision_system.video.integration import create_video_module # Create test app app = FastAPI() # Initialize components config = Config() state_manager = StateManager() storage_manager = StorageManager(config, state_manager) # Create video module video_module = create_video_module( config=config, storage_manager=storage_manager, enable_caching=True, enable_conversion=False ) # Add video routes to test app video_routes = video_module.get_api_routes() admin_routes = video_module.get_admin_routes() app.include_router(video_routes) app.include_router(admin_routes) print("āœ… Test FastAPI app created with video routes") # Create test client client = TestClient(app) # Test video list endpoint response = client.get("/videos/") print(f"šŸ“‹ GET /videos/ - Status: {response.status_code}") if response.status_code == 200: data = response.json() print(f" Found {data.get('total_count', 0)} videos") # Test video module status (if we had added it to the routes) # This would be available in the main API server print("āœ… Video streaming endpoints test completed") # Cleanup await video_module.cleanup() return True except Exception as e: print(f"āŒ Video streaming endpoints test failed: {e}") import traceback traceback.print_exc() return False async def main(): """Run all video module tests""" print("šŸš€ Starting Video Module Tests") print("=" * 50) # Test 1: Module Integration test1_success = await test_video_module_integration() # Test 2: Streaming Endpoints test2_success = await test_video_streaming_endpoints() print("\n" + "=" * 50) print("šŸ“Š Test Results:") print(f" Module Integration: {'āœ… PASS' if test1_success else 'āŒ FAIL'}") print(f" Streaming Endpoints: {'āœ… PASS' if test2_success else 'āŒ FAIL'}") if test1_success and test2_success: print("\nšŸŽ‰ All video module tests passed!") print("\nšŸ“– Next Steps:") print(" 1. Restart the usda-vision-camera service") print(" 2. Test video streaming in your React app") print(" 3. Use endpoints like: GET /videos/ and GET /videos/{file_id}/stream") else: print("\nāš ļø Some tests failed. Check the error messages above.") return test1_success and test2_success if __name__ == "__main__": asyncio.run(main())