文件最后提交记录最后更新时间
3 个月前
README

Device 测试模块总结

概述

tests/device/ 目录包含了设备管理相关的核心功能测试,主要包括设备管理器、CSR(配置状态寄存器)处理和设备驱动三个方面的测试。该模块测试了设备生命周期管理、CSR 配置解析、属性引用同步机制以及驱动加载匹配等核心功能。

源代码结构

对应的源代码位于 src/device/ 目录:

  • csr.h / csr.cpp: CSR 配置处理核心实现(674 行)

    • device_csr: CSR 配置解析、验证、设备对象创建
      • init(): 初始化 CSR 配置,进行占位符替换和验证
      • create_devices_object(): 创建组件设备对象
      • finalize_device_setup(): 完成设备设置(创建子设备、通用设备并启动)
      • process_topology_object(): 处理拓扑对象,建立总线映射和对象映射
      • process_objects_placeholders(): 处理占位符替换
      • init_functions(): 初始化函数表达式
    • unit: 设备单元信息(类型、名称、兼容驱动列表)
      • validate_unit(): 验证单元信息完整性
      • load_compatible_driver(): 加载兼容驱动(支持多个驱动尝试)
    • connector: 连接器信息(位置、插槽、总线等)
      • validate_connector(): 验证连接器信息
  • manager.h / manager.cpp: 设备管理器实现(80 行)

    • device_manager: 设备添加和删除的统一入口(单例模式)
      • add_device(): 添加设备(CSR 解析 → 对象创建 → 拓扑处理 → 设备启动)
      • remove_device(): 删除设备(驱动停止 → 拓扑清理 → 对象注销)
    • 集成 CSR 处理和拓扑管理(device_topo)
  • driver.h / driver.cpp: 设备驱动管理实现(139 行)

    • device_driver: 驱动加载、卸载、设备查找
      • load(): 动态加载驱动库(dlopen)
      • unload(): 卸载驱动库(dlclose)
      • register_driver(): 注册驱动(dlsym 获取注册函数)
      • get_device(): 根据设备名称查找设备
    • device_driver_factory: 驱动工厂模式,管理所有驱动实例(单例模式)
      • get_device_driver(): 获取驱动(不存在则加载)
      • set_device_driver(): 设置驱动(用于测试)
      • remove_device_driver(): 移除驱动

测试文件说明

1. test_manager.cpp - 设备管理器测试

测试设备管理器的核心功能,包括设备的添加、删除和 D-Bus 集成:

添加设备测试

  • add_device_success

    • 成功添加设备(从 CSR 文件解析并创建设备)
    • 通过 D-Bus 查询验证设备属性(DeviceName)
    • 验证设备对象路径的正确映射
    • 支持多个设备的创建(PCIeNicCard、NetworkPort、OpticalModule)
    • 带重试机制的 D-Bus 属性查询(最多 5 次重试,每次间隔 100ms)
  • add_device_with_topology_success

    • 添加带拓扑信息的设备
    • 验证拓扑对象创建(device_topo)
    • 支持总线信息(Buses)
    • 验证设备对象与拓扑对象的关联
  • add_device_inline_topology_anchor

    • 测试添加包含内联拓扑(Anchor)的设备
    • 验证内联拓扑对象的处理
    • 支持 Anchor 节点和总线模板
    • 验证拓扑对象正确创建和清理
  • add_device_create_devices_object_failed

    • 测试 create_devices_object 失败的情况
    • 当 Objects 中缺少 Unit 对象时抛出异常
    • 验证异常类型(mc::parse_error_exception)
    • 验证设备对象未被创建
  • add_device_driver_not_found

    • 驱动未找到的异常场景
    • 验证异常抛出(mc::parse_error_exception)
    • 验证设备对象未被创建
  • add_device_empty_topology_result

    • 测试添加没有拓扑信息的设备
    • 验证设备对象可以正常创建(即使没有拓扑)
    • 验证系统对空拓扑的处理
  • add_device_topology_add_failed

    • 测试拓扑添加失败的情况
    • 验证即使拓扑添加失败也不会抛出异常
    • 验证设备对象已创建
  • add_device_finalize_setup_exception

    • 测试 finalize_device_setup 可能失败的情况
    • 验证系统对异常的处理
    • 验证设备对象已创建

