Skip to content

test(coop): add logic/coop/daemon/dt tests and expose HTTPFileClient - #763

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

test(coop): add logic/coop/daemon/dt tests and expose HTTPFileClient#763
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/coop-logic-coverage

Conversation

@pengfeixx

Copy link
Copy Markdown
Contributor
  • Add logic tests: fileclient, fileserver, webproto, webbinder, tokencache, httpweb stub/fork

  • Add coop commandparser test; extend sharehelper and transferhelper_core tests

  • Add coop_gui discovercontroller, daemon searchlight/transferjob, dt setting/transfer tests

  • Expose HTTPFileClient under ENABLE_UNIT_TEST for testability

  • 新增 logic 测试: fileclient、fileserver、webproto、webbinder、tokencache、httpweb stub/fork

  • 新增 coop commandparser 测试;扩展 sharehelper 与 transferhelper_core 测试

  • 新增 coop_gui discovercontroller、daemon searchlight/transferjob、dt setting/transfer 测试

  • 在 ENABLE_UNIT_TEST 下暴露 HTTPFileClient 以便测试

Log: 新增 coop/logic/daemon/dt 单元测试并暴露 HTTPFileClient
Influence: 提升业务模块单元测试覆盖率,不影响现有功能。

@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

@pengfeixx
pengfeixx force-pushed the test/coop-logic-coverage branch 2 times, most recently from 907bcec to 999f442 Compare July 14, 2026 01:22
- Add logic tests: fileclient, fileserver, webproto, webbinder, tokencache, httpweb stub/fork
- Add coop commandparser test; extend sharehelper and transferhelper_core tests
- Add coop_gui discovercontroller, daemon searchlight/transferjob, dt setting/transfer tests
- Fix stub.h memory leak with unique_ptr; replace sleep_for with promise sync
- Use -fno-access-control instead of #define private public

- 新增 logic 测试: fileclient、fileserver、webproto、webbinder、tokencache、httpweb stub/fork
- 新增 coop commandparser 测试;扩展 sharehelper 与 transferhelper_core 测试
- 新增 coop_gui discovercontroller、daemon searchlight/transferjob、dt setting/transfer 测试
- 修复 stub.h 内存泄漏;用 promise 同步替换 sleep_for
- 使用 -fno-access-control 替代 #define private public

Log: 新增 coop/logic/daemon/dt 单元测试并修复测试质量问题
Influence: 提升业务模块单元测试覆盖率,不影响现有功能。
@pengfeixx
pengfeixx force-pushed the test/coop-logic-coverage branch from 999f442 to c618feb Compare July 14, 2026 04:31
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

★ 总体评分:95分

■ 【总体评价】

代码实现了UOS协同/传输模块的大规模单元测试覆盖率提升,覆盖了状态机、异常分支、安全测试和集成测试,质量良好。
逻辑正确,测试结构清晰,使用了自定义Stub框架和gcov覆盖率刷新机制,未引入安全漏洞。

■ 【详细分析】

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

测试代码使用gtest框架,结合自定义Stub框架(stub.h)对私有成员和虚函数进行打桩。stub.h通过mprotect修改内存保护属性并使用宏写入跳转指令实现函数替换,逻辑正确。transferjob_test.cpp中的fake_send_success等桩函数正确模拟了SendResulthttpweb_fork_test.cpp的集成测试正确启动了SSL服务并使用promise/future同步等待。
潜在问题:stub.h中的addrof函数使用union进行类型转换,在C++标准中属于未定义行为(UB),虽然多数编译器支持但存在隐患;fileclient_test.cpp使用std::rand()生成临时目录名未设置随机种子,可能存在重名冲突。
建议:将addrof中的union替换为memcpy或C++20的std::bit_cast;使用std::random_device或当前时间作为随机种子生成临时目录名。

  • 2.代码质量(良好)✓

测试用例覆盖了CommandParserShareHelperTransferHelper等核心模块的状态机和异常分支,注释清晰说明了测试意图。使用了QSignalSpy验证信号发射,-fno-access-control直接访问私有成员,测试隔离性较好(如DiscoverControllerStateTestTearDown中复位单例状态)。
潜在问题:部分测试用例仅使用EXPECT_NO_FATAL_FAILURESUCCEED(),断言较弱,仅验证不崩溃而未验证具体状态;stub.h中宏定义较多,代码风格较陈旧。
建议:对于状态机测试,尽量增加对具体状态值的断言(如EXPECT_EQ);对stub.h进行现代化重构,使用模板和标准库替代部分宏。

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

测试代码主要关注功能覆盖,stub.h的内存修改操作开销极小。httpweb_fork_test.cpp启动真实HTTPS服务器进行端到端测试,虽有网络IO,但使用了合理的超时机制(10秒)且仅在集成测试中使用,不影响整体测试效率。
建议:无需特别优化。

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

漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个
本次提交为测试代码,未引入生产环境安全漏洞。测试代码验证了被测模块的安全防护机制:fileclient_test.cpp中的CreateNextAvailableNamePathTraversalCreateNextAvailableNameAbsolute验证了路径遍历防护;tokencache_test.cpp验证了JWT token的生成与校验机制,包括无效和篡改token的拒绝。stub.h使用的内存修改技术仅限于测试环境,不构成生产风险。
建议:保持现有的安全测试用例,可考虑增加更多边界条件的测试。

■ 【改进建议代码示例】

// tests/logic/stub.h - addrof 函数改进,避免 UB
template<typename T>
char* addrof(T addr)
{
    // 使用 memcpy 替代 union 类型转换,避免未定义行为
    char* d;
    std::memcpy(&d, &addr, sizeof(d));
    return d;
}

// tests/logic/fileclient_test.cpp - 临时目录生成改进
void SetUp() override
{
    // 使用 random_device 生成更安全的随机种子
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(100000, 999999);
    tmpDir = std::filesystem::temp_directory_path() / ("fc_test_" + std::to_string(dis(gen)));
    std::filesystem::create_directories(tmpDir);

    service = std::make_shared<NetUtil::Asio::Service>();
    service->Start();
    context = std::make_shared<NetUtil::Asio::SSLContext>(asio::ssl::context::tlsv12);
    client = std::make_unique<FileClient>(service, context, "127.0.0.1", 12345);
}

@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 14, 2026

Copy link
Copy Markdown

This pr force merged! (status: unstable)

@deepin-bot
deepin-bot Bot merged commit 3c933c4 into linuxdeepin:master Jul 14, 2026
20 of 22 checks passed
@pengfeixx
pengfeixx deleted the test/coop-logic-coverage branch July 14, 2026 05:10
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