VWED_server/tests/test_device_handler_batch.py

138 lines
4.7 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试设备处理器批量注册功能
验证新的register_and_run接口是否正常工作
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from services.online_script.device_handler_service import DeviceHandlerService
from data.enum.call_device_enum import DeviceType
def test_batch_registration():
"""测试批量设备注册功能"""
print("=== 测试设备处理器批量注册功能 ===")
# 创建设备处理服务
handler_service = DeviceHandlerService()
def test_handler(message):
"""测试处理器函数"""
print(f"收到消息: {message.topic}")
print(f"载荷: {message.payload}")
return {"forward": True, "payload": message.payload}
try:
# 测试1: 批量注册华瑞小车
print("\n1. 测试批量注册华瑞小车")
device_ids = handler_service.register_and_run(
device_ids=["AGV001", "AGV002", "AGV003"],
device_type=DeviceType.VEHICLE,
brand_name="huarui",
handler=test_handler,
script_id="test_script_001",
description="测试华瑞小车批量注册"
)
print(f"华瑞小车批量注册成功: {device_ids}")
# 测试2: 批量注册仙工小车
print("\n2. 测试批量注册仙工小车")
device_ids_seer = handler_service.register_and_run(
device_ids=["SEER001", "SEER002"],
device_type=DeviceType.VEHICLE,
brand_name="seer",
command_types=["order", "state"], # 只处理特定指令
handler=test_handler,
script_id="test_script_002",
description="测试仙工小车批量注册"
)
print(f"仙工小车批量注册成功: {device_ids_seer}")
# 测试3: 批量注册门设备
print("\n3. 测试批量注册门设备")
door_ids = handler_service.register_and_run(
device_ids=["DOOR001", "DOOR002"],
device_type=DeviceType.DOOR,
brand_name="huarui", # 门设备也可以使用华瑞品牌
handler=test_handler,
script_id="test_script_003",
description="测试门设备批量注册"
)
print(f"门设备批量注册成功: {door_ids}")
# 测试4: 获取运行状态
print("\n4. 获取设备处理器运行状态")
status = handler_service.get_running_handlers()
print(f"运行状态: {status}")
print("\n=== 所有测试通过 ===")
except Exception as e:
print(f"测试失败: {e}")
import traceback
traceback.print_exc()
finally:
# 清理资源
try:
handler_service.stop()
print("设备处理服务已停止")
except:
pass
def test_topic_generation():
"""测试topic自动生成功能"""
print("\n=== 测试Topic自动生成功能 ===")
from services.online_script.device_handler_service import TopicManager
topic_manager = TopicManager()
# 测试华瑞小车topics生成
print("\n1. 测试华瑞小车topics生成")
listen_topics = topic_manager.generate_listen_topics(
device_ids=["AGV001", "AGV002"],
brand_name="huarui",
device_type=DeviceType.VEHICLE
)
forward_topics = topic_manager.generate_forward_topics(
device_ids=["AGV001", "AGV002"],
brand_name="huarui",
device_type=DeviceType.VEHICLE
)
print(f"监听topics: {listen_topics}")
print(f"转发topics: {forward_topics}")
# 测试仙工小车topics生成
print("\n2. 测试仙工小车topics生成")
listen_topics_seer = topic_manager.generate_listen_topics(
device_ids=["SEER001"],
brand_name="seer",
command_types=["order", "state"],
device_type=DeviceType.VEHICLE
)
forward_topics_seer = topic_manager.generate_forward_topics(
device_ids=["SEER001"],
brand_name="seer",
command_types=["order", "state"],
device_type=DeviceType.VEHICLE
)
print(f"仙工监听topics: {listen_topics_seer}")
print(f"仙工转发topics: {forward_topics_seer}")
# 测试品牌验证
print("\n3. 测试品牌验证")
print(f"支持的品牌: {topic_manager.get_supported_brands()}")
print(f"华瑞品牌有效性: {topic_manager.validate_brand('huarui')}")
print(f"仙工品牌有效性: {topic_manager.validate_brand('seer')}")
print(f"未知品牌有效性: {topic_manager.validate_brand('unknown')}")
if __name__ == "__main__":
test_topic_generation()
test_batch_registration()