删除设备测试

  • remove_device_requires_unit_information

    • 删除设备需要 Unit 信息的验证
    • 无 Unit 信息时设备不会被删除(安全处理)
    • 有 Unit 信息时设备被正确删除
    • 删除后拓扑对象清理验证
  • remove_device_returns_when_position_missing

    • 位置信息缺失时的安全处理
    • 验证不会抛出异常
  • remove_device_returns_when_device_absent

    • 设备不存在时的安全处理
    • 验证不会抛出异常
  • remove_device_handles_driver_stop_failure

    • 驱动停止失败时的异常处理
    • 验证即使驱动加载失败也不会崩溃
    • 验证驱动恢复后可以正常删除设备
  • remove_device_load_driver_failed

    • 测试 remove_device 中 load_compatible_driver 失败的情况
    • 验证使用无效 Unit 信息时驱动加载失败
    • 验证设备对象不会被移除(当驱动加载失败时)
    • 验证使用正确 Unit 信息后可以成功移除设备
  • remove_device_stop_exception

    • 测试 remove_device 中 device.stop 可能抛出异常的情况
    • 验证系统对 stop 异常的处理
    • 验证设备对象可以被正常移除

D-Bus 集成

  • 设备属性通过 D-Bus 查询验证
  • 对象路径映射验证(路径格式:/bmc/dev/Systems/${SystemId}/test_device/${DeviceName})
  • 设备注册到 D-Bus 的完整性测试
  • 带重试机制的属性查询工具方法

2. test_csr.cpp - CSR 处理测试

CSR(Configuration/Status Register)是设备配置的核心数据结构,该文件包含了 143 个测试用例,全面覆盖 CSR 处理的各种场景:

Unit 相关测试

  • Unit 驱动加载

    • 成功加载兼容驱动(test_unit_load_compatible_driver_success)
    • 多个兼容驱动(test_unit_load_compatible_driver_success_second)
    • 兼容驱动列表中包含逗号的情况(test_unit_load_compatible_driver_with_comma)
    • 驱动未找到的情况(test_unit_load_compatible_driver_not_found)
    • 兼容列表中包含空字符串的情况(unit_load_compatible_driver_empty_string_in_list)
  • Unit 验证

    • 成功验证(test_unit_validate_success)
    • 空类型验证失败(test_unit_validate_empty_type)
    • 空名称验证失败(test_unit_validate_empty_name)
    • 空兼容列表验证失败(test_unit_validate_empty_compatible)

Connector 相关测试

  • Connector 验证
    • 成功验证(test_connector_validate_success)
    • 空位置验证失败(test_connector_validate_empty_position)
    • 零 Slot 验证成功(test_connector_validate_zero_slot)

CSR 初始化和验证测试

  • CSR 验证

    • 成功验证(csr_validate_success)
    • Unit 验证失败(csr_validate_unit_fail)
    • 空 Objects 验证失败(csr_validate_empty_objects)
    • Connector 验证失败(csr_validate_connector_fail)
  • CSR 初始化

    • 成功初始化(csr_init_success)
    • 验证失败导致初始化失败(csr_init_validation_fail)

设备创建测试

  • 父对象查找

    • 有 @Parent 标记的情况(find_parent_object_with_parent)
    • 默认 Devmon 根对象(find_parent_object_default_devmon)
    • 父对象未找到的情况(find_parent_object_not_found)
  • 子设备创建

    • 创建单个子设备(create_child_device)
    • 子设备名称不匹配的情况(create_child_device_name_mismatch)
    • 创建多个子设备(create_childs_device)
    • 创建组件设备(create_component_device)
  • 通用设备创建

    • 成功创建设备对象(create_devices_object_success)
    • 无驱动的情况(create_common_devices_no_driver)
    • 驱动未找到的情况(create_devices_object_driver_not_found)
  • 兼容驱动处理

    • 兼容驱动包含逗号(csr_compatible_with_comma)
    • 多个兼容驱动(csr_multiple_compatible_drivers)

拓扑处理测试

  • 拓扑对象处理
    • 基础成功场景(process_topology_object_basic_success)
    • 无 Anchor 节点的情况(process_topology_object_no_anchor)
    • 总线数量不匹配(process_topology_object_bus_count_mismatch)
    • 连接器和内部总线处理(process_topology_object_connectors_and_inner_buses)
    • 重复总线对象处理(process_topology_object_duplicate_bus_objects)

属性引用(Reference)测试

  • 基础引用

    • 单属性引用(csr_property_reference_single)
    • 多属性引用(csr_property_reference_multiple)
    • 实时更新机制(csr_property_reference_realtime_update)
    • 不存在的对象引用(csr_property_reference_nonexistent_object)
  • 引用与函数结合

    • 引用与函数结合(csr_property_reference_with_function)
    • 引用函数数值计算(csr_property_reference_function_numeric_calculation)
    • 引用函数条件逻辑(csr_property_reference_function_conditional_logic)

属性同步(Sync)测试

  • 基础同步

    • 单属性同步(csr_property_sync_single)
    • 多属性同步(csr_property_sync_multiple)
    • 实时更新机制(csr_property_sync_realtime_update)
    • 不存在的属性(csr_property_sync_nonexistent_property)
  • 同步与函数结合

    • 同步函数字符串拼接(csr_property_sync_function_string_concatenation)
    • 同步函数实时更新多依赖(csr_property_function_realtime_update_multi_dependency)

属性函数测试

  • 函数参数支持

    • 同步参数支持(csr_property_function_args_sync_support)
    • 引用参数支持(csr_property_function_args_reference_support)
    • 复杂同步场景(csr_property_function_args_complex_sync)
    • 分离的同步和引用(csr_property_function_args_separate_sync_ref)
  • 混合场景

    • 混合引用和同步(csr_property_function_mixed_reference_sync)

接口属性测试

  • 接口属性引用和同步
    • 接口属性单引用(csr_interface_property_reference_single)
    • 接口属性单同步(csr_interface_property_sync_single)
    • 接口属性混合引用同步(csr_interface_property_mixed_reference_sync)
    • 接口属性函数参数(csr_interface_property_function_args)
    • 接口语法兼容性(csr_interface_syntax_compatibility_test)

ref_object 测试

  • 基础功能

    • ref_object 基础(csr_property_ref_object_basic)
    • 多个 ref_object(csr_property_ref_object_multiple)
    • ref_object 与 ref_property 的区别(csr_property_ref_object_vs_ref_property)
    • 动态更新(csr_property_ref_object_dynamic_update)
    • 不存在的 ref_object(csr_property_ref_object_nonexistent)
  • 调试和开发

    • ref_object 调试(csr_property_ref_object_debug)
    • ref_object 解析调试(csr_property_ref_object_parse_debug)
    • ref_object 直接测试(csr_property_ref_object_direct_test)
    • ref_object 分步调试(csr_property_ref_object_step_by_step_debug)
    • ref_object 错误位置测试(csr_ref_object_error_location_test)
    • ref_object 反射调试(csr_ref_object_reflection_debug)
  • 属性设置

    • ref_object 属性设置(csr_property_ref_object_set_property)
    • ref_object 多引用属性设置(csr_property_ref_object_set_property_multi_ref)
    • ref_object 属性设置类型转换(csr_property_ref_object_set_property_type_conversion)
    • ref_object 属性设置错误处理(csr_property_ref_object_set_property_error_handling)
    • ref_object 属性设置无效引用(csr_property_ref_object_set_property_invalid_ref)

