Spaces:
Build error
Build error
File size: 11,452 Bytes
48ba7e8 fafafc3 48ba7e8 fafafc3 48ba7e8 fafafc3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
#!/usr/bin/env python3
"""Test script for dependency injection and configuration setup."""
import sys
import os
import logging
from pathlib import Path
# Add src to path for imports
sys.path.insert(0, str(Path(__file__).parent / "src"))
from infrastructure.config.container_setup import (
create_configured_container,
get_service_registry_info,
initialize_global_container,
get_global_container,
cleanup_global_container
)
from infrastructure.config.app_config import AppConfig
from infrastructure.config.dependency_container import DependencyContainer
from application.services.audio_processing_service import AudioProcessingApplicationService
from application.services.configuration_service import ConfigurationApplicationService
def test_configuration_loading():
"""Test configuration loading from file and environment."""
print("=" * 60)
print("Testing Configuration Loading")
print("=" * 60)
try:
# Test default configuration
print("\n1. Testing default configuration...")
config = AppConfig()
print(f"β Default config loaded successfully")
print(f" - TTS preferred providers: {config.tts.preferred_providers}")
print(f" - STT default model: {config.stt.default_model}")
print(f" - Translation provider: {config.translation.default_provider}")
print(f" - Temp directory: {config.processing.temp_dir}")
print(f" - Log level: {config.logging.level}")
# Test configuration from file
print("\n2. Testing configuration from file...")
config_file = "config.example.json"
if os.path.exists(config_file):
config_from_file = AppConfig(config_file=config_file)
print(f"β Config loaded from {config_file}")
print(f" - TTS preferred providers: {config_from_file.tts.preferred_providers}")
print(f" - Processing timeout: {config_from_file.processing.processing_timeout_seconds}s")
else:
print(f"β Config file {config_file} not found, skipping file test")
# Test environment variable override
print("\n3. Testing environment variable override...")
os.environ['TTS_DEFAULT_SPEED'] = '1.5'
os.environ['LOG_LEVEL'] = 'DEBUG'
config_with_env = AppConfig()
print(f"β Config with environment overrides loaded")
print(f" - TTS default speed: {config_with_env.tts.default_speed}")
print(f" - Log level: {config_with_env.logging.level}")
# Clean up environment
del os.environ['TTS_DEFAULT_SPEED']
del os.environ['LOG_LEVEL']
return True
except Exception as e:
print(f"β Configuration loading failed: {e}")
return False
def test_dependency_container():
"""Test dependency container setup and service resolution."""
print("\n" + "=" * 60)
print("Testing Dependency Container")
print("=" * 60)
try:
# Test container creation
print("\n1. Testing container creation...")
container = create_configured_container()
print("β Container created successfully")
# Test service registration info
print("\n2. Testing service registry...")
registry_info = get_service_registry_info(container)
print("β Service registry information retrieved")
print(f" - Registered services: {len(registry_info['registered_services'])}")
for service_name, lifetime in registry_info['registered_services'].items():
print(f" β’ {service_name}: {lifetime}")
# Test provider availability
print("\n3. Testing provider availability...")
provider_info = registry_info['provider_availability']
print(f" - Available TTS providers: {provider_info['tts_providers']}")
print(f" - Available STT providers: {provider_info['stt_providers']}")
print(f" - Available translation providers: {provider_info['translation_providers']}")
# Test service resolution
print("\n4. Testing service resolution...")
# Resolve configuration
config = container.resolve(AppConfig)
print("β AppConfig resolved successfully")
# Resolve application services
audio_service = container.resolve(AudioProcessingApplicationService)
print("β AudioProcessingApplicationService resolved successfully")
config_service = container.resolve(ConfigurationApplicationService)
print("β ConfigurationApplicationService resolved successfully")
# Test provider services
tts_provider = container.get_tts_provider()
print(f"β TTS provider resolved: {tts_provider.__class__.__name__}")
stt_provider = container.get_stt_provider()
print(f"β STT provider resolved: {stt_provider.__class__.__name__}")
translation_provider = container.get_translation_provider()
print(f"β Translation provider resolved: {translation_provider.__class__.__name__}")
# Test scoped services
print("\n5. Testing scoped services...")
with container.create_scope() as scope:
scoped_audio_service = scope.resolve(AudioProcessingApplicationService)
print("β Scoped AudioProcessingApplicationService resolved")
# Cleanup
container.cleanup()
print("β Container cleanup completed")
return True
except Exception as e:
print(f"β Dependency container test failed: {e}")
import traceback
traceback.print_exc()
return False
def test_global_container():
"""Test global container management."""
print("\n" + "=" * 60)
print("Testing Global Container Management")
print("=" * 60)
try:
# Test global container initialization
print("\n1. Testing global container initialization...")
global_container = initialize_global_container()
print("β Global container initialized")
# Test global container access
print("\n2. Testing global container access...")
retrieved_container = get_global_container()
print("β Global container retrieved")
assert global_container is retrieved_container, "Global container instances should be the same"
print("β Global container instance consistency verified")
# Test service resolution through global container
print("\n3. Testing service resolution through global container...")
config = retrieved_container.resolve(AppConfig)
print("β Configuration resolved through global container")
# Test global container cleanup
print("\n4. Testing global container cleanup...")
cleanup_global_container()
print("β Global container cleaned up")
return True
except Exception as e:
print(f"β Global container test failed: {e}")
return False
def test_configuration_service():
"""Test configuration application service."""
print("\n" + "=" * 60)
print("Testing Configuration Application Service")
print("=" * 60)
try:
# Create container
container = create_configured_container()
# Get configuration service
print("\n1. Testing configuration service resolution...")
config_service = container.resolve(ConfigurationApplicationService)
print("β Configuration service resolved")
# Test getting current configuration
print("\n2. Testing configuration retrieval...")
current_config = config_service.get_current_configuration()
print("β Current configuration retrieved")
print(f" - Configuration sections: {list(current_config.keys())}")
# Test TTS configuration
print("\n3. Testing TTS configuration...")
tts_config = config_service.get_tts_configuration()
print(f"β TTS configuration: {len(tts_config)} settings")
# Test configuration updates
print("\n4. Testing configuration updates...")
updated_tts = config_service.update_tts_configuration({
'default_speed': 1.2,
'enable_streaming': False
})
print("β TTS configuration updated")
print(f" - New default speed: {updated_tts['default_speed']}")
print(f" - Streaming enabled: {updated_tts['enable_streaming']}")
# Test provider availability
print("\n5. Testing provider availability check...")
availability = config_service.get_provider_availability()
print("β Provider availability checked")
for category, providers in availability.items():
print(f" - {category.upper()}: {providers}")
# Test system info
print("\n6. Testing system information...")
system_info = config_service.get_system_info()
print("β System information retrieved")
print(f" - Supported languages: {len(system_info['supported_languages'])}")
print(f" - Supported audio formats: {system_info['supported_audio_formats']}")
# Test configuration validation
print("\n7. Testing configuration validation...")
validation_issues = config_service.validate_configuration()
print("β Configuration validation completed")
total_issues = sum(len(issues) for issues in validation_issues.values())
if total_issues == 0:
print(" - No validation issues found")
else:
print(f" - Found {total_issues} validation issues")
for category, issues in validation_issues.items():
if issues:
print(f" β’ {category}: {issues}")
# Cleanup
container.cleanup()
return True
except Exception as e:
print(f"β Configuration service test failed: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Run all tests."""
print("Dependency Injection and Configuration Test Suite")
print("=" * 60)
# Configure basic logging
logging.basicConfig(
level=logging.WARNING, # Reduce noise during testing
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
tests = [
("Configuration Loading", test_configuration_loading),
("Dependency Container", test_dependency_container),
("Global Container Management", test_global_container),
("Configuration Service", test_configuration_service)
]
results = []
for test_name, test_func in tests:
try:
result = test_func()
results.append((test_name, result))
except Exception as e:
print(f"\nβ {test_name} failed with exception: {e}")
results.append((test_name, False))
# Print summary
print("\n" + "=" * 60)
print("Test Results Summary")
print("=" * 60)
passed = 0
failed = 0
for test_name, result in results:
status = "β PASSED" if result else "β FAILED"
print(f"{test_name:<30} {status}")
if result:
passed += 1
else:
failed += 1
print(f"\nTotal: {len(results)} tests, {passed} passed, {failed} failed")
if failed == 0:
print("\nπ All tests passed!")
return 0
else:
print(f"\nβ {failed} test(s) failed!")
return 1
if __name__ == "__main__":
sys.exit(main()) |