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.
117 lines
5.5 KiB
117 lines
5.5 KiB
#!/usr/bin/env python3
|
|
"""
|
|
测试设备属性名称修复
|
|
验证设备属性名是否已转换为友好的格式
|
|
"""
|
|
import asyncio
|
|
import json
|
|
from app.core.device.manager import device_manager
|
|
from app.utils.structured_log import get_structured_logger
|
|
|
|
logger = get_structured_logger(__name__)
|
|
|
|
async def test_device_properties_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('brand', 'Unknown')}")
|
|
logger.info(f" 型号: {device_info.get('model', 'Unknown')}")
|
|
logger.info(f" 设备名称: {device_info.get('device', 'Unknown')}")
|
|
logger.info(f" 系统版本: {device_info.get('android_version', 'Unknown')}")
|
|
logger.info(f" SDK版本: {device_info.get('sdk_version', 'Unknown')}")
|
|
logger.info(f" 硬件平台: {device_info.get('hardware_platform', 'Unknown')}")
|
|
logger.info(f" 区域设置: {device_info.get('locale', 'Unknown')}")
|
|
|
|
# 检查是否还有带点号的属性名
|
|
problematic_props = [key for key in device_info.keys() if '.' in key]
|
|
if problematic_props:
|
|
logger.warning(f"发现带点号的属性名: {problematic_props}")
|
|
else:
|
|
logger.info("所有属性名都已转换为友好格式")
|
|
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('brand', 'Unknown')}")
|
|
logger.info(f" 型号: {device_info.get('model', 'Unknown')}")
|
|
logger.info(f" 设备名称: {device_info.get('device', 'Unknown')}")
|
|
logger.info(f" 系统版本: {device_info.get('android_version', 'Unknown')}")
|
|
logger.info(f" SDK版本: {device_info.get('sdk_version', 'Unknown')}")
|
|
logger.info(f" 硬件平台: {device_info.get('hardware_platform', 'Unknown')}")
|
|
logger.info(f" 区域设置: {device_info.get('locale', 'Unknown')}")
|
|
|
|
# 检查是否还有带点号的属性名
|
|
problematic_props = [key for key in device_info.keys() if '.' in key]
|
|
if problematic_props:
|
|
logger.warning(f"事件中发现带点号的属性名: {problematic_props}")
|
|
else:
|
|
logger.info("事件中所有属性名都已转换为友好格式")
|
|
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_properties_fix())
|
|
|