占位符替换测试

  • 基础替换

    • 简单替换(test_placeholder_replacement_simple)
    • 键中的占位符(test_placeholder_replacement_in_keys)
    • 嵌套结构替换(test_placeholder_replacement_nested)
    • 数组中的占位符(test_placeholder_replacement_in_array)
    • 部分匹配(test_placeholder_replacement_partial_matches)
  • 新属性添加

    • 所有新属性(test_placeholder_replacement_all_new_properties)
    • 新属性嵌套(test_placeholder_replacement_new_properties_nested)
    • 新属性在数组中(test_placeholder_replacement_new_properties_in_array)
    • 新属性边界情况(test_placeholder_replacement_new_properties_edge_cases)
    • 新属性在键中(test_placeholder_replacement_new_properties_in_keys)

3. test_driver.cpp / test_driver.h - 设备驱动测试

测试设备驱动的核心功能,包括驱动加载、设备查找和驱动工厂模式:

测试驱动实现

  • test_device 类

    • 实现设备的基本生命周期(init、start、stop)
    • SystemId 属性处理(从 CSR 或 Connector 获取)
    • DeviceName 属性处理(从 TestInterface 或 PCIeDevice 获取,支持引用扩展)
    • 路径冲突避免(当多个设备引用同一源对象名时,追加唯一后缀)
    • 反射支持(MC_REFLECT)
  • test_driver 类

    • 创建测试用的设备驱动
    • 支持创建 PCIeNicCard、NetworkPort、OpticalModule 等设备类型
    • 为设备名称分配稳定存储,避免悬挂指针
  • C 接口封装

    • create_device:创建设备对象
    • init_device:初始化设备
    • start_device:启动设备
    • stop_device:停止设备
    • 符合 driver_abi.h 的 C 接口实现

设备驱动类测试(DeviceDriverTest)

  • SetDeviceDriverAndGetDeviceSuccess

    • 设置设备驱动后成功获取设备
    • 验证设备列表大小和设备条目信息
  • GetDeviceThrowsWhenNotLoaded

    • 驱动未加载时获取设备抛出异常(mc::invalid_arg_exception)
  • GetDeviceThrowsWhenDeviceMissing

    • 设备不存在时抛出异常
  • GetNameReturnsConfiguredValue

    • 获取驱动名称返回配置的值
  • LoadMissingLibraryThrowsSystemException

    • 加载不存在的库抛出系统异常(mc::system_exception)
  • RegisterDriverThrowsWhenSymbolMissing

    • 注册驱动时符号缺失抛出异常
  • RegisterDriverThrowsWhenFunctionReturnsError

    • 注册函数返回错误时抛出异常
  • RegisterDriverPopulatesDevicesOnSuccess

    • 成功注册驱动时填充设备列表
  • UnloadWithoutPriorLoadIsNoop

    • 卸载操作的幂等性(未加载时卸载不抛异常)
  • UnloadAfterSuccessfulLoadClosesHandle

    • 成功加载后卸载会关闭句柄

设备驱动工厂测试(DeviceDriverFactoryTest)

  • LocalFactoryDestructorReleasesDrivers

    • 本地工厂析构时释放驱动
  • SetDeviceDriverProvidesStubInstance

    • 通过工厂设置设备驱动
    • 验证获取的驱动实例正确
  • RemoveDeviceDriverClearsEntry

    • 移除设备驱动后清除条目
    • 移除后再次获取抛出异常
  • SetDeviceDriverOverridesPreviousDefinition

    • 覆盖已有驱动定义(后设置的驱动覆盖前一个)
  • RemoveNonexistentDriverIsSafe

    • 移除不存在的驱动是安全的(不抛异常)
  • SetDriverPathAffectsLoadFailure

    • 设置驱动路径影响加载失败行为
  • SetDeviceDriverUpdatesExistingEntry

    • 设置设备驱动更新已存在的条目

测试工具和基础设施

  • TestBase 继承:所有测试类继承自 mc::test::TestWithEngine,提供统一的测试环境
  • 测试驱动(test_driver):提供模拟设备驱动,支持创建 PCIeNicCard、NetworkPort、OpticalModule 等设备类型
  • D-Bus 集成:测试中集成了 D-Bus 通信,验证设备在系统中的注册和属性访问
  • 对象表管理:测试中包含完整的对象生命周期管理,包括注册、查询、注销等操作
  • 函数集合清理:每个测试用例后清空 func_collection 缓存,避免测试用例间相互影响
  • 重试机制:D-Bus 属性查询支持重试机制(最多 5 次重试,每次间隔 100ms)

测试统计

该测试模块共包含 175 个测试用例:

  • test_manager.cpp: 14 个测试用例(设备管理器功能)
  • test_csr.cpp: 143 个测试用例(CSR 处理功能)
  • test_driver.cpp: 18 个测试用例(设备驱动功能)

测试覆盖范围

该测试模块全面覆盖了设备管理的核心功能:

  • ✅ 设备生命周期管理(添加、删除)
  • ✅ CSR 配置解析和验证(Unit、Connector)
  • ✅ 设备驱动加载和匹配
  • ✅ 设备对象创建(Child、Children、Component、Objects)
  • ✅ 父对象查找和关系建立
  • ✅ 拓扑关系处理
  • ✅ 属性引用机制(Reference)
  • ✅ 属性同步机制(Sync)
  • ✅ 属性函数表达式计算
  • ✅ 函数对象识别和函数参数处理
  • ✅ ref_object 对象引用
  • ✅ 占位符替换
  • ✅ 接口属性处理
  • ✅ 对象提取和重命名
  • ✅ 反射元数据处理
  • ✅ 设备设置完成(finalize_device_setup)
  • ✅ 连接器获取(get_connector)
  • ✅ D-Bus 集成
  • ✅ 驱动工厂模式
  • ✅ 异常处理和错误场景

运行测试

测试使用 Google Test 框架编写,可以通过 meson 构建系统运行:

meson setup builddir
meson compile -C builddir
meson test -C builddir

测试数据依赖

测试依赖于以下测试数据文件:

  • ./tests_data/csr/test_device.sr:基础设备测试用的 CSR 文件
  • ./tests_data/csr/topology.sr:带拓扑信息的设备测试用的 CSR 文件

关键特性

属性引用和同步机制

CSR 系统实现了强大的属性引用和同步机制:

  1. 属性引用(Reference):使用 #/Object.Property 语法,实现对象间属性的引用
  2. 属性同步(Sync):使用 <=/Object.Property 语法,实现属性值的同步更新
  3. 实时更新:引用和同步都支持实时更新机制,当源属性变化时自动更新目标属性
  4. 函数表达式:支持在引用和同步中使用函数表达式,实现复杂的计算逻辑

ref_object 机制

ref_object 提供了对象级别的引用机制:

  • 支持引用整个对象而不仅仅是属性
  • 支持动态更新和多引用
  • 支持属性设置时的类型转换
  • 提供完善的错误处理机制

占位符替换

系统支持灵活的占位符替换机制:

  • 占位符语法:使用 ${VariableName} 语法定义占位符
  • 替换范围:支持在对象键名和属性值中使用占位符
  • 嵌套支持:支持嵌套结构中的占位符替换
  • 数组支持:支持数组中元素的占位符替换
  • 动态属性:支持新属性的动态添加(通过占位符在键名中创建新对象)
  • 部分匹配:支持部分匹配的占位符替换
  • 特殊字符处理:正确处理特殊字符和边界情况
  • 变量来源:占位符变量从 Connector 字典中获取(SystemId、GroupPosition、Slot、GroupId、ChassisId、ManagerId、Container、SilkText 等)

设备路径冲突处理

test_device 实现了智能的设备路径冲突处理机制:

  • 当多个设备引用同一源对象名时,自动追加对象名作为唯一后缀
  • 确保 D-Bus 对象路径的唯一性
  • 不影响属性的引用语义
  • 路径格式:/bmc/dev/Systems/${SystemId}/test_device/${DeviceName} 或 ${DeviceName}_${ObjectName}

测试隔离和清理

