Skip to content

test(coop): add cooperation core module coverage tests - #770

Merged
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/coop-coverage
Jul 15, 2026
Merged

test(coop): add cooperation core module coverage tests#770
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/coop-coverage

Conversation

@pengfeixx

Copy link
Copy Markdown
Contributor

Add tests for Settings, ConfigManager, CommonUitls, filesystem, CooperationUtil, phone helpers and discover controller safe paths. Add crash signal handler in main.cpp to flush gcov on SIGSEGV.

新增cooperation核心模块测试,覆盖配置管理、通用工具、文件系统、
协作工具、手机模块和发现控制器的安全路径。main.cpp添加崩溃信号
处理器以确保段错误时刷新gcov覆盖率数据。

Log: 添加cooperation模块覆盖率测试
Influence: 仅新增测试文件和main.cpp信号处理,不影响现有功能逻辑。

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @pengfeixx, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

Add tests for Settings, ConfigManager, CommonUitls, filesystem,
CooperationUtil, phone helpers and discover controller safe paths.
Add crash signal handler in main.cpp to flush gcov on SIGSEGV.

新增cooperation核心模块测试,覆盖配置管理、通用工具、文件系统、
协作工具、手机模块和发现控制器的安全路径。main.cpp添加崩溃信号
处理器以确保段错误时刷新gcov覆盖率数据。

Log: 添加cooperation模块覆盖率测试
Influence: 仅新增测试文件和main.cpp信号处理,不影响现有功能逻辑。
@pengfeixx
pengfeixx force-pushed the test/coop-coverage branch from b37bb1c to b333e68 Compare July 15, 2026 02:00
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

★ 总体评分:75分

■ 【总体评价】

代码新增了全面的单元测试和集成测试覆盖,但引入了--allow-multiple-definition链接器标志来掩盖符号冲突问题
测试逻辑基本正确但因链接器标志掩盖底层ODR违规、测试与私有成员强耦合、部分测试断言不完整扣25分

■ 【详细分析】

  • 1.语法逻辑(基本正确)✓

代码语法正确,能够编译通过。main.cpp中新增的crash_handler函数正确调用flushCoverage()后通过_exit(128+sig)退出,信号注册逻辑正确。各测试文件的gtest宏使用规范,测试夹具SetUp/TearDown模式正确。
潜在问题:commonutils_test.cpp第22-27行GenerateRandomPasswordProducesVariedOutput测试名为"产生可变输出",但实际未验证a != b,测试断言不完整;configmanager_test.cpp第22-23行ASSERT_NE(s, nullptr)后紧跟EXPECT_NE(s, nullptr)为冗余断言。
建议:在GenerateRandomPasswordProducesVariedOutput中增加EXPECT_NE(a, b)断言;移除AppSettingReturnsValidSettings中冗余的EXPECT_NE

  • 2.代码质量(一般)✕

CMakeLists.txt第102行新增-Wl,--allow-multiple-definition链接器标志,表明新增测试文件引入了符号重复定义问题,该标志仅掩盖问题而非解决问题。多个测试文件(discover_safe_test.cppphone_smoke_test.cppsession_integration_test.cpp)直接访问和修改被测类的私有成员(如c->_historyDevicesv.m_connectedserver._session_ids),虽然由-fno-access-control启用,但造成测试与实现细节强耦合。settings_test.cppSetValueAndSetValueNoNotifySemantics使用Qt资源路径":/coop_nd.json"但diff中未见对应资源文件定义。
潜在问题:符号冲突的根因未解决,后续维护中可能引发难以追踪的链接错误;测试强依赖私有成员导致重构时测试维护成本高;Qt资源文件缺失可能导致测试编译或运行失败。
建议:排查并修复符号重复定义的根因(可能是多个cpp文件定义了相同符号),移除--allow-multiple-definition;为被测类提供测试友好的接口或友元声明,减少对私有成员的直接访问;确认Qt资源文件(.qrc)中包含测试所需资源。

  • 3.代码性能(无性能问题)✓

测试代码整体执行效率合理。session_integration_test.cpp第209行AsyncRequestWithHandlerTimeout中3.5秒sleep用于测试超时行为,属于集成测试中验证异步超时的合理做法。各测试的SetUp/TearDown正确管理资源生命周期,TearDown中调用service->Stop()确保AsioService正确清理。
建议:可考虑将超时测试的时间缩短或使用gtest的--gtest_filter机制将耗时测试单独分组,提升常规测试套件执行速度。

  • 4.代码安全(存在0个安全漏洞)✓

漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个
本次diff为纯测试代码,不涉及生产代码逻辑变更。测试中网络连接均使用localhost(127.0.0.1),文件操作使用QStandardPaths安全路径,无命令执行、SQL拼接或路径遍历风险。main.cppcrash_handler调用flushCoverage()(内部调用__gcov_dump/__gcov_flush弱符号)后调用async-signal-safe的_exit(),gcov函数专为崩溃场景下的覆盖率刷新设计,不构成安全漏洞。-Wl,--allow-multiple-definition为构建配置层面的代码质量问题,在测试构建上下文中不构成可利用的安全漏洞。

  • 建议:虽然当前无安全漏洞,建议后续移除--allow-multiple-definition以避免潜在的符号冲突掩盖问题。

■ 【改进建议代码示例】

--- a/tests/coop/CMakeLists.txt
+++ b/tests/coop/CMakeLists.txt
@@ -99,5 +99,5 @@ endif()
 if(VNCCLIENT_LIBRARY)
     target_link_libraries(coop_tests PRIVATE ${VNCCLIENT_LIBRARY})
 endif()
-target_link_options(coop_tests PRIVATE -fprofile-arcs -ftest-coverage -Wl,--allow-multiple-definition)
+# TODO: 排查并修复符号重复定义根因后移除 --allow-multiple-definition
+target_link_options(coop_tests PRIVATE -fprofile-arcs -ftest-coverage)
 add_test(NAME coop_tests COMMAND coop_tests)

--- a/tests/coop/commonutils_test.cpp
+++ b/tests/coop/commonutils_test.cpp
@@ -20,6 +20,8 @@ TEST(CommonUitlsTest, GenerateRandomPasswordProducesVariedOutput)
 {
     QString a = CommonUitls::generateRandomPassword();
     QString b = CommonUitls::generateRandomPassword();
+    // 验证两次调用产生不同结果(极小概率相同,可放宽为多次采样)
+    EXPECT_NE(a, b);
     EXPECT_EQ(a.length(), 6);
     EXPECT_EQ(b.length(), 6);
 }

--- a/tests/coop/configmanager_test.cpp
+++ b/tests/coop/configmanager_test.cpp
@@ -19,7 +19,6 @@ TEST(CoopConfigManagerTest, AppSettingReturnsValidSettings)
 {
     Settings *s = ConfigManager::instance()->appSetting();
     ASSERT_NE(s, nullptr);
-    EXPECT_NE(s, nullptr);  // 移除冗余断言,ASSERT_NE已足够
 }

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: lzwind, pengfeixx

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

@pengfeixx

Copy link
Copy Markdown
Contributor Author

/forcemerge

@deepin-bot

deepin-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown

This pr force merged! (status: unstable)

@deepin-bot
deepin-bot Bot merged commit e049141 into linuxdeepin:master Jul 15, 2026
19 of 22 checks passed
@pengfeixx
pengfeixx deleted the test/coop-coverage branch July 15, 2026 02:08
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