From e62c0a3f1a187573800658ab4e3d6c849459ffac Mon Sep 17 00:00:00 2001 From: BrainL Date: Sat, 14 Sep 2024 12:51:39 +0000 Subject: [PATCH 1/2] update tests/mock/module_external/bms_adapter_mock.cpp. Signed-off-by: BrainL --- tests/mock/module_external/bms_adapter_mock.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/mock/module_external/bms_adapter_mock.cpp b/tests/mock/module_external/bms_adapter_mock.cpp index 2a1232d03..f8e51de98 100644 --- a/tests/mock/module_external/bms_adapter_mock.cpp +++ b/tests/mock/module_external/bms_adapter_mock.cpp @@ -80,4 +80,14 @@ bool BundleMgrAdapter::IsUser0BundleName(std::string bundleName, int32_t userId) { return true; } + +vector BundleMgrAdapter::GetBundleInfosForAppend( + const vector &incrementalDataList, int32_t userId) +{ + vector bundleInfos; + bundleInfos.emplace_back( + BJsonEntityCaps::BundleInfo {"com.example.app2backup", 0, {}, {}, 0, 0, true, false, + "com.example.app2backup"}); + return bundleInfos; +} } // namespace OHOS::FileManagement::Backup -- Gitee From 45634fa6feb07ebea894d1a73aa1f286e7c6f2e5 Mon Sep 17 00:00:00 2001 From: libuyan Date: Wed, 16 Oct 2024 17:25:47 +0800 Subject: [PATCH 2/2] backup report err file info with process --- .../native/backup_ext/include/ext_extension.h | 4 +++ .../native/backup_ext/include/tar_file.h | 9 ++--- .../native/backup_ext/src/ext_extension.cpp | 30 +++++++++++++--- frameworks/native/backup_ext/src/tar_file.cpp | 25 ++++++++----- .../include/module_external/bms_adapter.h | 3 ++ .../backup_sa/include/module_ipc/service.h | 4 +++ .../src/module_external/bms_adapter.cpp | 12 +++++++ services/backup_sa/src/module_ipc/service.cpp | 15 ++++++-- .../src/module_ipc/service_incremental.cpp | 28 +++++++++------ tests/unittests/backup_ext/tar_file_test.cpp | 35 +++++++++++++++---- .../unittests/backup_ext/untar_file_test.cpp | 20 ++++++++--- utils/include/b_jsonutil/b_jsonutil.h | 12 +++++++ utils/src/b_jsonutil/b_jsonutil.cpp | 35 +++++++++++++++++++ 13 files changed, 191 insertions(+), 41 deletions(-) diff --git a/frameworks/native/backup_ext/include/ext_extension.h b/frameworks/native/backup_ext/include/ext_extension.h index 41b9b1ff8..3022da733 100644 --- a/frameworks/native/backup_ext/include/ext_extension.h +++ b/frameworks/native/backup_ext/include/ext_extension.h @@ -266,6 +266,9 @@ private: int32_t GetOnStartTimeCost(); bool SetStagingPathProperties(); + std::function ReportErrFileByProc(wptr obj, + BackupRestoreScenario scenario); + private: std::shared_mutex lock_; std::shared_ptr extension_; @@ -292,6 +295,7 @@ private: bool isClearData_ {true}; AppRadar::DoRestoreInfo radarRestoreInfo_ { 0 }; OHOS::ThreadPool onProcessTaskPool_; + BackupRestoreScenario curScenario_; }; } // namespace OHOS::FileManagement::Backup diff --git a/frameworks/native/backup_ext/include/tar_file.h b/frameworks/native/backup_ext/include/tar_file.h index 4cfdb490a..2d19e241e 100644 --- a/frameworks/native/backup_ext/include/tar_file.h +++ b/frameworks/native/backup_ext/include/tar_file.h @@ -86,7 +86,8 @@ public: bool Packet(const std::vector &srcFiles, const std::string &tarFileName, const std::string &pkPath, - TarMap &tarMap); + TarMap &tarMap, + std::function reportCb); /** * @brief set packet mode @@ -108,7 +109,7 @@ private: * @return true 遍历成功 * @return false 遍历失败 */ - bool TraversalFile(std::string &fileName); + bool TraversalFile(std::string &fileName, int &err); /** * @brief add files to the tar package @@ -116,7 +117,7 @@ private: * @param filename 文件名 * @param st 文件参数结构体 */ - bool AddFile(std::string &fileName, const struct stat &st); + bool AddFile(std::string &fileName, const struct stat &st, int &err); /** * @brief write files to content @@ -124,7 +125,7 @@ private: * @param filename 文件名 * @param size 文件大小 */ - bool WriteFileContent(const std::string &fileName, off_t size); + bool WriteFileContent(const std::string &fileName, off_t size, int &err); /** * @brief split write diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index 57d447ebb..386dd4b0e 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -617,6 +617,22 @@ static ErrCode TarFileReady(const TarMap &tarFileInfo, sptr proxy) return ret; } +std::function BackupExtExtension::ReportErrFileByProc(wptr obj, + BackupRestoreScenario scenario) +{ + return [obj, scenario](std::string msg, int err) { + auto extPtr = obj.promote(); + if (extPtr == nullptr) { + HILOGE("ReportErr ExtPtr is empty."); + return; + } + string jsonInfo; + BJsonUtil::BuildOnProcessErrInfo(jsonInfo, msg, err); + HILOGI("ReportErr Will notify err info."); + extPtr->ReportAppProcessInfo(jsonInfo, scenario); + }; +} + void BackupExtExtension::DoPacket(const map &srcFiles, TarMap &tar, sptr proxy) { HILOGI("DoPacket begin, infos count: %{public}zu", srcFiles.size()); @@ -627,13 +643,14 @@ void BackupExtExtension::DoPacket(const map &srcFiles, TarMap &t TarFile::GetInstance().SetPacketMode(true); // 设置下打包模式 auto startTime = std::chrono::system_clock::now(); int fdNum = 0; + auto reportCb = ReportErrFileByProc(wptr {this}, curScenario_); for (auto small : srcFiles) { totalSize += small.second; fileCount += 1; packFiles.emplace_back(small.first); if (totalSize >= BConstants::DEFAULT_SLICE_SIZE || fileCount >= BConstants::MAX_FILE_COUNT) { TarMap tarMap {}; - TarFile::GetInstance().Packet(packFiles, "part", path, tarMap); + TarFile::GetInstance().Packet(packFiles, "part", path, tarMap, reportCb); tar.insert(tarMap.begin(), tarMap.end()); // 执行tar包回传功能 WaitToSendFd(startTime, fdNum); @@ -648,7 +665,7 @@ void BackupExtExtension::DoPacket(const map &srcFiles, TarMap &t if (fileCount > 0) { // 打包回传 TarMap tarMap {}; - TarFile::GetInstance().Packet(packFiles, "part", path, tarMap); + TarFile::GetInstance().Packet(packFiles, "part", path, tarMap, reportCb); TarFileReady(tarMap, proxy); fdNum = 1; WaitToSendFd(startTime, fdNum); @@ -1286,6 +1303,7 @@ void BackupExtExtension::AsyncTaskRestoreForUpgrade() return; } HILOGI("On restore, start ext timer end."); + ptr->curScenario_ = BackupRestoreScenario::FULL_RESTORE; ptr->StartOnProcessTaskThread(obj, BackupRestoreScenario::FULL_RESTORE); auto callBackup = ptr->OnRestoreCallback(obj); auto callBackupEx = ptr->OnRestoreExCallback(obj); @@ -1338,6 +1356,7 @@ void BackupExtExtension::AsyncTaskIncrementalRestoreForUpgrade() return; } HILOGI("On incrementalRestore, start ext timer end."); + ptr->curScenario_ = BackupRestoreScenario::INCREMENTAL_RESTORE; ptr->StartOnProcessTaskThread(obj, BackupRestoreScenario::INCREMENTAL_RESTORE); auto callBackup = ptr->IncreOnRestoreCallback(obj); auto callBackupEx = ptr->IncreOnRestoreExCallback(obj); @@ -1485,6 +1504,7 @@ void BackupExtExtension::AsyncTaskOnBackup() BExcepUltils::BAssert(ptr, BError::Codes::EXT_BROKEN_FRAMEWORK, "Ext extension handle have been released"); BExcepUltils::BAssert(ptr->extension_, BError::Codes::EXT_INVAL_ARG, "Extension handle have been released"); try { + ptr->curScenario_ = BackupRestoreScenario::FULL_BACKUP; ptr->StartOnProcessTaskThread(obj, BackupRestoreScenario::FULL_BACKUP); auto callBackup = ptr->OnBackupCallback(obj); auto callBackupEx = ptr->OnBackupExCallback(obj); @@ -1867,6 +1887,7 @@ void BackupExtExtension::AsyncTaskOnIncrementalBackup() BExcepUltils::BAssert(ptr, BError::Codes::EXT_BROKEN_FRAMEWORK, "Ext extension handle have been released"); BExcepUltils::BAssert(ptr->extension_, BError::Codes::EXT_INVAL_ARG, "Extension handle have been released"); try { + ptr->curScenario_ = BackupRestoreScenario::INCREMENTAL_BACKUP; ptr->StartOnProcessTaskThread(obj, BackupRestoreScenario::INCREMENTAL_BACKUP); auto callBackup = ptr->IncOnBackupCallback(obj); auto callBackupEx = ptr->IncOnBackupExCallback(obj); @@ -1918,6 +1939,7 @@ void BackupExtExtension::IncrementalPacket(const vector & auto startTime = std::chrono::system_clock::now(); int fdNum = 0; string partName = GetIncrmentPartName(); + auto reportCb = ReportErrFileByProc(wptr {this}, curScenario_); for (auto small : infos) { totalSize += static_cast(small.size); fileCount += 1; @@ -1925,7 +1947,7 @@ void BackupExtExtension::IncrementalPacket(const vector & tarInfos.emplace_back(small); if (totalSize >= BConstants::DEFAULT_SLICE_SIZE || fileCount >= BConstants::MAX_FILE_COUNT) { TarMap tarMap {}; - TarFile::GetInstance().Packet(packFiles, partName, path, tarMap); + TarFile::GetInstance().Packet(packFiles, partName, path, tarMap, reportCb); tar.insert(tarMap.begin(), tarMap.end()); // 执行tar包回传功能 WaitToSendFd(startTime, fdNum); @@ -1941,7 +1963,7 @@ void BackupExtExtension::IncrementalPacket(const vector & if (fileCount > 0) { // 打包回传 TarMap tarMap {}; - TarFile::GetInstance().Packet(packFiles, partName, path, tarMap); + TarFile::GetInstance().Packet(packFiles, partName, path, tarMap, reportCb); IncrementalTarFileReady(tarMap, tarInfos, proxy); fdNum = 1; WaitToSendFd(startTime, fdNum); diff --git a/frameworks/native/backup_ext/src/tar_file.cpp b/frameworks/native/backup_ext/src/tar_file.cpp index c4c8be795..a8ea73733 100644 --- a/frameworks/native/backup_ext/src/tar_file.cpp +++ b/frameworks/native/backup_ext/src/tar_file.cpp @@ -51,7 +51,8 @@ TarFile &TarFile::GetInstance() return instance; } -bool TarFile::Packet(const vector &srcFiles, const string &tarFileName, const string &pkPath, TarMap &tarMap) +bool TarFile::Packet(const vector &srcFiles, const string &tarFileName, const string &pkPath, TarMap &tarMap, + std::function reportCb) { if (tarFileName.empty() || pkPath.empty()) { HILOGE("Invalid parameter"); @@ -70,9 +71,14 @@ bool TarFile::Packet(const vector &srcFiles, const string &tarFileName, size_t index = 0; for (const auto &filePath : srcFiles) { + int err = 0; rootPath_ = filePath; - if (!TraversalFile(rootPath_)) { - HILOGE("Failed to traversal file, file path is:%{public}s", GetAnonyPath(filePath).c_str()); + if (!TraversalFile(rootPath_, err)) { + HILOGE("ReportErr Failed to traversal file, file path is:%{public}s, err = %{public}d", + GetAnonyPath(filePath).c_str(), err); + if (err != EACCES) { + reportCb("", err); + } } index++; if (index >= WAIT_INDEX) { @@ -94,9 +100,10 @@ bool TarFile::Packet(const vector &srcFiles, const string &tarFileName, return true; } -bool TarFile::TraversalFile(string &filePath) +bool TarFile::TraversalFile(string &filePath, int &err) { if (access(filePath.c_str(), F_OK) != 0) { + err = errno; HILOGE("File path does not exists, err = %{public}d", errno); return false; } @@ -108,10 +115,11 @@ bool TarFile::TraversalFile(string &filePath) return false; } if (lstat(filePath.c_str(), &curFileStat) != 0) { + err = errno; HILOGE("Failed to lstat, err = %{public}d", errno); return false; } - if (!AddFile(filePath, curFileStat)) { + if (!AddFile(filePath, curFileStat, err)) { HILOGE("Failed to add file to tar package, file path is:%{public}s", GetAnonyPath(filePath).c_str()); return false; } @@ -250,7 +258,7 @@ static bool ReadyHeader(TarHeader &hdr, const string &fileName) return true; } -bool TarFile::AddFile(string &fileName, const struct stat &st) +bool TarFile::AddFile(string &fileName, const struct stat &st, int &err) { HILOGD("tar file %{public}s", fileName.c_str()); currentFileName_ = fileName; @@ -286,7 +294,7 @@ bool TarFile::AddFile(string &fileName, const struct stat &st) return false; } // write src file content to tar file - if (!WriteFileContent(fileName, st.st_size)) { + if (!WriteFileContent(fileName, st.st_size, err)) { HILOGE("Failed to write file content"); return false; } @@ -294,10 +302,11 @@ bool TarFile::AddFile(string &fileName, const struct stat &st) return true; } -bool TarFile::WriteFileContent(const string &fileName, off_t size) +bool TarFile::WriteFileContent(const string &fileName, off_t size, int &err) { int fd = open(fileName.c_str(), O_RDONLY | O_CLOEXEC); if (fd < 0) { + err = errno; HILOGE("Failed to open file %{public}s, err = %{public}d", fileName.data(), errno); return false; } diff --git a/services/backup_sa/include/module_external/bms_adapter.h b/services/backup_sa/include/module_external/bms_adapter.h index 4e94ebfea..5f2dc4497 100644 --- a/services/backup_sa/include/module_external/bms_adapter.h +++ b/services/backup_sa/include/module_external/bms_adapter.h @@ -67,6 +67,9 @@ public: static void GetBundleInfoForSA(std::string bundleName, std::vector &bundleInfos); static bool IsUser0BundleName(std::string bundleName, int32_t userId); + + static std::vector GetBundleInfosForAppend( + const std::vector &incrementalDataList, int32_t userId); private: static bool GetCurBundleExtenionInfo(AppExecFwk::BundleInfo &installedBundle, const std::string &bundleName, std::vector &extensionInfos, sptr bms, diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 040974d2b..1d6c84789 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -461,6 +461,10 @@ private: const std::string &bundleName, const ErrCode ret); void ReleaseOnException(); + + vector MakeDetailList(const vector &bundleNames); + + vector GetBundleNameByDetails(const std::vector &bundlesToBackup); private: static sptr instance_; static std::mutex instanceLock_; diff --git a/services/backup_sa/src/module_external/bms_adapter.cpp b/services/backup_sa/src/module_external/bms_adapter.cpp index 59b73f550..981c6cc86 100644 --- a/services/backup_sa/src/module_external/bms_adapter.cpp +++ b/services/backup_sa/src/module_external/bms_adapter.cpp @@ -516,4 +516,16 @@ bool BundleMgrAdapter::IsUser0BundleName(std::string bundleName, int32_t userId) HILOGI("bundleName:%{public}s is not zero user bundle", bundleName.c_str()); return false; } + +vector BundleMgrAdapter::GetBundleInfosForAppend(const std::vector &list, + int32_t userId) +{ + auto bundleInfos = BundleMgrAdapter::GetBundleInfosForIncremental(list, userId); + for (auto const &info : list) { + if (SAUtils::IsSABundleName(info.bundleName)) { + GetBundleInfoForSA(info.bundleName, bundleInfos); + } + } + return bundleInfos; +} } // namespace OHOS::FileManagement::Backup diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 71c623458..35a9e2c67 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -391,7 +391,6 @@ static vector GetRestoreBundleNames(UniqueFd fd, auto cache = cachedEntity.Structuralize(); auto bundleInfos = cache.GetBundleInfos(); if (!bundleInfos.size()) { - HILOGE("GetRestoreBundleNames bundleInfos is empty."); throw BError(BError::Codes::SA_INVAL_ARG, "Json entity caps is empty"); } HILOGI("restoreInfos size is:%{public}zu", restoreInfos.size()); @@ -639,6 +638,14 @@ void Service::SetCurrentSessProperties(BJsonEntityCaps::BundleInfo &info, } } +vector Service::MakeDetailList(const vector &bundleNames) +{ + vector bundleDetails {}; + for (auto bundleName : bundleNames) { + bundleDetails.emplace_back(BIncrementalData {bundleName, 0}); + } + return bundleDetails; +} ErrCode Service::AppendBundlesBackupSession(const vector &bundleNames) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); @@ -649,7 +656,8 @@ ErrCode Service::AppendBundlesBackupSession(const vector &bundleName } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 VerifyCaller(IServiceReverse::Scenario::BACKUP); - auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + auto bundleDetails = MakeDetailList(bundleNames); + auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundleDetails, session_->GetSessionUserId()); session_->AppendBundles(bundleNames); SetCurrentBackupSessProperties(bundleNames, session_->GetSessionUserId()); for (auto info : backupInfos) { @@ -698,7 +706,8 @@ ErrCode Service::AppendBundlesDetailsBackupSession(const vector &bun std::map> bundleNameDetailMap = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, session_->GetSessionUserId(), isClearDataFlags); - auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + auto bundleDetails = MakeDetailList(bundleNames); + auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundleDetails, session_->GetSessionUserId()); session_->AppendBundles(bundleNames); for (auto info : backupInfos) { SetCurrentSessProperties(info, isClearDataFlags); diff --git a/services/backup_sa/src/module_ipc/service_incremental.cpp b/services/backup_sa/src/module_ipc/service_incremental.cpp index 3d9c144dc..d557fec8a 100644 --- a/services/backup_sa/src/module_ipc/service_incremental.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental.cpp @@ -249,6 +249,15 @@ ErrCode Service::InitIncrementalBackupSession(sptr remote) } } +vector Service::GetBundleNameByDetails(const std::vector &bundlesToBackup) +{ + vector bundleNames {}; + for (auto bundle : bundlesToBackup) { + bundleNames.emplace_back(bundle.bundleName); + } + return bundleNames; +} + ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vector &bundlesToBackup) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); @@ -259,15 +268,13 @@ ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vectorIncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 VerifyCaller(IServiceReverse::Scenario::BACKUP); - vector bundleNames {}; - for (auto &bundle : bundlesToBackup) { - bundleNames.emplace_back(bundle.bundleName); - } - auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + vector bundleNames = GetBundleNameByDetails(bundlesToBackup); + auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundlesToBackup, + session_->GetSessionUserId()); session_->AppendBundles(bundleNames); SetCurrentBackupSessProperties(bundleNames, session_->GetSessionUserId()); for (auto info : backupInfos) { - session_->SetBundleDataSize(info.name, info.spaceOccupied); + session_->SetBundleDataSize(info.name, info.increSpaceOccupied); session_->SetBackupExtName(info.name, info.extensionName); if (info.allToBackup == false) { session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted( @@ -303,19 +310,18 @@ ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vectorIncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 VerifyCaller(IServiceReverse::Scenario::BACKUP); - vector bundleNames {}; - for (auto &bundle : bundlesToBackup) { - bundleNames.emplace_back(bundle.bundleName); - } + vector bundleNames = GetBundleNameByDetails(bundlesToBackup); std::vector bundleNamesOnly; std::map isClearDataFlags; std::map> bundleNameDetailMap = BJsonUtil::BuildBundleInfos(bundleNames, infos, bundleNamesOnly, session_->GetSessionUserId(), isClearDataFlags); - auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundlesToBackup, + session_->GetSessionUserId()); session_->AppendBundles(bundleNames); for (auto info : backupInfos) { SetCurrentSessProperties(info, isClearDataFlags); + session_->SetBundleDataSize(info.name, info.increSpaceOccupied); if (info.allToBackup == false) { session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted( BError(BError::Codes::SA_FORBID_BACKUP_RESTORE), info.name); diff --git a/tests/unittests/backup_ext/tar_file_test.cpp b/tests/unittests/backup_ext/tar_file_test.cpp index 5e8b37785..8e09d4569 100644 --- a/tests/unittests/backup_ext/tar_file_test.cpp +++ b/tests/unittests/backup_ext/tar_file_test.cpp @@ -101,7 +101,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0100, testing::ext::TestSize.Level1) string tarFileName = ""; string pkPath = ""; TarMap tarMap; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { ++ return; ++ }; ++ bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(tarMap.empty()); EXPECT_FALSE(ret); } catch (...) { @@ -136,7 +139,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0200, testing::ext::TestSize.Level1) TarMap tarMap; string tarFileName = "part"; string pkPath = root; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(ret); EXPECT_EQ(tarMap.size(), 1); ClearCache(); @@ -172,7 +178,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0300, testing::ext::TestSize.Level1) string pkPath = root; string tarFileName = "part"; TarMap tarMap; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(ret); EXPECT_EQ(tarMap.size(), 1); ClearCache(); @@ -200,7 +209,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0400, testing::ext::TestSize.Level1) string tarFileName = "part"; string pkPath = "/data/storage/el2/backup/backup"; TarMap tarMap; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_FALSE(ret); EXPECT_TRUE(tarMap.empty()); } catch (...) { @@ -241,7 +253,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0500, testing::ext::TestSize.Level1) string tarFileName = "part"; string pkPath = root; TarMap tarMap; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(ret); EXPECT_EQ(tarMap.size(), 1); ClearCache(); @@ -284,7 +299,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0600, testing::ext::TestSize.Level1) TarMap tarMap; string tarFileName = "part"; string pkPath = root; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(ret); EXPECT_EQ(tarMap.size(), 2); ClearCache(); @@ -332,7 +350,10 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0700, testing::ext::TestSize.Level1) string tarFileName = "part"; string pkPath = root; TarMap tarMap; - bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap); + auto reportCb = [](std::string path, int err) { + return; + }; + bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(ret); EXPECT_EQ(tarMap.size(), 2); ClearCache(); diff --git a/tests/unittests/backup_ext/untar_file_test.cpp b/tests/unittests/backup_ext/untar_file_test.cpp index 9d79edb43..3da519295 100644 --- a/tests/unittests/backup_ext/untar_file_test.cpp +++ b/tests/unittests/backup_ext/untar_file_test.cpp @@ -273,7 +273,10 @@ HWTEST_F(UntarFileTest, SUB_Untar_File_UnPacket_0500, testing::ext::TestSize.Lev vector smallFiles; smallFiles.emplace_back(aFile); smallFiles.emplace_back(bFile); - TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap); ++ auto reportCb = [](std::string msg, int err) { ++ return; ++ }; ++ TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap, reportCb); string rootPath(root); int ret = UntarFile::GetInstance().UnPacket(tarFile, rootPath); @@ -323,7 +326,10 @@ HWTEST_F(UntarFileTest, SUB_Untar_File_IncrementalUnPacket_0100, testing::ext::T vector smallFiles; smallFiles.emplace_back(aFile); smallFiles.emplace_back(bFile); - TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap); + auto reportCb = [](std::string msg, int err) { + return; + }; + TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap, reportCb); string tarFile = root + "/test.0.tar"; string rootPath(root); @@ -395,7 +401,10 @@ HWTEST_F(UntarFileTest, SUB_Untar_File_IncrementalUnPacket_0300, testing::ext::T TarMap tarMap {}; vector smallFiles; smallFiles.emplace_back(aFile); - TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap); + auto reportCb = [](std::string msg, int err) { + return; + }; + TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap, reportCb); string tarFile = root + "/test.0.tar"; string rootPath(root); @@ -451,7 +460,10 @@ HWTEST_F(UntarFileTest, SUB_Untar_File_IncrementalUnPacket_0400, testing::ext::T vector smallFiles; smallFiles.emplace_back(aFile); smallFiles.emplace_back(bFile); - TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap); + auto reportCb = [](std::string msg, int err) { + return; + }; + TarFile::GetInstance().Packet(smallFiles, "test", root, tarMap, reportCb); string tarFile = root + "/test.0.tar"; string rootPath(root); diff --git a/utils/include/b_jsonutil/b_jsonutil.h b/utils/include/b_jsonutil/b_jsonutil.h index 910a19704..075816580 100644 --- a/utils/include/b_jsonutil/b_jsonutil.h +++ b/utils/include/b_jsonutil/b_jsonutil.h @@ -128,6 +128,18 @@ public: */ static bool BuildOnProcessRetInfo(std::string &jsonStr, std::string onProcessRet); + /** + * @brief 组建App进度返回的信息 + * + * @param reportInfo 组建结果 + * @param path 报错文件 + * @param err 错误码 + * + * @return 是否组建成功 + * + */ + static bool BuildOnProcessErrInfo(std::string &reportInfo, std::string path, int err); + /** * @brief 构建包含userId的detailInfo * diff --git a/utils/src/b_jsonutil/b_jsonutil.cpp b/utils/src/b_jsonutil/b_jsonutil.cpp index 7e4f56b55..f3e55f4f1 100644 --- a/utils/src/b_jsonutil/b_jsonutil.cpp +++ b/utils/src/b_jsonutil/b_jsonutil.cpp @@ -381,6 +381,41 @@ bool OHOS::FileManagement::Backup::BJsonUtil::BuildOnProcessRetInfo(std::string return true; } +bool OHOS::FileManagement::Backup::BJsonUtil::BuildOnProcessErrInfo(std::string &reportInfo, std::string path, int err) +{ + cJSON *info = cJSON_CreateObject(); + if (info == nullptr) { + return false; + } + cJSON *item = cJSON_CreateObject(); + if (item == nullptr) { + cJSON_Delete(info); + return false; + } + cJSON *errInfoJs = cJSON_CreateObject(); + if (errInfoJs == nullptr) { + cJSON_Delete(info); + cJSON_Delete(item); + return false; + } + std::string errStr = std::to_string(err); + std::string timeInfo = std::to_string(TimeUtils::GetTimeS()); + cJSON_AddStringToObject(errInfoJs, "errorCode", errStr.c_str()); + cJSON_AddStringToObject(errInfoJs, "errorMessage", path.c_str()); + cJSON_AddStringToObject(item, "timeInfo", timeInfo.c_str()); + cJSON_AddItemToObject(item, "errorInfo", errInfoJs); + cJSON_AddItemToObject(info, "processResult", item); + char *data = cJSON_Print(info); + if (data == nullptr) { + cJSON_Delete(info); + return false; + } + reportInfo = std::string(data); + cJSON_Delete(info); + cJSON_free(data); + return true; +} + bool OHOS::FileManagement::Backup::BJsonUtil::BuildBundleInfoJson(int32_t userId, string &detailInfo) { cJSON *root = cJSON_CreateObject(); -- Gitee