From 0aefa313fd1bed6a49335ce8bec48805c65dfcd7 Mon Sep 17 00:00:00 2001 From: chensihan Date: Wed, 23 Oct 2024 15:36:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chensihan --- .../native/backup_ext/include/ext_extension.h | 65 +-- .../backup_ext/src/sub_ext_extension.cpp | 154 +++--- tests/unittests/backup_ext/tar_file_test.cpp | 7 + .../module_ipc/service_reverse_proxy_test.cpp | 88 +++ .../module_ipc/svc_session_manager_test.cpp | 121 +++-- tests/unittests/backup_utils/BUILD.gn | 1 + .../b_jsonutil/b_jsonutil_test.cpp | 511 +++++++++++++++++- utils/include/b_json/b_json_entity_caps.h | 11 +- 8 files changed, 788 insertions(+), 170 deletions(-) diff --git a/frameworks/native/backup_ext/include/ext_extension.h b/frameworks/native/backup_ext/include/ext_extension.h index 5b0fa4c78..cf8c1ea6e 100644 --- a/frameworks/native/backup_ext/include/ext_extension.h +++ b/frameworks/native/backup_ext/include/ext_extension.h @@ -4,7 +4,7 @@ * 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 + * 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, @@ -38,8 +38,9 @@ #include "untar_file.h" namespace OHOS::FileManagement::Backup { -using CompareFilesResult = - tuple, map, map>; +using CompareFilesResult = tuple, + map, + map>; class BackupExtExtension : public ExtExtensionStub { public: UniqueFd GetFileHandle(const std::string &fileName, int32_t &errCode) override; @@ -82,48 +83,49 @@ public: } private: - /* * + /** * @brief verify caller uid * */ void VerifyCaller(); - /* * + /** * @brief backup * * @param usrConfig user configure */ int DoBackup(const BJsonEntityExtensionConfig &usrConfig); - /* * + /** * @brief restore * * @param fileName name of the file that to be untar */ int DoRestore(const string &fileName, const off_t fileSize); - /* * + /** * @brief incremental restore * */ int DoIncrementalRestore(); - /* * @brief clear backup restore data */ + /** @brief clear backup restore data */ void DoClear(); - /* * + /** * @brief extension backup restore is done * * @param errCode */ void AppDone(ErrCode errCode); - /* * + /** * @brief extension backup restore is done * * @param restoreRetInfo app restore reportInfo */ - void AppResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario, ErrCode errCode = 0); + void AppResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario, + ErrCode errCode = 0); /** * @brief extension process Info @@ -133,7 +135,7 @@ private: */ void ReportAppProcessInfo(const std::string processInfo, BackupRestoreScenario scenario); - /* * + /** * @brief Executing Backup Tasks Asynchronously * * @param extAction action @@ -142,19 +144,19 @@ private: */ void AsyncTaskBackup(const std::string config); - /* * + /** * @brief Executing Restoration Tasks Asynchronously * */ void AsyncTaskRestore(std::set fileSet, const std::vector extManageInfo); - /* * + /** * @brief Executing Incremental Restoration Tasks Asynchronously * */ void AsyncTaskIncrementalRestore(); - /* * + /** * @brief Executing Incremental Restoration Tasks Asynchronously for special clone & cloud * */ @@ -169,12 +171,16 @@ private: void DoUser0Backup(const BJsonEntityExtensionConfig &usrConfig); int User0DoBackup(const BJsonEntityExtensionConfig &usrConfig); - + int DoIncrementalBackup(const std::vector &allFiles, - const std::vector &smallFiles, const std::vector &bigFiles); + const std::vector &smallFiles, + const std::vector &bigFiles); - void CompareFiles(UniqueFd incrementalFd, UniqueFd manifestFd, vector &allFiles, - vector &smallFiles, vector &bigFiles); + void CompareFiles(UniqueFd incrementalFd, + UniqueFd manifestFd, + vector &allFiles, + vector &smallFiles, + vector &bigFiles); void AsyncTaskDoIncrementalBackup(UniqueFd incrementalFd, UniqueFd manifestFd); void AsyncTaskOnIncrementalBackup(); @@ -189,8 +195,7 @@ private: void CheckTmpDirFileInfos(bool isSpecialVersion = false); std::map GetIdxFileInfos(bool isSpecialVersion = false); tuple> CheckRestoreFileInfos(); - - /* * + /** * @brief extension incremental backup restore is done * * @param errCode @@ -212,34 +217,34 @@ private: void StartFwkTimer(bool &isFwkStart); /** - * @brief get increCallbackEx for execute onRestore with string param + * @brief get callbackEx for execute onRestore * * @param obj */ std::function IncreOnRestoreExCallback(wptr obj); - /* * + /** * @brief get increCallback for execute onRestore with string param * * @param obj */ std::function IncreOnRestoreCallback(wptr obj); - /* * + /** * @brief get callback for execute onRestore with string param * * @param obj */ std::function OnRestoreCallback(wptr obj); - /* * - * @brief get callbackEx for execute onRestore with string param + /** + * @brief get increCallbackEx for execute onRestore with string param * * @param obj */ std::function OnRestoreExCallback(wptr obj); - /* * + /** * @brief get callbackEx for execute appDone */ std::function AppDoneCallbackEx(wptr obj); @@ -254,7 +259,6 @@ private: void DeleteBackupIncrementalTars(); void DeleteBackupTars(); void SetClearDataFlag(bool isClearData); - std::string GetBundlePath(); std::vector GetExtManageInfo(); ErrCode RestoreFilesForSpecialCloneCloud(); void RestoreBigFilesForSpecialCloneCloud(const ExtManageInfo &item); @@ -309,9 +313,8 @@ private: std::mutex onStartTimeLock_; AppRadar::DoRestoreInfo radarRestoreInfo_ { 0 }; OHOS::ThreadPool onProcessTaskPool_; - std::atomic isFirstCallOnProcess_ { false }; - std::atomic isExecAppDone_ { false }; - + std::atomic isFirstCallOnProcess_ {false}; + std::atomic isExecAppDone_ {false}; BackupRestoreScenario curScenario_ { BackupRestoreScenario::FULL_BACKUP }; }; } // namespace OHOS::FileManagement::Backup diff --git a/frameworks/native/backup_ext/src/sub_ext_extension.cpp b/frameworks/native/backup_ext/src/sub_ext_extension.cpp index 933a174ec..cc63b94c5 100644 --- a/frameworks/native/backup_ext/src/sub_ext_extension.cpp +++ b/frameworks/native/backup_ext/src/sub_ext_extension.cpp @@ -159,12 +159,11 @@ tuple> BackupExtExtension::CheckRestoreFileInfos() struct stat curFileStat {}; for (const auto &it : endFileInfos_) { if (lstat(it.first.c_str(), &curFileStat) != 0) { - HILOGE("Failed to lstat %{public}s, err = %{public}d", GetAnonyPath(it.first).c_str(), errno); + HILOGE("(Debug) Failed to lstat, err = %{public}d", errno); errFiles.emplace_back(it.first); errFileInfos_[it.first].push_back(errno); } else if (curFileStat.st_size != it.second && (!S_ISDIR(curFileStat.st_mode))) { - HILOGE("File size error, file: %{public}s, idx: %{public}" PRId64 ", act: %{public}" PRId64 "", - GetAnonyPath(it.first).c_str(), it.second, curFileStat.st_size); + HILOGE("(Debug) File size check error, file: %{public}s", GetAnonyPath(it.first).c_str()); errFiles.emplace_back(it.first); errFileInfos_[it.first].push_back(errno); } @@ -189,73 +188,6 @@ tuple> BackupExtExtension::CheckRestoreFileInfos() return { true, errFiles }; } -void BackupExtExtension::AppIncrementalDone(ErrCode errCode) -{ - HILOGI("Begin"); - auto proxy = ServiceProxy::GetInstance(); - if (proxy == nullptr) { - HILOGE("Failed to obtain the ServiceProxy handle"); - DoClear(); - return; - } - auto ret = proxy->AppIncrementalDone(errCode); - if (ret != ERR_OK) { - HILOGE("Failed to notify the app done. err = %{public}d", ret); - } -} - -ErrCode BackupExtExtension::GetBackupInfo(std::string &result) -{ - auto obj = wptr(this); - auto ptr = obj.promote(); - if (ptr == nullptr) { - HILOGE("Failed to get ext extension."); - return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); - } - if (ptr->extension_ == nullptr) { - HILOGE("Failed to get extension."); - return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); - } - auto callBackup = [ptr](ErrCode errCode, const std::string result) { - if (ptr == nullptr) { - HILOGE("Failed to get ext extension."); - return; - } - HILOGI("GetBackupInfo callBackup start. errCode = %{public}d, result = %{public}s", errCode, result.c_str()); - if (errCode == ERR_OK) { - ptr->backupInfo_ = result; - } - }; - auto ret = ptr->extension_->GetBackupInfo(callBackup); - if (ret != ERR_OK) { - HILOGE("Failed to get backupInfo. err = %{public}d", ret); - return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); - } - HILOGD("backupInfo = %s", backupInfo_.c_str()); - result = backupInfo_; - backupInfo_.clear(); - - return ERR_OK; -} - -ErrCode BackupExtExtension::UpdateFdSendRate(std::string &bundleName, int32_t sendRate) -{ - try { - std::lock_guard lock(updateSendRateLock_); - HILOGI("Update SendRate, bundleName:%{public}s, sendRate:%{public}d", bundleName.c_str(), sendRate); - VerifyCaller(); - bundleName_ = bundleName; - sendRate_ = sendRate; - if (sendRate > 0) { - startSendFdRateCon_.notify_one(); - } - return ERR_OK; - } catch (...) { - HILOGE("Failed to UpdateFdSendRate"); - return BError(BError::Codes::EXT_BROKEN_IPC).GetCode(); - } -} - std::function BackupExtExtension::OnRestoreCallback(wptr obj) { HILOGI("Begin get full restore onRestore callback"); @@ -361,10 +293,10 @@ std::function BackupExtExtension::IncreOnRestoreExCa auto spendTime = extensionPtr->GetOnStartTimeCost(); std::stringstream ss; ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, ss.str(), ""); + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreExCallback", - AppRadar::GetInstance().GetUserId(), - BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + AppRadar::GetInstance().GetUserId(), + BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); } extensionPtr->FinishOnProcessTask(); extensionPtr->extension_->InvokeAppExtMethod(errCode, restoreRetInfo); @@ -742,12 +674,12 @@ void BackupExtExtension::StartOnProcessTimeOutTimer(wptr obj } if (extPtr->onProcessTimeoutCnt_.load() >= BConstants::APP_ON_PROCESS_TIMEOUT_MAX_COUNT || extPtr->isFirstCallOnProcess_.load()) { - HILOGE("The extension invokes the onProcess for more than three times or the first invoking of the" - "onProcess times out, timeoutCnt:%{public}d", extPtr->onProcessTimeoutCnt_.load()); + HILOGE("The extension invokes the onProcess for more than three times or the first invoking of the " + "onProcess times out, timeoutCnt:%{public}d", extPtr->onProcessTimeoutCnt_.load()); std::unique_lock lock(extPtr->onProcessLock_); extPtr->stopCallJsOnProcess_.store(true); extPtr->isFirstCallOnProcess_.store(false); - extPtr->isExecAppDone_.store(false); + extPtr->isExecAppDone_.store(true); extPtr->onProcessTimeoutCnt_ = 0; extPtr->execOnProcessCon_.notify_one(); lock.unlock(); @@ -764,7 +696,7 @@ void BackupExtExtension::StartOnProcessTimeOutTimer(wptr obj HILOGE("Extension onProcess timeout, Increase cnt:%{public}d", extPtr->onProcessTimeoutCnt_.load()); }; int timeout = isFirstCallOnProcess_.load() ? BConstants::FIRST_CALL_APP_ON_PROCESS_MAX_TIMEOUT : - BConstants::APP_ON_PROCESS_MAX_TIMEOUT; + BConstants::APP_ON_PROCESS_MAX_TIMEOUT; uint32_t timerId = onProcessTimeoutTimer_.Register(timeoutCallback, timeout, true); onProcessTimeoutTimerId_ = timerId; HILOGI("End"); @@ -777,6 +709,73 @@ void BackupExtExtension::CloseOnProcessTimeOutTimer() HILOGI("End"); } +void BackupExtExtension::AppIncrementalDone(ErrCode errCode) +{ + HILOGI("Begin"); + auto proxy = ServiceProxy::GetInstance(); + if (proxy == nullptr) { + HILOGE("Failed to obtain the ServiceProxy handle"); + DoClear(); + return; + } + auto ret = proxy->AppIncrementalDone(errCode); + if (ret != ERR_OK) { + HILOGE("Failed to notify the app done. err = %{public}d", ret); + } +} + +ErrCode BackupExtExtension::GetBackupInfo(std::string &result) +{ + auto obj = wptr(this); + auto ptr = obj.promote(); + if (ptr == nullptr) { + HILOGE("Failed to get ext extension."); + return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); + } + if (ptr->extension_ == nullptr) { + HILOGE("Failed to get extension."); + return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); + } + auto callBackup = [ptr](ErrCode errCode, const std::string result) { + if (ptr == nullptr) { + HILOGE("Failed to get ext extension."); + return; + } + HILOGI("GetBackupInfo callBackup start. errCode = %{public}d, result = %{public}s", errCode, result.c_str()); + if (errCode == ERR_OK) { + ptr->backupInfo_ = result; + } + }; + auto ret = ptr->extension_->GetBackupInfo(callBackup); + if (ret != ERR_OK) { + HILOGE("Failed to get backupInfo. err = %{public}d", ret); + return BError(BError::Codes::EXT_INVAL_ARG, "extension getBackupInfo exception").GetCode(); + } + HILOGD("backupInfo = %s", backupInfo_.c_str()); + result = backupInfo_; + backupInfo_.clear(); + + return ERR_OK; +} + +ErrCode BackupExtExtension::UpdateFdSendRate(std::string &bundleName, int32_t sendRate) +{ + try { + std::lock_guard lock(updateSendRateLock_); + HILOGI("Update SendRate, bundleName:%{public}s, sendRate:%{public}d", bundleName.c_str(), sendRate); + VerifyCaller(); + bundleName_ = bundleName; + sendRate_ = sendRate; + if (sendRate > 0) { + startSendFdRateCon_.notify_one(); + } + return ERR_OK; + } catch (...) { + HILOGE("Failed to UpdateFdSendRate"); + return BError(BError::Codes::EXT_BROKEN_IPC).GetCode(); + } +} + bool BackupExtExtension::SetStagingPathProperties() { struct stat curBundleStat {}; @@ -856,7 +855,6 @@ void BackupExtExtension::DoUser0Backup(const BJsonEntityExtensionConfig &usrConf int BackupExtExtension::User0DoBackup(const BJsonEntityExtensionConfig &usrConfig) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); - HILOGI("Start Do User0Backup"); if (extension_ == nullptr) { HILOGE("Failed to do backup, extension is nullptr"); return BError(BError::Codes::EXT_INVAL_ARG); diff --git a/tests/unittests/backup_ext/tar_file_test.cpp b/tests/unittests/backup_ext/tar_file_test.cpp index c580d7ad7..b1848785f 100644 --- a/tests/unittests/backup_ext/tar_file_test.cpp +++ b/tests/unittests/backup_ext/tar_file_test.cpp @@ -107,6 +107,13 @@ HWTEST_F(TarFileTest, SUB_Tar_File_Packet_0100, testing::ext::TestSize.Level1) bool ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); EXPECT_TRUE(tarMap.empty()); EXPECT_FALSE(ret); + + TestManager tm("SUB_Tar_File_Packet_0100"); + string root = tm.GetRootDirCurTest(); + pkPath = root; + ret = TarFile::GetInstance().Packet(srcFiles, tarFileName, pkPath, tarMap, reportCb); + EXPECT_TRUE(tarMap.empty()); + EXPECT_FALSE(ret); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; diff --git a/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp b/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp index 5cf982238..2dbda93df 100644 --- a/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp @@ -2080,4 +2080,92 @@ HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_IncrementalRestoreOnR } GTEST_LOG_(INFO) << "ServiceReverseProxyTest-end SUB_ServiceReverse_proxy_IncrementalRestoreOnResultReport_0101"; } + +/** + * @tc.number: SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0100 + * @tc.name: SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0100 + * @tc.desc: Test function of IncrementalBackupOnResultReport interface for FAILURE. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I9OVHB + */ +HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0100, + testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-begin SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0100"; + try { + std::string bundleName = "app01"; + try { + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(false)); + EXPECT_TRUE(proxy_ != nullptr); + proxy_->IncrementalBackupOnResultReport(RESULT_REPORT, bundleName); + EXPECT_TRUE(false); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_BROKEN_IPC); + } + + try { + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(false)); + proxy_->IncrementalBackupOnResultReport(RESULT_REPORT, bundleName); + EXPECT_TRUE(false); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_BROKEN_IPC); + } + + try { + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(false)); + proxy_->IncrementalBackupOnResultReport(RESULT_REPORT, bundleName); + EXPECT_TRUE(false); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_BROKEN_IPC); + } + + try { + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(-1)); + proxy_->IncrementalBackupOnResultReport(RESULT_REPORT, bundleName); + EXPECT_TRUE(false); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_BROKEN_IPC); + } + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-an exception occurred by IncrementalBackupOnResultReport."; + } + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-end SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0100"; +} + +/** + * @tc.number: SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0101 + * @tc.name: SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0101 + * @tc.desc: Test function of IncrementalBackupOnResultReport interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0101, + testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-begin SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0101"; + try { + EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) + .Times(1) + .WillOnce(Invoke(mock_.GetRefPtr(), &ServiceReverseMock::InvokeSendRequest)); + std::string bundleName = "app01"; + EXPECT_TRUE(proxy_ != nullptr); + proxy_->IncrementalBackupOnResultReport(RESULT_REPORT, bundleName); + EXPECT_TRUE(true); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-an exception occurred by RestoreOnResultReport."; + } + GTEST_LOG_(INFO) << "ServiceReverseProxyTest-end SUB_ServiceReverse_proxy_IncrementalBackupOnResultReport_0101"; +} } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/tests/unittests/backup_sa/module_ipc/svc_session_manager_test.cpp b/tests/unittests/backup_sa/module_ipc/svc_session_manager_test.cpp index ab622ed33..2ef31f1da 100644 --- a/tests/unittests/backup_sa/module_ipc/svc_session_manager_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/svc_session_manager_test.cpp @@ -627,6 +627,92 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetExtFileNameRequest_0100 GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetExtFileNameRequest_0100"; } +/** + * @tc.number: SUB_backup_sa_session_GetExtFileNameRequest_0101 + * @tc.name: SUB_backup_sa_session_GetExtFileNameRequest_0101 + * @tc.desc: 测试 GetExtFileNameRequest 获取暂存真实文件请求 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetExtFileNameRequest_0101, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_GetExtFileNameRequest_0101"; + try { + try { + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = 0; + sessionManagerPtr_->GetExtFileNameRequest(BUNDLE_NAME); + EXPECT_TRUE(true); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); + } + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by GetExtFileNameRequest."; + } + GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetExtFileNameRequest_0101"; +} + +/** + * @tc.number: SUB_backup_sa_session_GetExtFileNameRequest_0102 + * @tc.name: SUB_backup_sa_session_GetExtFileNameRequest_0102 + * @tc.desc: 测试 GetExtFileNameRequest 获取暂存真实文件请求 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetExtFileNameRequest_0102, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_GetExtFileNameRequest_0102"; + try { + try { + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; + sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::UNDEFINED; + sessionManagerPtr_->GetExtFileNameRequest(BUNDLE_NAME); + EXPECT_TRUE(true); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); + } + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by GetExtFileNameRequest."; + } + GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetExtFileNameRequest_0102"; +} + +/** + * @tc.number: SUB_backup_sa_session_GetExtFileNameRequest_0103 + * @tc.name: SUB_backup_sa_session_GetExtFileNameRequest_0103 + * @tc.desc: 测试 GetExtFileNameRequest 获取暂存真实文件请求 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetExtFileNameRequest_0103, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_GetExtFileNameRequest_0103"; + try { + try { + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; + sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::RESTORE; + sessionManagerPtr_->GetExtFileNameRequest(BUNDLE_NAME); + EXPECT_TRUE(true); + } catch (BError &err) { + EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); + } + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by GetExtFileNameRequest."; + } + GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetExtFileNameRequest_0103"; +} + /** * @tc.number: SUB_backup_sa_session_GetExtConnection_0100 * @tc.name: SUB_backup_sa_session_GetExtConnection_0100 @@ -1702,6 +1788,7 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_UpdateTimer_0100, testing: } GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_UpdateTimer_0100"; } + /** * @tc.number: SUB_backup_sa_session_StopFwkTimer_0100 * @tc.name: SUB_backup_sa_session_StopFwkTimer_0100 @@ -1879,37 +1966,5 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetIncrementalManifestFd_0 GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetIncrementalManifestFd_0100"; } -/** - * @tc.number: SUB_backup_sa_session_GetLastIncrementalTime_0100 - * @tc.name: SUB_backup_sa_session_GetLastIncrementalTime_0100 - * @tc.desc: 测试 GetLastIncrementalTime - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I6F3GV - */ -HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_GetLastIncrementalTime_0100, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_GetLastIncrementalTime_0100"; - try { - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->GetLastIncrementalTime(BUNDLE_NAME); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } - - sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->impl_.backupExtNameMap.clear(); - sessionManagerPtr_->impl_.backupExtNameMap[BUNDLE_NAME] = {}; - sessionManagerPtr_->GetLastIncrementalTime(BUNDLE_NAME); - EXPECT_TRUE(true); - } catch (...) { - EXPECT_TRUE(false); - GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by GetLastIncrementalTime."; - } - GTEST_LOG_(INFO) << "SvcSessionManagerTest-end SUB_backup_sa_session_GetLastIncrementalTime_0100"; -} +#include "svc_session_manager_ex_test.cpp" } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/tests/unittests/backup_utils/BUILD.gn b/tests/unittests/backup_utils/BUILD.gn index 4295818aa..47be52ea6 100644 --- a/tests/unittests/backup_utils/BUILD.gn +++ b/tests/unittests/backup_utils/BUILD.gn @@ -295,6 +295,7 @@ group("backup_test") { ":b_file_test", ":b_json_other_test", ":b_json_test", + ":b_jsonutil_test", ":b_process_test", ":b_tarball_cmdline_test", ":b_tarball_factory_test", diff --git a/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp b/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp index 936de04fa..09d7926d0 100644 --- a/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp +++ b/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp @@ -30,6 +30,10 @@ namespace OHOS::FileManagement::Backup { using namespace std; +namespace { +constexpr uint32_t TEST_USER_ID = 100; +} // namespace + class BJsonUtilTest : public testing::Test { public: static void SetUpTestCase(void) {}; @@ -52,8 +56,7 @@ HWTEST_F(BJsonUtilTest, b_jsonutil_ParseBundleNameIndexStr_0100, testing::ext::T GTEST_LOG_(INFO) << "BJsonUtilTest-begin b_dir_GetDirFiles_0100"; try { std::string bundleName = "com.hos.app01:1"; - std::string pattern = ":"; - BJsonUtil::BundleDetailInfo detailInfo = BJsonUtil::ParseBundleNameIndexStr(bundleName, pattern); + BJsonUtil::BundleDetailInfo detailInfo = BJsonUtil::ParseBundleNameIndexStr(bundleName); EXPECT_EQ("com.hos.app01", detailInfo.bundleName); } catch (...) { EXPECT_TRUE(false); @@ -62,6 +65,29 @@ HWTEST_F(BJsonUtilTest, b_jsonutil_ParseBundleNameIndexStr_0100, testing::ext::T GTEST_LOG_(INFO) << "BDirTest-end b_dir_GetDirFiles_0100"; } +/** + * @tc.number: b_jsonutil_ParseBundleNameIndexStr_0200 + * @tc.name: b_jsonutil_ParseBundleNameIndexStr_0200 + * @tc.desc: Test function of ParseBundleNameIndexStr interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_ParseBundleNameIndexStr_0200, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin ParseBundleNameIndexStr_0200"; + try { + std::string bundleName = "com.hos.app01"; + BJsonUtil::BundleDetailInfo detailInfo = BJsonUtil::ParseBundleNameIndexStr(bundleName); + EXPECT_EQ("com.hos.app01", detailInfo.bundleName); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BDirTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BDirTest-end ParseBundleNameIndexStr_0200"; +} + /** * @tc.number: b_jsonutil_BuildBundleInfos_0100 * @tc.name: b_jsonutil_BuildBundleInfos_0100 @@ -77,33 +103,474 @@ HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0100, testing::ext::TestSize try { std::vector bundleNames; std::string bundleName = "com.hos.app01:1"; - std::string bundleName1 = "com.hos.app02"; bundleNames.push_back(bundleName); - bundleNames.push_back(bundleName1); - std::string pattern = ":"; - std::vector detailInfos; - std::string detail01 = "{ - "infos" : [ { - "details" : [ { - "detail" : [ { "source" : "com.ohos.app01", "target" : "com.hos.app01" } ], - "type" : "app_mapping_relation" } ], - "type" : "broadcast" } ] - }"; - detailInfos.push_back(detail01); - detailInfos.push_back(""); - int32_t userId = 100; - std::vector realBundleNames; + std::vector bundleInfos; + std::string bundleInfo = "info1"; + std::string bundleInfo2 = "info2"; + bundleInfos.push_back(bundleInfo); + bundleInfos.push_back(bundleInfo2); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; std::map isClearDataFlags; - std::map> bundleNameDetailMap = - BJsonUtil::BuildBundleInfos(bundleNames, detailInfos, realBundleNames, + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_TRUE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0100"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0200 + * @tc.name: b_jsonutil_BuildBundleInfos_0200 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0200, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0200"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = "{\"infos\":\"infos\"}"; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0200"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0300 + * @tc.name: b_jsonutil_BuildBundleInfos_0300 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0300, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0300"; + try { + std::vector bundleNames; + std::string bundleName = "bundle1:"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = "info1"; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_TRUE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0300"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0301 + * @tc.name: b_jsonutil_BuildBundleInfos_0301 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0301, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0301"; + try { + std::vector bundleNames; + std::string bundleName = ":bundle1"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = "info1"; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_TRUE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0301"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0400 + * @tc.name: b_jsonutil_BuildBundleInfos_0400 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0400, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0400"; + try { + std::vector bundleNames; + std::string bundleName = "bundle1"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = { + "{\"infos\":[{\"type\":\"type1\",\"details\":\"details1\"}],\"clearBackupData\": \"false\"}" + }; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, userId, isClearDataFlags); - std::string key = "com.hos.app01"; - EXPECT_EQ("com.hos.app01", bundleNameDetailMap[key].bundleName[0]); + EXPECT_EQ(isClearDataFlags[bundleName], false); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0400"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0500 + * @tc.name: b_jsonutil_BuildBundleInfos_0500 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0500, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0500"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[{\"type\":null}]}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_EQ(isClearDataFlags[bundleName], true); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0500"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0600 + * @tc.name: b_jsonutil_BuildBundleInfos_0600 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0600, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0600"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[{\"type\":123}],\"clearBackupData\": \"true\"}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_EQ(isClearDataFlags[bundleName], true); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0600"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0700 + * @tc.name: b_jsonutil_BuildBundleInfos_0700 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0700, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0700"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[{\"type\":\"testType\",\"details\":null}]}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0700"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0800 + * @tc.name: b_jsonutil_BuildBundleInfos_0800 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0800, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0800"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[{\"type\":\"testType\",\"details\":[]}]}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0800"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_0900 + * @tc.name: b_jsonutil_BuildBundleInfos_0900 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_0900, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_0900"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[{\"type\":\"testType\",\"details\":[\"detail\"]}]}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_0900"; +} + +/** + * @tc.number: b_jsonutil_BuildBundleInfos_1000 + * @tc.name: b_jsonutil_BuildBundleInfos_1000 + * @tc.desc: Test function of BuildBundleInfos interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfos_1000, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfos_1000"; + try { + std::vector bundleNames; + std::string bundleName = "bundle"; + bundleNames.push_back(bundleName); + std::vector bundleInfos; + std::string bundleInfo = {"{\"infos\":[\"infos\"]}"}; + bundleInfos.push_back(bundleInfo); + int32_t userId = TEST_USER_ID; + std::vector bundleNamesOnly; + std::map isClearDataFlags; + + auto result = BJsonUtil::BuildBundleInfos(bundleNames, bundleInfos, bundleNamesOnly, + userId, isClearDataFlags); + EXPECT_FALSE(result.empty()); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfos_1000"; +} + +/** + * @tc.number: b_jsonutil_FindBundleInfoByName_0100 + * @tc.name: b_jsonutil_FindBundleInfoByName_0100 + * @tc.desc: Test function of FindBundleInfoByName interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_FindBundleInfoByName_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin FindBundleInfoByName_0100"; + try { + std::map> bundleNameDetailsMap; + std::string bundleName = "bundle1"; + std::string jobType = "type"; + BJsonUtil::BundleDetailInfo bundleDetail; + + bool result = BJsonUtil::FindBundleInfoByName(bundleNameDetailsMap, bundleName, jobType, bundleDetail); + EXPECT_EQ(false, result); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end FindBundleInfoByName_0100"; +} + +/** + * @tc.number: b_jsonutil_FindBundleInfoByName_0200 + * @tc.name: b_jsonutil_FindBundleInfoByName_0200 + * @tc.desc: Test function of FindBundleInfoByName interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_FindBundleInfoByName_0200, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin FindBundleInfoByName_0200"; + try { + std::map> bundleNameDetailsMap; + std::string bundleName = "bundle1"; + std::string jobType = "type"; + BJsonUtil::BundleDetailInfo detailInfo; + detailInfo.bundleName = bundleName; + detailInfo.type = jobType; + bundleNameDetailsMap[bundleName] = {detailInfo}; + BJsonUtil::BundleDetailInfo bundleDetail; + + bool result = BJsonUtil::FindBundleInfoByName(bundleNameDetailsMap, bundleName, jobType, bundleDetail); + EXPECT_EQ(true, result); + EXPECT_EQ(bundleDetail.type, detailInfo.type); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end FindBundleInfoByName_0200"; +} + +/** + * @tc.number: b_jsonutil_FindBundleInfoByName_0300 + * @tc.name: b_jsonutil_FindBundleInfoByName_0300 + * @tc.desc: Test function of FindBundleInfoByName interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_FindBundleInfoByName_0300, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin FindBundleInfoByName_0300"; + try { + std::map> bundleNameDetailsMap; + std::string bundleName = "bundle1"; + std::string jobType = "type"; + std::string jobType1 = "type1"; + BJsonUtil::BundleDetailInfo detailInfo; + detailInfo.bundleName = bundleName; + detailInfo.type = jobType; + bundleNameDetailsMap[bundleName] = {detailInfo}; + BJsonUtil::BundleDetailInfo bundleDetail; + + bool result = BJsonUtil::FindBundleInfoByName(bundleNameDetailsMap, bundleName, jobType1, bundleDetail); + EXPECT_EQ(false, result); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; + } + GTEST_LOG_(INFO) << "BJsonUtilTest-end FindBundleInfoByName_0300"; +} + +/** + * @tc.number: b_jsonutil_BuildExtensionErrInfo_0100 + * @tc.name: b_jsonutil_BuildExtensionErrInfo_0100 + * @tc.desc: Test function of BuildExtensionErrInfo interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 0 + * @tc.require: I6F3GV + */ +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildExtensionErrInfo_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildExtensionErrInfo_0100"; + try { + std::string jsonStr; + int errCode = 1; + std::string errMsg = "error"; + + bool result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errCode, errMsg); + EXPECT_EQ(true, result); + EXPECT_NE(jsonStr.find("errorCode"), std::string::npos); + EXPECT_NE(jsonStr.find("errorInfo"), std::string::npos); + EXPECT_NE(jsonStr.find("type"), std::string::npos); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; } - GTEST_LOG_(INFO) << "BJsonUtilTest-end b_dir_BuildBundleInfos_0100"; + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildExtensionErrInfo_0100"; } /* * diff --git a/utils/include/b_json/b_json_entity_caps.h b/utils/include/b_json/b_json_entity_caps.h index e641077e0..74d092864 100644 --- a/utils/include/b_json/b_json_entity_caps.h +++ b/utils/include/b_json/b_json_entity_caps.h @@ -204,10 +204,6 @@ public: if (item.isMember("extraInfo") && item["extraInfo"].isObject()) { extraInfo = item["extraInfo"]; } - int64_t increSpaceOccupied = 0; - if (item.isMember("increSpaceOccupied") && item["increSpaceOccupied"].isInt64()) { - increSpaceOccupied = item["increSpaceOccupied"].asInt64(); - } bool fullBackupOnly = false; if (item.isMember("fullBackupOnly") && item["fullBackupOnly"].isBool()) { fullBackupOnly = item["fullBackupOnly"].asBool(); @@ -216,10 +212,13 @@ public: if (item.isMember("appIndex") && item["appIndex"].isInt()) { appIndex = item["appIndex"].asInt(); } + int64_t increSpaceOccupied = 0; + if (item.isMember("increSpaceOccupied") && item["increSpaceOccupied"].isInt64()) { + increSpaceOccupied = item["increSpaceOccupied"].asInt64(); + } bundleInfos.emplace_back(BundleInfo {item["name"].asString(), appIndex, item["versionCode"].asInt64(), item["versionName"].asString(), item["spaceOccupied"].asInt64(), - increSpaceOccupied, - item["allToBackup"].asBool(), fullBackupOnly, + increSpaceOccupied, item["allToBackup"].asBool(), fullBackupOnly, item["extensionName"].asString(), restoreDeps, supportScene, extraInfo}); } -- Gitee