Skip to content

test: add unit tests for deepin-devicecontrol (5 classes, 167 cases) - #941

Merged
deepin-bot[bot] merged 2 commits into
linuxdeepin:masterfrom
add-uos:ut-t25
Oct 29, 2026
Merged

deepin-bot[bot] merged 2 commits into
linuxdeepin:masterfrom
add-uos:ut-t25

Conversation

@add-uos

@add-uos add-uos commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

概述

基于 qt-autotest-generator 技能为 deepin-devicecontrol 模块的 5 个目标类生成 Google Test 单元测试,完成 编写→审查→缺陷标红 闭环。基线 6ccddaf4,分支 ut-t25。

范围

类 源文件 用例数 行覆盖率
ControlInterface deepin-devicecontrol/src/controlinterface.cpp 73(独立 control-test 二进制) 75.62%
DriverInstaller deepin-devicecontrol/src/drivercontrol/driverinstaller.cpp 24 92.48%
DriverInstallerApt deepin-devicecontrol/src/drivercontrol/driverinstallerapt.cpp 22 95.5%
DebInstaller deepin-devicecontrol/src/drivercontrol/debinstaller.cpp 24 93.02%
AptInstaller deepin-devicecontrol/src/drivercontrol/aptinstaller.cpp 24 92.94%
  • 方法覆盖 66/67(getUserAuthorPasswd 需活跃 DBus 授权上下文,单测环境不可覆盖)
  • 新增 167 个用例全部通过:control-test 73/73 + 主测试二进制 319/319(含既有用例,ASAN_OPTIONS=detect_leaks=0)
  • 打桩:DBus / QApt / CUPS / QProcess / 文件 IO / proc/sysfs 全部 stub/mock,不依赖真实设备环境
  • 既有用例稳定性修复:CoreCpu logicalIsExisted 断言语义校正、MainJob 打桩 monitorWorkingDBFlag 避免 DetectThread 未停崩溃

疑似源码缺陷(只标红,未修改生产代码)

  1. 🔴 DEF-001 DriverInstallerApt::isNetworkOnline 丢包率>0 被判为在线(语义反转,与 DriverInstaller 相反)
  2. 🔴 DEF-004 DriverInstaller/DebInstaller::installPackage dpkg 锁重试耗尽 emit finished(false) 后缺 return,仍执行 doOperate
  3. 🟠 DEF-002 enablePrinter 早退路径泄漏 ippNewRequest 对象
  4. 🟠 DEF-003 construct_uri 缓冲区填满时缺 NUL 终止 → 读越界

详见附件 defects-summary.md / defects.json。

Generated by qt-autotest-generator skill.

@sourcery-ai

sourcery-ai Bot commented Oct 26, 2026

Copy link
Copy Markdown

Sorry @add-uos, your pull request is larger than the review limit of 150,000 diff characters

@deepin-bot

deepin-bot Bot commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

TAG Bot

New tag: 6.0.75
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #956

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-ci-robot

Copy link
Copy Markdown

deepin pr auto review

🤖 AI 代码审查报告

总体评分: 81 分 (通过阈值: 70分)

Pass


📊 总体评价

项目 结果
审查结论 代码审查通过
评分详情 本次提交为 deepin-devicecontrol 新增 5 个类的单元测试(167 个用例),覆盖 ControlInterface、AptInstaller、DebInstaller、DriverInstaller、DriverInstallerApt 的主要分支。测试结构清晰、注释完整、依赖隔离到位。语法逻辑维度存在少量问题(arm64 硬编码可移植性缺陷、测试断言无效、潜在 double-free 模式),代码质量维度有冗余桩和缺少 dlsym 空指针检查的轻微问题。未发现安全漏洞。

🔍 详细分析

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个安全漏洞 ✅ 通过

🔐 发现 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 代码审查工具自动生成

@deepin-ci-robot

Copy link
Copy Markdown

[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.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@add-uos

add-uos commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

/merge

@deepin-bot
deepin-bot Bot merged commit 7552b54 into linuxdeepin:master Oct 29, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants