You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
4.5 KiB

#!/usr/bin/env python3
"""
测试设备信息获取和事件推送修复
验证 device_info 字段是否正确填充
"""
import asyncio
import json
from app.core.device.manager import device_manager
from app.utils.structured_log import get_structured_logger, LogLevel
logger = get_structured_logger(__name__, LogLevel.INFO)
async def test_device_info_fix():
"""测试设备信息获取和事件推送修复"""
logger.info("开始测试设备信息获取和事件推送修复")
try:
# 1. 启动设备事件推送服务
logger.info("步骤1: 启动设备事件推送服务")
await device_manager.start_event_pusher()
logger.info("设备事件推送服务启动成功")
# 2. 模拟设备连接事件
logger.info("步骤2: 模拟设备连接事件")
test_device_id = "AMFU6R1813008221"
# 模拟设备连接事件
success = await device_manager.handle_auto_discovered_device_event(
device_id=test_device_id,
status="device",
device_info={} # 传递空的设备信息,让设备管理器自己获取详细属性
)
if success:
logger.info(f"设备连接事件处理成功: {test_device_id}")
else:
logger.error(f"设备连接事件处理失败: {test_device_id}")
return
# 3. 检查自动发现设备列表
logger.info("步骤3: 检查自动发现设备列表")
auto_discovered_devices = await device_manager.get_auto_discovered_devices()
for device in auto_discovered_devices:
if device["device_id"] == test_device_id:
device_info = device.get("device_info", {})
logger.info(f"找到设备 {test_device_id} 的设备信息:")
logger.info(f" 设备信息属性数量: {len(device_info)}")
logger.info(f" 品牌: {device_info.get('ro.product.brand', 'Unknown')}")
logger.info(f" 型号: {device_info.get('ro.product.model', 'Unknown')}")
logger.info(f" 设备名称: {device_info.get('ro.product.device', 'Unknown')}")
logger.info(f" 系统版本: {device_info.get('ro.build.version.release', 'Unknown')}")
logger.info(f" SDK版本: {device_info.get('ro.build.version.sdk', 'Unknown')}")
break
else:
logger.warning(f"未找到设备 {test_device_id} 在自动发现设备列表中")
# 4. 检查事件缓冲
logger.info("步骤4: 检查事件缓冲")
# 注册一个测试客户端来获取缓冲的事件
await device_manager.register_websocket_client("test_client")
# 获取缓冲的事件
buffered_events = await device_manager._event_manager.get_buffered_events("test_client")
logger.info(f"缓冲事件数量: {len(buffered_events)}")
for event in buffered_events:
if event.get("device_id") == test_device_id:
logger.info(f"找到设备 {test_device_id} 的事件:")
logger.info(f" 事件类型: {event.get('type')}")
logger.info(f" 设备状态: {event.get('status')}")
logger.info(f" 设备信息属性数量: {len(event.get('device_info', {}))}")
device_info = event.get("device_info", {})
if device_info:
logger.info(f" 品牌: {device_info.get('ro.product.brand', 'Unknown')}")
logger.info(f" 型号: {device_info.get('ro.product.model', 'Unknown')}")
logger.info(f" 设备名称: {device_info.get('ro.product.device', 'Unknown')}")
logger.info(f" 系统版本: {device_info.get('ro.build.version.release', 'Unknown')}")
logger.info(f" SDK版本: {device_info.get('ro.build.version.sdk', 'Unknown')}")
else:
logger.warning("设备信息为空!")
break
else:
logger.warning(f"未找到设备 {test_device_id} 的事件在缓冲中")
# 5. 注销测试客户端
await device_manager.unregister_websocket_client("test_client")
logger.info("设备信息获取和事件推送修复测试完成")
except Exception as e:
logger.error(f"测试过程中发生错误: {e}")
import traceback
logger.error(f"异常堆栈: {traceback.format_exc()}")
if __name__ == "__main__":
asyncio.run(test_device_info_fix())