From f219e7aa4628002ab96f356c06cd158c7be17b92 Mon Sep 17 00:00:00 2001 From: "yaoruozi1@huawei.com" Date: Mon, 9 Dec 2024 17:30:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96,=E5=8E=BBt?= =?UTF-8?q?hrow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yaoruozi1@huawei.com --- .../backup_sa/include/module_ipc/service.h | 10 +- .../include/module_ipc/svc_session_manager.h | 12 +- services/backup_sa/src/module_ipc/service.cpp | 244 +++++++++----- .../src/module_ipc/service_incremental.cpp | 97 ++++-- .../backup_sa/src/module_ipc/sub_service.cpp | 49 ++- .../src/module_ipc/svc_session_manager.cpp | 71 ++-- tests/mock/module_ipc/service_mock.cpp | 14 +- .../src/svc_session_manager_mock.cpp | 31 +- .../module_ipc/svc_session_manager_mock.cpp | 22 +- .../svc_session_manager_throw_mock.cpp | 24 +- .../svc_session_manager_throw_mock.h | 24 +- tests/unittests/backup_sa/module_ipc/BUILD.gn | 5 + .../module_ipc/service_incremental_test.cpp | 14 +- .../module_ipc/service_other_test.cpp | 47 ++- .../module_ipc/service_throw_test.cpp | 318 +++++------------- .../module_ipc/svc_session_manager_test.cpp | 193 ++++------- 16 files changed, 599 insertions(+), 576 deletions(-) diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 43908f69a..aa52be6d3 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -321,21 +321,21 @@ private: * @brief 验证调用者 * */ - void VerifyCaller(); + ErrCode VerifyCaller(); /** * @brief 验证调用者 * * @param scenario Scenario状态 */ - void VerifyCaller(IServiceReverse::Scenario scenario); + ErrCode VerifyCaller(IServiceReverse::Scenario scenario); /** * @brief 验证调用者并返回名称 * * @return std::string */ - std::string VerifyCallerAndGetCallerName(); + ErrCode VerifyCallerAndGetCallerName(std::string &bundleName); /** * @brief 清除Session Sched相关资源 @@ -560,8 +560,10 @@ private: void SetBundleIncDataInfo(const std::vector &bundlesToBackup, std::vector &supportBundleNames); - + void CancelTask(std::string bundleName, wptr ptr); + + void SetUserIdAndRestoreType(RestoreTypeEnum restoreType, int32_t userId); private: static sptr instance_; static std::mutex instanceLock_; diff --git a/services/backup_sa/include/module_ipc/svc_session_manager.h b/services/backup_sa/include/module_ipc/svc_session_manager.h index a3656084e..e3d028c9d 100644 --- a/services/backup_sa/include/module_ipc/svc_session_manager.h +++ b/services/backup_sa/include/module_ipc/svc_session_manager.h @@ -102,7 +102,7 @@ public: * @throw BError::Codes::SA_REFUSED_ACT 调用者不是会话所有者 * @throw BError::Codes::SDK_MIXED_SCENARIO 调用者在备份/恢复场景使用了不匹配的函数 */ - void VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const; + ErrCode VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const; /** * @brief 激活会话 @@ -118,7 +118,7 @@ public: * @param remoteInAction 尝试关闭会话的客户端代理。只有激活会话的客户端代理有权关闭会话 * @param force 强制关闭 */ - void Deactive(const wptr &remoteInAction, bool force = false); + ErrCode Deactive(const wptr &remoteInAction, bool force = false); /** * @brief 检验调用者给定的bundleName是否是有效的 @@ -126,7 +126,7 @@ public: * @param bundleName 调用者名称 * @throw BError::Codes::SA_REFUSED_ACT 调用者不是会话所有者 */ - void VerifyBundleName(std::string &bundleName); + ErrCode VerifyBundleName(std::string &bundleName); /** * @brief 获取IServiceReverse @@ -300,14 +300,14 @@ public: * * @return ErrCode */ - void Start(); + ErrCode Start(); /** * @brief 结束追加应用 * * @return ErrCode */ - void Finish(); + ErrCode Finish(); /** * @brief 整个备份恢复流程是否结束 @@ -539,7 +539,7 @@ private: * * @param newImpl */ - void InitClient(Impl &newImpl); + ErrCode InitClient(Impl &newImpl); /** * @brief 获取BackupExtNameMap iterator diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 3f9f76ef4..06c5dac0b 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -280,7 +280,12 @@ UniqueFd Service::GetLocalCapabilities() return UniqueFd(-EPERM); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - VerifyCaller(); + ErrCode errCode = VerifyCaller(); + if (errCode != ERR_OK) { + HILOGE("Get local abilities failed, Verify caller failed, errCode:%{public}d", errCode); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return UniqueFd(-EPERM); + } string path = BConstants::GetSaBundleBackupRootDir(GetUserIdDefault()); BExcepUltils::VerifyPath(path, false); CreateDirIfNotExist(path); @@ -356,7 +361,7 @@ static inline void PermissionCheckFailRadar(const std::string &info, const std:: BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } -string Service::VerifyCallerAndGetCallerName() +ErrCode Service::VerifyCallerAndGetCallerName(std::string &bundleName) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); @@ -365,92 +370,112 @@ string Service::VerifyCallerAndGetCallerName() Security::AccessToken::HapTokenInfo hapTokenInfo; if (Security::AccessToken::AccessTokenKit::GetHapTokenInfo(tokenCaller, hapTokenInfo) != 0) { PermissionCheckFailRadar("Get hap token info failed", "VerifyCallerAndGetCallerName"); - throw BError(BError::Codes::SA_INVAL_ARG, "Get hap token info failed"); + HILOGE("Verify and get caller name failed, Get hap token info failed"); + return BError(BError::Codes::SA_INVAL_ARG); } std::string bundleNameIndexInfo = BJsonUtil::BuildBundleNameIndexInfo(hapTokenInfo.bundleName, hapTokenInfo.instIndex); - session_->VerifyBundleName(bundleNameIndexInfo); - return bundleNameIndexInfo; + ErrCode ret = session_->VerifyBundleName(bundleNameIndexInfo); + if (ret != ERR_OK) { + HILOGE("Verify bundle name failed, bundleNameIndexInfo:%{public}s", bundleNameIndexInfo.c_str()); + return ret; + } + bundleName = bundleNameIndexInfo; + return BError(BError::Codes::OK); } else { string str = to_string(tokenCaller); HILOGE("tokenID = %{private}s", GetAnonyString(str).c_str()); std::string info = string("Invalid token type").append(to_string(tokenType)).append(string("\"}")); PermissionCheckFailRadar(info, "VerifyCallerAndGetCallerName"); - throw BError(BError::Codes::SA_INVAL_ARG, string("Invalid token type ").append(to_string(tokenType))); + HILOGE("Verify and get caller name failed, Invalid token type"); + return BError(BError::Codes::SA_INVAL_ARG); } } -void Service::VerifyCaller() +ErrCode Service::VerifyCaller() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); int tokenType = Security::AccessToken::AccessTokenKit::GetTokenType(tokenCaller); + ErrCode ret = BError(BError::Codes::OK); switch (tokenType) { case Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE: { /* Update Service */ if (Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, BACKUP_PERMISSION) != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + HILOGE("Permission denied, token type is token native"); std::string info = "Permission denied, token type is " + to_string(tokenType); PermissionCheckFailRadar(info, "VerifyCaller"); - throw BError(BError::Codes::SA_REFUSED_ACT, - string("Permission denied, token type is ").append(to_string(tokenType))); + ret = BError(BError::Codes::SA_REFUSED_ACT); } break; } case Security::AccessToken::ATokenTypeEnum::TOKEN_HAP: { if (Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, BACKUP_PERMISSION) != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + HILOGE("Permission denied, token type is token hap"); std::string info = "Permission denied, token type is " + to_string(tokenType); PermissionCheckFailRadar(info, "VerifyCaller"); - throw BError(BError::Codes::SA_REFUSED_ACT, - string("Permission denied, token type is ").append(to_string(tokenType))); + ret = BError(BError::Codes::SA_REFUSED_ACT); } uint64_t fullTokenId = OHOS::IPCSkeleton::GetCallingFullTokenID(); if (!Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(fullTokenId)) { + HILOGE("Permission denied, token type is token hap, full tokenId is error"); std::string info = "Permission denied, token type is " + to_string(tokenType); PermissionCheckFailRadar(info, "VerifyCaller"); - throw BError(BError::Codes::SA_REFUSED_ACT, - string("Permission denied, token type is ").append(to_string(tokenType))); + ret = BError(BError::Codes::SA_REFUSED_ACT); } break; } case Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL: if (IPCSkeleton::GetCallingUid() != BConstants::SYSTEM_UID) { + HILOGE("Permission denied, token type is token shell"); std::string info = "invalid calling uid"; PermissionCheckFailRadar(info, "VerifyCaller"); - throw BError(BError::Codes::SA_REFUSED_ACT, "Calling uid is invalid"); + ret = BError(BError::Codes::SA_REFUSED_ACT); } break; default: std::string info = "Permission denied, token type is " + to_string(tokenType); PermissionCheckFailRadar(info, "VerifyCaller"); - throw BError(BError::Codes::SA_REFUSED_ACT, string("Invalid token type ").append(to_string(tokenType))); + HILOGE("Permission denied, token type is default"); + ret = BError(BError::Codes::SA_REFUSED_ACT); break; } + return ret; } -void Service::VerifyCaller(IServiceReverse::Scenario scenario) +ErrCode Service::VerifyCaller(IServiceReverse::Scenario scenario) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); - session_->VerifyCallerAndScenario(IPCSkeleton::GetCallingTokenID(), scenario); - VerifyCaller(); + ErrCode ret = session_->VerifyCallerAndScenario(IPCSkeleton::GetCallingTokenID(), scenario); + if (ret != ERR_OK) { + HILOGE("Verify bundle by scenario failed, ret:%{public}d", ret); + return ret; + } + ret = VerifyCaller(); + return ret; } ErrCode Service::InitRestoreSession(sptr remote) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - VerifyCaller(); - ErrCode errCode = session_->Active({ + ErrCode ret = VerifyCaller(); + if (ret != ERR_OK) { + HILOGE("Init restore session failed, verify caller failed"); + return ret; + } + ret = session_->Active({ .clientToken = IPCSkeleton::GetCallingTokenID(), .scenario = IServiceReverse::Scenario::RESTORE, .clientProxy = remote, .userId = GetUserIdDefault(), }); - if (errCode == 0) { + if (ret == 0) { ClearFailedBundles(); successBundlesNum_ = 0; } - return errCode; + return ret; } catch (const BError &e) { StopAll(nullptr, true); return e.GetCode(); @@ -467,21 +492,25 @@ ErrCode Service::InitBackupSession(sptr remote) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - VerifyCaller(); + ErrCode ret = VerifyCaller(); + if (ret != ERR_OK) { + HILOGE("Init Full Backup session fail, verify caller failed"); + return ret; + } int32_t oldSize = StorageMgrAdapter::UpdateMemPara(BConstants::BACKUP_VFS_CACHE_PRESSURE); HILOGE("InitBackupSession oldSize %{public}d", oldSize); session_->SetMemParaCurSize(oldSize); - ErrCode errCode = session_->Active({ + ret = session_->Active({ .clientToken = IPCSkeleton::GetCallingTokenID(), .scenario = IServiceReverse::Scenario::BACKUP, .clientProxy = remote, .userId = GetUserIdDefault(), }); - if (errCode == 0) { + if (ret == 0) { ClearFailedBundles(); successBundlesNum_ = 0; } - return errCode; + return ret; } catch (const BError &e) { StopAll(nullptr, true); return e.GetCode(); @@ -497,15 +526,18 @@ ErrCode Service::InitBackupSession(sptr remote) ErrCode Service::Start() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); - try { - VerifyCaller(session_->GetScenario()); - session_->Start(); - OnStartSched(); - return BError(BError::Codes::OK); - } catch (const BError &e) { - HILOGE("Failde to Start"); - return e.GetCode(); + ErrCode ret = VerifyCaller(session_->GetScenario()); + if (ret != ERR_OK) { + HILOGE("Service start failed, Verify caller failed, ret:%{public}d", ret); + return ret; } + ret = session_->Start(); + if (ret != ERR_OK) { + HILOGE("Service start failed, session is invalid, ret:%{public}d", ret); + return ret; + } + OnStartSched(); + return BError(BError::Codes::OK); } static bool SpecialVersion(const string &versionName) @@ -610,13 +642,14 @@ ErrCode Service::AppendBundlesRestoreSession(UniqueFd fd, const vectorIncreaseSessionCnt(__PRETTY_FUNCTION__); - session_->SetImplRestoreType(restoreType); - if (userId != DEFAULT_INVAL_VALUE) { /* multi user scenario */ - session_->SetSessionUserId(userId); - } else { - session_->SetSessionUserId(GetUserIdDefault()); + SetUserIdAndRestoreType(restoreType, userId); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("AppendBundles restore session with infos error, verify caller failed, ret:%{public}d", ret); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; } - VerifyCaller(IServiceReverse::Scenario::RESTORE); std::vector bundleNamesOnly; std::map isClearDataFlags; std::map> bundleNameDetailMap = @@ -660,7 +693,9 @@ void Service::SetCurrentSessProperties(std::vector return bundleName == bundleNameIndex; }); if (it == restoreBundleNames.end()) { - throw BError(BError::Codes::SA_BUNDLE_INFO_EMPTY, "Can't find bundle name"); + HILOGE("Can not find current bundle, bundleName:%{public}s, appIndex:%{public}d", restoreInfo.name.c_str(), + restoreInfo.appIndex); + continue; } HILOGI("bundleName: %{public}s, extensionName: %{public}s", restoreInfo.name.c_str(), restoreInfo.extensionName.c_str()); @@ -696,13 +731,14 @@ ErrCode Service::AppendBundlesRestoreSession(UniqueFd fd, return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - session_->SetImplRestoreType(restoreType); - if (userId != DEFAULT_INVAL_VALUE) { /* multi user scenario */ - session_->SetSessionUserId(userId); - } else { - session_->SetSessionUserId(GetUserIdDefault()); + SetUserIdAndRestoreType(restoreType, userId); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("AppendBundles restore session with infos error, verify caller failed, ret:%{public}d", ret); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; } - VerifyCaller(IServiceReverse::Scenario::RESTORE); auto restoreInfos = GetRestoreBundleNames(move(fd), session_, bundleNames); auto restoreBundleNames = SvcRestoreDepsManager::GetInstance().GetRestoreBundleNames(restoreInfos, restoreType); HandleExceptionOnAppendBundles(session_, bundleNames, restoreBundleNames); @@ -743,10 +779,10 @@ void Service::SetCurrentSessProperties(std::vector return bundleName == bundleNameIndexInfo; }); if (it == restoreBundleNames.end()) { - throw BError(BError::Codes::SA_BUNDLE_INFO_EMPTY, "Can't find bundle name"); + HILOGE("Can not find current bundle, bundleName:%{public}s, appIndex:%{public}d", restoreInfo.name.c_str(), + restoreInfo.appIndex); + continue; } - HILOGD("bundleName: %{public}s, extensionName: %{public}s", restoreInfo.name.c_str(), - restoreInfo.extensionName.c_str()); std::string bundleNameIndexInfo = BJsonUtil::BuildBundleNameIndexInfo(restoreInfo.name, restoreInfo.appIndex); if ((!restoreInfo.allToBackup && !SpecialVersion(restoreInfo.versionName)) || (restoreInfo.extensionName.empty() && !SAUtils::IsSABundleName(restoreInfo.name))) { @@ -792,7 +828,13 @@ ErrCode Service::AppendBundlesBackupSession(const vector &bundleName return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 - VerifyCaller(IServiceReverse::Scenario::BACKUP); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::BACKUP); + if (ret != ERR_OK) { + HILOGE("AppendBundles backup session error, verify caller failed, ret:%{public}d", ret); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto bundleDetails = MakeDetailList(bundleNames); auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundleDetails, session_->GetSessionUserId()); std::vector supportBackupNames = GetSupportBackupBundleNames(backupInfos, false, bundleNames); @@ -806,11 +848,6 @@ ErrCode Service::AppendBundlesBackupSession(const vector &bundleName HandleExceptionOnAppendBundles(session_, bundleNames, {}); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return e.GetCode(); - } catch (const exception &e) { - HILOGE("Catched an unexpected low-level exception %{public}s", e.what()); - HandleExceptionOnAppendBundles(session_, bundleNames, {}); - session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); - return EPERM; } catch (...) { HILOGE("Unexpected exception"); HandleExceptionOnAppendBundles(session_, bundleNames, {}); @@ -829,7 +866,13 @@ ErrCode Service::AppendBundlesDetailsBackupSession(const vector &bun return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 - VerifyCaller(IServiceReverse::Scenario::BACKUP); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::BACKUP); + if (ret != ERR_OK) { + HILOGE("AppendBundles backup session with infos error, verify caller failed, ret:%{public}d", ret); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } std::vector bundleNamesOnly; std::map isClearDataFlags; std::map> bundleNameDetailMap = @@ -882,7 +925,11 @@ ErrCode Service::ServiceResultReport(const std::string restoreRetInfo, string callerName = ""; HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - callerName = VerifyCallerAndGetCallerName(); + ErrCode ret = VerifyCallerAndGetCallerName(callerName); + if (ret != ERR_OK) { + HILOGE("Result report fail, ret:%{public}d", ret); + return ret; + } SendEndAppGalleryNotify(callerName); if (sennario == BackupRestoreScenario::FULL_RESTORE) { session_->GetServiceReverseProxy()->RestoreOnResultReport(restoreRetInfo, callerName, errCode); @@ -996,8 +1043,12 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) HILOGE("GetFileHandle error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - VerifyCaller(IServiceReverse::Scenario::RESTORE); - + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("GetFileHandle error, verify caller failed, bundleName:%{public}s, fileName:%{public}s", + bundleName.c_str(), GetAnonyPath(fileName).c_str()); + return ret; + } bool updateRes = SvcRestoreDepsManager::GetInstance().UpdateToRestoreBundleMap(bundleName, fileName); if (updateRes) { return BError(BError::Codes::OK); @@ -1029,9 +1080,6 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) return BError(BError::Codes::OK); } catch (const BError &e) { return e.GetCode(); - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; @@ -1050,7 +1098,13 @@ void Service::OnBackupExtensionDied(const string &&bundleName, bool isCleanCalle try { string callName = move(bundleName); HILOGE("Backup <%{public}s> Extension Process Died", callName.c_str()); - session_->VerifyBundleName(callName); + ErrCode ret = session_->VerifyBundleName(callName); + if (ret != ERR_OK) { + HILOGE("Backup Extension died error, verify bundleName failed, bundleName:%{public}s, ret:%{public}d", + bundleName.c_str(), ret); + ExtConnectDied(bundleName); + return; + } // 重新连接清理缓存 HILOGI("Clear backup extension data, bundleName: %{public}s", callName.c_str()); ExtConnectDied(callName); @@ -1690,7 +1744,13 @@ ErrCode Service::StartExtTimer(bool &isExtStart) return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - string bundleName = VerifyCallerAndGetCallerName(); + string bundleName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(bundleName); + if (ret != ERR_OK) { + HILOGE("Start extension timer fail, Get bundleName failed, ret:%{public}d", ret); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto timeoutCallback = TimeOutCallback(wptr(this), bundleName); session_->StopFwkTimer(bundleName); isExtStart = session_->StartExtTimer(bundleName, timeoutCallback); @@ -1714,7 +1774,14 @@ ErrCode Service::StartFwkTimer(bool &isFwkStart) return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - string bundleName = VerifyCallerAndGetCallerName(); + std::string bundleName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(bundleName); + if (ret != ERR_OK) { + HILOGE("Start fwk timer fail, Get bundleName failed, ret:%{public}d", ret); + isFwkStart = false; + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto timeoutCallback = TimeOutCallback(wptr(this), bundleName); session_->StopExtTimer(bundleName); isFwkStart = session_->StartFwkTimer(bundleName, timeoutCallback); @@ -1780,7 +1847,13 @@ ErrCode Service::UpdateTimer(BundleName &bundleName, uint32_t timeout, bool &res return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - VerifyCaller(); + ErrCode ret = VerifyCaller(); + if (ret != ERR_OK) { + HILOGE("Update timer failed, verify caller failed"); + result = false; + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto timeoutCallback = TimeOutCallback(wptr(this), bundleName); result = session_->UpdateTimer(bundleName, timeout, timeoutCallback); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); @@ -1795,7 +1868,6 @@ ErrCode Service::UpdateTimer(BundleName &bundleName, uint32_t timeout, bool &res ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool &result) { - try { HILOGI("Begin, bundle name:%{public}s, sendRate is:%{public}d", bundleName.c_str(), sendRate); if (session_ == nullptr || isOccupyingSession_.load()) { HILOGE("Update Send Rate error, session is empty."); @@ -1803,7 +1875,13 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); - VerifyCaller(); + ErrCode errCode = VerifyCaller(); + if (errCode != ERR_OK) { + HILOGE("Update send rate fail, verify caller failed, errCode:%{public}d", errCode); + result = false; + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return errCode; + } IServiceReverse::Scenario scenario = session_ -> GetScenario(); if (scenario != IServiceReverse::Scenario::BACKUP) { HILOGE("This method is applicable to the backup scenario"); @@ -1814,7 +1892,10 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool auto backupConnection = session_->GetExtConnection(bundleName); auto proxy = backupConnection->GetBackupExtProxy(); if (!proxy) { - throw BError(BError::Codes::SA_INVAL_ARG, "Extension backup Proxy is empty"); + HILOGE("Update send rate fail, extension proxy is empty"); + result = false; + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return BError(BError::Codes::SA_INVAL_ARG); } auto ret = proxy->UpdateFdSendRate(bundleName, sendRate); if (ret != NO_ERROR) { @@ -1825,12 +1906,6 @@ ErrCode Service::UpdateSendRate(std::string &bundleName, int32_t sendRate, bool result = true; session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::OK); - } catch (...) { - result = false; - session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); - HILOGI("Unexpected exception"); - return EPERM; - } } AAFwk::Want Service::CreateConnectWant (BundleName &bundleName) @@ -1968,7 +2043,12 @@ ErrCode Service::ReportAppProcessInfo(const std::string processInfo, BackupResto { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - string bundleName = VerifyCallerAndGetCallerName(); + string bundleName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(bundleName); + if (ret != ERR_OK) { + HILOGE("Report app process info failed, Get bundle name failed, ret:%{public}d", ret); + return ret; + } if (sennario == BackupRestoreScenario::FULL_RESTORE) { session_->GetServiceReverseProxy()->RestoreOnProcessInfo(bundleName, processInfo); } else if (sennario == BackupRestoreScenario::INCREMENTAL_RESTORE) { @@ -2100,4 +2180,14 @@ void Service::ReleaseOnException() HILOGE("Unexpected exception"); } } + +void Service::SetUserIdAndRestoreType(RestoreTypeEnum restoreType, int32_t userId) +{ + session_->SetImplRestoreType(restoreType); + if (userId != DEFAULT_INVAL_VALUE) { /* multi user scenario */ + session_->SetSessionUserId(userId); + } else { + session_->SetSessionUserId(GetUserIdDefault()); + } +} } // namespace OHOS::FileManagement::Backup diff --git a/services/backup_sa/src/module_ipc/service_incremental.cpp b/services/backup_sa/src/module_ipc/service_incremental.cpp index 079c59875..1cedcfa5a 100644 --- a/services/backup_sa/src/module_ipc/service_incremental.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental.cpp @@ -150,7 +150,12 @@ UniqueFd Service::GetLocalCapabilitiesIncremental(const std::vectorIncreaseSessionCnt(__PRETTY_FUNCTION__); - VerifyCaller(); + ErrCode errCode = VerifyCaller(); + if (errCode != ERR_OK) { + HILOGE("Get local abilities info failed, Verify caller failed, errCode:%{public}d", errCode); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return UniqueFd(-ENOENT); + } string path = BConstants::GetSaBundleBackupRootDir(GetUserIdDefault()); BExcepUltils::VerifyPath(path, false); CreateDirIfNotExist(path); @@ -271,7 +276,13 @@ ErrCode Service::GetAppLocalListAndDoIncrementalBackup() } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); session_->SetSessionUserId(GetUserIdDefault()); - std::string bundleName = VerifyCallerAndGetCallerName(); + std::string bundleName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(bundleName); + if (ret != ERR_OK) { + HILOGE("Get AppLocalList failed, Get bundle failed, ret:%{public}d", ret); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto task = [this, bundleName]() { StartGetFdTask(bundleName, wptr(this)); }; @@ -307,12 +318,16 @@ ErrCode Service::InitIncrementalBackupSession(sptr remote) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - VerifyCaller(); + ErrCode errCode = VerifyCaller(); + if (errCode != ERR_OK) { + HILOGE("Init incremental backup session fail, Verify caller failed, errCode:%{public}d", errCode); + return errCode; + } if (session_ == nullptr) { HILOGE("Init Incremental backup session error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - ErrCode errCode = session_->Active({.clientToken = IPCSkeleton::GetCallingTokenID(), + errCode = session_->Active({.clientToken = IPCSkeleton::GetCallingTokenID(), .scenario = IServiceReverse::Scenario::BACKUP, .clientProxy = remote, .userId = GetUserIdDefault(), @@ -340,14 +355,21 @@ vector Service::GetBundleNameByDetails(const std::vector &bundlesToBackup) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); + vector bundleNames; try { if (session_ == nullptr || isOccupyingSession_.load()) { HILOGE("Init Incremental backup session error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 - VerifyCaller(IServiceReverse::Scenario::BACKUP); - vector bundleNames = GetBundleNameByDetails(bundlesToBackup); + bundleNames = GetBundleNameByDetails(bundlesToBackup); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::BACKUP); + if (ret != ERR_OK) { + HILOGE("Append bundles incremental session failed, verify caller failed, ret:%{public}d", ret); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return ret; + } auto backupInfos = BundleMgrAdapter::GetBundleInfosForAppend(bundlesToBackup, session_->GetSessionUserId()); std::vector supportBackupNames = GetSupportBackupBundleNames(backupInfos, true, bundleNames); @@ -358,10 +380,12 @@ ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vectorDecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::OK); } catch (const BError &e) { + HandleExceptionOnAppendBundles(session_, bundleNames, {}); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); HILOGE("Failed, errCode = %{public}d", e.GetCode()); return e.GetCode(); } catch (...) { + HandleExceptionOnAppendBundles(session_, bundleNames, {}); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); HILOGI("Unexpected exception"); return EPERM; @@ -372,14 +396,21 @@ ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vector &infos) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); + vector bundleNames; try { if (session_ == nullptr || isOccupyingSession_.load()) { HILOGE("Init Incremental backup session error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 - VerifyCaller(IServiceReverse::Scenario::BACKUP); vector bundleNames = GetBundleNameByDetails(bundlesToBackup); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::BACKUP); + if (ret != ERR_OK) { + HILOGE("Append bundles incremental session with infos failed, verify caller failed, ret:%{public}d", ret); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + HandleExceptionOnAppendBundles(session_, bundleNames, {}); + return ret; + } std::vector bundleNamesOnly; std::map isClearDataFlags; std::map> bundleNameDetailMap = @@ -395,10 +426,12 @@ ErrCode Service::AppendBundlesIncrementalBackupSession(const std::vectorDecreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::OK); } catch (const BError &e) { + HandleExceptionOnAppendBundles(session_, bundleNames, {}); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); HILOGE("Failed, errCode = %{public}d", e.GetCode()); return e.GetCode(); } catch (...) { + HandleExceptionOnAppendBundles(session_, bundleNames, {}); session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); HILOGI("Unexpected exception"); return EPERM; @@ -430,7 +463,11 @@ ErrCode Service::PublishIncrementalFile(const BFileInfo &fileInfo) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - VerifyCaller(IServiceReverse::Scenario::RESTORE); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("PublishFile error, verify caller by scenario failed, ret:%{public}d", ret); + return ret; + } HILOGI("Start get ExtConnection, bundleName:%{public}s", fileInfo.owner.c_str()); if (!fileInfo.fileName.empty()) { HILOGE("Forbit to use PublishIncrementalFile with fileName for App"); @@ -449,16 +486,13 @@ ErrCode Service::PublishIncrementalFile(const BFileInfo &fileInfo) HILOGE("PublishIncrementalFile error, Extension backup Proxy is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - ErrCode res = proxy->PublishIncrementalFile(fileInfo.fileName); - if (res) { - HILOGE("Failed to publish file for backup extension"); + ret = proxy->PublishIncrementalFile(fileInfo.fileName); + if (ret != ERR_OK) { + HILOGE("Failed to publish file for backup extension, ret:%{public}d", ret); } - return res; + return ret; } catch (const BError &e) { return e.GetCode(); - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; @@ -486,7 +520,12 @@ ErrCode Service::AppIncrementalFileReady(const std::string &fileName, UniqueFd f { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - string callerName = VerifyCallerAndGetCallerName(); + std::string callerName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(callerName); + if (ret != ERR_OK) { + HILOGE("App increment file ready failed, ret:%{public}d", ret); + return ret; + } if (session_->GetScenario() == IServiceReverse::Scenario::RESTORE) { session_->GetServiceReverseProxy()->IncrementalRestoreOnFileReady(callerName, fileName, move(fd), move(manifestFd), errCode); @@ -527,9 +566,6 @@ ErrCode Service::AppIncrementalFileReady(const std::string &fileName, UniqueFd f return BError(BError::Codes::OK); } catch (const BError &e) { return e.GetCode(); // 任意异常产生,终止监听该任务 - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; @@ -544,7 +580,12 @@ ErrCode Service::AppIncrementalDone(ErrCode errCode) HILOGE("AppIncrementalDone error, session is null"); return BError(BError::Codes::SA_INVAL_ARG); } - string callerName = VerifyCallerAndGetCallerName(); + string callerName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(callerName); + if (ret != ERR_OK) { + HILOGE("App incremental done fail, ret:%{public}d", ret); + return ret; + } HILOGI("Service AppIncrementalDone start, callerName is %{public}s, errCode is: %{public}d", callerName.c_str(), errCode); if (session_->OnBundleFileReady(callerName) || errCode != BError(BError::Codes::OK)) { @@ -592,7 +633,12 @@ ErrCode Service::GetIncrementalFileHandle(const std::string &bundleName, const s HILOGE("GetIncrementalFileHandle error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - VerifyCaller(IServiceReverse::Scenario::RESTORE); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("Verify caller failed, bundleName:%{public}s, fileName:%{public}s", bundleName.c_str(), + GetAnonyPath(fileName).c_str()); + return ret; + } auto action = session_->GetServiceSchedAction(bundleName); if (action == BConstants::ServiceSchedAction::RUNNING) { auto backUpConnection = session_->GetExtConnection(bundleName); @@ -605,12 +651,12 @@ ErrCode Service::GetIncrementalFileHandle(const std::string &bundleName, const s HILOGE("GetIncrementalFileHandle error, Extension backup Proxy is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - ErrCode res = proxy->GetIncrementalFileHandle(fileName); - if (res != ERR_OK) { + ret = proxy->GetIncrementalFileHandle(fileName); + if (ret != ERR_OK) { HILOGE("Failed to extension file handle"); AppRadar::Info info (bundleName, "", ""); AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::GetIncrementalFileHandle", - GetUserIdDefault(), BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, res); + GetUserIdDefault(), BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, ret); } } else { SvcRestoreDepsManager::GetInstance().UpdateToRestoreBundleMap(bundleName, fileName); @@ -619,9 +665,6 @@ ErrCode Service::GetIncrementalFileHandle(const std::string &bundleName, const s return BError(BError::Codes::OK); } catch (const BError &e) { return e.GetCode(); - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; diff --git a/services/backup_sa/src/module_ipc/sub_service.cpp b/services/backup_sa/src/module_ipc/sub_service.cpp index 8bbdf2482..0b43f9463 100644 --- a/services/backup_sa/src/module_ipc/sub_service.cpp +++ b/services/backup_sa/src/module_ipc/sub_service.cpp @@ -78,8 +78,18 @@ ErrCode Service::Finish() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { - VerifyCaller(session_->GetScenario()); - session_->Finish(); + ErrCode ret = VerifyCaller(session_->GetScenario()); + if (ret != ERR_OK) { + HILOGE("Failde to Finish, verify caller failed, ret:%{public}d", ret); + ReleaseOnException(); + return ret; + } + ret = session_->Finish(); + if (ret != ERR_OK) { + HILOGE("Failde to Finish, session finish failed, ret:%{public}d", ret); + ReleaseOnException(); + return ret; + } OnAllBundlesFinished(BError(BError::Codes::OK)); return BError(BError::Codes::OK); } catch (const BError &e) { @@ -97,7 +107,11 @@ ErrCode Service::PublishFile(const BFileInfo &fileInfo) HILOGE("PublishFile error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - VerifyCaller(IServiceReverse::Scenario::RESTORE); + ErrCode ret = VerifyCaller(IServiceReverse::Scenario::RESTORE); + if (ret != ERR_OK) { + HILOGE("PublishFile error, verify caller by scenario failed, ret:%{public}d", ret); + return ret; + } if (!fileInfo.fileName.empty()) { HILOGE("Forbit to use publishFile with fileName for App"); return EPERM; @@ -119,9 +133,6 @@ ErrCode Service::PublishFile(const BFileInfo &fileInfo) return res; } catch (const BError &e) { return e.GetCode(); - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; @@ -136,9 +147,15 @@ ErrCode Service::AppFileReady(const string &fileName, UniqueFd fd, int32_t errCo HILOGE("AppFileReady error, session is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - string callerName = VerifyCallerAndGetCallerName(); + string callerName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(callerName); + if (ret != ERR_OK) { + HILOGE("AppFileReady error, Get bundle name failed, ret:%{public}d", ret); + return ret; + } if (fileName.find('/') != string::npos) { - throw BError(BError::Codes::SA_INVAL_ARG, "Filename is not valid"); + HILOGE("AppFileReady error, Filename is not valid, fileName:%{public}s", GetAnonyPath(fileName).c_str()); + return BError(BError::Codes::SA_INVAL_ARG); } if (fileName == BConstants::EXT_BACKUP_MANAGE) { fd = session_->OnBundleExtManageInfo(callerName, move(fd)); @@ -175,9 +192,6 @@ ErrCode Service::AppFileReady(const string &fileName, UniqueFd fd, int32_t errCo return BError(BError::Codes::OK); } catch (const BError &e) { return e.GetCode(); // 任意异常产生,终止监听该任务 - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; @@ -192,7 +206,12 @@ ErrCode Service::AppDone(ErrCode errCode) HILOGE("App finish error, session info is empty"); return BError(BError::Codes::SA_INVAL_ARG); } - string callerName = VerifyCallerAndGetCallerName(); + string callerName = ""; + ErrCode ret = VerifyCallerAndGetCallerName(callerName); + if (ret != ERR_OK) { + HILOGE("App done failed, Get bundle name failed, ret:%{public}d", ret); + return ret; + } HILOGI("Begin, callerName is: %{public}s, errCode: %{public}d", callerName.c_str(), errCode); if (session_->OnBundleFileReady(callerName) || errCode != BError(BError::Codes::OK)) { std::shared_ptr mutexPtr = GetExtensionMutex(callerName); @@ -246,7 +265,8 @@ ErrCode Service::LaunchBackupExtension(const BundleName &bundleName) } else if (scenario == IServiceReverse::Scenario::RESTORE) { action = BConstants::ExtensionAction::RESTORE; } else { - throw BError(BError::Codes::SA_INVAL_ARG, "Failed to scenario"); + HILOGE("Get scenario failed, scenario is:%{public}d", scenario); + return BError(BError::Codes::SA_INVAL_ARG); } if (SAUtils::IsSABundleName(bundleName)) { return LaunchBackupSAExtension(bundleName); @@ -273,9 +293,6 @@ ErrCode Service::LaunchBackupExtension(const BundleName &bundleName) return BError(BError::Codes::OK); } catch (const BError &e) { return e.GetCode(); - } catch (const exception &e) { - HILOGI("Catched an unexpected low-level exception %{public}s", e.what()); - return EPERM; } catch (...) { HILOGI("Unexpected exception"); return EPERM; diff --git a/services/backup_sa/src/module_ipc/svc_session_manager.cpp b/services/backup_sa/src/module_ipc/svc_session_manager.cpp index f47d3e151..84c255e36 100644 --- a/services/backup_sa/src/module_ipc/svc_session_manager.cpp +++ b/services/backup_sa/src/module_ipc/svc_session_manager.cpp @@ -39,25 +39,28 @@ namespace OHOS::FileManagement::Backup { using namespace std; -void SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const +ErrCode SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const { shared_lock lock(lock_); if (impl_.scenario != scenario) { - HILOGE("Inconsistent scenario, impl scenario:%{public}d", impl_.scenario); + HILOGE("Verify caller failed, Inconsistent scenario, impl scenario:%{public}d", impl_.scenario); AppRadar::Info info("", "", "Inconsistent scenario"); AppRadar::GetInstance().RecordDefaultFuncRes(info, "SvcSessionManager::VerifyCallerAndScenario", impl_.userId, BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::SDK_MIXED_SCENARIO).GetCode()); - throw BError(BError::Codes::SDK_MIXED_SCENARIO); + return BError(BError::Codes::SDK_MIXED_SCENARIO); } if (impl_.clientToken != clientToken) { + HILOGE("Verify caller failed, Caller mismatched"); AppRadar::Info info2("", "", "Caller mismatched"); AppRadar::GetInstance().RecordDefaultFuncRes(info2, "SvcSessionManager::VerifyCallerAndScenario", impl_.userId, BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::SDK_MIXED_SCENARIO).GetCode()); - throw BError(BError::Codes::SA_REFUSED_ACT, "Caller mismatched"); + + return BError(BError::Codes::SA_REFUSED_ACT); } HILOGD("Succeed to verify the caller"); + return BError(BError::Codes::OK); } SvcSessionManager::Impl SvcSessionManager::GetImpl() @@ -80,32 +83,40 @@ ErrCode SvcSessionManager::Active(Impl newImpl, bool isOccupyingSession) } if (!isOccupyingSession && !newImpl.clientToken) { - throw BError(BError::Codes::SA_INVAL_ARG, "No caller token was specified"); + HILOGE("Active session fail, No caller token was specified"); + return BError(BError::Codes::SA_INVAL_ARG); } if (!isOccupyingSession && newImpl.scenario == IServiceReverse::Scenario::UNDEFINED) { - throw BError(BError::Codes::SA_INVAL_ARG, "No scenario was specified"); + HILOGE("Active session fail, No scenario was specified"); + return BError(BError::Codes::SA_INVAL_ARG); } if (!isOccupyingSession) { - InitClient(newImpl); + ErrCode ret = InitClient(newImpl); + if (ret != BError(BError::Codes::OK)) { + HILOGE("Active session failed, init client error"); + return ret; + } } impl_ = newImpl; IncreaseSessionCnt(__PRETTY_FUNCTION__); return BError(BError::Codes::OK); } -void SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) +ErrCode SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) { unique_lock lock(lock_); if (!impl_.clientToken) { - HILOGI("Empty session"); - return; + HILOGE("Deactive session fail, caller token is invalid"); + return BError(BError::Codes::SA_INVAL_ARG); } if (!force && (!impl_.clientToken || !impl_.clientProxy)) { - return; + HILOGE("Deactive session fail, client proxy is invalid"); + return BError(BError::Codes::SA_INVAL_ARG); } if (!force && (remoteInAction != impl_.clientProxy->AsObject())) { - throw BError(BError::Codes::SA_INVAL_ARG, "Only the client actived the session can deactive it"); + HILOGE("Deactive session fail, Only the client actived the session can deactive it"); + return BError(BError::Codes::SA_INVAL_ARG); } deathRecipient_ = nullptr; @@ -121,21 +132,23 @@ void SvcSessionManager::Deactive(const wptr &remoteInAction, bool impl_ = {}; extConnectNum_ = 0; DecreaseSessionCnt(__PRETTY_FUNCTION__); + return BError(BError::Codes::OK); } -void SvcSessionManager::VerifyBundleName(string &bundleName) +ErrCode SvcSessionManager::VerifyBundleName(string &bundleName) { shared_lock lock(lock_); if (!impl_.clientToken) { - throw BError(BError::Codes::SA_INVAL_ARG, "No caller token was specified"); + HILOGE("Verify bundle name failed, No caller token was specified, bundleName:%{public}s", bundleName.c_str()); + return BError(BError::Codes::SA_INVAL_ARG); } auto asVerify = [&bundleName](const auto &it) { return it.first == bundleName; }; if (none_of(impl_.backupExtNameMap.begin(), impl_.backupExtNameMap.end(), asVerify)) { - stringstream ss; - ss << "Could not find the " << bundleName << " from current session"; - throw BError(BError::Codes::SA_REFUSED_ACT, ss.str()); + HILOGE("Could not find the bundle from current session, bundleName:%{public}s", bundleName.c_str()); + return BError(BError::Codes::SA_REFUSED_ACT); } HILOGD("Succeed to verify the bundleName"); + return BError(BError::Codes::OK); } sptr SvcSessionManager::GetServiceReverseProxy() @@ -151,7 +164,8 @@ IServiceReverse::Scenario SvcSessionManager::GetScenario() { shared_lock lock(lock_); if (!impl_.clientToken) { - throw BError(BError::Codes::SA_INVAL_ARG, "No caller token was specified"); + HILOGE("Get scenario failed, No caller token was specified"); + return IServiceReverse::Scenario::UNDEFINED; } return impl_.scenario; } @@ -357,14 +371,16 @@ void SvcSessionManager::DumpInfo(const int fd, const std::vector dprintf(fd, "Scenario: %d\n", impl_.scenario); } -void SvcSessionManager::InitClient(Impl &newImpl) +ErrCode SvcSessionManager::InitClient(Impl &newImpl) { if (!newImpl.clientProxy) { - throw BError(BError::Codes::SA_INVAL_ARG, "Invalid client"); + HILOGE("Init client error, Invalid client"); + return BError(BError::Codes::SA_INVAL_ARG); } auto remoteObj = newImpl.clientProxy->AsObject(); if (!remoteObj) { - throw BError(BError::Codes::SA_BROKEN_IPC, "Proxy's remote object can't be nullptr"); + HILOGE("Init client error, Proxy's remote object can't be nullptr"); + return BError(BError::Codes::SA_BROKEN_IPC); } auto callback = [revPtr {reversePtr_}](const wptr &obj) { @@ -389,6 +405,7 @@ void SvcSessionManager::InitClient(Impl &newImpl) BizStageBackup::BIZ_STAGE_ACTIVE_SESSION, ERR_OK); } HILOGI("Succeed to active a session"); + return BError(BError::Codes::OK); } void SvcSessionManager::SetExtFileNameRequest(const string &bundleName, const string &fileName) @@ -556,22 +573,26 @@ sptr SvcSessionManager::CreateBackupConnection(BundleName & return GetBackupAbilityExt(bundleName); } -void SvcSessionManager::Start() +ErrCode SvcSessionManager::Start() { unique_lock lock(lock_); if (!impl_.clientToken) { - throw BError(BError::Codes::SA_INVAL_ARG, "No caller token was specified"); + HILOGE("Start error, No caller token was specified"); + return BError(BError::Codes::SA_INVAL_ARG); } impl_.isBackupStart = true; + return BError(BError::Codes::OK); } -void SvcSessionManager::Finish() +ErrCode SvcSessionManager::Finish() { unique_lock lock(lock_); if (!impl_.clientToken) { - throw BError(BError::Codes::SA_INVAL_ARG, "No caller token was specified"); + HILOGE("Finish error, No caller token was specified"); + return BError(BError::Codes::SA_INVAL_ARG); } impl_.isAppendFinish = true; + return BError(BError::Codes::OK); } bool SvcSessionManager::IsOnAllBundlesFinished() diff --git a/tests/mock/module_ipc/service_mock.cpp b/tests/mock/module_ipc/service_mock.cpp index b4f761a70..d0d75a043 100644 --- a/tests/mock/module_ipc/service_mock.cpp +++ b/tests/mock/module_ipc/service_mock.cpp @@ -37,9 +37,9 @@ UniqueFd Service::GetLocalCapabilities() void Service::StopAll(const wptr &obj, bool force) {} -string Service::VerifyCallerAndGetCallerName() +ErrCode Service::VerifyCallerAndGetCallerName(std::string &bundleName) { - return ""; + return BError(BError::Codes::OK); } ErrCode Service::InitRestoreSession(sptr remote) @@ -143,9 +143,15 @@ void Service::ExtConnectDone(string bundleName) {} void Service::ClearSessionAndSchedInfo(const string &bundleName) {} -void Service::VerifyCaller() {} +ErrCode Service::VerifyCaller() +{ + return BError(BError::Codes::OK); +} -void Service::VerifyCaller(IServiceReverse::Scenario scenario) {} +ErrCode Service::VerifyCaller(IServiceReverse::Scenario scenario) +{ + return BError(BError::Codes::OK); +} void Service::OnAllBundlesFinished(ErrCode errCode) {} diff --git a/tests/mock/module_ipc/src/svc_session_manager_mock.cpp b/tests/mock/module_ipc/src/svc_session_manager_mock.cpp index 59c9e2a34..ecf57d105 100644 --- a/tests/mock/module_ipc/src/svc_session_manager_mock.cpp +++ b/tests/mock/module_ipc/src/svc_session_manager_mock.cpp @@ -15,21 +15,31 @@ #include "module_ipc/svc_session_manager.h" +#include "b_error/b_error.h" #include "svc_session_manager_mock.h" namespace OHOS::FileManagement::Backup { using namespace std; -void SvcSessionManager::VerifyCallerAndScenario(uint32_t, IServiceReverse::Scenario) const {} +ErrCode SvcSessionManager::VerifyCallerAndScenario(uint32_t, IServiceReverse::Scenario) const +{ + return BError(BError::Codes::OK); +} ErrCode SvcSessionManager::Active(Impl newImpl, bool force) { return BSvcSessionManager::sessionManager->Active(newImpl, force); } -void SvcSessionManager::Deactive(const wptr &, bool) {} +ErrCode SvcSessionManager::Deactive(const wptr &, bool) +{ + return BError(BError::Codes::OK); +} -void SvcSessionManager::VerifyBundleName(string &bundleName) {} +ErrCode SvcSessionManager::VerifyBundleName(string &bundleName) +{ + return BError(BError::Codes::OK); +} sptr SvcSessionManager::GetServiceReverseProxy() { @@ -65,7 +75,10 @@ sptr SvcSessionManager::GetBackupAbilityExt(const string &b void SvcSessionManager::DumpInfo(const int, const std::vector &) {} -void SvcSessionManager::InitClient(Impl &) {} +ErrCode SvcSessionManager::InitClient(Impl &) +{ + return BError(BError::Codes::OK); +} void SvcSessionManager::SetExtFileNameRequest(const string &bundleName, const string &) {} @@ -117,9 +130,15 @@ sptr SvcSessionManager::CreateBackupConnection(BundleName & return BSvcSessionManager::sessionManager->CreateBackupConnection(bundleName); } -void SvcSessionManager::Start() {} +ErrCode SvcSessionManager::Start() +{ + return BError(BError::Codes::OK); +} -void SvcSessionManager::Finish() {} +ErrCode SvcSessionManager::Finish() +{ + return BError(BError::Codes::OK); +} bool SvcSessionManager::IsOnAllBundlesFinished() { diff --git a/tests/mock/module_ipc/svc_session_manager_mock.cpp b/tests/mock/module_ipc/svc_session_manager_mock.cpp index 257ad09c2..552aea392 100644 --- a/tests/mock/module_ipc/svc_session_manager_mock.cpp +++ b/tests/mock/module_ipc/svc_session_manager_mock.cpp @@ -36,9 +36,10 @@ static int32_t g_nFileReadyNum = 0; static int32_t g_nAllBundlesFinished = 0; } // namespace -void SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const +ErrCode SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const { GTEST_LOG_(INFO) << "VerifyCallerAndScenario"; + return BError(BError::Codes::OK); } ErrCode SvcSessionManager::Active(Impl newImpl, bool force) @@ -49,14 +50,16 @@ ErrCode SvcSessionManager::Active(Impl newImpl, bool force) return BError(BError::Codes::OK); } -void SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) +ErrCode SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) { GTEST_LOG_(INFO) << "Deactive"; + return BError(BError::Codes::OK); } -void SvcSessionManager::VerifyBundleName(string &bundleName) +ErrCode SvcSessionManager::VerifyBundleName(string &bundleName) { GTEST_LOG_(INFO) << "VerifyBundleName " << bundleName; + return BError(BError::Codes::OK); } sptr SvcSessionManager::GetServiceReverseProxy() @@ -123,9 +126,10 @@ void SvcSessionManager::DumpInfo(const int fd, const std::vector GTEST_LOG_(INFO) << "DumpInfo"; } -void SvcSessionManager::InitClient(Impl &newImpl) +ErrCode SvcSessionManager::InitClient(Impl &newImpl) { GTEST_LOG_(INFO) << "InitClient"; + return BError(BError::Codes::OK); } void SvcSessionManager::SetExtFileNameRequest(const string &bundleName, const string &fileName) @@ -255,9 +259,15 @@ sptr SvcSessionManager::CreateBackupConnection(BundleName & return GetBackupAbilityExt(bundleName); } -void SvcSessionManager::Start() {} +ErrCode SvcSessionManager::Start() +{ + return BError(BError::Codes::OK); +} -void SvcSessionManager::Finish() {} +ErrCode SvcSessionManager::Finish() +{ + return BError(BError::Codes::OK); +} bool SvcSessionManager::IsOnAllBundlesFinished() { diff --git a/tests/mock/module_ipc/svc_session_manager_throw_mock.cpp b/tests/mock/module_ipc/svc_session_manager_throw_mock.cpp index 8a0b29390..5946c1c44 100644 --- a/tests/mock/module_ipc/svc_session_manager_throw_mock.cpp +++ b/tests/mock/module_ipc/svc_session_manager_throw_mock.cpp @@ -19,9 +19,9 @@ namespace OHOS::FileManagement::Backup { using namespace std; -void SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const +ErrCode SvcSessionManager::VerifyCallerAndScenario(uint32_t clientToken, IServiceReverse::Scenario scenario) const { - BackupSvcSessionManager::session->VerifyCallerAndScenario(clientToken, scenario); + return BackupSvcSessionManager::session->VerifyCallerAndScenario(clientToken, scenario); } ErrCode SvcSessionManager::Active(Impl newImpl, bool force) @@ -29,14 +29,14 @@ ErrCode SvcSessionManager::Active(Impl newImpl, bool force) return BackupSvcSessionManager::session->Active(newImpl); } -void SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) +ErrCode SvcSessionManager::Deactive(const wptr &remoteInAction, bool force) { - BackupSvcSessionManager::session->Deactive(remoteInAction, force); + return BackupSvcSessionManager::session->Deactive(remoteInAction, force); } -void SvcSessionManager::VerifyBundleName(string &bundleName) +ErrCode SvcSessionManager::VerifyBundleName(string &bundleName) { - BackupSvcSessionManager::session->VerifyBundleName(bundleName); + return BackupSvcSessionManager::session->VerifyBundleName(bundleName); } sptr SvcSessionManager::GetServiceReverseProxy() @@ -79,9 +79,9 @@ void SvcSessionManager::DumpInfo(const int fd, const std::vector BackupSvcSessionManager::session->DumpInfo(fd, args); } -void SvcSessionManager::InitClient(Impl &newImpl) +ErrCode SvcSessionManager::InitClient(Impl &newImpl) { - BackupSvcSessionManager::session->InitClient(newImpl); + return BackupSvcSessionManager::session->InitClient(newImpl); } void SvcSessionManager::SetExtFileNameRequest(const string &bundleName, const string &fileName) @@ -149,14 +149,14 @@ sptr SvcSessionManager::CreateBackupConnection(BundleName & return BackupSvcSessionManager::session->CreateBackupConnection(bundleName); } -void SvcSessionManager::Start() +ErrCode SvcSessionManager::Start() { - BackupSvcSessionManager::session->Start(); + return BackupSvcSessionManager::session->Start(); } -void SvcSessionManager::Finish() +ErrCode SvcSessionManager::Finish() { - BackupSvcSessionManager::session->Finish(); + return BackupSvcSessionManager::session->Finish(); } bool SvcSessionManager::IsOnAllBundlesFinished() diff --git a/tests/mock/module_ipc/svc_session_manager_throw_mock.h b/tests/mock/module_ipc/svc_session_manager_throw_mock.h index cb9904f73..8f5f4796a 100644 --- a/tests/mock/module_ipc/svc_session_manager_throw_mock.h +++ b/tests/mock/module_ipc/svc_session_manager_throw_mock.h @@ -27,10 +27,10 @@ class BackupSvcSessionManager { public: virtual ~BackupSvcSessionManager() = default; public: - virtual void VerifyCallerAndScenario(uint32_t, IServiceReverse::Scenario) = 0; + virtual ErrCode VerifyCallerAndScenario(uint32_t, IServiceReverse::Scenario) = 0; virtual ErrCode Active(SvcSessionManager::Impl) = 0; - virtual void Deactive(const wptr &, bool) = 0; - virtual void VerifyBundleName(std::string &) = 0; + virtual ErrCode Deactive(const wptr &, bool) = 0; + virtual ErrCode VerifyBundleName(std::string &) = 0; virtual sptr GetServiceReverseProxy() = 0; virtual IServiceReverse::Scenario GetScenario() = 0; virtual bool OnBundleFileReady(const std::string &, const std::string &) = 0; @@ -39,7 +39,7 @@ public: virtual wptr GetExtConnection(const BundleName &) = 0; virtual sptr GetBackupAbilityExt(const std::string &) = 0; virtual void DumpInfo(const int, const std::vector &) = 0; - virtual void InitClient(SvcSessionManager::Impl &) = 0; + virtual ErrCode InitClient(SvcSessionManager::Impl &) = 0; virtual void SetExtFileNameRequest(const std::string &, const std::string &) = 0; virtual std::set GetExtFileNameRequest(const std::string &) = 0; virtual std::map::iterator GetBackupExtNameMap(const std::string &) = 0; @@ -53,8 +53,8 @@ public: virtual std::weak_ptr GetSAExtConnection(const BundleName &) = 0; virtual void AppendBundles(const std::vector &) = 0; virtual sptr CreateBackupConnection(BundleName &) = 0; - virtual void Start() = 0; - virtual void Finish() = 0; + virtual ErrCode Start() = 0; + virtual ErrCode Finish() = 0; virtual bool IsOnAllBundlesFinished() = 0; virtual bool IsOnOnStartSched() = 0; virtual bool NeedToUnloadService() = 0; @@ -96,10 +96,10 @@ public: class SvcSessionManagerMock : public BackupSvcSessionManager { public: - MOCK_METHOD(void, VerifyCallerAndScenario, (uint32_t, IServiceReverse::Scenario)); + MOCK_METHOD(ErrCode, VerifyCallerAndScenario, (uint32_t, IServiceReverse::Scenario)); MOCK_METHOD(ErrCode, Active, (SvcSessionManager::Impl)); - MOCK_METHOD(void, Deactive, (const wptr &, bool)); - MOCK_METHOD(void, VerifyBundleName, (std::string &)); + MOCK_METHOD(ErrCode, Deactive, (const wptr &, bool)); + MOCK_METHOD(ErrCode, VerifyBundleName, (std::string &)); MOCK_METHOD(sptr, GetServiceReverseProxy, ()); MOCK_METHOD(IServiceReverse::Scenario, GetScenario, ()); MOCK_METHOD(bool, OnBundleFileReady, (const std::string &, const std::string &)); @@ -108,7 +108,7 @@ public: MOCK_METHOD(wptr, GetExtConnection, (const BundleName &)); MOCK_METHOD(sptr, GetBackupAbilityExt, (const std::string &)); MOCK_METHOD(void, DumpInfo, (const int, const std::vector &)); - MOCK_METHOD(void, InitClient, (SvcSessionManager::Impl &)); + MOCK_METHOD(ErrCode, InitClient, (SvcSessionManager::Impl &)); MOCK_METHOD(void, SetExtFileNameRequest, (const std::string &, const std::string &)); MOCK_METHOD(std::set, GetExtFileNameRequest, (const std::string &)); MOCK_METHOD((std::map::iterator), GetBackupExtNameMap, (const std::string &)); @@ -122,8 +122,8 @@ public: MOCK_METHOD(std::weak_ptr, GetSAExtConnection, (const BundleName &)); MOCK_METHOD(void, AppendBundles, (const std::vector &)); MOCK_METHOD(sptr, CreateBackupConnection, (BundleName &)); - MOCK_METHOD(void, Start, ()); - MOCK_METHOD(void, Finish, ()); + MOCK_METHOD(ErrCode, Start, ()); + MOCK_METHOD(ErrCode, Finish, ()); MOCK_METHOD(bool, IsOnAllBundlesFinished, ()); MOCK_METHOD(bool, IsOnOnStartSched, ()); MOCK_METHOD(bool, NeedToUnloadService, ()); diff --git a/tests/unittests/backup_sa/module_ipc/BUILD.gn b/tests/unittests/backup_sa/module_ipc/BUILD.gn index 400061e87..dcb925b20 100644 --- a/tests/unittests/backup_sa/module_ipc/BUILD.gn +++ b/tests/unittests/backup_sa/module_ipc/BUILD.gn @@ -165,8 +165,10 @@ ohos_unittest("backup_service_throw_test") { sources = [ "${path_backup_mock}/accesstoken/accesstoken_kit_mock.cpp", "${path_backup_mock}/module_ipc/app_gallery_dispose_proxy_mock.cpp", + "${path_backup_mock}/module_ipc/src/ipc_skeleton_mock.cpp", "${path_backup_mock}/module_ipc/svc_session_manager_throw_mock.cpp", "${path_backup_mock}/timer/timer_mock.cpp", + "${path_backup_mock}/utils_mock/src/b_jsonutil_mock", "${path_backup}/services/backup_sa/src/module_ipc/sa_backup_connection.cpp", "${path_backup}/services/backup_sa/src/module_ipc/service.cpp", "${path_backup}/services/backup_sa/src/module_ipc/service_incremental.cpp", @@ -183,8 +185,11 @@ ohos_unittest("backup_service_throw_test") { "${path_backup}/services/backup_sa/include", "${path_backup}/interfaces/inner_api/native/backup_kit_inner/impl", "${path_backup}/tests/unittests/backup_api/backup_impl/include", + "${path_backup_mock}/accesstoken/include", "${path_backup_mock}/b_process", "${path_backup_mock}/module_ipc", + "${path_backup_mock}/module_ipc/include", + "${path_backup_mock}/utils_mock/include", ] deps = [ 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 1bfc002e1..524f08f8a 100644 --- a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp @@ -42,9 +42,9 @@ UniqueFd Service::GetLocalCapabilities() void Service::StopAll(const wptr &obj, bool force) {} -string Service::VerifyCallerAndGetCallerName() +ErrCode Service::VerifyCallerAndGetCallerName(std::string &bundleName) { - return ""; + return BError(BError::Codes::OK); } ErrCode Service::InitRestoreSession(sptr remote) @@ -148,9 +148,15 @@ void Service::ExtConnectDone(string bundleName) {} void Service::ClearSessionAndSchedInfo(const string &bundleName) {} -void Service::VerifyCaller() {} +ErrCode Service::VerifyCaller() +{ + return BError(BError::Codes::OK); +} -void Service::VerifyCaller(IServiceReverse::Scenario scenario) {} +ErrCode Service::VerifyCaller(IServiceReverse::Scenario scenario) +{ + return BError(BError::Codes::OK); +} void Service::OnAllBundlesFinished(ErrCode errCode) {} 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 fe7fe1918..a534d167f 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -485,25 +485,28 @@ HWTEST_F(ServiceTest, SUB_Service_VerifyCallerAndGetCallerName_0100, TestSize.Le GTEST_LOG_(INFO) << "ServiceTest-begin SUB_Service_VerifyCallerAndGetCallerName_0100"; try { ASSERT_TRUE(service != nullptr); + std::string bundleName = ""; 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(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCallerAndGetCallerName(), BError); + auto ret = service->VerifyCallerAndGetCallerName(bundleName); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).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("")); - auto ret = service->VerifyCallerAndGetCallerName(); - EXPECT_TRUE(ret.empty()); + ret = service->VerifyCallerAndGetCallerName(bundleName); + EXPECT_TRUE(bundleName.empty()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCallerAndGetCallerName(), BError); + ret = service->VerifyCallerAndGetCallerName(bundleName); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by VerifyCallerAndGetCallerName."; @@ -531,22 +534,25 @@ HWTEST_F(ServiceTest, SUB_Service_VerifyCaller_0100, TestSize.Level1) .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCaller(), BError); + ErrCode ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE)); EXPECT_CALL(*token, VerifyAccessToken(_, _)) .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED)); - service->VerifyCaller(); - EXPECT_TRUE(true); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, 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, VerifyAccessToken(_, _)) .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) + .WillOnce(Return(make_pair(true, DEBUG_ID + 1))) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCaller(), BError); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); @@ -554,16 +560,19 @@ HWTEST_F(ServiceTest, SUB_Service_VerifyCaller_0100, TestSize.Level1) .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED)); EXPECT_CALL(*token, IsSystemAppByFullTokenID(_)).WillOnce(Return(false)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) + .WillOnce(Return(make_pair(true, DEBUG_ID + 1))) + .WillOnce(Return(make_pair(true, DEBUG_ID + 1))) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCaller(), BError); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_HAP)); EXPECT_CALL(*token, VerifyAccessToken(_, _)) .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED)); EXPECT_CALL(*token, IsSystemAppByFullTokenID(_)).WillOnce(Return(true)); - service->VerifyCaller(); - EXPECT_TRUE(true); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by VerifyCaller."; @@ -590,19 +599,21 @@ HWTEST_F(ServiceTest, SUB_Service_VerifyCaller_0200, TestSize.Level1) EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::XTS_UID)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCaller(), BError); + ErrCode ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_SHELL)); EXPECT_CALL(*skeleton, GetCallingUid()).WillOnce(Return(BConstants::SYSTEM_UID)); - service->VerifyCaller(); - EXPECT_TRUE(true); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); EXPECT_CALL(*skeleton, GetCallingTokenID()).WillOnce(Return(0)); EXPECT_CALL(*token, GetTokenType(_)).WillOnce(Return(Security::AccessToken::ATokenTypeEnum::TOKEN_INVALID)); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); - EXPECT_THROW(service->VerifyCaller(), BError); + ret = service->VerifyCaller(); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by VerifyCaller."; @@ -867,8 +878,8 @@ HWTEST_F(ServiceTest, SUB_Service_SetCurrentSessProperties_0200, TestSize.Level1 map> bundleNameDetailMap; map isClearDataFlags; RestoreTypeEnum restoreType = RestoreTypeEnum::RESTORE_DATA_WAIT_SEND; - EXPECT_THROW(service->SetCurrentSessProperties(restoreBundleInfos, restoreBundleNames, bundleNameDetailMap, - isClearDataFlags, restoreType), BError); + service->SetCurrentSessProperties(restoreBundleInfos, restoreBundleNames, bundleNameDetailMap, + isClearDataFlags, restoreType); restoreBundleNames.emplace_back("bundleName"); EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName")) @@ -1534,7 +1545,7 @@ HWTEST_F(ServiceTest, SUB_Service_UpdateSendRate_0000, TestSize.Level1) EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, GetBackupExtProxy()).WillOnce(Return(nullptr)); ret = service->UpdateSendRate(bundleName, 0, result); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceTest-an exception occurred by UpdateSendRate."; diff --git a/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp b/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp index cb112e077..6a9f3654f 100644 --- a/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp @@ -16,6 +16,9 @@ #include #include +#include "accesstoken_kit_mock.h" +#include "b_jsonutil_mock.h" +#include "ipc_skeleton_mock.h" #include "module_ipc/service.h" #include "svc_session_manager_throw_mock.h" #include "test_manager.h" @@ -35,6 +38,9 @@ public: static inline sptr service = nullptr; static inline shared_ptr sessionMock = nullptr; + static inline shared_ptr jsonUtil = nullptr; + static inline shared_ptr skeleton = nullptr; + static inline shared_ptr token = nullptr; }; void ServiceThrowTest::SetUpTestCase(void) @@ -43,6 +49,12 @@ void ServiceThrowTest::SetUpTestCase(void) service = sptr(new Service(SERVICE_ID)); sessionMock = make_shared(); SvcSessionManagerMock::session = sessionMock; + jsonUtil = make_shared(); + BJsonUtilMock::jsonUtil = jsonUtil; + skeleton = make_shared(); + IPCSkeletonMock::skeleton = skeleton; + token = make_shared(); + AccessTokenKitMock::token = token; } void ServiceThrowTest::TearDownTestCase() @@ -51,6 +63,12 @@ void ServiceThrowTest::TearDownTestCase() service = nullptr; SvcSessionManagerMock::session = nullptr; sessionMock = nullptr; + BJsonUtilMock::jsonUtil = nullptr; + jsonUtil = nullptr; + IPCSkeletonMock::skeleton = nullptr; + skeleton = nullptr; + AccessTokenKitMock::token = nullptr; + token = nullptr; } /** @@ -108,27 +126,10 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitRestoreSession_0100, testing::e GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitRestoreSession_0100"; try { EXPECT_NE(service, nullptr); - EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return 0; - })); - EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return()); + EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT))); + EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); auto ret = service->InitRestoreSession(nullptr); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - return 0; - })); - ret = service->InitRestoreSession(nullptr); - EXPECT_EQ(ret, EPERM); - - EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Invoke([]() { - throw "未知错误"; - return 0; - })); - ret = service->InitRestoreSession(nullptr); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by InitRestoreSession."; @@ -153,7 +154,7 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitBackupSession_0100, testing::ex EXPECT_CALL(*sessionMock, SetMemParaCurSize(_)).WillOnce(Invoke([]() { throw BError(BError::Codes::EXT_THROW_EXCEPTION); })); - EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return()); + EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); auto ret = service->InitBackupSession(nullptr); EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); } catch (...) { @@ -313,83 +314,7 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppendBundlesDetailsBackupSession_0 GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppendBundlesDetailsBackupSession_0100"; } -/** - * @tc.number: SUB_Service_throw_PublishFile_0100 - * @tc.name: SUB_Service_throw_PublishFile_0100 - * @tc.desc: 测试 PublishFile 接口的 catch 分支 - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: issuesIAC04T - */ -HWTEST_F(ServiceThrowTest, SUB_Service_throw_PublishFile_0100, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_PublishFile_0100"; - try { - EXPECT_NE(service, nullptr); - BFileInfo fileInfo; - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); - auto ret = service->PublishFile(fileInfo); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - ret = service->PublishFile(fileInfo); - EXPECT_EQ(ret, EPERM); - - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw "未知错误"; - })); - ret = service->PublishFile(fileInfo); - EXPECT_EQ(ret, EPERM); - } catch (...) { - EXPECT_TRUE(false); - GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by PublishFile."; - } - GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_PublishFile_0100"; -} - -/** - * @tc.number: SUB_Service_throw_AppFileReady_0100 - * @tc.name: SUB_Service_throw_AppFileReady_0100 - * @tc.desc: 测试 AppFileReady 接口的 catch 分支 - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: issuesIAC04T - */ -HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppFileReady_0100, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppFileReady_0100"; - try { - EXPECT_NE(service, nullptr); - string fileName; - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); - auto ret = service->AppFileReady(fileName, UniqueFd(-1), 0); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - ret = service->AppFileReady(fileName, UniqueFd(-1), 0); - EXPECT_EQ(ret, EPERM); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw "未知错误"; - })); - ret = service->AppFileReady(fileName, UniqueFd(-1), 0); - EXPECT_EQ(ret, EPERM); - } catch (...) { - EXPECT_TRUE(false); - GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppFileReady."; - } - GTEST_LOG_(INFO) << "ServiceThrowTest-end SUB_Service_throw_AppFileReady_0100"; -} /** * @tc.number: SUB_Service_throw_AppDone_0100 @@ -405,25 +330,10 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppDone_0100, testing::ext::TestSiz GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppDone_0100"; try { EXPECT_NE(service, nullptr); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(return BError(BError::Codes::SA_INVAL_ARG))); EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); auto ret = service->AppDone(0); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); - ret = service->AppDone(0); - EXPECT_EQ(ret, EPERM); - - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw "未知错误"; - })); - ret = service->AppDone(0); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppDone."; @@ -446,26 +356,9 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_LaunchBackupExtension_0100, testing try { EXPECT_NE(service, nullptr); BundleName bundleName; - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return IServiceReverse::Scenario::UNDEFINED; - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); auto ret = service->LaunchBackupExtension(bundleName); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - return IServiceReverse::Scenario::UNDEFINED; - })); - ret = service->LaunchBackupExtension(bundleName); - EXPECT_EQ(ret, EPERM); - - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw "未知错误"; - return IServiceReverse::Scenario::UNDEFINED; - })); - ret = service->LaunchBackupExtension(bundleName); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by LaunchBackupExtension."; @@ -489,23 +382,15 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetFileHandle_0100, testing::ext::T EXPECT_NE(service, nullptr); string bundleName; string fileName; - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SDK_MIXED_SCENARIO))); auto ret = service->GetFileHandle(bundleName, fileName); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SA_REFUSED_ACT))); ret = service->GetFileHandle(bundleName, fileName); - EXPECT_EQ(ret, EPERM); - - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw "未知错误"; - })); - ret = service->GetFileHandle(bundleName, fileName); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetFileHandle."; @@ -528,15 +413,9 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_OnBackupExtensionDied_0100, testing try { EXPECT_NE(service, nullptr); string bundleName; - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)) - .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)) - .WillOnce(Invoke([]() { - throw "未知错误"; - return IServiceReverse::Scenario::UNDEFINED; - })); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); EXPECT_CALL(*sessionMock, StopFwkTimer(_)).WillOnce(Invoke([]() { throw BError(BError::Codes::EXT_THROW_EXCEPTION); return true; @@ -569,16 +448,7 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_ExtStart_0100, testing::ext::TestSi try { EXPECT_NE(service, nullptr); string bundleName; - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return IServiceReverse::Scenario::UNDEFINED; - })).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return IServiceReverse::Scenario::UNDEFINED; - })); - EXPECT_CALL(*sessionMock, RemoveExtInfo(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); service->ExtStart(bundleName); EXPECT_TRUE(true); @@ -604,24 +474,15 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_ExtConnectFailed_0100, testing::ext try { EXPECT_NE(service, nullptr); BundleName bundleName; - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return IServiceReverse::Scenario::UNDEFINED; - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); service->ExtConnectFailed(bundleName, 0); EXPECT_TRUE(true); - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - return IServiceReverse::Scenario::UNDEFINED; - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); service->ExtConnectFailed(bundleName, 0); EXPECT_TRUE(true); - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw "未知错误"; - return IServiceReverse::Scenario::UNDEFINED; - })); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); service->ExtConnectFailed(bundleName, 0); EXPECT_TRUE(true); } catch (...) { @@ -647,10 +508,9 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_NoticeClientFinish_0100, testing::e EXPECT_NE(service, nullptr); string bundleName; ErrCode errCode = 0; - EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return IServiceReverse::Scenario::UNDEFINED; - })); + EXPECT_CALL(*sessionMock, GetScenario()) + .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)) + .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); service->NoticeClientFinish(bundleName, errCode); EXPECT_TRUE(true); @@ -902,14 +762,11 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitIncrementalBackupSession_0100, GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_InitIncrementalBackupSession_0100"; try { EXPECT_NE(service, nullptr); - EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - return 0; - })); - EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return()); + EXPECT_CALL(*sessionMock, Active(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); + EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); auto ret = service->InitIncrementalBackupSession(nullptr); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by InitIncrementalBackupSession."; @@ -1003,23 +860,15 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_PublishIncrementalFile_0100, testin try { EXPECT_NE(service, nullptr); BFileInfo fileInfo; - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SDK_MIXED_SCENARIO))); auto ret = service->PublishIncrementalFile(fileInfo); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - ret = service->PublishIncrementalFile(fileInfo); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw "未知错误"; - })); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SA_REFUSED_ACT))); ret = service->PublishIncrementalFile(fileInfo); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by PublishIncrementalFile."; @@ -1042,23 +891,21 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppIncrementalFileReady_0100, testi try { EXPECT_NE(service, nullptr); string fileName; - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + 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("bundleName")); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); auto ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), 0); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), 0); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw "未知错误"; - })); + 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("bundleName")); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT))); ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), 0); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by AppIncrementalFileReady."; @@ -1080,16 +927,12 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_AppIncrementalDone_0100, testing::e GTEST_LOG_(INFO) << "ServiceThrowTest-begin SUB_Service_throw_AppIncrementalDone_0100"; try { EXPECT_NE(service, nullptr); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG))); EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); auto ret = service->AppIncrementalDone(0); EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Invoke([]() { - throw "未知错误"; - })); + EXPECT_CALL(*sessionMock, VerifyBundleName(_)).WillOnce(Return(BError(BError::Codes::SA_REFUSED_ACT))); EXPECT_CALL(*sessionMock, IsOnAllBundlesFinished()).WillOnce(Return(false)); ret = service->AppIncrementalDone(0); EXPECT_EQ(ret, EPERM); @@ -1116,23 +959,24 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_GetIncrementalFileHandle_0100, test EXPECT_NE(service, nullptr); string bundleName; string fileName; - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw BError(BError::Codes::EXT_THROW_EXCEPTION); - })); - auto ret = service->GetIncrementalFileHandle(bundleName, fileName); - EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); - - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw runtime_error("运行时错误"); - })); - ret = service->GetIncrementalFileHandle(bundleName, fileName); - EXPECT_EQ(ret, EPERM); - EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce(Invoke([]() { - throw "未知错误"; - })); + 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("bundleName")); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SDK_MIXED_SCENARIO))); + auto ret = service->GetIncrementalFileHandle(bundleName, fileName); + EXPECT_EQ(ret, BError(BError::Codes::SDK_MIXED_SCENARIO).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("bundleName")); + EXPECT_CALL(*sessionMock, VerifyCallerAndScenario(_, _)).WillOnce( + Return(BError(BError::Codes::SA_REFUSED_ACT))); ret = service->GetIncrementalFileHandle(bundleName, fileName); - EXPECT_EQ(ret, EPERM); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "ServiceThrowTest-an exception occurred by GetIncrementalFileHandle."; 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 6ddbbe2e6..14954f525 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 @@ -94,28 +94,21 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_VerifyCallerAndScenario_01 { GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_VerifyCallerAndScenario_0100"; try { - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::BACKUP; - sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, IServiceReverse::Scenario::RESTORE); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SDK_MIXED_SCENARIO); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::BACKUP; + ErrCode ret = sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, + IServiceReverse::Scenario::RESTORE); + EXPECT_TRUE(ret == BError(BError::Codes::SDK_MIXED_SCENARIO).GetCode()); - try { - sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::BACKUP; - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, IServiceReverse::Scenario::BACKUP); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_REFUSED_ACT); - } + sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::BACKUP; + sessionManagerPtr_->impl_.clientToken = 0; + ret = sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, IServiceReverse::Scenario::BACKUP); + EXPECT_TRUE(ret == BError(BError::Codes::SA_REFUSED_ACT).GetCode()); sessionManagerPtr_->impl_.scenario = IServiceReverse::Scenario::BACKUP; sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, IServiceReverse::Scenario::BACKUP); - EXPECT_TRUE(true); + ret = sessionManagerPtr_->VerifyCallerAndScenario(CLIENT_TOKEN_ID, IServiceReverse::Scenario::BACKUP); + EXPECT_TRUE(ret == ERR_OK); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by VerifyCallerAndScenario."; @@ -137,43 +130,27 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_Active_0100, testing::ext: GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_Active_0100"; try { SvcSessionManager::Impl newImpl; - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - auto res = sessionManagerPtr_->Active(newImpl); - EXPECT_EQ(res, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); - } catch (BError &err) { - EXPECT_TRUE(false); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; + auto res = sessionManagerPtr_->Active(newImpl); + EXPECT_EQ(res, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); - try { - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Active(newImpl); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + sessionManagerPtr_->impl_.clientToken = 0; + res = sessionManagerPtr_->Active(newImpl); + EXPECT_EQ(res, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - try { - newImpl.clientToken = CLIENT_TOKEN_ID; - newImpl.scenario = IServiceReverse::Scenario::UNDEFINED; - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Active(newImpl); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + newImpl.clientToken = CLIENT_TOKEN_ID; + newImpl.scenario = IServiceReverse::Scenario::UNDEFINED; + sessionManagerPtr_->impl_.clientToken = 0; + res = sessionManagerPtr_->Active(newImpl); + EXPECT_EQ(res, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - try { - newImpl.clientToken = CLIENT_TOKEN_ID; - newImpl.scenario = IServiceReverse::Scenario::BACKUP; - newImpl.clientProxy = nullptr; - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Active(newImpl); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + newImpl.clientToken = CLIENT_TOKEN_ID; + newImpl.scenario = IServiceReverse::Scenario::BACKUP; + newImpl.clientProxy = nullptr; + sessionManagerPtr_->impl_.clientToken = 0; + res = sessionManagerPtr_->Active(newImpl); + EXPECT_EQ(res, BError(BError::Codes::SA_INVAL_ARG).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by Active."; @@ -197,27 +174,23 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_Deactive_0100, testing::ex wptr remoteInAction = nullptr; EXPECT_TRUE(sessionManagerPtr_ != nullptr); sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Deactive(remoteInAction, false); - EXPECT_TRUE(true); + ErrCode ret = sessionManagerPtr_->Deactive(remoteInAction, false); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; sessionManagerPtr_->impl_.clientProxy = nullptr; - sessionManagerPtr_->Deactive(remoteInAction, false); - EXPECT_TRUE(true); + ret = sessionManagerPtr_->Deactive(remoteInAction, false); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - try { - sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->impl_.clientProxy = remote_; - sessionManagerPtr_->Deactive(remoteInAction, false); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; + sessionManagerPtr_->impl_.clientProxy = remote_; + ret = sessionManagerPtr_->Deactive(remoteInAction, false); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; sessionManagerPtr_->impl_.clientProxy = remote_; - sessionManagerPtr_->Deactive(remoteInAction, true); - EXPECT_TRUE(true); + ret = sessionManagerPtr_->Deactive(remoteInAction, true); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by Deactive."; @@ -239,28 +212,20 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_VerifyBundleName_0100, tes GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_VerifyBundleName_0100"; try { string bundleName = BUNDLE_NAME; - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->VerifyBundleName(bundleName); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = 0; + ErrCode ret = sessionManagerPtr_->VerifyBundleName(bundleName); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); - try { - sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->impl_.backupExtNameMap.clear(); - sessionManagerPtr_->VerifyBundleName(bundleName); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_REFUSED_ACT); - } + sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; + sessionManagerPtr_->impl_.backupExtNameMap.clear(); + ret = sessionManagerPtr_->VerifyBundleName(bundleName); + EXPECT_EQ(ret, BError(BError::Codes::SA_REFUSED_ACT).GetCode()); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; sessionManagerPtr_->impl_.backupExtNameMap[BUNDLE_NAME] = {}; - sessionManagerPtr_->VerifyBundleName(bundleName); - EXPECT_TRUE(true); + ret = sessionManagerPtr_->VerifyBundleName(bundleName); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by VerifyBundleName."; @@ -314,18 +279,14 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_getscenario_0100, testing: { GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_getscenario_0100"; try { - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->GetScenario(); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = 0; + IServiceReverse::Scenario scenario = sessionManagerPtr_->GetScenario(); + EXPECT_TRUE(scenario == IServiceReverse::Scenario::UNDEFINED); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->GetScenario(); - EXPECT_TRUE(true); + scenario = sessionManagerPtr_->GetScenario(); + EXPECT_TRUE(scenario == IServiceReverse::Scenario::UNDEFINED); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by getscenario."; @@ -573,18 +534,14 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_InitClient_0100, testing:: GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_InitClient_0100"; try { SvcSessionManager::Impl newImpl; - try { - newImpl.clientProxy = nullptr; - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->InitClient(newImpl); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + newImpl.clientProxy = nullptr; + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + ErrCode ret = sessionManagerPtr_->InitClient(newImpl); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); newImpl.clientProxy = remote_; - sessionManagerPtr_->InitClient(newImpl); - EXPECT_TRUE(true); + ret = sessionManagerPtr_->InitClient(newImpl); + EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { EXPECT_TRUE(false); GTEST_LOG_(INFO) << "SvcSessionManagerTest-an exception occurred by InitClient."; @@ -1539,17 +1496,13 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_Start_0100, testing::ext:: { GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_Start_0100"; try { - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Start(); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = 0; + ErrCode ret = sessionManagerPtr_->Start(); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->Start(); + ret = sessionManagerPtr_->Start(); EXPECT_TRUE(sessionManagerPtr_->impl_.isBackupStart); } catch (...) { EXPECT_TRUE(false); @@ -1571,17 +1524,13 @@ HWTEST_F(SvcSessionManagerTest, SUB_backup_sa_session_Finish_0100, testing::ext: { GTEST_LOG_(INFO) << "SvcSessionManagerTest-begin SUB_backup_sa_session_Finish_0100"; try { - try { - EXPECT_TRUE(sessionManagerPtr_ != nullptr); - sessionManagerPtr_->impl_.clientToken = 0; - sessionManagerPtr_->Finish(); - EXPECT_TRUE(false); - } catch (BError &err) { - EXPECT_EQ(err.GetRawCode(), BError::Codes::SA_INVAL_ARG); - } + EXPECT_TRUE(sessionManagerPtr_ != nullptr); + sessionManagerPtr_->impl_.clientToken = 0; + ErrCode ret = sessionManagerPtr_->Finish(); + EXPECT_EQ(ret, BError(BError::Codes::SA_INVAL_ARG).GetCode()); sessionManagerPtr_->impl_.clientToken = CLIENT_TOKEN_ID; - sessionManagerPtr_->Finish(); + ret = sessionManagerPtr_->Finish(); EXPECT_TRUE(sessionManagerPtr_->impl_.isAppendFinish); } catch (...) { EXPECT_TRUE(false); -- Gitee