From e4b225a3353f2398017409e3b90dc2228f198aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B8=8A?= Date: Mon, 21 Jul 2025 15:32:44 +0800 Subject: [PATCH 1/5] dump trace log when call ams api timeout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘渊 --- bundle.json | 1 + services/backup.cfg | 3 +- services/backup_sa/BUILD.gn | 2 ++ .../backup_sa/include/module_ipc/service.h | 3 ++ .../backup_sa/src/module_ipc/sub_service.cpp | 29 +++++++++++++++++++ .../mock/module_external/bms_adapter_mock.cpp | 1 - tests/unittests/backup_sa/module_ipc/BUILD.gn | 16 ++++++++++ .../backup_sa/module_ipc/service_test.cpp | 4 +-- .../backup_sa/module_ipc/sub_service_test.cpp | 17 +++++++++++ 9 files changed, 72 insertions(+), 4 deletions(-) diff --git a/bundle.json b/bundle.json index a6d9c33f1..662849e8b 100644 --- a/bundle.json +++ b/bundle.json @@ -35,6 +35,7 @@ "hitrace", "hilog", "hisysevent", + "hiview", "ipc", "init", "json", diff --git a/services/backup.cfg b/services/backup.cfg index 4c96571a3..f35b49877 100644 --- a/services/backup.cfg +++ b/services/backup.cfg @@ -13,7 +13,8 @@ "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", "ohos.permission.ACCESS_EXT_SYSTEM_ABILITY", "ohos.permission.CONNECT_BACKUP_EXTENSION", - "ohos.permission.READ_MEDIA" + "ohos.permission.READ_MEDIA", + "ohos.permission.READ_HIVIEW_SYSTEM" ], "permission_acls" : ["ohos.permission.ACCESS_EXT_SYSTEM_ABILITY"] } diff --git a/services/backup_sa/BUILD.gn b/services/backup_sa/BUILD.gn index 4f0cab5c4..21ef49e04 100644 --- a/services/backup_sa/BUILD.gn +++ b/services/backup_sa/BUILD.gn @@ -211,7 +211,9 @@ ohos_shared_library("backup_sa") { "common_event_service:cesfwk_innerkits", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 8bb77e1ad..deb50d87b 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -33,6 +33,7 @@ #include "svc_session_manager.h" #include "system_ability.h" #include "thread_pool.h" +#include "trace_collector_client.h" namespace OHOS::FileManagement::Backup { struct ExtensionMutexInfo { @@ -720,6 +721,7 @@ private: const vector &bundleNames, std::string &oldBackupVersion); void AppStatReportErr(const string &bundleName, const string &func, RadarError err); void SaStatReport(const string &bundleName, const string &func, RadarError err); + void DumpHitrace(); void TotalStart() { if (totalStatistic_ != nullptr) { @@ -789,6 +791,7 @@ private: std::shared_mutex statMapMutex_; std::map> saStatisticMap_; std::map> backupExtOnReleaseMap_; + std::shared_ptr traceCollector_ = nullptr; public: std::map> backupExtMutexMap_; std::map failedBundles_; diff --git a/services/backup_sa/src/module_ipc/sub_service.cpp b/services/backup_sa/src/module_ipc/sub_service.cpp index 7c83fd08f..76c950a2b 100644 --- a/services/backup_sa/src/module_ipc/sub_service.cpp +++ b/services/backup_sa/src/module_ipc/sub_service.cpp @@ -73,6 +73,7 @@ namespace { const int32_t MAX_FILE_READY_REPORT_TIME = 2; const int32_t WAIT_SCANNING_INFO_SEND_TIME = 5; const int ERR_SIZE = -1; +constexpr uint32_t TRACE_PATH_LEN = 50; } // namespace void Service::AppendBundles(const std::vector &bundleNames) @@ -650,11 +651,39 @@ void Service::SaStatReport(const string &bundleName, const string &func, RadarEr saStatistic->ReportSA(func, err); } +void Service::DumpHitrace() +{ + if (traceCollector_ == nullptr) { + traceCollector_ = OHOS::HiviewDFX::UCollectClient::TraceCollector::Create(); + } + if (traceCollector_ == nullptr) { + HILOGE("create trace collector fail"); + return; + } + + HILOGI("start DumpSnapshot!"); + auto dumpRet = traceCollector_->DumpSnapshot(); + if (dumpRet.retCode != OHOS::HiviewDFX::UCollect::UcError::SUCCESS) { + HILOGE("DumpSnapshot fail, errorCode = %{public}d", dumpRet.retCode); + return; + } + std::string dumpRetString = ""; + for (std::string item : dumpRet.data) { + if (item.size() > TRACE_PATH_LEN) { + dumpRetString += item.substr(TRACE_PATH_LEN) + "; "; + } else { + dumpRetString += item + "; "; + } + } + HILOGI("DumpSnapshot succ, output: %{public}s", dumpRetString.c_str()); +} + void Service::ExtConnectDied(const string &callName) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { HILOGI("Begin, bundleName: %{public}s", callName.c_str()); + DumpHitrace(); std::shared_ptr mutexPtr = GetExtensionMutex(callName); if (mutexPtr == nullptr) { HILOGE("extension mutex ptr is nullptr"); diff --git a/tests/mock/module_external/bms_adapter_mock.cpp b/tests/mock/module_external/bms_adapter_mock.cpp index 9694e08bc..1b6f41d44 100644 --- a/tests/mock/module_external/bms_adapter_mock.cpp +++ b/tests/mock/module_external/bms_adapter_mock.cpp @@ -21,7 +21,6 @@ #include "b_json/b_json_entity_extension_config.h" #include "bundle_mgr_client.h" -#include "module_ipc/service.h" #include "module_ipc/svc_session_manager.h" #include "module_sched/sched_scheduler.h" diff --git a/tests/unittests/backup_sa/module_ipc/BUILD.gn b/tests/unittests/backup_sa/module_ipc/BUILD.gn index 3c8a43658..dfe9ccde5 100644 --- a/tests/unittests/backup_sa/module_ipc/BUILD.gn +++ b/tests/unittests/backup_sa/module_ipc/BUILD.gn @@ -53,7 +53,9 @@ ohos_unittest("module_ipc_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", "samgr:samgr_proxy", @@ -129,7 +131,9 @@ ohos_unittest("backup_service_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", @@ -213,7 +217,9 @@ ohos_unittest("backup_service_throw_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", @@ -283,7 +289,9 @@ ohos_unittest("backup_service_session_test") { "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", @@ -340,6 +348,8 @@ ohos_unittest("backup_service_scheduler_test") { "googletest:gmock_main", "googletest:gtest_main", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "jsoncpp:jsoncpp", "safwk:system_ability_fwk", @@ -410,7 +420,9 @@ ohos_unittest("backup_restore_deps_manager_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", @@ -483,7 +495,9 @@ ohos_unittest("backup_service_incremental_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", @@ -565,7 +579,9 @@ ohos_unittest("backup_service_other_test") { "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", + "hitrace:hitrace_dump", "hitrace:hitrace_meter", + "hiview:libucollection_client", "init:libbegetutil", "ipc:ipc_core", "jsoncpp:jsoncpp", diff --git a/tests/unittests/backup_sa/module_ipc/service_test.cpp b/tests/unittests/backup_sa/module_ipc/service_test.cpp index d47502656..e24a4d02e 100644 --- a/tests/unittests/backup_sa/module_ipc/service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_test.cpp @@ -1865,13 +1865,13 @@ HWTEST_F(ServiceTest, SUB_Service_AppendBundlesDetailsBackupSession_0100, testin GTEST_LOG_(INFO) << "1. AppendBundlesDetailsBackupSession fail nullptr"; servicePtr_->session_ = nullptr; int ret = servicePtr_->AppendBundlesDetailsBackupSession(bundleNames, bundleInfos); - EXPECT_EQ(ret, 13900020); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); GTEST_LOG_(INFO) << "2. AppendBundlesDetailsBackupSession fail false"; servicePtr_->session_ = session_; servicePtr_->isOccupyingSession_.store(true); ret = servicePtr_->AppendBundlesDetailsBackupSession(bundleNames, bundleInfos); - EXPECT_EQ(ret, 13900020); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); GTEST_LOG_(INFO) << "3. AppendBundlesDetailsBackupSession succ"; servicePtr_->isOccupyingSession_.store(false); diff --git a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp index da25a5f8e..7a8e52f8e 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -2315,4 +2315,21 @@ HWTEST_F(ServiceTest, SUB_Service_GetCompatibilityInfo_0200, testing::ext::TestS GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by GetCompatibilityInfo."; } GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_GetCompatibilityInfo_0200"; +} + +/** + * @tc.number: SUB_Service_DumpHiTrace_0000 + * @tc.name: SUB_Service_DumpHiTrace_0000 + * @tc.desc: 测试 DumpHiTrace 的正常/异常分支 + * @tc.size: TINY + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: NA + */ +HWTEST_F(ServiceTest, SUB_Service_DumpHiTrace_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_DumpHiTrace_0000"; + service->DumpHitrace(); + EXPECT_NE(service->traceCollector_, nullptr); + GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_DumpHiTrace_0000"; } \ No newline at end of file -- Gitee From 3e7a92839ef3345f4e584ddb442c84dac09553a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B8=8A?= Date: Mon, 21 Jul 2025 16:15:24 +0800 Subject: [PATCH 2/5] fix race condition problem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘渊 --- services/backup_sa/include/module_ipc/service.h | 1 + services/backup_sa/src/module_ipc/sub_service.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index deb50d87b..0a57cb573 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -791,6 +791,7 @@ private: std::shared_mutex statMapMutex_; std::map> saStatisticMap_; std::map> backupExtOnReleaseMap_; + std::shared_mutex traceMutex_; std::shared_ptr traceCollector_ = nullptr; public: std::map> backupExtMutexMap_; diff --git a/services/backup_sa/src/module_ipc/sub_service.cpp b/services/backup_sa/src/module_ipc/sub_service.cpp index 76c950a2b..1aade6aac 100644 --- a/services/backup_sa/src/module_ipc/sub_service.cpp +++ b/services/backup_sa/src/module_ipc/sub_service.cpp @@ -653,6 +653,7 @@ void Service::SaStatReport(const string &bundleName, const string &func, RadarEr void Service::DumpHitrace() { + std::unique_lock traceLock(traceMutex_); if (traceCollector_ == nullptr) { traceCollector_ = OHOS::HiviewDFX::UCollectClient::TraceCollector::Create(); } -- Gitee From 93c694f41acbf8e76af10438fa4f5fbe68070bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B8=8A?= Date: Mon, 21 Jul 2025 16:27:11 +0800 Subject: [PATCH 3/5] fix compile fuzzer problem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘渊 --- test/fuzztest/backupsa_fuzzer/BUILD.gn | 2 ++ .../fuzztest/backupsaappendbundlesbackupsession_fuzzer/BUILD.gn | 2 ++ .../BUILD.gn | 2 ++ test/fuzztest/backupsaappincrementaldone_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupsaappincrementalfileready_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupsagetfilehandle_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupsagetincrementalfilehandle_fuzzer/BUILD.gn | 2 ++ .../backupsagetincrementallocalcapabilities_fuzzer/BUILD.gn | 2 ++ .../backupsainitincrementalbackupsession_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupsapublishincrementalfile_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupsarelease_fuzzer/BUILD.gn | 2 ++ test/fuzztest/backupservicestub_fuzzer/BUILD.gn | 2 ++ 12 files changed, 24 insertions(+) diff --git a/test/fuzztest/backupsa_fuzzer/BUILD.gn b/test/fuzztest/backupsa_fuzzer/BUILD.gn index bce672d81..2d937f227 100644 --- a/test/fuzztest/backupsa_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsa_fuzzer/BUILD.gn @@ -49,6 +49,8 @@ ohos_fuzztest("BackupSaFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsaappendbundlesbackupsession_fuzzer/BUILD.gn b/test/fuzztest/backupsaappendbundlesbackupsession_fuzzer/BUILD.gn index 652bfdfa6..fdd0e1686 100644 --- a/test/fuzztest/backupsaappendbundlesbackupsession_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsaappendbundlesbackupsession_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaAppendBundlesBackupSessionFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsaappendbundlesincrementalbackupsession_fuzzer/BUILD.gn b/test/fuzztest/backupsaappendbundlesincrementalbackupsession_fuzzer/BUILD.gn index cf1c5dbb5..f5a0a346b 100644 --- a/test/fuzztest/backupsaappendbundlesincrementalbackupsession_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsaappendbundlesincrementalbackupsession_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaAppendBundlesIncrementalBackupSessionFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsaappincrementaldone_fuzzer/BUILD.gn b/test/fuzztest/backupsaappincrementaldone_fuzzer/BUILD.gn index e95393c7e..8e69dcf11 100644 --- a/test/fuzztest/backupsaappincrementaldone_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsaappincrementaldone_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaAppIncrementalDoneFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsaappincrementalfileready_fuzzer/BUILD.gn b/test/fuzztest/backupsaappincrementalfileready_fuzzer/BUILD.gn index 265292219..5cb77ed7c 100644 --- a/test/fuzztest/backupsaappincrementalfileready_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsaappincrementalfileready_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaAppIncrementalFileReadyFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsagetfilehandle_fuzzer/BUILD.gn b/test/fuzztest/backupsagetfilehandle_fuzzer/BUILD.gn index 20f539837..f45ade423 100644 --- a/test/fuzztest/backupsagetfilehandle_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsagetfilehandle_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaGetFileHandleFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsagetincrementalfilehandle_fuzzer/BUILD.gn b/test/fuzztest/backupsagetincrementalfilehandle_fuzzer/BUILD.gn index 1e0ebaa3b..e085b973b 100644 --- a/test/fuzztest/backupsagetincrementalfilehandle_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsagetincrementalfilehandle_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaGetIncrementalFileHandleFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsagetincrementallocalcapabilities_fuzzer/BUILD.gn b/test/fuzztest/backupsagetincrementallocalcapabilities_fuzzer/BUILD.gn index 87fd0b5f0..654303084 100644 --- a/test/fuzztest/backupsagetincrementallocalcapabilities_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsagetincrementallocalcapabilities_fuzzer/BUILD.gn @@ -54,6 +54,8 @@ ohos_fuzztest("BackupSaGetIncrementalLocalCapabilitiesFuzzTest") { "data_share:datashare_consumer", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", "storage_service:storage_manager_sa_proxy", diff --git a/test/fuzztest/backupsainitincrementalbackupsession_fuzzer/BUILD.gn b/test/fuzztest/backupsainitincrementalbackupsession_fuzzer/BUILD.gn index cc95ecc27..84d493843 100644 --- a/test/fuzztest/backupsainitincrementalbackupsession_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsainitincrementalbackupsession_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaInitIncrementalBackupSessionFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsapublishincrementalfile_fuzzer/BUILD.gn b/test/fuzztest/backupsapublishincrementalfile_fuzzer/BUILD.gn index c3a3e0469..58a86ab29 100644 --- a/test/fuzztest/backupsapublishincrementalfile_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsapublishincrementalfile_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaPublishIncrementalFileFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupsarelease_fuzzer/BUILD.gn b/test/fuzztest/backupsarelease_fuzzer/BUILD.gn index e2b375306..385e2b26c 100644 --- a/test/fuzztest/backupsarelease_fuzzer/BUILD.gn +++ b/test/fuzztest/backupsarelease_fuzzer/BUILD.gn @@ -52,6 +52,8 @@ ohos_fuzztest("BackupSaReleaseFuzzTest") { "c_utils:utils", "file_api:filemgmt_libn", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] diff --git a/test/fuzztest/backupservicestub_fuzzer/BUILD.gn b/test/fuzztest/backupservicestub_fuzzer/BUILD.gn index c4d813425..5fd5493da 100644 --- a/test/fuzztest/backupservicestub_fuzzer/BUILD.gn +++ b/test/fuzztest/backupservicestub_fuzzer/BUILD.gn @@ -51,6 +51,8 @@ ohos_fuzztest("BackupServiceStubFuzzTest") { "ability_runtime:abilitykit_native", "c_utils:utils", "hilog:libhilog", + "hitrace:hitrace_dump", + "hiview:libucollection_client", "ipc:ipc_core", "safwk:system_ability_fwk", ] -- Gitee From 1f085276986b7e98cc06ce58ca499d7708c84edd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B8=8A?= Date: Tue, 22 Jul 2025 09:21:02 +0800 Subject: [PATCH 4/5] add ut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘渊 --- .../module_ipc/include/trace_collector_mock.h | 38 +++++++++++++++++++ .../backup_sa/module_ipc/service_test.cpp | 36 ++++++++++++++++++ .../backup_sa/module_ipc/sub_service_test.cpp | 17 --------- 3 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 tests/mock/module_ipc/include/trace_collector_mock.h diff --git a/tests/mock/module_ipc/include/trace_collector_mock.h b/tests/mock/module_ipc/include/trace_collector_mock.h new file mode 100644 index 000000000..af6708e5d --- /dev/null +++ b/tests/mock/module_ipc/include/trace_collector_mock.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License") = 0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_FILEMGMT_BACKUP_TRACE_COLLECTOR_MOCK_H +#define OHOS_FILEMGMT_BACKUP_TRACE_COLLECTOR_MOCK_H + +#include + +#include "trace_collector_client.h" + +namespace OHOS::FileManagement::Backup { +using namespace OHOS::HiviewDFX; + +class TraceCollectorMock : public UCollectClient::TraceCollector { +public: + MOCK_METHOD(UCollect::CollectResult, OpenSnapshot, (const std::vector& tagGroups)); + MOCK_METHOD(UCollect::CollectResult>, DumpSnapshot, (UCollect::TraceClient client)); + MOCK_METHOD(UCollect::CollectResult, OpenRecording, (const std::string& tags)); + MOCK_METHOD(UCollect::CollectResult, RecordingOn, ()); + MOCK_METHOD(UCollect::CollectResult>, RecordingOff, ()); + MOCK_METHOD(UCollect::CollectResult, Close, ()); + // use for hap main looper + MOCK_METHOD(UCollect::CollectResult, CaptureDurationTrace, (AppCaller &appCaller)); +}; +} // namespace OHOS::FileManagement::Backup +#endif // OHOS_FILEMGMT_BACKUP_TRACE_COLLECTOR_MOCK_H \ No newline at end of file diff --git a/tests/unittests/backup_sa/module_ipc/service_test.cpp b/tests/unittests/backup_sa/module_ipc/service_test.cpp index e24a4d02e..0b768cfd4 100644 --- a/tests/unittests/backup_sa/module_ipc/service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_test.cpp @@ -26,6 +26,7 @@ #include "service_reverse_mock.h" #include "test_common.h" #include "test_manager.h" +#include "trace_collector_mock.h" #include "service.cpp" #include "sub_service.cpp" @@ -2598,4 +2599,39 @@ HWTEST_F(ServiceTest, Service_Total_Stat_Report, testing::ext::TestSize.Level1) GTEST_LOG_(INFO) << "ServiceTest-end Service_Total_Stat_Report"; } +/** + * @tc.number: SUB_Service_DumpHiTrace_0000 + * @tc.name: SUB_Service_DumpHiTrace_0000 + * @tc.desc: 测试 DumpHiTrace 的正常/异常分支 + * @tc.size: TINY + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: NA + */ +HWTEST_F(ServiceTest, SUB_Service_DumpHiTrace_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_DumpHiTrace_0000"; + GTEST_LOG_(INFO) << "1. test if 1, collector is null"; + service->traceCollector_ = nullptr; + service->DumpHitrace(); + EXPECT_NE(service->traceCollector_, nullptr); + + std::shared_ptr collectorMock = std::make_shared(); + UCollect::CollectResult> result1(); + UCollect::CollectResult> result2(UcError::SUCCESS); + resutl2.data.push_back("123456789012345678901234567890123456789012345678901234567890"); + UCollect::CollectResult> result3(UcError::SUCCESS); + resutl3.data.push_back("1234567890"); + EXPECT_CALL(*collectorMock, DumpSnapshot(_)).WillOnce(Return(result1)).WillOnce(Return(result2)) + .WillOnce(Return(result3)); + service->traceCollecotr_ = collecotrMock; + GTEST_LOG_(INFO) << "2. test if 3, dump return fail"; + service->DumpHitrace(); + GTEST_LOG_(INFO) << "3. test if 4, dump return long data"; + service->DumpHitrace(); + GTEST_LOG_(INFO) << "4. test else, dump return short data"; + service->DumpHitrace(); + EXPECT_NE(service->traceCollector_, nullptr); + GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_DumpHiTrace_0000"; +} } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp index 7a8e52f8e..da25a5f8e 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -2315,21 +2315,4 @@ HWTEST_F(ServiceTest, SUB_Service_GetCompatibilityInfo_0200, testing::ext::TestS GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by GetCompatibilityInfo."; } GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_GetCompatibilityInfo_0200"; -} - -/** - * @tc.number: SUB_Service_DumpHiTrace_0000 - * @tc.name: SUB_Service_DumpHiTrace_0000 - * @tc.desc: 测试 DumpHiTrace 的正常/异常分支 - * @tc.size: TINY - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: NA - */ -HWTEST_F(ServiceTest, SUB_Service_DumpHiTrace_0000, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_DumpHiTrace_0000"; - service->DumpHitrace(); - EXPECT_NE(service->traceCollector_, nullptr); - GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_DumpHiTrace_0000"; } \ No newline at end of file -- Gitee From 642c9dbe409f2681ec4ed2dcf6172f1803742d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B8=8A?= Date: Thu, 24 Jul 2025 14:43:20 +0800 Subject: [PATCH 5/5] fix compile problem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘渊 --- .../module_ipc/include/trace_collector_mock.h | 14 +++++----- .../module_ipc/svc_session_manager_mock.cpp | 2 +- .../backup_sa/module_ipc/service_test.cpp | 26 +++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/tests/mock/module_ipc/include/trace_collector_mock.h b/tests/mock/module_ipc/include/trace_collector_mock.h index af6708e5d..19c92e873 100644 --- a/tests/mock/module_ipc/include/trace_collector_mock.h +++ b/tests/mock/module_ipc/include/trace_collector_mock.h @@ -25,14 +25,14 @@ using namespace OHOS::HiviewDFX; class TraceCollectorMock : public UCollectClient::TraceCollector { public: - MOCK_METHOD(UCollect::CollectResult, OpenSnapshot, (const std::vector& tagGroups)); - MOCK_METHOD(UCollect::CollectResult>, DumpSnapshot, (UCollect::TraceClient client)); - MOCK_METHOD(UCollect::CollectResult, OpenRecording, (const std::string& tags)); - MOCK_METHOD(UCollect::CollectResult, RecordingOn, ()); - MOCK_METHOD(UCollect::CollectResult>, RecordingOff, ()); - MOCK_METHOD(UCollect::CollectResult, Close, ()); + MOCK_METHOD(CollectResult, OpenSnapshot, (const std::vector& tagGroups)); + MOCK_METHOD(CollectResult>, DumpSnapshot, (UCollect::TraceClient client)); + MOCK_METHOD(CollectResult, OpenRecording, (const std::string& tags)); + MOCK_METHOD(CollectResult, RecordingOn, ()); + MOCK_METHOD(CollectResult>, RecordingOff, ()); + MOCK_METHOD(CollectResult, Close, ()); // use for hap main looper - MOCK_METHOD(UCollect::CollectResult, CaptureDurationTrace, (AppCaller &appCaller)); + MOCK_METHOD(CollectResult, CaptureDurationTrace, (UCollectClient::AppCaller &appCaller)); }; } // namespace OHOS::FileManagement::Backup #endif // OHOS_FILEMGMT_BACKUP_TRACE_COLLECTOR_MOCK_H \ No newline at end of file diff --git a/tests/mock/module_ipc/svc_session_manager_mock.cpp b/tests/mock/module_ipc/svc_session_manager_mock.cpp index c1862dc6c..13b0c6d68 100644 --- a/tests/mock/module_ipc/svc_session_manager_mock.cpp +++ b/tests/mock/module_ipc/svc_session_manager_mock.cpp @@ -261,7 +261,7 @@ void SvcSessionManager::AppendBundles(const vector &bundleNames, vec BackupExtInfo info {}; info.backupExtName = BUNDLE_NAME; impl_.backupExtNameMap.insert(make_pair(BUNDLE_NAME, info)); - for (auto bundleName : bundleNames) { + for (const std::string& bundleName : bundleNames) { if (bundleName == BUNDLE_NAME_FALSE) { failedBundles.push_back(BUNDLE_NAME_FALSE); } diff --git a/tests/unittests/backup_sa/module_ipc/service_test.cpp b/tests/unittests/backup_sa/module_ipc/service_test.cpp index 0b768cfd4..c46c5749b 100644 --- a/tests/unittests/backup_sa/module_ipc/service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_test.cpp @@ -2612,26 +2612,26 @@ HWTEST_F(ServiceTest, SUB_Service_DumpHiTrace_0000, testing::ext::TestSize.Level { GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_DumpHiTrace_0000"; GTEST_LOG_(INFO) << "1. test if 1, collector is null"; - service->traceCollector_ = nullptr; - service->DumpHitrace(); - EXPECT_NE(service->traceCollector_, nullptr); + servicePtr_->traceCollector_ = nullptr; + servicePtr_->DumpHitrace(); + EXPECT_NE(servicePtr_->traceCollector_, nullptr); std::shared_ptr collectorMock = std::make_shared(); - UCollect::CollectResult> result1(); - UCollect::CollectResult> result2(UcError::SUCCESS); - resutl2.data.push_back("123456789012345678901234567890123456789012345678901234567890"); - UCollect::CollectResult> result3(UcError::SUCCESS); - resutl3.data.push_back("1234567890"); + CollectResult> result1; + CollectResult> result2(UCollect::UcError::SUCCESS); + result2.data.push_back("123456789012345678901234567890123456789012345678901234567890"); + CollectResult> result3(UCollect::UcError::SUCCESS); + result3.data.push_back("1234567890"); EXPECT_CALL(*collectorMock, DumpSnapshot(_)).WillOnce(Return(result1)).WillOnce(Return(result2)) .WillOnce(Return(result3)); - service->traceCollecotr_ = collecotrMock; + servicePtr_->traceCollector_ = collectorMock; GTEST_LOG_(INFO) << "2. test if 3, dump return fail"; - service->DumpHitrace(); + servicePtr_->DumpHitrace(); GTEST_LOG_(INFO) << "3. test if 4, dump return long data"; - service->DumpHitrace(); + servicePtr_->DumpHitrace(); GTEST_LOG_(INFO) << "4. test else, dump return short data"; - service->DumpHitrace(); - EXPECT_NE(service->traceCollector_, nullptr); + servicePtr_->DumpHitrace(); + EXPECT_NE(servicePtr_->traceCollector_, nullptr); GTEST_LOG_(INFO) << "ServiceTest-end SUB_Service_DumpHiTrace_0000"; } } // namespace OHOS::FileManagement::Backup \ No newline at end of file -- Gitee