""" Test error handling improvements in AITBC services """ import pytest import subprocess import time class TestServiceErrorHandling: """Test that services handle errors properly with specific exception types""" def test_monitor_service_error_handling(self): """Test monitor service handles file and JSON errors properly""" # This would test that monitor.py handles specific exceptions # For now, we'll verify the service file exists and has proper imports import os monitor_file = "/opt/aitbc/services/monitor.py" assert os.path.exists(monitor_file) # Verify error handling improvements are present with open(monitor_file, 'r') as f: content = f.read() assert "json.JSONDecodeError" in content assert "FileNotFoundError" in content assert "psutil.Error" in content def test_marketplace_launcher_error_handling(self): """Test marketplace launcher handles subprocess errors properly""" import os launcher_file = "/opt/aitbc/services/real_marketplace_launcher.py" assert os.path.exists(launcher_file) with open(launcher_file, 'r') as f: content = f.read() assert "subprocess.CalledProcessError" in content assert "FileNotFoundError" in content def test_blockchain_launcher_error_handling(self): """Test blockchain HTTP launcher handles subprocess errors properly""" import os launcher_file = "/opt/aitbc/services/blockchain_http_launcher.py" assert os.path.exists(launcher_file) with open(launcher_file, 'r') as f: content = f.read() assert "subprocess.CalledProcessError" in content assert "FileNotFoundError" in content def test_gpu_launcher_error_handling(self): """Test GPU marketplace launcher handles subprocess errors properly""" import os launcher_file = "/opt/aitbc/services/gpu_marketplace_launcher.py" assert os.path.exists(launcher_file) with open(launcher_file, 'r') as f: content = f.read() assert "subprocess.CalledProcessError" in content assert "FileNotFoundError" in content assert "OSError" in content class TestMinerManagementErrorHandling: """Test that miner management CLI handles errors properly""" def test_miner_register_error_handling(self): """Test miner register handles network errors properly""" import os miner_file = "/opt/aitbc/cli/miner_management.py" assert os.path.exists(miner_file) with open(miner_file, 'r') as f: content = f.read() assert "requests.exceptions.ConnectionError" in content assert "requests.exceptions.Timeout" in content assert "json.JSONDecodeError" in content def test_miner_status_error_handling(self): """Test miner status handles network errors properly""" import os miner_file = "/opt/aitbc/cli/miner_management.py" with open(miner_file, 'r') as f: content = f.read() # Should have specific error handling for status function assert "requests.exceptions.HTTPError" in content class TestDatabasePerformanceOptimizations: """Test database performance optimizations""" def test_database_connection_pooling(self): """Test database has connection pooling configured""" import os db_file = "/opt/aitbc/apps/coordinator-api/src/app/database.py" assert os.path.exists(db_file) with open(db_file, 'r') as f: content = f.read() assert "pool_size" in content assert "max_overflow" in content assert "pool_pre_ping" in content assert "pool_recycle" in content class TestCachePerformanceOptimizations: """Test cache performance optimizations""" def test_cache_memory_management(self): """Test cache has memory management configured""" import os cache_file = "/opt/aitbc/apps/coordinator-api/src/app/utils/cache.py" assert os.path.exists(cache_file) with open(cache_file, 'r') as f: content = f.read() assert "max_size" in content assert "max_memory_mb" in content assert "_evict_oldest" in content assert "_check_memory_limit" in content class TestCLIComprehensiveTesting: """Test CLI tool functionality comprehensively""" def test_cli_help_command(self): """Test CLI help command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "--help"], capture_output=True, text=True ) assert result.returncode == 0 assert "AITBC CLI" in result.stdout def test_cli_system_command(self): """Test CLI system command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "system", "status"], capture_output=True, text=True ) assert result.returncode == 0 assert "System status" in result.stdout def test_cli_chain_command(self): """Test CLI chain command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "blockchain", "info"], capture_output=True, text=True ) assert result.returncode == 0 assert "Blockchain information" in result.stdout def test_cli_network_command(self): """Test CLI network command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "network", "status"], capture_output=True, text=True ) assert result.returncode == 0 assert "Network status" in result.stdout def test_cli_wallet_command(self): """Test CLI wallet command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "wallet", "--help"], capture_output=True, text=True ) assert result.returncode == 0 assert "create,list,balance,transactions,send,import,export,delete,rename,backup,sync,batch" in result.stdout def test_cli_marketplace_list_command(self): """Test CLI marketplace list command works""" result = subprocess.run( ["/opt/aitbc/aitbc-cli", "market", "list"], capture_output=True, text=True ) assert result.returncode == 0 assert "Marketplace list" in result.stdout if __name__ == "__main__": pytest.main([__file__, "-v"])