Repository navigation
test: add unit tests for deepin-devicecontrol (5 classes, 167 cases) - #941
Conversation
|
Sorry @add-uos, your pull request is larger than the review limit of 150,000 diff characters |
|
TAG Bot New tag: 6.0.75 |
Generated by qt-autotest-generator skill. Batch 1: ControlInterface Cumulative: 1/5 classes, 34/35 methods tested Baseline: master @ 6ccddaf "fix: trim unit string in formatTotalCache to fix cache size parsing" (2026-10-23) Log: 新增 ControlInterface 单元测试(control-ut/ut_controlinterface.cpp,73 用例,独立 control-test 二进制规避同名 moc 冲突) Influence: 新增 1 个类的单元测试,本批次方法覆盖 34/35,行覆盖率 75.62%(getUserAuthorPasswd 需活跃 DBus 授权上下文,单测环境不可覆盖)
Generated by qt-autotest-generator skill. Batch 2: DriverInstaller, DriverInstallerApt, DebInstaller, AptInstaller Cumulative: 5/5 classes, 66/67 methods tested Baseline: master @ 6ccddaf "fix: trim unit string in formatTotalCache to fix cache size parsing" (2026-10-23) Log: 新增 DriverControl 四个安装器类单元测试(ut_driverinstaller/ut_driverinstallerapt/ut_debinstaller/ut_aptinstaller,共 94 用例入主测试二进制) Influence: 新增 4 个类的单元测试,行覆盖率 92.48%-95.5%;5 个目标类全部完成,累计 167 个新用例、方法覆盖 66/67
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ❌评价: 存在逻辑缺陷 ❌ 不通过 潜在问题: 建议: ["ut_aptinstaller.cpp: 将 arm64 改为动态选择与当前系统架构不同的值,如 const QString mismatchedArch = (systemArch == 'arm64') ? 'x86_64' : 'arm64'", 'ut_debinstaller.cpp: 将 g_debArchQueried 在 Act 前重置为 false,确保断言能验证 architecture() 是否被调用', 'ut_driverinstaller.cpp / ut_debinstaller.cpp: 在手动 delete 前调用 QCoreApplication::processEvents() 让 deleteLater 完成,或移除手动 delete 改为依赖 deleteLater + 事件处理'] 2. 代码质量 ✅评价: 代码结构清晰,注释完整 ✅ 通过 潜在问题: 建议: ['移除 AuthorizedEnable_OpenFails_ReturnsFalse 中冗余的 stub.set(qfileOpenAddr(), ut_qfileOpen),仅保留 FailOpen 的 stub', '为 qfileOpenAddr() 添加 dlsym 空指针检查和 Qt5 mangled name 回退,与项目现有模式一致'] 3. 代码性能 ✅评价: 性能良好,资源使用合理 ✅ 通过 潜在问题: 建议: [] 4. 代码安全 🔒评价: 存在0个安全漏洞 ✅ 通过
安全漏洞详情: 建议: [] 💡 改进建议代码示例// ut_aptinstaller.cpp: 动态选择不匹配架构
TEST_F(AptInstaller_UT, IsArchMatched_UnmatchedArch_ReturnsFalse)
{
Stub stub;
stub.set(static_cast<void (QProcess::*)(const QString &, const QStringList &, QIODevice::OpenMode)>(&QProcess::start),
ut_processStartProgramArgs);
stub.set(ADDR(QProcess, waitForFinished), ut_processWaitForFinished);
stub.set(ADDR(QProcess, readAllStandardOutput), ut_processReadAllStandardOutput);
AptInstaller installer;
// Arrange: 动态选择与当前系统架构不同的值
const QString systemArch = QSysInfo::currentCpuArchitecture();
const QString mismatchedArch = (systemArch == "arm64") ? "x86_64" : "arm64";
g_processOutput = QString("Package: foo\nArchitecture: %1\n").arg(mismatchedArch).toUtf8();
// Act
// Assert
EXPECT_FALSE(installer.isArchMatched(m_dir->filePath("ut.deb")));
EXPECT_EQ(g_startedProgram, QString("dpkg"));
}
// ut_debinstaller.cpp: 修正 g_debArchQueried 断言
TEST_F(DebInstaller_UT, IsArchMatched_AllArch_ReturnsFalse)
{
// ... setup ...
g_debValid = true;
g_debArch = "all";
g_debArchQueried = false; // 重置为 false,确保断言有意义
// Act
const bool ut_isArchMatched = installer.isArchMatched(m_debPath);
// Assert
EXPECT_FALSE(ut_isArchMatched);
EXPECT_TRUE(g_debArchQueried);
}
// ut_controlinterface.cpp: dlsym 空指针检查 + Qt5 回退
static void *qfileOpenAddr()
{
static void *p = dlsym(RTLD_DEFAULT, "_ZN5QFile4openE6QFlagsIN13QIODeviceBase12OpenModeFlagEE");
if (!p)
p = dlsym(RTLD_DEFAULT, "_ZN5QFile4openE6QFlagsIN9QIODevice10OpenModeFlagEE");
if (!p)
fprintf(stderr, "[UT] dlsym failed for QFile::open\n");
return p;
}本报告由 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 |
|
/merge |
概述
基于 qt-autotest-generator 技能为 deepin-devicecontrol 模块的 5 个目标类生成 Google Test 单元测试,完成 编写→审查→缺陷标红 闭环。基线
6ccddaf4,分支ut-t25。范围
疑似源码缺陷(只标红,未修改生产代码)
DriverInstallerApt::isNetworkOnline丢包率>0 被判为在线(语义反转,与 DriverInstaller 相反)DriverInstaller/DebInstaller::installPackagedpkg 锁重试耗尽 emit finished(false) 后缺 return,仍执行 doOperateenablePrinter早退路径泄漏 ippNewRequest 对象construct_uri缓冲区填满时缺 NUL 终止 → 读越界详见附件 defects-summary.md / defects.json。
Generated by qt-autotest-generator skill.