所有测试都实现了完善的清理机制:

  • 对象表清理:每个测试用例后自动清理对象表中的对象(保留 Devmon 和 DevmonTopo 根对象)
  • 多次清理:多次清理确保对象被完全删除(最多 3 次重试,处理依赖关系)
  • 智能删除顺序:按路径长度降序删除,先删除子对象(路径更长的),避免依赖关系问题
  • 缓存清理:清空 func_collection 缓存,避免测试用例间相互影响
  • 驱动清理:移除测试驱动(test_driver、hisi_hi182x),确保驱动状态干净
  • 异常安全:支持异常安全的清理操作(忽略注销错误,某些对象可能已被删除)

测试用例详细说明

test_manager.cpp 测试用例

add_device_success

  • 功能:测试成功添加设备的基本流程
  • 验证点:
    • CSR 文件解析成功
    • 设备对象创建成功(PCIeNicCard、NetworkPort、OpticalModule)
    • D-Bus 属性查询成功(DeviceName)
    • 对象路径映射正确
    • 设备删除后拓扑对象清理

add_device_with_topology_success

  • 功能:测试添加带拓扑信息的设备
  • 验证点:
    • 拓扑对象(device_topo)创建成功
    • 总线信息(Buses)处理正确
    • 设备对象与拓扑对象关联正确

add_device_inline_topology_anchor

  • 功能:测试添加包含内联拓扑(Anchor)的设备
  • 验证点:
    • 内联拓扑对象处理正确
    • Anchor 节点和总线模板处理
    • 拓扑对象创建和清理验证

add_device_create_devices_object_failed

  • 功能:测试 create_devices_object 失败的情况
  • 验证点:
    • 当 Objects 中缺少 Unit 对象时抛出异常
    • 异常类型为 mc::parse_error_exception
    • 设备对象未被创建

add_device_driver_not_found

  • 功能:测试驱动未找到的异常场景
  • 验证点:
    • 抛出 mc::parse_error_exception 异常
    • 设备对象未被创建
    • 系统状态保持稳定

add_device_empty_topology_result

  • 功能:测试添加没有拓扑信息的设备
  • 验证点:
    • 设备对象可以正常创建(即使没有拓扑)
    • 系统对空拓扑的处理正确

add_device_topology_add_failed

  • 功能:测试拓扑添加失败的情况
  • 验证点:
    • 即使拓扑添加失败也不会抛出异常
    • 设备对象已创建

add_device_finalize_setup_exception

  • 功能:测试 finalize_device_setup 可能失败的情况
  • 验证点:
    • 系统对异常的处理正确
    • 设备对象已创建

remove_device_requires_unit_information

  • 功能:测试设备删除的安全机制
  • 验证点:
    • 无 Unit 信息时设备不会被删除(安全处理)
    • 有 Unit 信息时设备被正确删除
    • 删除后拓扑对象清理验证

remove_device_load_driver_failed

  • 功能:测试 remove_device 中驱动加载失败的情况
  • 验证点:
    • 使用无效 Unit 信息时驱动加载失败
    • 设备对象不会被移除(当驱动加载失败时)
    • 使用正确 Unit 信息后可以成功移除设备

remove_device_stop_exception

  • 功能:测试 remove_device 中 device.stop 可能抛出异常的情况
  • 验证点:
    • 系统对 stop 异常的处理正确
    • 设备对象可以被正常移除

test_csr.cpp 测试用例分类

Unit 相关测试(10 个用例)

  • 驱动加载:成功场景、多驱动、逗号分隔、驱动未找到、空字符串处理、所有驱动失败、空兼容列表、第一个失败第二个成功
  • 验证:成功、空类型、空名称、空兼容列表

Connector 相关测试(3 个用例)

  • 验证:成功、空位置、零 Slot

CSR 初始化和验证测试(4 个用例)

  • CSR 验证:成功、Unit 失败、空 Objects、Connector 失败
  • CSR 初始化:成功、验证失败

