南向驱动测试报告

测试日期: 2026-06-27
环境: macOS (darwin), Go toolchain, CGO_ENABLED=0
范围: internal/driver/... 与相关 internal/core/... 集成测试


一、测试执行摘要

1.1 命令与结果

# 驱动包单元测试(含覆盖率)
CGO_ENABLED=0 go test ./internal/driver/... -count=1 -cover

# 核心包单元测试(含覆盖率)
CGO_ENABLED=0 go test ./internal/core/... -count=1 -cover

# 性能基准(EtherNet/IP 调度器)
CGO_ENABLED=0 go test -bench=. -benchmem ./internal/driver/ethernetip -run=^$ -count=1
测试范围 结果 覆盖率 备注
internal/driver/*(主驱动包) PASS 12.1% ConnectionManager 公共组件
internal/driver/modbus PASS 27.0% 耗时 ~121s(含场景测试)
internal/driver/bacnet PASS 59.1% 耗时 ~84s
internal/driver/bacnet/utsm PASS 异步 UTSM 单元测试
internal/driver/opcua PASS 40.3% 耗时 ~126s
internal/driver/s7 PASS 42.0% 耗时 ~121s
internal/driver/ethernetip PASS 30.3%
internal/driver/omron PASS 25.3%
internal/driver/snmp PASS 33.9%
internal/driver/ice104 PASS 23.4% M1 单元测试
internal/driver/dlt645 无测试 0.0% 仅 stub 注册
internal/driver/mitsubishi 无测试 0.0% 仅 stub 注册
internal/driver/... 汇总 PASS 含 bacnet 子包
internal/core/... PASS 47.9% 含 VirtualShadowEngine pipeline fan-out

结论: ./internal/driver/..../internal/core/...CGO_ENABLED=0 下全部通过。DL/T645、Mitsubishi SLMP 仍为 stub,无单元测试。


二、各驱动单元测试明细

驱动 注册名 测试文件数 测试函数数(约) 覆盖率 状态
Modbus modbus-tcp / modbus-rtu / modbus-rtu-over-tcp (+ simple 变体) 7 33 27.0%
BACnet IP bacnet-ip 28+ 80+ 59.1%
OPC UA opc-ua 5 25 40.3%
Siemens S7 s7 5 52 42.0%
EtherNet/IP ethernet-ip 14 57 30.3%
Omron FINS omron-fins 1 6 25.3%
SNMP snmp 2 15 33.9%
IEC 60870-5-104 iec60870-5-104 2 8 23.4%
DL/T645 dlt645 0 0 0.0% Stub
Mitsubishi SLMP mitsubishi-slmp 0 0 0.0% Stub
ConnectionManager 1 10 12.1%

2.1 主要测试文件

驱动 关键测试文件 覆盖内容
Modbus scenario_test.go, decoder_*_test.go, modbus_optimization_test.go 连接管理、解码、MTU 优化
BACnet scenario_test.go, isolation_test.go, acceptance_test.go 故障隔离、设备发现、验收
OPC UA scenario_test.go, opcua_test.go 连接管理、读写、数据格式
S7 scenario_test.go, decoder_test.go, connection_manager_test.go 地址解析、退避、PLC 型号
EtherNet/IP scenario_test.go, integration_test.go, scheduler_perf_test.go 重连、Tag 分组、性能
SNMP snmp_test.go, decoder_test.go v2c/v3 配置、OID 解码
ICE104 ice104_test.go, decoder_test.go APDU 解码、配置解析
Omron FINS fins_test.go 地址转换、配置映射

三、性能与基准测试

3.1 EtherNet/IP 调度器基准(CGO_ENABLED=0,2026-06-27)

运行环境: Intel Core i5-5257U @ 2.70GHz, darwin/amd64

基准测试 结果 内存分配
BenchmarkGroupTags/GroupTags_100_Points 119.8 ns/op 72 B/op, 2 allocs/op
BenchmarkGroupTags/GroupTags_500_Points 496.7 ns/op 744 B/op, 5 allocs/op
BenchmarkGroupTags/GroupTags_1000_Points 941.2 ns/op 1640 B/op, 6 allocs/op
BenchmarkPointParsing 5833 ns/op 498 B/op, 12 allocs/op
BenchmarkStatsIncrement 12.33 ns/op 0 allocs/op
BenchmarkTagGroupOperations/TagGroup_Add_100 22622 ns/op 8071 B/op, 200 allocs/op

3.2 ShadowCore 基准(需 integration 构建标签)

internal/core/shadow_performance_test.go 含 7 个 Benchmark(WriteShadowDevice、GetShadowDevice、ShadowIngress 等),标记为 //go:build integration

当前以 -tags=integration 运行 ./internal/core 会因 mockStressDriver 重复声明而编译失败scan_engine_scale_test.goscan_engine_large_scale_test.go 冲突)。基准结果暂无法在本环境复现。

3.3 ScanEngine 规模测试(参考)

历史报告见 ScanEngine 重构测试报告

  • 100 设备混合协议压力测试通过
  • 调度吞吐量目标 ≥10 设备/秒,实测达标
  • 背压控制、资源限制符合设计预期

四、边界场景覆盖矩阵

场景 Modbus BACnet OPC UA S7 ENIP FINS SNMP ICE104 Core
超时 / 退避
重连 / 半开探测
冷却期 / Dead 状态
无效配置 / 地址
空点位 / 空 ID
通道离线 / 设备状态
采集优先级
设备故障隔离
并发安全
每日计数清零

图例: 有专门测试 · — 无专门测试或未覆盖

4.1 代表性边界测试

  • 重连: ethernetip/integration_test.goTestConnectionReconnect
  • 连续失败触发重连: s7/scenario_test.goTestScenario_ConsecutiveFailuresTriggerReconnect
  • 通道离线: core/channel_device_state_test.goTestResolveEffectiveDeviceState_ChannelOffline
  • 采集优先级: core/scan_engine_test.goTestScanEngine_Priority
  • SNMP 无效 OID: snmp/decoder_test.goTestParseAddressInvalid
  • BACnet 故障隔离: bacnet/scenario_test.goTestScenario_HandleReadFailureIsolation

五、已知缺口与风险

项目 说明 建议
DL/T645 / Mitsubishi SLMP 仅模拟实现,无单元测试 真实协议实现后再补测试
SNMP / ICE104 无联机集成测试(无真实设备/模拟器 CI) 参考 联机测试方案 补充
ShadowCore 基准 integration 标签下编译冲突 合并 mock 定义或拆分 build tag
覆盖率 主驱动包 23–59%,stub 为 0% 持续补充 scenario 与集成测试

六、本地运行指南

# 全量驱动 + 核心包
CGO_ENABLED=0 go test ./internal/driver/... ./internal/core/... -count=1 -cover

# 单驱动详细输出
CGO_ENABLED=0 go test ./internal/driver/snmp -v -count=1

# EtherNet/IP 性能基准
CGO_ENABLED=0 go test -bench=. -benchmem ./internal/driver/ethernetip -run=^$ -count=1

# 核心包(当前有 1 个失败用例)
CGO_ENABLED=0 go test ./internal/core/... -count=1 -cover

# 通道回归方案
# 见 docs/testing/南向采集通道回归验证测试方案.md

七、相关文档