From 1053ee4a491550eb9ac1ce4a205925bafd1696cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=95=E6=8C=AF=E6=9D=B0?= Date: Tue, 8 Jul 2025 16:42:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=81=A2=E5=A4=8DonRestore?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E6=9D=80=E5=9C=BA=E6=99=AF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 吕振杰 --- .../native/backup_ext/include/ext_extension.h | 5 +- .../native/backup_ext/src/ext_extension.cpp | 6 +- .../backup_ext/src/sub_ext_extension.cpp | 44 ++++------- services/backup_sa/IService.idl | 3 +- .../backup_sa/include/module_ipc/service.h | 2 +- services/backup_sa/src/module_ipc/service.cpp | 6 -- .../backup_sa/src/module_ipc/sub_service.cpp | 45 +++++++---- .../backup_kit_inner/service_proxy_mock.cpp | 2 +- tests/mock/module_ipc/service_mock.cpp | 2 +- .../backup_ext/ext_extension_sub_test.cpp | 10 +-- .../module_ipc/service_incremental_test.cpp | 8 +- .../module_ipc/service_other_test.cpp | 74 ++++++++++++++----- .../backup_sa/module_ipc/sub_service_test.cpp | 4 - .../backup_sa/session/service_proxy_mock.cpp | 2 +- .../backup_sa/session/service_proxy_mock.h | 3 +- 15 files changed, 122 insertions(+), 94 deletions(-) diff --git a/frameworks/native/backup_ext/include/ext_extension.h b/frameworks/native/backup_ext/include/ext_extension.h index 9dba03d38..ac4246976 100644 --- a/frameworks/native/backup_ext/include/ext_extension.h +++ b/frameworks/native/backup_ext/include/ext_extension.h @@ -392,10 +392,9 @@ private: map MatchFiles(map files, vector endExcludes); void UpdateTarStat(uint64_t tarFileSize); - void HandleExtDisconnect(); + void HandleExtDisconnect(bool isAppResultReport, ErrCode errCode); bool HandleGetExtOnRelease(); - void SetAppResultReport(const std::string resultInfo, ErrCode errCode); - void HandleExtOnRelease(); + void HandleExtOnRelease(bool isAppResultReport, ErrCode errCode); std::function OnReleaseCallback(wptr obj); std::function GetComInfoCallback(wptr obj); private: diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index ee46dd698..ec7f43d14 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -1864,7 +1864,7 @@ void BackupExtExtension::AppDone(ErrCode errCode) HILOGE("Failed to notify the app done. err = %{public}d", ret); } if (HandleGetExtOnRelease()) { - HandleExtOnRelease(); + HandleExtOnRelease(false, errCode); } } @@ -1878,6 +1878,10 @@ void BackupExtExtension::AppResultReport(const std::string restoreRetInfo, if (ret != ERR_OK) { HILOGE("Failed notify app restoreResultReport, errCode: %{public}d", ret); } + if (curScenario_ == BackupRestoreScenario::FULL_RESTORE || + curScenario_ == BackupRestoreScenario::INCREMENTAL_RESTORE) { + HandleExtOnRelease(true, errCode); + } } void BackupExtExtension::StartExtTimer(bool &isExtStart) diff --git a/frameworks/native/backup_ext/src/sub_ext_extension.cpp b/frameworks/native/backup_ext/src/sub_ext_extension.cpp index 3f7af178c..fb11fea1b 100644 --- a/frameworks/native/backup_ext/src/sub_ext_extension.cpp +++ b/frameworks/native/backup_ext/src/sub_ext_extension.cpp @@ -271,7 +271,7 @@ std::function BackupExtExtension::OnRestoreCallback( std::string errInfo; BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); extensionPtr->ReportAppStatistic("OnRestoreCallback", errCode); - extensionPtr->SetAppResultReport(errInfo, errCode); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); } extensionPtr->DoClear(); }; @@ -311,7 +311,7 @@ std::function BackupExtExtension::OnRestoreExCallbac if (restoreRetInfo.size()) { HILOGI("Will notify restore result report"); extensionPtr->ReportAppStatistic("OnRestoreExCallback1", errCode); - extensionPtr->SetAppResultReport(restoreRetInfo, errCode); + extensionPtr->AppResultReport(restoreRetInfo, BackupRestoreScenario::FULL_RESTORE); } return; } @@ -322,7 +322,7 @@ std::function BackupExtExtension::OnRestoreExCallbac std::string errInfo; BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, restoreRetInfo); extensionPtr->ReportAppStatistic("OnRestoreExCallback2", errCode); - extensionPtr->SetAppResultReport(errInfo, errCode); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); extensionPtr->DoClear(); } }; @@ -377,7 +377,7 @@ std::function BackupExtExtension::IncreOnRestoreExCa if (errCode == ERR_OK) { if (restoreRetInfo.size()) { extensionPtr->ReportAppStatistic("IncreOnRestoreExCallback1", errCode); - extensionPtr->SetAppResultReport(restoreRetInfo, errCode); + extensionPtr->AppResultReport(restoreRetInfo, BackupRestoreScenario::INCREMENTAL_RESTORE); } return; } @@ -388,7 +388,7 @@ std::function BackupExtExtension::IncreOnRestoreExCa std::string errInfo; BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, restoreRetInfo); extensionPtr->ReportAppStatistic("IncreOnRestoreExCallback2", errCode); - extensionPtr->SetAppResultReport(errInfo, errCode); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); extensionPtr->DoClear(); } }; @@ -425,7 +425,7 @@ std::function BackupExtExtension::IncreOnRestoreCall std::string errInfo; BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); extensionPtr->ReportAppStatistic("IncreOnRestoreCallback", errCode); - extensionPtr->SetAppResultReport(errInfo, errCode); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); } extensionPtr->DoClear(); }; @@ -836,7 +836,7 @@ void BackupExtExtension::AppIncrementalDone(ErrCode errCode) HILOGE("Failed to notify the app done. err = %{public}d", ret); } if (HandleGetExtOnRelease()) { - HandleExtOnRelease(); + HandleExtOnRelease(false, errCode); } } @@ -1789,19 +1789,16 @@ ErrCode BackupExtExtension::HandleOnRelease(int32_t scenario) } } -void BackupExtExtension::HandleExtDisconnect() +void BackupExtExtension::HandleExtDisconnect(bool isAppResultReport, ErrCode errCode) { - HILOGI("Begin, curScenario:%{public}d", curScenario_); + HILOGI("Begin, scenario:%{public}d, isAppResultReport:%{public}d, errCode:%{public}d", curScenario_, + isAppResultReport, errCode); auto proxy = ServiceClient::GetInstance(); if (proxy == nullptr) { HILOGE("Failed to obtain the ServiceClient handle"); return; } - bool isIncBackup = true; - if (curScenario_ == BackupRestoreScenario::FULL_BACKUP || curScenario_ == BackupRestoreScenario::FULL_RESTORE) { - isIncBackup = false; - } - auto ret = proxy->HandleExtDisconnect(isIncBackup); + auto ret = proxy->HandleExtDisconnect(curScenario_, isAppResultReport, errCode); if (ret != ERR_OK) { HILOGE("Failed to HandleExtDisconnect. err = %{public}d", ret); } @@ -1823,16 +1820,7 @@ bool BackupExtExtension::HandleGetExtOnRelease() return isExtOnRelease; } -void BackupExtExtension::SetAppResultReport(const std::string resultInfo, ErrCode errCode) -{ - HILOGI("SetAppResultReport begin"); - needAppResultReport_.store(true); - appResultReportInfo_ = resultInfo; - appResultReportErrCode_ = errCode; - HandleExtOnRelease(); -} - -void BackupExtExtension::HandleExtOnRelease() +void BackupExtExtension::HandleExtOnRelease(bool isAppResultReport, ErrCode errCode) { HILOGI("HandleExtOnRelease begin"); int32_t scenario = static_cast(BConstants::ExtensionScenario::RESTORE); @@ -1840,7 +1828,7 @@ void BackupExtExtension::HandleExtOnRelease() curScenario_ == BackupRestoreScenario::INCREMENTAL_BACKUP) { scenario = static_cast(BConstants::ExtensionScenario::BACKUP); } - auto task = [obj {wptr(this)}, scenario]() { + auto task = [obj {wptr(this)}, scenario, isAppResultReport, errCode]() { auto extPtr = obj.promote(); if (extPtr == nullptr || extPtr->extension_ == nullptr) { HILOGE("Call js onRelease failed, extensionPtr is empty"); @@ -1864,11 +1852,7 @@ void BackupExtExtension::HandleExtOnRelease() extPtr->stopWaitOnRelease_.store(true); extPtr->isOnReleased_.store(true); } - if (extPtr->needAppResultReport_.load()) { - extPtr->AppResultReport(extPtr->appResultReportInfo_, extPtr->curScenario_, - extPtr->appResultReportErrCode_); - } - extPtr->HandleExtDisconnect(); + extPtr->HandleExtDisconnect(isAppResultReport, errCode); }; onReleaseTaskPool_.AddTask([task]() { task(); }); } diff --git a/services/backup_sa/IService.idl b/services/backup_sa/IService.idl index dda0fe4a0..f4714cb80 100644 --- a/services/backup_sa/IService.idl +++ b/services/backup_sa/IService.idl @@ -72,7 +72,8 @@ interface OHOS.FileManagement.Backup.IService{ [in] int serviceResultReportErrCode); [ipccode 38] void GetBackupDataSize([in] boolean isPreciseScan,[in] BIncrementalData[] bundleNameList); [ipccode 40] void CleanBundleTempDir([in] String bundleName); - [ipccode 41] void HandleExtDisconnect([in] boolean isIncBackup); + [ipccode 41] void HandleExtDisconnect([in] BackupRestoreScenario scenario, [in] boolean isAppResultReport, + [in] int appErrCode); [ipccode 42] void GetExtOnRelease([out] boolean isExtOnRelease); [ipccode 43] void AppFileReadyWithoutFd([in]String fileName, [in] int appFileReadyErrCode); [ipccode 44] void AppIncrementalFileReadyWithoutFd([in] String fileName, [in] int appIncrementalFileReadyErrCode); diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 3e5052d5b..8bb77e1ad 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -118,7 +118,7 @@ public: ErrCode GetBackupDataSize(bool isPreciseScan, const std::vector& bundleNameList) override; ErrCode CleanBundleTempDir(const std::string &bundleName) override; - ErrCode HandleExtDisconnect(bool isIncBackup) override; + ErrCode HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) override; ErrCode GetExtOnRelease(bool &isExtOnRelease) override; ErrCode GetCompatibilityInfo(const std::string &bundleName, const std::string &extInfo, std::string &compatInfo) override; diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 9a64d35c3..a1bbe1bce 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -982,22 +982,16 @@ ErrCode Service::ServiceResultReport(const std::string& restoreRetInfo, BackupRe ErrCode ret = VerifyCallerAndGetCallerName(callerName); if (ret != ERR_OK) { HILOGE("Result report fail, bundleName:%{public}s, ret:%{public}d", callerName.c_str(), ret); - HandleCurBundleEndWork(callerName, sennario); CallOnBundleEndByScenario(callerName, sennario, ret); - OnAllBundlesFinished(BError(BError::Codes::OK)); return ret; } SendEndAppGalleryNotify(callerName); if (sennario == BackupRestoreScenario::FULL_RESTORE) { UpdateHandleCnt(errCode); - HandleCurBundleEndWork(callerName, sennario); session_->GetServiceReverseProxy()->RestoreOnResultReport(restoreRetInfo, callerName, errCode); - OnAllBundlesFinished(BError(BError::Codes::OK)); } else if (sennario == BackupRestoreScenario::INCREMENTAL_RESTORE) { UpdateHandleCnt(errCode); - HandleCurBundleEndWork(callerName, sennario); session_->GetServiceReverseProxy()->IncrementalRestoreOnResultReport(restoreRetInfo, callerName, errCode); - OnAllBundlesFinished(BError(BError::Codes::OK)); } else if (sennario == BackupRestoreScenario::FULL_BACKUP) { session_->GetServiceReverseProxy()->BackupOnResultReport(restoreRetInfo, callerName); } else if (sennario == BackupRestoreScenario::INCREMENTAL_BACKUP) { diff --git a/services/backup_sa/src/module_ipc/sub_service.cpp b/services/backup_sa/src/module_ipc/sub_service.cpp index 59cbdb35a..ad86f20e8 100644 --- a/services/backup_sa/src/module_ipc/sub_service.cpp +++ b/services/backup_sa/src/module_ipc/sub_service.cpp @@ -1446,29 +1446,44 @@ ErrCode Service::CleanBundleTempDir(const string &bundleName) return BError(BError::Codes::OK); } -ErrCode Service::HandleExtDisconnect(bool isIncBackup) +ErrCode Service::HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) { - HILOGI("begin, isIncBackup: %{public}d", isIncBackup); + HILOGI("begin, scenario: %{public}d, isAppResultReport:%{public}d, errCode:%{public}d", scenario, + isAppResultReport, errCode); std::string callerName; auto ret = VerifyCallerAndGetCallerName(callerName); if (ret != ERR_OK) { HILOGE("HandleExtDisconnect VerifyCaller failed, get bundle failed, ret:%{public}d", ret); + if (isAppResultReport) { + HandleCurBundleEndWork(callerName, scenario); + OnAllBundlesFinished(BError(BError::Codes::OK)); + } return ret; } - std::shared_ptr mutexPtr = GetExtensionMutex(callerName); - if (mutexPtr == nullptr) { - HILOGE("extension mutex ptr is nullptr, bundleName:%{public}s", callerName.c_str()); - return BError(BError::Codes::SA_INVAL_ARG); - } - std::lock_guard lock(mutexPtr->callbackMutex); - ret = HandleCurAppDone(ret, callerName, isIncBackup); - if (ret != ERR_OK) { - HILOGE("Handle current app done error, bundleName:%{public}s", callerName.c_str()); - return ret; + if (isAppResultReport && (scenario == BackupRestoreScenario::FULL_RESTORE || + scenario == BackupRestoreScenario::INCREMENTAL_RESTORE)) { + HandleCurBundleEndWork(callerName, scenario); + OnAllBundlesFinished(BError(BError::Codes::OK)); + } else if (!isAppResultReport) { + bool isIncBackup = true; + if (scenario == BackupRestoreScenario::FULL_BACKUP || scenario == BackupRestoreScenario::FULL_RESTORE) { + isIncBackup = false; + } + std::shared_ptr mutexPtr = GetExtensionMutex(callerName); + if (mutexPtr == nullptr) { + HILOGE("extension mutex ptr is nullptr, bundleName:%{public}s", callerName.c_str()); + return BError(BError::Codes::SA_INVAL_ARG); + } + std::lock_guard lock(mutexPtr->callbackMutex); + ret = HandleCurAppDone(errCode, callerName, isIncBackup); + if (ret != ERR_OK) { + HILOGE("Handle current app done error, bundleName:%{public}s", callerName.c_str()); + return ret; + } + RemoveExtensionMutex(callerName); + RemoveExtOnRelease(callerName); + OnAllBundlesFinished(BError(BError::Codes::OK)); } - RemoveExtensionMutex(callerName); - RemoveExtOnRelease(callerName); - OnAllBundlesFinished(BError(BError::Codes::OK)); return ret; } diff --git a/tests/mock/backup_kit_inner/service_proxy_mock.cpp b/tests/mock/backup_kit_inner/service_proxy_mock.cpp index e605bfbf5..9173e3148 100644 --- a/tests/mock/backup_kit_inner/service_proxy_mock.cpp +++ b/tests/mock/backup_kit_inner/service_proxy_mock.cpp @@ -277,7 +277,7 @@ ErrCode ServiceProxy::CleanBundleTempDir(const std::string& bundleName) return BError(BError::Codes::OK); } -ErrCode ServiceProxy::HandleExtDisconnect(bool isIncBackup) +ErrCode ServiceProxy::HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/mock/module_ipc/service_mock.cpp b/tests/mock/module_ipc/service_mock.cpp index ff713dbb0..61afc65f2 100644 --- a/tests/mock/module_ipc/service_mock.cpp +++ b/tests/mock/module_ipc/service_mock.cpp @@ -441,7 +441,7 @@ bool Service::GetScanningInfo(wptr obj, size_t scannedSize, string &sca void Service::SetScanningInfo(string &scanning, string name) {} -ErrCode Service::HandleExtDisconnect(bool isIncBackup) +ErrCode Service::HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/unittests/backup_ext/ext_extension_sub_test.cpp b/tests/unittests/backup_ext/ext_extension_sub_test.cpp index 243ed2505..2cc8137db 100644 --- a/tests/unittests/backup_ext/ext_extension_sub_test.cpp +++ b/tests/unittests/backup_ext/ext_extension_sub_test.cpp @@ -274,28 +274,28 @@ HWTEST_F(ExtExtensionSubTest, Ext_Extension_Sub_HandleExtOnRelease_Test_0100, te extExtension->curScenario_ = BackupRestoreScenario::FULL_BACKUP; auto ext = extExtension->extension_; extExtension->extension_ = nullptr; - extExtension->HandleExtOnRelease(); + extExtension->HandleExtOnRelease(false, BError(BError::Codes::OK).GetCode()); EXPECT_TRUE(true); extExtension->curScenario_ = BackupRestoreScenario::FULL_RESTORE; - extExtension->HandleExtOnRelease(); + extExtension->HandleExtOnRelease(false, BError(BError::Codes::OK).GetCode()); EXPECT_TRUE(true); extExtension->extension_ = ext; EXPECT_NE(extExtension->extension_, nullptr); bool isOnReleased = extExtension->isOnReleased_.load(); extExtension->isOnReleased_.store(true); - extExtension->HandleExtOnRelease(); + extExtension->HandleExtOnRelease(false, BError(BError::Codes::OK).GetCode()); EXPECT_TRUE(true); extExtension->isOnReleased_.store(false); EXPECT_CALL(*extBackupMock, OnRelease(_, _)).WillOnce(Return(BError(BError::Codes::EXT_INVAL_ARG).GetCode())); - extExtension->HandleExtOnRelease(); + extExtension->HandleExtOnRelease(false, BError(BError::Codes::OK).GetCode()); EXPECT_TRUE(true); EXPECT_CALL(*extBackupMock, OnRelease(_, _)).WillOnce(Return(BError(BError::Codes::OK).GetCode())); extExtension->needAppResultReport_.store(false); - extExtension->HandleExtOnRelease(); + extExtension->HandleExtOnRelease(false, BError(BError::Codes::OK).GetCode()); EXPECT_TRUE(true); extExtension->isOnReleased_.store(isOnReleased); diff --git a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp index cfedb16ce..ce96dcb76 100644 --- a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp @@ -77,7 +77,7 @@ public: virtual UniqueFd GetLocalCapabilitiesForBundleInfos() = 0; virtual ErrCode GetBackupDataSize(bool, const std::vector&) = 0; virtual ErrCode CleanBundleTempDir(const std::string& bundleName) = 0; - virtual ErrCode HandleExtDisconnect(bool) = 0; + virtual ErrCode HandleExtDisconnect(BackupRestoreScenario, bool, ErrCode) = 0; virtual ErrCode GetExtOnRelease(bool&) = 0; virtual void SetExtOnRelease(const BundleName&, bool) = 0; virtual void RemoveExtOnRelease(const BundleName&) = 0; @@ -138,7 +138,7 @@ public: MOCK_METHOD(UniqueFd, GetLocalCapabilitiesForBundleInfos, ()); MOCK_METHOD(ErrCode, GetBackupDataSize, (bool, const std::vector&)); MOCK_METHOD(ErrCode, CleanBundleTempDir, (const std::string&)); - MOCK_METHOD(ErrCode, HandleExtDisconnect, (bool)); + MOCK_METHOD(ErrCode, HandleExtDisconnect, (BackupRestoreScenario, bool, ErrCode)); MOCK_METHOD(ErrCode, GetExtOnRelease, (bool&)); MOCK_METHOD(void, SetExtOnRelease, (const BundleName&, bool)); MOCK_METHOD(void, RemoveExtOnRelease, (const BundleName&)); @@ -461,9 +461,9 @@ ErrCode Service::CleanBundleTempDir(const std::string& bundleName) return BService::serviceMock->CleanBundleTempDir(bundleName); } -ErrCode Service::HandleExtDisconnect(bool isIncBackup) +ErrCode Service::HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) { - return BService::serviceMock->HandleExtDisconnect(isIncBackup); + return BService::serviceMock->HandleExtDisconnect(scenario, isAppResultReport, errCode); } ErrCode Service::GetExtOnRelease(bool &isExtOnRelease) diff --git a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp index 57a64d87f..c99367281 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -2615,12 +2615,22 @@ HWTEST_F(ServiceTest, SUB_Service_HandleExtDisconnect_0000, testing::ext::TestSi { GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_HandleExtDisconnect_0000"; try { - EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); - EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); - EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(1)); - EXPECT_CALL(*param, GetBackupDebugOverrideAccount()).WillOnce(Return(make_pair(false, -1))); - EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID)); - auto ret = service->HandleExtDisconnect(true); + BackupRestoreScenario scenario = BackupRestoreScenario::FULL_RESTORE; + bool isAppResultReport = false; + ErrCode appErrCode = BError(BError::Codes::OK).GetCode(); + EXPECT_CALL(*skeleton, GetCallingTokenID()).WillRepeatedly(Return(0)); + EXPECT_CALL(*token, GetTokenType(_)).WillRepeatedly(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); + EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillRepeatedly(Return(1)); + EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) + .WillRepeatedly(Return(make_pair(false, -1))); + EXPECT_CALL(*skeleton, GetCallingUid()).WillRepeatedly(Return(BConstants::SYSTEM_UID)); + auto ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); + + isAppResultReport = true; + EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillOnce(Return(false)); + EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); + ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); @@ -2642,12 +2652,21 @@ HWTEST_F(ServiceTest, SUB_Service_HandleExtDisconnect_0100, testing::ext::TestSi { GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_HandleExtDisconnect_0100"; try { - EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); - EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); - EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0)); - EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("")); - EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(nullptr)); - auto ret = service->HandleExtDisconnect(true); + BackupRestoreScenario scenario = BackupRestoreScenario::FULL_RESTORE; + bool isAppResultReport = false; + ErrCode appErrCode = BError(BError::Codes::OK).GetCode(); + std::string bundleName = "test"; + EXPECT_CALL(*skeleton, GetCallingTokenID()).WillRepeatedly(Return(0)); + EXPECT_CALL(*token, GetTokenType(_)).WillRepeatedly(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); + EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillRepeatedly(Return(0)); + EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillRepeatedly(Return("test")); + EXPECT_CALL(*session, GetExtConnection(_)).WillRepeatedly(Return(nullptr)); + auto ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); + + service->backupExtMutexMap_[bundleName] = nullptr; + ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); + service->backupExtMutexMap_.clear(); EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); @@ -2669,13 +2688,16 @@ HWTEST_F(ServiceTest, SUB_Service_HandleExtDisconnect_0200, testing::ext::TestSi { GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_HandleExtDisconnect_0200"; try { + BackupRestoreScenario scenario = BackupRestoreScenario::FULL_BACKUP; + bool isAppResultReport = false; + ErrCode appErrCode = BError(BError::Codes::OK).GetCode(); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0)); EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("")); EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, GetBackupExtProxy()).WillOnce(Return(nullptr)); - auto ret = service->HandleExtDisconnect(true); + auto ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); @@ -2697,10 +2719,23 @@ HWTEST_F(ServiceTest, SUB_Service_HandleExtDisconnect_0300, testing::ext::TestSi { GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_HandleExtDisconnect_0300"; try { - EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); - EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); - EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillOnce(Return(0)); - EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("")); + BackupRestoreScenario scenario = BackupRestoreScenario::FULL_RESTORE; + bool isAppResultReport = true; + ErrCode appErrCode = BError(BError::Codes::OK).GetCode(); + EXPECT_CALL(*skeleton, GetCallingTokenID()).WillRepeatedly(Return(0)); + EXPECT_CALL(*token, GetTokenType(_)).WillRepeatedly(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); + EXPECT_CALL(*token, GetHapTokenInfo(_, _)).WillRepeatedly(Return(0)); + EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillRepeatedly(Return("")); + EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillRepeatedly(Return(false)); + EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillRepeatedly(Return(false)); + auto ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); + + scenario = BackupRestoreScenario::FULL_RESTORE; + ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); + + isAppResultReport = false; EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, GetBackupExtProxy()).WillOnce(Return(svcProxy)); EXPECT_CALL(*svcProxy, HandleClear()).WillOnce(Return(BError(BError::Codes::OK).GetCode())); @@ -2708,10 +2743,9 @@ HWTEST_F(ServiceTest, SUB_Service_HandleExtDisconnect_0300, testing::ext::TestSi EXPECT_CALL(*session, StopExtTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*connect, DisconnectBackupExtAbility()).WillOnce(Return(BError(BError::Codes::OK).GetCode())); EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(true)); - EXPECT_CALL(*session, GetScenario()).WillOnce(Return(IServiceReverseType::Scenario::UNDEFINED)); + EXPECT_CALL(*session, GetScenario()).WillRepeatedly(Return(IServiceReverseType::Scenario::UNDEFINED)); EXPECT_CALL(*cdConfig, DeleteClearBundleRecord(_)).WillOnce(Return(false)); - EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); - auto ret = service->HandleExtDisconnect(true); + ret = service->HandleExtDisconnect(scenario, isAppResultReport, appErrCode); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { EXPECT_TRUE(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 01c51ed5f..da25a5f8e 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -72,9 +72,7 @@ HWTEST_F(ServiceTest, SUB_Service_ServiceResultReport_0000, TestSize.Level1) EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("")); EXPECT_CALL(*session, GetServiceReverseProxy()).WillOnce(Return(srProxy)); EXPECT_CALL(*srProxy, RestoreOnResultReport(_, _, _)).WillOnce(Return(0)); - EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillOnce(Return(false)); EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(true)); - EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); auto ret = service->ServiceResultReport("", BackupRestoreScenario::FULL_RESTORE, 0); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); @@ -84,9 +82,7 @@ HWTEST_F(ServiceTest, SUB_Service_ServiceResultReport_0000, TestSize.Level1) EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("")); EXPECT_CALL(*session, GetServiceReverseProxy()).WillOnce(Return(srProxy)); EXPECT_CALL(*srProxy, IncrementalRestoreOnResultReport(_, _, _)).WillOnce(Return(0)); - EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillOnce(Return(false)); EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(true)); - EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); ret = service->ServiceResultReport("", BackupRestoreScenario::INCREMENTAL_RESTORE, 0); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); diff --git a/tests/unittests/backup_sa/session/service_proxy_mock.cpp b/tests/unittests/backup_sa/session/service_proxy_mock.cpp index f07378af4..98a32f108 100644 --- a/tests/unittests/backup_sa/session/service_proxy_mock.cpp +++ b/tests/unittests/backup_sa/session/service_proxy_mock.cpp @@ -251,7 +251,7 @@ ErrCode ServiceProxy::CleanBundleTempDir(const std::string& bundleName) return BError(BError::Codes::OK); } -ErrCode ServiceProxy::HandleExtDisconnect(bool isIncBackup) +ErrCode ServiceProxy::HandleExtDisconnect(BackupRestoreScenario scenario, bool isAppResultReport, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/unittests/backup_sa/session/service_proxy_mock.h b/tests/unittests/backup_sa/session/service_proxy_mock.h index 40271c70d..ee25369bf 100644 --- a/tests/unittests/backup_sa/session/service_proxy_mock.h +++ b/tests/unittests/backup_sa/session/service_proxy_mock.h @@ -75,7 +75,8 @@ public: ErrCode(int32_t, const std::vector &, int32_t, int32_t)); MOCK_METHOD2(GetBackupDataSize, ErrCode(bool isPreciseScan, const std::vector &bundleNameList)); MOCK_METHOD1(CleanBundleTempDir, ErrCode(const std::string &bundleName)); - MOCK_METHOD1(HandleExtDisconnect, ErrCode(bool isIncBackup)); + MOCK_METHOD3(HandleExtDisconnect, ErrCode(BackupRestoreScenario scenario, bool isAppResultReport, + ErrCode errCode)); MOCK_METHOD1(GetExtOnRelease, ErrCode(bool &isExtOnRelease)); MOCK_METHOD3(GetCompatibilityInfo, ErrCode(const std::string&, const std::string&, std::string&)); }; -- Gitee