Skip to content

test(compat-logic): add compat framework and httpweb/session tests - #768

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

test(compat-logic): add compat framework and httpweb/session tests#768
deepin-bot[bot] merged 1 commit into
linuxdeepin:masterfrom
pengfeixx:test/compat-logic-coverage

Conversation

@pengfeixx

Copy link
Copy Markdown
Contributor

Add tests for lifecycle PluginManagerPrivate, zrpc channel/dispatcher, common struct serialization, WebBinder helpers, FileClient/FileServer edge cases and ProtoClient/ProtoServer data operations.

新增compat框架和httpweb/session模块测试,覆盖生命周期插件管理、
zrpc通道/分发器、通用结构序列化、WebBinder辅助方法、文件客户端/
服务端边界场景和ProtoClient/ProtoServer数据操作。

Log: 添加compat和logic模块覆盖率测试
Influence: 仅新增测试文件,不影响现有功能,提升compat和logic模块覆盖率。

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: 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

@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 lifecycle PluginManagerPrivate, zrpc channel/dispatcher,
common struct serialization, WebBinder helpers, FileClient/FileServer
edge cases and ProtoClient/ProtoServer data operations.

新增compat框架和httpweb/session模块测试,覆盖生命周期插件管理、
zrpc通道/分发器、通用结构序列化、WebBinder辅助方法、文件客户端/
服务端边界场景和ProtoClient/ProtoServer数据操作。

Log: 添加compat和logic模块覆盖率测试
Influence: 仅新增测试文件,不影响现有功能,提升compat和logic模块覆盖率。
@pengfeixx
pengfeixx force-pushed the test/compat-logic-coverage branch from da9c348 to 53f7b9a Compare July 15, 2026 01:31
@deepin-ci-robot

Copy link
Copy Markdown

deepin pr auto review

★ 总体评分:95分

■ 【总体评价】

代码新增了多个单元测试模块,覆盖了JSON序列化、生命周期管理、RPC通信和HTTP文件传输等功能,测试结构清晰且边界覆盖全面。
逻辑正确,无安全漏洞,代码质量良好,仅在部分测试中直接访问私有成员存在轻微的封装性妥协。

■ 【详细分析】

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

代码语法正确,测试用例逻辑清晰。commonstruct_test.cpp 中的 roundtrip 模板函数正确实现了序列化与反序列化的往返测试;lifecycle_private_test.cpp 中通过包含 _p.h 头文件合理地测试了私有类;session_test.cpp 中的 insertSession 辅助函数正确使用了锁来保证线程安全。
潜在问题:session_test.cpp 中直接访问了 server._sessionids_lockserver._session_ids 等成员,若这些成员在头文件中声明为 private 且未通过友元或宏开放,将导致编译错误。
建议:确认被测类的访问控制权限,或在必要时使用测试友元声明。

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

代码结构清晰,命名规范,使用了 GTest 的 TESTTEST_F 宏进行合理分组。辅助函数如 makeNamedPluginaddDepend 封装良好,减少了代码重复。SetUpTearDown 方法正确管理了临时目录和网络资源的生命周期。
潜在问题:部分测试用例中存在硬编码的端口号(如 13789, 19000 等),在并发执行测试时可能引发端口冲突。
建议:考虑使用动态端口分配或端口范围管理来避免潜在的端口冲突。

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

作为单元测试代码,性能不是主要考量因素。测试中没有发现死循环或不必要的资源消耗,资源初始化和清理都在 SetUp/TearDown 中高效完成。
建议:保持现有良好的资源管理实践。

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

漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个
测试代码主要在本地或 CI 环境运行,未涉及敏感信息处理或外部不可信输入解析(除被测功能本身外),不存在命令注入、路径遍历等安全风险。httpweb_extra_test.cpp 中对长文件名截断的测试反而验证了安全防护机制。
建议:继续保持良好的安全测试习惯,关注被测代码的边界条件处理。

■ 【改进建议代码示例】

// 针对 session_test.cpp 中硬编码端口和直接访问私有成员的改进建议
// 建议在测试基类中动态分配端口或使用环境变量

class SessionTest : public ::testing::Test {
protected:
    std::shared_ptr<NetUtil::Asio::Service> service;
    std::shared_ptr<NetUtil::Asio::SSLContext> context;
    std::shared_ptr<TestSessionCallbacks> callbacks;
    int testPort;

    int getAvailablePort() {
        // 简单的动态端口获取逻辑示例
        // 实际项目中可使用更健壮的端口管理工具或绑定到端口0后获取实际端口
        return 19000 + (rand() % 1000); 
    }

    void SetUp() override
    {
        testPort = getAvailablePort();
        service = std::make_shared<NetUtil::Asio::Service>();
        service->Start();
        context = std::make_shared<NetUtil::Asio::SSLContext>(asio::ssl::context::tlsv12);
        callbacks = std::make_shared<TestSessionCallbacks>();
    }

    void TearDown() override
    {
        callbacks.reset();
        service->Stop();
    }

    void insertSession(ProtoServer &server, const std::string &ip)
    {
        BaseKit::UUID uid = BaseKit::UUID::Sequential();
        // 假设 _sessionids_lock 和 _session_ids 可访问
        // 如果不可访问,应通过 ProtoServer 提供的测试接口或友元类访问
        std::unique_lock<std::shared_mutex> locker(server._sessionids_lock);
        server._session_ids.insert(std::make_pair(ip, uid));
    }
};

TEST_F(SessionTest, ProtoServerConstruct)
{
    // 使用动态端口
    ProtoServer server(service, context, testPort);
    SUCCEED();
}

@github-actions

Copy link
Copy Markdown
  • 敏感词检查失败, 检测到2个文件存在敏感词
详情
{
    "tests/compat/commonstruct_test.cpp": [
        {
            "line": "    src.token = \"tkn\";",
            "line_number": 76,
            "rule": "S106",
            "reason": "Var naming | 8114f75dbc"
        }
    ],
    "tests/compat/lifecycle_private_test.cpp": [
        {
            "line": "    metaData.insert(kPluginUrlLink, \"http://example.com\");",
            "line_number": 78,
            "rule": "S35",
            "reason": "Url link | f7d44315b2"
        },
        {
            "line": "    EXPECT_EQ(meta->urlLink(), \"http://example.com\");",
            "line_number": 91,
            "rule": "S35",
            "reason": "Url link | f7d44315b2"
        }
    ]
}

@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 2755aa1 into linuxdeepin:master Jul 15, 2026
20 of 22 checks passed
@pengfeixx
pengfeixx deleted the test/compat-logic-coverage branch July 15, 2026 01:51
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