#!/usr/bin/env python3 # -*- coding: utf-8 -*- """FTP 鉴权配置(ftp_cfg,[ftp] 段)的主机侧单元测试运行器(L0.5,纯标准库)。 做什么: 用本机 MSVC 编译 test/host/ftp_cfg/ftp_cfg_test.c(以 #include 纳入**生产源文件** Drivers/BSP/NETCFG/ftp_cfg.c),在 PC 上离线跑注册契约(幂等、键表、**不挂回调**) 与出厂默认口令判定(大小写不敏感、NULL fail-closed),失败即非 0 退出。 工具链探测与判定全部委托给 test/host/common/unit_test_harness.py。 为什么要主机侧单测(而不是只用台架): 本模块是 FTP 鉴权的门禁。判定写成大小写敏感 → 用户手输大写 hex 时正确口令被拒; 反过来对出厂值敏感 → "已改口令"误报,出厂默认口令的启动告警**静默失效**(现场以为 改了口令)。[ftp] 段刻意不挂变更回调(口令下次登录才生效),有人"顺手补上"就会在 poll 重载时去重建网络。write_en 出厂 = 1 也是刻意的(FTP 推 config.ini 是既有维护 工作流)。这些都是一行代码就能改错、而真机只看得到 230/530 的东西。 哈希常量本身的正确性归 test/host/sha256/(TC-SHA256-008),本模块不重复算。 用法(仓库根目录): python test/host/ftp_cfg/run_unit_test.py 或统一用 .venv: & '.venv\Scripts\python.exe' test/host/ftp_cfg/run_unit_test.py 退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。 设计依据:docs/子系统设计/网络配置说明.md §3.4、docs/测试说明/主机单测覆盖率口径.md §9 P1 创建日期:2026-10-23 """ 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 # 本模块零桩目录:ftp_cfg.c 不含 dbg_log.h,也没有别的平台依赖; # cfg_file.h 用真实头(接口原汁),被调的 cfg_file_register 由测试单元给实现。 BUILD = TestBuild( name="FTP Auth Config Tests", src=os.path.join(HERE, "ftp_cfg_test.c"), include_dirs=[ os.path.join(ROOT, "Drivers", "BSP", "NETCFG"), os.path.join(ROOT, "App", "cfg"), HERE, ], summary_marker="=== FTP Auth Config Tests:", ) if __name__ == "__main__": sys.exit(run_host_unit_test(BUILD))