设备创建测试(15+ 个用例)

  • 父对象查找:有 @Parent、默认 Devmon、未找到、回退到 Devmon
  • 子设备创建:单子设备、名称不匹配、名称不匹配继续处理、无下划线名称、多子设备、组件设备、所有匹配组件名称
  • 通用设备创建:成功、无驱动、驱动未找到、部分驱动缺失、无下划线名称、单元对象未找到
  • 兼容驱动处理:逗号分隔、多驱动

拓扑处理测试(20+ 个用例)

  • 基础场景:基础成功场景、无 Anchor、总线数量不匹配、连接器和内部总线、重复总线对象
  • 映射处理:总线映射构建(数组 Anchor、字典无总线、数量不匹配)、对象映射收集(数组节点、非字符串项、主总线在对象中、总线节点键重命名)
  • 格式转换:数组节点、非字符串项、带总线、带连接器、非字典非数组、总线不在映射中、对象不在映射中
  • 边界情况:数组节点部分已知对象、连接器未知项不重命名、主总线对象重命名、拓扑节点键重命名
  • 映射处理:总线映射构建、对象映射收集和创建、拓扑格式转换
  • 边界情况:数组节点处理、非字符串项处理、部分已知对象、主总线对象重命名
  • 错误处理:引用未找到、未知项不重命名、非字典非数组处理

属性引用测试(8 个用例)

  • 基础引用:单属性、多属性、实时更新、不存在对象
  • 引用与函数:函数结合、数值计算、条件逻辑

属性同步测试(5 个用例)

  • 基础同步:单属性、多属性、实时更新、不存在属性
  • 同步与函数:字符串拼接、多依赖实时更新

属性函数测试(5 个用例)

  • 函数参数:同步支持、引用支持、复杂同步、分离同步引用
  • 混合场景:混合引用和同步

接口属性测试(5 个用例)

  • 接口属性引用、同步、混合、函数参数、语法兼容性

ref_object 测试(14 个用例)

  • 基础功能:基础、多个、与 ref_property 区别、动态更新、不存在
  • 调试和开发:调试、解析调试、直接测试、分步调试、错误位置、反射调试
  • 属性设置:属性设置、多引用设置、类型转换、错误处理、无效引用

占位符替换测试(11 个用例)

  • 基础替换(5 个用例):简单替换、键中的占位符、嵌套结构替换、数组中的占位符、部分匹配
  • 新属性添加(6 个用例):所有新属性、新属性嵌套、新属性在数组中、新属性边界情况、新属性在键中
  • 其他类型处理:处理 variant 其他类型、数组中的占位符处理

函数对象和函数参数处理测试(7 个用例)

  • 函数对象识别:test_is_function_object_true、test_is_function_object_false
  • 函数参数处理:test_process_function_args_sync_property、test_process_function_args_ref_property、test_process_function_args_normal_arg、test_process_function_args_mixed_args、test_process_function_args_empty_args

设备设置和连接器测试(3 个用例)

  • finalize_device_setup:test_finalize_device_setup_nullptr_device_object、test_finalize_device_setup_success
  • get_connector:test_get_connector

对象提取和重命名测试(3 个用例)

  • extract_and_rename_objects:test_extract_and_rename_objects_normal、test_extract_and_rename_objects_object_not_found、test_extract_and_rename_objects_empty_mapping

反射测试(5 个用例)

  • 反射元数据:reflection_unit_metadata_roundtrip、reflection_connector_metadata_roundtrip
  • 反射设备 CSR:reflection_device_csr_metadata_visit、reflection_device_csr_to_variant_roundtrip、reflection_device_csr_register_cycle

其他功能测试(20+ 个用例)

  • 驱动加载边界情况:所有驱动加载失败、空兼容列表、第一个失败第二个成功、部分驱动缺失
  • 设备创建边界情况:名称不匹配继续处理、无下划线名称、所有匹配组件名称、单元对象未找到
  • 对象处理:非字符串项处理、数组节点部分已知对象、主总线在对象中、总线节点键重命名
  • 函数处理:服务指针 Lambda 处理、函数参数处理