#!/usr/bin/env python3 """ 设备断开事件修复测试 验证设备连接和断开事件能正确区分 """ import asyncio import sys import os # 添加项目根目录到Python路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app.core.device.manager import device_manager from app.services.auto_discovery_adb_service import AutoDiscoveryAdbService from app.core.adb.client import DeviceEvent from app.utils.structured_log import get_structured_logger, LogLevel logger = get_structured_logger(__name__, LogLevel.INFO) async def test_device_disconnect_fix(): """测试设备断开事件修复""" print("开始设备断开事件修复测试...") try: # 1. 初始化 print("\n1. 初始化测试环境...") auto_discovery_service = AutoDiscoveryAdbService() print("✅ 自动发现ADB服务初始化成功") # 2. 模拟设备连接事件 print("\n2. 模拟设备连接事件...") connect_event = DeviceEvent(present=True, serial="test_device_001", status="device") await auto_discovery_service._handle_device_event(connect_event) print("✅ 设备连接事件处理完成") # 3. 检查设备是否在自动发现列表中 print("\n3. 检查设备是否在自动发现列表中...") auto_devices = await device_manager.get_auto_discovered_devices() device_found = any(device["device_id"] == "test_device_001" for device in auto_devices) if device_found: print("✅ 设备已添加到自动发现列表") else: print("❌ 设备未添加到自动发现列表") return False # 4. 模拟设备断开事件 print("\n4. 模拟设备断开事件...") disconnect_event = DeviceEvent(present=False, serial="test_device_001", status="device") await auto_discovery_service._handle_device_event(disconnect_event) print("✅ 设备断开事件处理完成") # 5. 检查设备是否从自动发现列表中移除 print("\n5. 检查设备是否从自动发现列表中移除...") auto_devices_after = await device_manager.get_auto_discovered_devices() device_still_exists = any(device["device_id"] == "test_device_001" for device in auto_devices_after) if not device_still_exists: print("✅ 设备已从自动发现列表中移除") else: print("❌ 设备仍存在于自动发现列表中") return False # 6. 测试统一设备列表 print("\n6. 测试统一设备列表...") unified_devices = await device_manager.get_all_devices_unified() device_in_unified = any(device["device_id"] == "test_device_001" for device in unified_devices) if not device_in_unified: print("✅ 设备已从统一设备列表中移除") else: print("❌ 设备仍存在于统一设备列表中") return False # 7. 再次连接设备 print("\n7. 再次连接设备...") connect_event_2 = DeviceEvent(present=True, serial="test_device_002", status="device") await auto_discovery_service._handle_device_event(connect_event_2) print("✅ 第二个设备连接事件处理完成") # 8. 检查第二个设备 print("\n8. 检查第二个设备...") auto_devices_final = await device_manager.get_auto_discovered_devices() device_2_found = any(device["device_id"] == "test_device_002" for device in auto_devices_final) if device_2_found: print("✅ 第二个设备已添加到自动发现列表") else: print("❌ 第二个设备未添加到自动发现列表") return False # 9. 断开第二个设备 print("\n9. 断开第二个设备...") disconnect_event_2 = DeviceEvent(present=False, serial="test_device_002", status="device") await auto_discovery_service._handle_device_event(disconnect_event_2) print("✅ 第二个设备断开事件处理完成") # 10. 最终检查 print("\n10. 最终检查...") final_devices = await device_manager.get_auto_discovered_devices() if len(final_devices) == 0: print("✅ 所有设备已正确移除,自动发现列表为空") else: print(f"❌ 自动发现列表仍有 {len(final_devices)} 个设备") return False print("\n🎉 设备断开事件修复测试通过!") print("✅ 设备连接和断开事件能正确区分和处理") return True except Exception as e: print(f"\n❌ 测试失败: {e}") import traceback traceback.print_exc() return False finally: # 清理资源 print("\n清理测试资源...") await device_manager.cleanup() print("✅ 资源清理完成") if __name__ == "__main__": asyncio.run(test_device_disconnect_fix())