Repository navigation
test(cmdtool): UT_CmdToolOem 改用纯打桩替代 sudo 部署真实 toml 文件 - #970
Conversation
UT_CmdToolOem 中 parseOemTomlInfo 相关用例原先通过 std::system("sudo ...")将真实 toml 部署到 /etc/deepin/hardware/ 再清理。在无 sudo 凭据且无终端的环境(如 CI 容器)下 sudo 读取密码挂死,导致整个测试进程卡死超时。
改用同仓库 ut_gapcloser.cpp 已验证的纯打桩方案:
- 序列式 QFile::exists 静态桩控制主路径/调试路径/安装目录三级查找
- QFile::open 经 dlsym 入口桩替换,QFile::readAll 返回预置内容
- 断言 parseOemTomlInfo 解析结果(单节/多节均校验 m_cmdInfo 内容)
- 删除 deployTomlFile/cleanupTomlFile 辅助函数,不再依赖 sudo
另修正断言:classkey 取节名首个 '.' 前的部分,多节用例两节数据均挂
在 toml+首段键下。
Log: UT_CmdToolOem 用例在无 sudo 终端环境挂起导致 UT 卡死超时
Influence: UT_CmdToolOem 全部用例改为纯内存打桩,无文件系统/权限依赖
Reviewer's GuideTestsReplace sudo-based TOML file setup with QFile stubs and strengthen assertions for single-section, multi-section, and empty-file parsing.
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 语法正确,逻辑清晰 ✅ 通过 潜在问题: 建议: ['dlsym 硬编码 mangled name (_ZN5QFile4openE6QFlagsIN13QIODeviceBase12OpenModeFlagEE) 依赖特定 Qt ABI 版本,若 Qt 版本升级可能失效。虽有 nullptr 检查不会崩溃, 但会导致 open 桩静默失败使测试出错。建议添加编译期或启动期 ABI 校验日志。'] 2. 代码质量 ✅评价: 代码结构清晰,注释完整 ✅ 通过 潜在问题: 建议: ['将桩状态变量封装为一个结构体(如 UtOemStubState),在测试夹具或局部作用域中管理,减少全局可变状态。'] 3. 代码性能 ✅评价: 性能良好,资源使用合理 ✅ 通过 潜在问题: 建议: [] 4. 代码安全 🔒评价: 存在0个安全漏洞 ✅ 通过
安全漏洞详情: 建议: [] 💡 改进建议代码示例// 建议优化:将桩状态封装为结构体,减少全局可变状态
struct UtOemStubState {
QList<bool> existsSeq;
int existsIdx = 0;
QList<bool> openSeq;
int openIdx = 0;
QByteArray fileContent;
void reset(QList<bool> exists, QList<bool> opens, const QByteArray &content) {
existsSeq = exists;
existsIdx = 0;
openSeq = opens;
openIdx = 0;
fileContent = content;
}
};
static UtOemStubState ut_oem_state;
// 桩函数引用 ut_oem_state 而非独立全局变量本报告由 AI 代码审查工具自动生成 |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: add-uos, lzwind The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/forcemerge |
问题
UT_CmdToolOem 中 parseOemTomlInfo 相关 3 个用例(singleSection/multiSection/emptyFile)原先通过
std::system("sudo ...")将真实 toml 文件部署到/etc/deepin/hardware/、测完再清理。在无 sudo 凭据且无终端的环境(CI 容器、沙箱)下,sudo 读取密码挂死不返回,导致整个测试进程卡死、UT 阶段超时失败。方案
复用同仓库
ut_gapcloser.cpp已验证的纯打桩方案,全程无文件系统/权限依赖:QFile::exists静态桩:控制 主路径 → 调试路径 → 安装目录 三级文件查找QFile::open经dlsym入口桩替换,QFile::readAll返回预置 toml 内容deployTomlFile/cleanupTomlFilesudo 辅助函数,保留并强化原有用例语义m_cmdInfo["tomloem"]中 Manufacturer/Product 键值;多节断言两节数据均入库;空文件断言返回 false 且无数据入库classkey取节名首个.前的部分(oem.info/oem.other均为oem),多节用例两节数据挂同一键下验证
UT_CmdToolOem.*:10/10 通过,用例耗时 0ms,无挂起UT_CmdTool*全系列:104/104 通过(128ms,此前仅 3 个 sudo 用例即挂起 40s+)Summary by Sourcery
Eliminate sudo and filesystem dependencies from CmdTool OEM parsing tests while improving validation of parsed TOML data.
Enhancements:
Tests: