#!/usr/bin/env python3 # -*- coding: utf-8 -*- """IEC 60870-5-104 被控站协议栈(B4)主机侧纯逻辑单元测试运行器(纯标准库)。 做什么:用本机 MSVC 离线编译 test/host/iec104/iec104_test.c(#include 纳入 生产源文件 iec104_asdu.c + iec104_pts.c + iec104_link.c,及数据源链接 依赖 prot_set.c + prot_elm.c + phasor.c + sample_ring.c + freq.c + meas.c,运行参数段起再 + cfg_file.c + adc_cal.c + run_par.c 真链),验证 APCI 重组 / STARTDT 握手 / 总召分片 / COV / k-w-t1~t3 / 遥控与定值两段式 / C_RD / C_CS / 错误应答(EVI)。 用法(仓库根目录): & '.venv\\Scripts\\python.exe' test/host/iec104/run_unit_test.py 退出码:0=PASS / 1=测试失败 / 2=环境错误。 设计依据:docs/子系统设计/IEC104上行设计说明.md §7(测试方案)。 创建日期:2026-10-12 """ import os import sys HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE))) sys.path.insert(0, os.path.join(ROOT, "test", "host", "common")) from unit_test_harness import TestBuild, run_host_unit_test # noqa: E402 BUILD = TestBuild( name="IEC104 Tests", src=os.path.join(HERE, "iec104_test.c"), # 运行参数段起 stub 先于生产目录(dbg_log.h → 计数宏桩);App/cfg + App/log # 真头供 cfg_file.h / cfg_file_store.h / sys_log.h;adc_input_desc / # syslog_post / cfg_store_* 由测试单元给强符号桩(同 adc_cal 套件先例)。 include_dirs=[ os.path.join(HERE, "stub"), os.path.join(ROOT, "App", "algo"), os.path.join(ROOT, "App", "cfg"), os.path.join(ROOT, "App", "log"), os.path.join(ROOT, "App", "protocol", "iec104"), HERE, ], summary_marker="=== IEC104 Tests:", ) if __name__ == "__main__": sys.exit(run_host_unit_test(BUILD))