Repository navigation
test: add unit tests for export and file parsers - #566
Conversation
|
Sorry @pengfeixx, you've used your own review budget of 250,000 diff characters for the last 7 days. You can request another review in 55 minutes by commenting |
Reviewer's GuideThis test-only PR completes the eighth coverage batch by adding a new UserLogAccess and log-segment export suite and extending parser, export, application, wtmp, OOC-thread, and settings tests with mocked external dependencies, temporary filesystem fixtures, and success, failure, lifecycle, and dispatch branch coverage. File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning
详情 {
"export": {
"tests/src/ut_logexportthread.cpp": {
"b": [
"// ---- stubs for exportToZip / run(ZipCoredump) / run(AUDIT/AUTH) coverage ----",
" return \"/tmp/ut_logexport_zip\";",
"bool stub_zip_exportLog(const QString &outDir, const QString &in, bool isFile)",
" exportThread->enableAppendExport(true);",
" EXPECT_EQ(exportThread->m_appendExport, true);",
" exportThread->enableAppendExport(false);",
" EXPECT_EQ(exportThread->m_appendExport, false);",
" exportThread->enableAppendExport();",
" EXPECT_EQ(exportThread->m_appendExport, true);",
"TEST_F(LogExportthread_UT, exportToZipPublic_UT)",
" exportThread->exportToZipPublic(\"test.zip\", coredumpList, labels);",
" EXPECT_EQ(exportThread->m_fileName, QString(\"test.zip\"));",
" EXPECT_EQ(exportThread->m_coredumplist.size(), 1);",
" EXPECT_EQ(exportThread->m_labels.size(), 2);",
" EXPECT_EQ(exportThread->m_runMode, LogExportThread::ZipCoredump);",
" EXPECT_EQ(exportThread->m_canRunning, true);",
" exportThread->initMap();",
" EXPECT_EQ(exportThread->m_levelStrMap.size(), 8);",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Emergency\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Alert\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Critical\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Error\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Warning\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Notice\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Info\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Debug\"));",
" exportThread->initMap();",
" QString result = exportThread->strTranslate(\"Emergency\");",
" QString unknown = exportThread->strTranslate(\"NonExistentLevel\");",
" exportThread->htmlEscapeCovert(html);",
"TEST_F(LogExportthread_UT, exportToZip_UT)",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_canRunning = true;",
" bool res1 = exportThread->exportToZip(\"test_empty.zip\", emptyList);",
" exportThread->m_canRunning = true;",
" bool res2 = exportThread->exportToZip(\"test_core.zip\", coreList);",
" exportThread->m_canRunning = false;",
" bool res3 = exportThread->exportToZip(\"test_stop.zip\", coreList);",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_coredumplist = coreList;",
" exportThread->m_fileName = \"test_run.zip\";",
" exportThread->m_runMode = LogExportThread::ZipCoredump;",
" exportThread->m_canRunning = true;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);",
" exportThread->m_alist = auditList;",
" exportThread->m_authlist = authList;",
" exportThread->m_fileName = \"test_audit\";",
" exportThread->m_labels = QStringList() << \"test\";",
" exportThread->m_canRunning = false;",
" exportThread->m_runMode = LogExportThread::TxtAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::TxtAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUTH;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);"
]
},
"tests/src/ut_logsegementexportthread.cpp": {
"b": [
"#include \"logsegementexportthread.h\"",
"// exportTxt: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_txt.txt\";",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
"// exportTxt: file open failure path",
" EXPECT_FALSE(m_thread->exportTxt());",
"// exportHtml: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_html.html\";",
" EXPECT_TRUE(m_thread->exportHtml());",
" EXPECT_TRUE(m_thread->exportHtml());",
"// exportHtml: open failure path",
" EXPECT_FALSE(m_thread->exportHtml());",
"// exportToDoc: KERN + Kwin branches",
" m_thread->setParameter(\"/tmp/ut_seg_export_doc.doc\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_FALSE(m_thread->exportToDoc());",
"// exportToXls: KERN + Kwin branches + null guard",
" m_thread->setParameter(\"/tmp/ut_seg_export_xls.xls\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToXls());",
" EXPECT_TRUE(m_thread->exportToXls());",
" removeTempFile(\"/tmp/ut_seg_export_xls.xls\");",
" EXPECT_FALSE(m_thread->exportToXls());"
]
}
}
} |
6169495 to
8796218
Compare
|
Warning
详情 {
"export": {
"tests/src/ut_logexportthread.cpp": {
"b": [
"// ---- stubs for exportToZip / run(ZipCoredump) / run(AUDIT/AUTH) coverage ----",
" return \"/tmp/ut_logexport_zip\";",
"bool stub_zip_exportLog(const QString &outDir, const QString &in, bool isFile)",
" exportThread->enableAppendExport(true);",
" EXPECT_EQ(exportThread->m_appendExport, true);",
" exportThread->enableAppendExport(false);",
" EXPECT_EQ(exportThread->m_appendExport, false);",
" exportThread->enableAppendExport();",
" EXPECT_EQ(exportThread->m_appendExport, true);",
"TEST_F(LogExportthread_UT, exportToZipPublic_UT)",
" exportThread->exportToZipPublic(\"test.zip\", coredumpList, labels);",
" EXPECT_EQ(exportThread->m_fileName, QString(\"test.zip\"));",
" EXPECT_EQ(exportThread->m_coredumplist.size(), 1);",
" EXPECT_EQ(exportThread->m_labels.size(), 2);",
" EXPECT_EQ(exportThread->m_runMode, LogExportThread::ZipCoredump);",
" EXPECT_EQ(exportThread->m_canRunning, true);",
" exportThread->initMap();",
" EXPECT_EQ(exportThread->m_levelStrMap.size(), 8);",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Emergency\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Alert\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Critical\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Error\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Warning\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Notice\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Info\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Debug\"));",
" exportThread->initMap();",
" QString result = exportThread->strTranslate(\"Emergency\");",
" QString unknown = exportThread->strTranslate(\"NonExistentLevel\");",
" exportThread->htmlEscapeCovert(html);",
"TEST_F(LogExportthread_UT, exportToZip_UT)",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_canRunning = true;",
" bool res1 = exportThread->exportToZip(\"test_empty.zip\", emptyList);",
" exportThread->m_canRunning = true;",
" bool res2 = exportThread->exportToZip(\"test_core.zip\", coreList);",
" exportThread->m_canRunning = false;",
" bool res3 = exportThread->exportToZip(\"test_stop.zip\", coreList);",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_coredumplist = coreList;",
" exportThread->m_fileName = \"test_run.zip\";",
" exportThread->m_runMode = LogExportThread::ZipCoredump;",
" exportThread->m_canRunning = true;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);",
" exportThread->m_alist = auditList;",
" exportThread->m_authlist = authList;",
" exportThread->m_fileName = \"test_audit\";",
" exportThread->m_labels = QStringList() << \"test\";",
" exportThread->m_canRunning = false;",
" exportThread->m_runMode = LogExportThread::TxtAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::TxtAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUTH;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);"
]
},
"tests/src/ut_logsegementexportthread.cpp": {
"b": [
"#include \"logsegementexportthread.h\"",
"// exportTxt: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_txt.txt\";",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
"// exportTxt: file open failure path",
" EXPECT_FALSE(m_thread->exportTxt());",
"// exportHtml: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_html.html\";",
" EXPECT_TRUE(m_thread->exportHtml());",
" EXPECT_TRUE(m_thread->exportHtml());",
"// exportHtml: open failure path",
" EXPECT_FALSE(m_thread->exportHtml());",
"// exportToDoc: KERN + Kwin branches",
" m_thread->setParameter(\"/tmp/ut_seg_export_doc.doc\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_FALSE(m_thread->exportToDoc());",
"// exportToXls: KERN + Kwin branches + null guard",
" m_thread->setParameter(\"/tmp/ut_seg_export_xls.xls\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToXls());",
" EXPECT_TRUE(m_thread->exportToXls());",
" removeTempFile(\"/tmp/ut_seg_export_xls.xls\");",
" EXPECT_FALSE(m_thread->exportToXls());"
]
}
}
} |
8796218 to
5fc032d
Compare
|
Warning
详情 {
"export": {
"tests/src/ut_logexportthread.cpp": {
"b": [
"// ---- stubs for exportToZip / run(ZipCoredump) / run(AUDIT/AUTH) coverage ----",
" return \"/tmp/ut_logexport_zip\";",
"bool stub_zip_exportLog(const QString &outDir, const QString &in, bool isFile)",
" exportThread->enableAppendExport(true);",
" EXPECT_EQ(exportThread->m_appendExport, true);",
" exportThread->enableAppendExport(false);",
" EXPECT_EQ(exportThread->m_appendExport, false);",
" exportThread->enableAppendExport();",
" EXPECT_EQ(exportThread->m_appendExport, true);",
"TEST_F(LogExportthread_UT, exportToZipPublic_UT)",
" exportThread->exportToZipPublic(\"test.zip\", coredumpList, labels);",
" EXPECT_EQ(exportThread->m_fileName, QString(\"test.zip\"));",
" EXPECT_EQ(exportThread->m_coredumplist.size(), 1);",
" EXPECT_EQ(exportThread->m_labels.size(), 2);",
" EXPECT_EQ(exportThread->m_runMode, LogExportThread::ZipCoredump);",
" EXPECT_EQ(exportThread->m_canRunning, true);",
" exportThread->initMap();",
" EXPECT_EQ(exportThread->m_levelStrMap.size(), 8);",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Emergency\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Alert\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Critical\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Error\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Warning\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Notice\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Info\"));",
" EXPECT_TRUE(exportThread->m_levelStrMap.contains(\"Debug\"));",
" exportThread->initMap();",
" QString result = exportThread->strTranslate(\"Emergency\");",
" QString unknown = exportThread->strTranslate(\"NonExistentLevel\");",
" exportThread->htmlEscapeCovert(html);",
"TEST_F(LogExportthread_UT, exportToZip_UT)",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_canRunning = true;",
" bool res1 = exportThread->exportToZip(\"test_empty.zip\", emptyList);",
" exportThread->m_canRunning = true;",
" bool res2 = exportThread->exportToZip(\"test_core.zip\", coreList);",
" exportThread->m_canRunning = false;",
" bool res3 = exportThread->exportToZip(\"test_stop.zip\", coreList);",
" stub.set(ADDR(DLDBusHandler, exportLog), stub_zip_exportLog);",
" exportThread->m_coredumplist = coreList;",
" exportThread->m_fileName = \"test_run.zip\";",
" exportThread->m_runMode = LogExportThread::ZipCoredump;",
" exportThread->m_canRunning = true;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);",
" exportThread->m_alist = auditList;",
" exportThread->m_authlist = authList;",
" exportThread->m_fileName = \"test_audit\";",
" exportThread->m_labels = QStringList() << \"test\";",
" exportThread->m_canRunning = false;",
" exportThread->m_runMode = LogExportThread::TxtAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::TxtAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::HtmlAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::DocAUTH;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUDIT;",
" exportThread->run();",
" exportThread->m_runMode = LogExportThread::XlsAUTH;",
" exportThread->run();",
" EXPECT_NE(exportThread, nullptr);"
]
},
"tests/src/ut_logsegementexportthread.cpp": {
"b": [
"#include \"logsegementexportthread.h\"",
"// exportTxt: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_txt.txt\";",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
" EXPECT_TRUE(m_thread->exportTxt());",
"// exportTxt: file open failure path",
" EXPECT_FALSE(m_thread->exportTxt());",
"// exportHtml: KERN + Kwin branches",
" QString fname = \"/tmp/ut_seg_export_html.html\";",
" EXPECT_TRUE(m_thread->exportHtml());",
" EXPECT_TRUE(m_thread->exportHtml());",
"// exportHtml: open failure path",
" EXPECT_FALSE(m_thread->exportHtml());",
"// exportToDoc: KERN + Kwin branches",
" m_thread->setParameter(\"/tmp/ut_seg_export_doc.doc\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_TRUE(m_thread->exportToDoc());",
" EXPECT_FALSE(m_thread->exportToDoc());",
"// exportToXls: KERN + Kwin branches + null guard",
" m_thread->setParameter(\"/tmp/ut_seg_export_xls.xls\", data, labels, KERN);",
" EXPECT_TRUE(m_thread->exportToXls());",
" EXPECT_TRUE(m_thread->exportToXls());",
" removeTempFile(\"/tmp/ut_seg_export_xls.xls\");",
" EXPECT_FALSE(m_thread->exportToXls());"
]
}
}
} |
1. Add ut_logsegementexportthread.cpp and ut_userlogaccess.cpp 2. Extend logfileparser, logexportthread and wtmpparse tests 3. Extend ooc parse thread, logapplication and logsettings tests Log: No user-facing changes Influence: 1. Run deepin-log-viewer-test with --gtest_filter='*Export*;*Parser*' 2. Verify full suite passes with ASAN_OPTIONS=detect_leaks=0 3. Check lcov function coverage of parsers and export threads test: 新增导出与文件解析单元测试 1. 新增 ut_logsegementexportthread.cpp 与 ut_userlogaccess.cpp 2. 扩展文件解析、导出线程与 wtmp 解析测试 3. 扩展 ooc 解析线程、应用与配置测试 Log: 无用户可见变化 Influence: 1. 运行 deepin-log-viewer-test 过滤 Export/Parser 套件 2. 以 ASAN_OPTIONS=detect_leaks=0 验证全量用例通过 3. 用 lcov 检查解析器与导出线程覆盖率
5fc032d to
cfa68fe
Compare
|
TAG Bot New tag: 6.5.43 |
|
[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. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 语法正确,逻辑清晰 ✅ 通过 潜在问题: 建议: [] 2. 代码质量 ✅评价: 代码结构清晰,注释完整 ✅ 通过 潜在问题: 建议: ['建议将 ExportRunAuditAuth_UT 中的 8 种 RUN_MODE 拆分为参数化测试(TEST_P),以进一步提升可维护性'] 3. 代码性能 ✅评价: 性能良好,资源使用合理 ✅ 通过 潜在问题: 建议: [] 4. 代码安全 🔒评价: 存在0个安全漏洞 ✅ 通过
安全漏洞详情: 建议: [] 💡 改进建议代码示例// 当前代码质量良好,无需修复。以下为可选的改进建议(参数化测试拆分):
//
// 将 ExportRunAuditAuth_UT 中的 8 种 RUN_MODE 拆分为参数化测试:
//
// struct AuditAuthParam {
// LogExportThread::RUN_MODE mode;
// const char *name;
// };
//
// class LogExportAuditAuthParam : public LogExportthread_UT,
// public testing::WithParamInterface<AuditAuthParam> {};
//
// TEST_P(LogExportAuditAuthParam, ExportRunAuditAuth_UT) {
// // ... stub setup ...
// exportThread->m_runMode = GetParam().mode;
// exportThread->run();
// EXPECT_NE(exportThread, nullptr);
// }
//
// INSTANTIATE_TEST_SUITE_P(AuditAuthModes, LogExportAuditAuthParam,
// testing::Values(
// AuditAuthParam{LogExportThread::TxtAUDIT, "TxtAUDIT"},
// AuditAuthParam{LogExportThread::TxtAUTH, "TxtAUTH"},
// AuditAuthParam{LogExportThread::HtmlAUDIT, "HtmlAUDIT"},
// AuditAuthParam{LogExportThread::HtmlAUTH, "HtmlAUTH"},
// AuditAuthParam{LogExportThread::DocAUDIT, "DocAUDIT"},
// AuditAuthParam{LogExportThread::DocAUTH, "DocAUTH"},
// AuditAuthParam{LogExportThread::XlsAUDIT, "XlsAUDIT"},
// AuditAuthParam{LogExportThread::XlsAUTH, "XlsAUTH"}
// )
// );本报告由 AI 代码审查工具自动生成 |
Part 8/8 of the deepin-log-viewer unit-test coverage series (single-commit PR; all 8 PRs touch disjoint file sets and are mutually independent).
Files in this PR (8 files, +1445/-26 lines)
tests/src/ut_logsegementexportthread.cpp(new)tests/dbusproxy/ut_userlogaccess.cpp(new)tests/src/ut_logfileparser.cpptests/src/ut_logexportthread.cpptests/src/ut_wtmpparse.cpptests/src/ut_logoocfileparsethread.cpptests/src/ut_logapplication.cpptests/src/ut_logsettings.cppNotes
tests/src//tests/dbusproxy//tests/ut_logviewerplugin/, globbed automatically bytests/CMakeLists.txt(re-run cmake after pulling).Summary by Sourcery
Increase unit-test coverage for log export and file-parsing functionality without modifying production code.
Enhancements:
Tests:
Chores: