diff --git a/frameworks/native/backup_ext/include/ext_backup.h b/frameworks/native/backup_ext/include/ext_backup.h index 3f5eaff98eded7921be2999acaa863e6cc48eda1..707a17043be75cc2c300b27a88631f1cf4c22ce8 100644 --- a/frameworks/native/backup_ext/include/ext_backup.h +++ b/frameworks/native/backup_ext/include/ext_backup.h @@ -125,21 +125,22 @@ public: /** * @brief do backup. Subclasses can inherit to implement their own custom functionality. */ - virtual ErrCode OnBackup(std::function callback); + virtual ErrCode OnBackup(std::function callback); - virtual ErrCode OnBackup(std::function callback, + virtual ErrCode OnBackup(std::function callback, std::function callbackEx); /** * @brief Called do restore. */ - virtual ErrCode OnRestore(std::function callback, - std::function callbackEx, std::function callbackExAppDone); + virtual ErrCode OnRestore(std::function callback, + std::function callbackEx, + std::function callbackExAppDone); /** * @brief Called do restore. */ - virtual ErrCode OnRestore(std::function callback); + virtual ErrCode OnRestore(std::function callback); /** * @brief Called do GetBackupInfo. diff --git a/frameworks/native/backup_ext/include/ext_backup_js.h b/frameworks/native/backup_ext/include/ext_backup_js.h index a5c31c804118d7d2c72d4531ece487e3b2f68339..a98542d354112862d5d36a5d7f6bd1debc041947 100644 --- a/frameworks/native/backup_ext/include/ext_backup_js.h +++ b/frameworks/native/backup_ext/include/ext_backup_js.h @@ -54,8 +54,8 @@ struct CallJsParam { }; struct CallbackInfo { - std::function callback; - CallbackInfo(std::function callbackIn) : callback(callbackIn) {} + std::function callback; + CallbackInfo(std::function callbackIn) : callback(callbackIn) {} }; struct CallbackInfoBackup { @@ -68,9 +68,9 @@ struct CallbackInfoBackup { struct CallbackInfoEx { std::function callbackParam; - std::function callbackAppDone; - CallbackInfoEx(std::function param, std::function appDone) - : callbackParam(param), callbackAppDone(appDone) + std::function callbackAppDone; + CallbackInfoEx(std::function param, + std::function appDone) : callbackParam(param), callbackAppDone(appDone) { } }; @@ -104,9 +104,9 @@ public: * * @param callback The callback. */ - ErrCode OnBackup(std::function callback) override; + ErrCode OnBackup(std::function callback) override; - ErrCode OnBackup(std::function callback, + ErrCode OnBackup(std::function callback, std::function callbackEx) override; /** @@ -115,15 +115,16 @@ public: * @param callbackEx The callbackEx. * @param callback The callBack. */ - ErrCode OnRestore(std::function callback, std::function callbackEx, - std::function callbackExAppDone) override; + ErrCode OnRestore(std::function callback, + std::function callbackEx, + std::function callbackExAppDone) override; /** * @brief Call the app's OnRestore. * * @param callback The callBack. */ - ErrCode OnRestore(std::function callback) override; + ErrCode OnRestore(std::function callback) override; /** * @brief get app backup detail * diff --git a/frameworks/native/backup_ext/include/ext_extension.h b/frameworks/native/backup_ext/include/ext_extension.h index 3e8a25fc08a8afad7ee5239b0f6b23b5ae4b867a..b93bdbb3e3c7a906f7df550b377b5d8b5ad0d8d3 100644 --- a/frameworks/native/backup_ext/include/ext_extension.h +++ b/frameworks/native/backup_ext/include/ext_extension.h @@ -109,7 +109,8 @@ private: * * @param restoreRetInfo app restore reportInfo */ - void AppResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario); + void AppResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario, + ErrCode errCode = 0); /** * @brief Executing Backup Tasks Asynchronously @@ -185,12 +186,12 @@ private: * * @param errCode */ - std::function IncAppDoneCallbackEx(wptr obj); + std::function IncAppDoneCallbackEx(wptr obj); /** * @brief get callbackEx for execute appDone */ - std::function AppDoneCallbackEx(wptr obj); + std::function AppDoneCallbackEx(wptr obj); std::function HandleBackupEx(wptr obj); std::function HandleTaskBackupEx(wptr obj); private: diff --git a/frameworks/native/backup_ext/src/ext_backup.cpp b/frameworks/native/backup_ext/src/ext_backup.cpp index b9308f51361a4c6c78539da3d5bd417bab63f9e0..04049786f1497765309b974b2b984ec2292f6763 100644 --- a/frameworks/native/backup_ext/src/ext_backup.cpp +++ b/frameworks/native/backup_ext/src/ext_backup.cpp @@ -252,27 +252,28 @@ bool ExtBackup::RestoreDataReady() return restoreType_ == RestoreTypeEnum::RESTORE_DATA_READDY; } -ErrCode ExtBackup::OnBackup(function callback) +ErrCode ExtBackup::OnBackup(function callback) { HILOGI("BackupExtensionAbility(base) OnBackup."); return ERR_OK; } -ErrCode ExtBackup::OnBackup(std::function callback, +ErrCode ExtBackup::OnBackup(std::function callback, std::function callbackEx) { HILOGI("BackupExtensionAbility(base) OnBackup with Ex"); return ERR_OK; } -ErrCode ExtBackup::OnRestore(function callback, - std::function callbackEx, std::function callbackExAppDone) +ErrCode ExtBackup::OnRestore(function callback, + std::function callbackEx, + std::function callbackExAppDone) { HILOGI("BackupExtensionAbility(base) OnRestore with Ex."); return ERR_OK; } -ErrCode ExtBackup::OnRestore(function callback) +ErrCode ExtBackup::OnRestore(function callback) { HILOGI("BackupExtensionAbility(base) OnRestore."); return ERR_OK; diff --git a/frameworks/native/backup_ext/src/ext_backup_js.cpp b/frameworks/native/backup_ext/src/ext_backup_js.cpp index 85fc1b83bc31518c3826c55e2bad2e4db0db0867..399b07e4537e5b0d91f0e9d29155a026b85ed46d 100644 --- a/frameworks/native/backup_ext/src/ext_backup_js.cpp +++ b/frameworks/native/backup_ext/src/ext_backup_js.cpp @@ -116,7 +116,8 @@ static napi_value PromiseCallback(napi_env env, napi_callback_info info) HILOGE("CallbackInfo is nullptr"); return nullptr; } - callbackInfo->callback(BError(BError::Codes::OK)); + string str; + callbackInfo->callback(BError(BError::Codes::OK), str); data = nullptr; return nullptr; } @@ -136,7 +137,7 @@ static napi_value PromiseCatchCallback(napi_env env, napi_callback_info info) HILOGE("CallbackInfo is nullptr"); return nullptr; } - callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION)); + callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION), exceptionInfo); data = nullptr; return nullptr; } @@ -472,7 +473,7 @@ ExtBackupJs *ExtBackupJs::Create(const unique_ptr &runt return new ExtBackupJs(static_cast(*runtime)); } -ErrCode ExtBackupJs::OnBackup(function callback) +ErrCode ExtBackupJs::OnBackup(function callback) { HILOGI("BackupExtensionAbility(JS) OnBackup."); BExcepUltils::BAssert(jsObj_, BError::Codes::EXT_BROKEN_FRAMEWORK, @@ -481,15 +482,15 @@ ErrCode ExtBackupJs::OnBackup(function callback) auto retParser = [jsRuntime {&jsRuntime_}, callbackInfo {callbackInfo_}](napi_env env, napi_value result) -> bool { if (!CheckPromise(env, result)) { + string str; bool isExceptionPending; napi_is_exception_pending(env, &isExceptionPending); HILOGI("napi exception pending = %{public}d.", isExceptionPending); if (isExceptionPending) { - string str; DealNapiException(env, str); - callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION)); + callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION), str); } else { - callbackInfo->callback(BError(BError::Codes::OK)); + callbackInfo->callback(BError(BError::Codes::OK), str); } return true; } @@ -504,7 +505,7 @@ ErrCode ExtBackupJs::OnBackup(function callback) return errCode; } -ErrCode ExtBackupJs::OnBackup(function callback, +ErrCode ExtBackupJs::OnBackup(function callback, std::function callbackEx) { HILOGI("BackupExtensionAbility(JS) OnBackup ex"); @@ -551,7 +552,8 @@ ErrCode ExtBackupJs::CallJsOnBackupEx() if (!needCallOnRestore_.load()) { if (callbackInfoEx_) { HILOGI("Will call app done"); - callbackInfoEx_->callbackAppDone(BError(BError::Codes::OK)); + string str; + callbackInfoEx_->callbackAppDone(BError(BError::Codes::OK), str); } HILOGI("Call Js method onRestoreEx done"); return ERR_OK; @@ -565,15 +567,15 @@ ErrCode ExtBackupJs::CallJsOnBackup() auto retParser = [jsRuntime {&jsRuntime_}, callbackInfo {callbackInfo_}](napi_env env, napi_value result) -> bool { if (!CheckPromise(env, result)) { + string str; bool isExceptionPending; napi_is_exception_pending(env, &isExceptionPending); HILOGI("napi exception pending = %{public}d.", isExceptionPending); if (isExceptionPending) { - string str; DealNapiException(env, str); - callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION)); + callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION), str); } else { - callbackInfo->callback(BError(BError::Codes::OK)); + callbackInfo->callback(BError(BError::Codes::OK), str); } return true; } @@ -587,8 +589,9 @@ ErrCode ExtBackupJs::CallJsOnBackup() return errCode; } -ErrCode ExtBackupJs::OnRestore(function callback, - std::function callbackEx, std::function callbackExAppDone) +ErrCode ExtBackupJs::OnRestore(function callback, + std::function callbackEx, + std::function callbackExAppDone) { HILOGI("BackupExtensionAbility(JS) OnRestore."); BExcepUltils::BAssert(jsObj_, BError::Codes::EXT_BROKEN_FRAMEWORK, @@ -600,7 +603,7 @@ ErrCode ExtBackupJs::OnRestore(function callback, return CallJSRestoreEx(); } -ErrCode ExtBackupJs::OnRestore(function callback) +ErrCode ExtBackupJs::OnRestore(function callback) { HILOGI("Start execute BackupExtensionAbility(JS) OnRestore."); BExcepUltils::BAssert(jsObj_, BError::Codes::EXT_BROKEN_FRAMEWORK, @@ -618,15 +621,15 @@ ErrCode ExtBackupJs::OnRestore(function callback) auto retParser = [jsRuntime {&jsRuntime_}, callbackInfo {callbackInfo_}](napi_env env, napi_value result) -> bool { if (!CheckPromise(env, result)) { + string str; bool isExceptionPending; napi_is_exception_pending(env, &isExceptionPending); HILOGI("napi exception pending = %{public}d.", isExceptionPending); if (isExceptionPending) { - string str; DealNapiException(env, str); - callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION)); + callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION), str); } else { - callbackInfo->callback(BError(BError::Codes::OK)); + callbackInfo->callback(BError(BError::Codes::OK), str); } return true; } @@ -675,7 +678,8 @@ ErrCode ExtBackupJs::CallJSRestoreEx() if (!needCallOnRestore_.load()) { if (callbackInfoEx_) { HILOGI("Will call app done"); - callbackInfoEx_->callbackAppDone(BError(BError::Codes::OK)); + string str; + callbackInfoEx_->callbackAppDone(BError(BError::Codes::OK), str); } HILOGI("Call Js method onRestoreEx done"); return ERR_OK; @@ -688,15 +692,15 @@ ErrCode ExtBackupJs::CallJSRestore() HILOGI("Start call app js method onRestore"); auto retParser = [jsRuntime {&jsRuntime_}, callbackInfo {callbackInfo_}](napi_env env, napi_value result) -> bool { if (!CheckPromise(env, result)) { + string str; bool isExceptionPending; napi_is_exception_pending(env, &isExceptionPending); HILOGI("napi exception pending = %{public}d.", isExceptionPending); if (isExceptionPending) { - string str; DealNapiException(env, str); - callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION)); + callbackInfo->callback(BError(BError::Codes::EXT_THROW_EXCEPTION), str); } else { - callbackInfo->callback(BError(BError::Codes::OK)); + callbackInfo->callback(BError(BError::Codes::OK), str); } return true; } diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index b3861f9b1a9da95d4cb0a7524cc3ecbb32adde0a..fb5973bc449cc1102f181718b019d455434d5dd7 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -45,6 +45,7 @@ #include "b_filesystem/b_file.h" #include "b_filesystem/b_file_hash.h" #include "b_json/b_json_cached_entity.h" +#include "b_jsonutil/b_jsonutil.h" #include "b_tarball/b_tarball_factory.h" #include "filemgmt_libhilog.h" #include "hitrace_meter.h" @@ -1059,14 +1060,20 @@ void BackupExtExtension::AsyncTaskRestoreForUpgrade() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}]() { - auto callBackup = [obj](ErrCode errCode) { + auto callBackup = [obj](ErrCode errCode, std::string errMsg) { auto extensionPtr = obj.promote(); if (extensionPtr == nullptr) { HILOGE("Ext extension handle have been released"); return; } HILOGI("Current bundle will execute app done"); - extensionPtr->AppDone(errCode); + if (errMsg.empty()) { + extensionPtr->AppDone(errCode); + } else { + std::string errInfo; + BJsonUtil::RestoreErrInfo(errInfo, errCode, errMsg); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); + } extensionPtr->DoClear(); }; auto ptr = obj.promote(); @@ -1108,14 +1115,20 @@ void BackupExtExtension::ExtClear() void BackupExtExtension::AsyncTaskIncrementalRestoreForUpgrade() { auto task = [obj {wptr(this)}]() { - auto callBackup = [obj](ErrCode errCode) { + auto callBackup = [obj](ErrCode errCode, std::string errMsg) { auto extensionPtr = obj.promote(); if (extensionPtr == nullptr) { HILOGE("Ext extension handle have been released"); return; } HILOGI("Current bundle will execute app done"); - extensionPtr->AppIncrementalDone(errCode); + if (errMsg.empty()) { + extensionPtr->AppIncrementalDone(errCode); + } else { + std::string errInfo; + BJsonUtil::RestoreErrInfo(errInfo, errCode, errMsg); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); + } extensionPtr->DoClear(); }; auto ptr = obj.promote(); @@ -1189,12 +1202,13 @@ void BackupExtExtension::AppDone(ErrCode errCode) } } -void BackupExtExtension::AppResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) +void BackupExtExtension::AppResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) { auto proxy = ServiceProxy::GetInstance(); BExcepUltils::BAssert(proxy, BError::Codes::EXT_BROKEN_IPC, "Failed to obtain the ServiceProxy handle"); HILOGI("restoreRetInfo is %{public}s", restoreRetInfo.c_str()); - auto ret = proxy->ServiceResultReport(restoreRetInfo, scenario); + auto ret = proxy->ServiceResultReport(restoreRetInfo, scenario, errCode); if (ret != ERR_OK) { HILOGE("Failed notify app restoreResultReport, errCode: %{public}d", ret); } @@ -1204,7 +1218,7 @@ void BackupExtExtension::AsyncTaskOnBackup() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); auto task = [obj {wptr(this)}]() { - auto callBackup = [obj](ErrCode errCode) { + auto callBackup = [obj](ErrCode errCode, std::string errMsg) { HILOGI("begin call backup"); auto extensionPtr = obj.promote(); if (extensionPtr == nullptr) { @@ -1561,7 +1575,7 @@ void BackupExtExtension::AsyncTaskDoIncrementalBackup(UniqueFd incrementalFd, Un void BackupExtExtension::AsyncTaskOnIncrementalBackup() { auto task = [obj {wptr(this)}]() { - auto callBackup = [obj](ErrCode errCode) { + auto callBackup = [obj](ErrCode errCode, std::string errMsg) { HILOGI("App onbackup end"); auto proxy = ServiceProxy::GetInstance(); if (proxy == nullptr) { @@ -1793,11 +1807,18 @@ std::function BackupExtExtension::RestoreResultCallb return; } extensionPtr->extension_->CallExtRestore(errCode, restoreRetInfo); - if (errCode) { + if (errCode && restoreRetInfo.empty()) { extensionPtr->AppDone(errCode); extensionPtr->DoClear(); return; } + if (errCode && !restoreRetInfo.empty()) { + std::string errInfo; + BJsonUtil::RestoreErrInfo(errInfo, errCode, restoreRetInfo); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); + extensionPtr->DoClear(); + return; + } if (restoreRetInfo.size()) { HILOGI("Will notify restore result report"); extensionPtr->AppResultReport(restoreRetInfo, BackupRestoreScenario::FULL_RESTORE); @@ -1805,10 +1826,10 @@ std::function BackupExtExtension::RestoreResultCallb }; } -std::function BackupExtExtension::AppDoneCallbackEx(wptr obj) +std::function BackupExtExtension::AppDoneCallbackEx(wptr obj) { HILOGI("Begin get callback for appDone"); - return [obj](ErrCode errCode) { + return [obj](ErrCode errCode, std::string errMsg) { HILOGI("begin call callBackupExAppDone"); auto extensionPtr = obj.promote(); if (extensionPtr == nullptr) { @@ -1835,20 +1856,27 @@ std::function BackupExtExtension::IncRestoreResultCa return; } extensionPtr->extension_->CallExtRestore(errCode, restoreRetInfo); - if (errCode) { + if (errCode && restoreRetInfo.empty()) { extensionPtr->AppIncrementalDone(errCode); extensionPtr->DoClear(); return; } + if (errCode && !restoreRetInfo.empty()) { + std::string errInfo; + BJsonUtil::RestoreErrInfo(errInfo, errCode, restoreRetInfo); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); + extensionPtr->DoClear(); + return; + } if (restoreRetInfo.size()) { extensionPtr->AppResultReport(restoreRetInfo, BackupRestoreScenario::INCREMENTAL_RESTORE); } }; } -std::function BackupExtExtension::IncAppDoneCallbackEx(wptr obj) +std::function BackupExtExtension::IncAppDoneCallbackEx(wptr obj) { - return [obj](ErrCode errCode) { + return [obj](ErrCode errCode, std::string errMsg) { HILOGI("begin call callBackupExAppDone for restore"); auto extensionPtr = obj.promote(); if (extensionPtr == nullptr) { diff --git a/frameworks/native/backup_kit_inner/include/service_reverse.h b/frameworks/native/backup_kit_inner/include/service_reverse.h index 17008c7ac6a702a6500ff79f471b352cb64c8d4c..178bac3c98f7ec62ea4522414b87db51a16def82 100644 --- a/frameworks/native/backup_kit_inner/include/service_reverse.h +++ b/frameworks/native/backup_kit_inner/include/service_reverse.h @@ -35,7 +35,8 @@ public: void RestoreOnBundleFinished(int32_t errCode, std::string bundleName) override; void RestoreOnAllBundlesFinished(int32_t errCode) override; void RestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int32_t errCode) override; - void RestoreOnResultReport(std::string result, std::string bundleName) override; + void RestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) override; void IncrementalBackupOnFileReady(std::string bundleName, std::string fileName, int fd, int manifestFd, int32_t errCode) override; @@ -49,7 +50,8 @@ public: void IncrementalRestoreOnAllBundlesFinished(int32_t errCode) override; void IncrementalRestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int manifestFd, int32_t errCode) override; - void IncrementalRestoreOnResultReport(std::string result, std::string bundleName) override; + void IncrementalRestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) override; public: ServiceReverse() = delete; diff --git a/frameworks/native/backup_kit_inner/src/service_incremental_reverse.cpp b/frameworks/native/backup_kit_inner/src/service_incremental_reverse.cpp index a6d27a66da453c002cb4313bf31c32b5e8cfaf64..477a2e05b021644cccaf221fbfe2219d6fa02106 100644 --- a/frameworks/native/backup_kit_inner/src/service_incremental_reverse.cpp +++ b/frameworks/native/backup_kit_inner/src/service_incremental_reverse.cpp @@ -110,7 +110,7 @@ void ServiceReverse::IncrementalRestoreOnFileReady(string bundleName, string fil callbacksIncrementalRestore_.onFileReady(bFileInfo, UniqueFd(fd), UniqueFd(manifestFd), errCode); } -void ServiceReverse::IncrementalRestoreOnResultReport(std::string result, std::string bundleName) +void ServiceReverse::IncrementalRestoreOnResultReport(std::string result, std::string bundleName, ErrCode errCode) { if (scenario_ != Scenario::RESTORE || !callbacksIncrementalRestore_.onResultReport) { HILOGI("Error scenario or callback is nullptr"); @@ -121,7 +121,7 @@ void ServiceReverse::IncrementalRestoreOnResultReport(std::string result, std::s HILOGI("Error scenario or callback is nullptr"); return; } - callbacksIncrementalRestore_.onBundleFinished(BError(BError::Codes::OK), bundleName); + callbacksIncrementalRestore_.onBundleFinished(errCode, bundleName); } ServiceReverse::ServiceReverse(BIncrementalBackupSession::Callbacks callbacks) diff --git a/frameworks/native/backup_kit_inner/src/service_proxy.cpp b/frameworks/native/backup_kit_inner/src/service_proxy.cpp index cb73c0db2df1eacdd7c401e78b9caf5adc37c58e..fa0712445e0aaef9fd331cd0d104af1c0dc783fa 100644 --- a/frameworks/native/backup_kit_inner/src/service_proxy.cpp +++ b/frameworks/native/backup_kit_inner/src/service_proxy.cpp @@ -206,7 +206,8 @@ ErrCode ServiceProxy::AppDone(ErrCode errCode) return reply.ReadInt32(); } -ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) +ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); @@ -220,6 +221,9 @@ ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, Back if (!data.WriteInt32(static_cast(scenario))) { return BError(BError::Codes::SDK_INVAL_ARG, "Failed to send the scenario").GetCode(); } + if (!data.WriteInt32(errCode)) { + return BError(BError::Codes::SDK_INVAL_ARG, "Failed to send the errCode").GetCode(); + } MessageParcel reply; MessageOption option; int32_t ret = diff --git a/frameworks/native/backup_kit_inner/src/service_reverse.cpp b/frameworks/native/backup_kit_inner/src/service_reverse.cpp index 98942bd6ba6fd0edc66e47ee8d77ec6670e3a3f0..9fd9eb510cb6a016d7ec486d0858b3d5cad4a06b 100644 --- a/frameworks/native/backup_kit_inner/src/service_reverse.cpp +++ b/frameworks/native/backup_kit_inner/src/service_reverse.cpp @@ -108,7 +108,7 @@ void ServiceReverse::RestoreOnFileReady(string bundleName, string fileName, int callbacksRestore_.onFileReady(bFileInfo, UniqueFd(fd), errCode); } -void ServiceReverse::RestoreOnResultReport(string result, std::string bundleName) +void ServiceReverse::RestoreOnResultReport(string result, std::string bundleName, ErrCode errCode) { HILOGI("ServiceReverse RestoreOnResultReport bundle %{public}s begin with result: %{public}s", bundleName.c_str(), result.c_str()); @@ -121,7 +121,7 @@ void ServiceReverse::RestoreOnResultReport(string result, std::string bundleName HILOGI("Error scenario or callback is nullptr"); return; } - callbacksRestore_.onBundleFinished(BError(BError::Codes::OK), bundleName); + callbacksRestore_.onBundleFinished(errCode, bundleName); } ServiceReverse::ServiceReverse(BSessionBackup::Callbacks callbacks) diff --git a/frameworks/native/backup_kit_inner/src/service_reverse_stub.cpp b/frameworks/native/backup_kit_inner/src/service_reverse_stub.cpp index f24cc6608cfd389a3b0818dfeadc7b64e822f063..0fdeed6c8687a7a16ccd7f6c96914dc55fb6a1d9 100644 --- a/frameworks/native/backup_kit_inner/src/service_reverse_stub.cpp +++ b/frameworks/native/backup_kit_inner/src/service_reverse_stub.cpp @@ -190,7 +190,11 @@ int32_t ServiceReverseStub::CmdRestoreOnResultReport(MessageParcel &data, Messag if (!data.ReadString(bundleName)) { return BError(BError::Codes::EXT_INVAL_ARG, "Failed to read bundleName").GetCode(); } - RestoreOnResultReport(result, bundleName); + ErrCode errCode; + if (!data.ReadInt32(errCode)) { + return BError(BError::Codes::EXT_INVAL_ARG, "Failed to read errCode").GetCode(); + } + RestoreOnResultReport(result, bundleName, errCode); return BError(BError::Codes::OK); } @@ -284,7 +288,8 @@ int32_t ServiceReverseStub::CmdIncrementalRestoreOnResultReport(MessageParcel &d { auto result = data.ReadString(); auto bundleName = data.ReadString(); - IncrementalRestoreOnResultReport(result, bundleName); + ErrCode errCode = data.ReadInt32(); + IncrementalRestoreOnResultReport(result, bundleName, errCode); return BError(BError::Codes::OK); } } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/interfaces/inner_api/native/backup_kit_inner/impl/i_service.h b/interfaces/inner_api/native/backup_kit_inner/impl/i_service.h index fe5b0a2eec7bdcd8f3793478748bf7cfc5b59173..49348fb58591984d27a328c01487941ac9d8e4ea 100644 --- a/interfaces/inner_api/native/backup_kit_inner/impl/i_service.h +++ b/interfaces/inner_api/native/backup_kit_inner/impl/i_service.h @@ -53,7 +53,7 @@ public: virtual ErrCode AppFileReady(const std::string &fileName, UniqueFd fd, int32_t errCode) = 0; virtual ErrCode AppDone(ErrCode errCode) = 0; virtual ErrCode ServiceResultReport(const std::string restoreRetInfo, - BackupRestoreScenario scenario) = 0; + BackupRestoreScenario scenario, ErrCode errCode) = 0; virtual ErrCode GetFileHandle(const std::string &bundleName, const std::string &fileName) = 0; virtual ErrCode AppendBundlesRestoreSession(UniqueFd fd, const std::vector &bundleNames, diff --git a/interfaces/inner_api/native/backup_kit_inner/impl/i_service_reverse.h b/interfaces/inner_api/native/backup_kit_inner/impl/i_service_reverse.h index 2cb81d0da2f0b24a3e1bab2885df30a985437d39..8791c26b2514a21e8ed21978ba1046ac8364d2d1 100644 --- a/interfaces/inner_api/native/backup_kit_inner/impl/i_service_reverse.h +++ b/interfaces/inner_api/native/backup_kit_inner/impl/i_service_reverse.h @@ -40,7 +40,8 @@ public: virtual void RestoreOnBundleStarted(int32_t errCode, std::string bundleName) = 0; virtual void RestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int32_t errCode) = 0; - virtual void RestoreOnResultReport(std::string result, std::string bundleName) = 0; + virtual void RestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) = 0; virtual void RestoreOnBundleFinished(int32_t errCode, std::string bundleName) = 0; virtual void RestoreOnAllBundlesFinished(int32_t errCode) = 0; @@ -56,7 +57,8 @@ public: std::string fileName, int fd, int manifestFd, int32_t errCode) = 0; - virtual void IncrementalRestoreOnResultReport(std::string result, std::string bundleName) = 0; + virtual void IncrementalRestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) = 0; virtual void IncrementalRestoreOnBundleFinished(int32_t errCode, std::string bundleName) = 0; virtual void IncrementalRestoreOnAllBundlesFinished(int32_t errCode) = 0; diff --git a/interfaces/inner_api/native/backup_kit_inner/impl/service_proxy.h b/interfaces/inner_api/native/backup_kit_inner/impl/service_proxy.h index 8591c7e4137a34005fa35866885b71f3f27e3f99..d0845087ee63d5148626174e238c488aafeb1f2b 100644 --- a/interfaces/inner_api/native/backup_kit_inner/impl/service_proxy.h +++ b/interfaces/inner_api/native/backup_kit_inner/impl/service_proxy.h @@ -35,7 +35,8 @@ public: ErrCode PublishFile(const BFileInfo &fileInfo) override; ErrCode AppFileReady(const std::string &fileName, UniqueFd fd, int32_t errCode) override; ErrCode AppDone(ErrCode errCode) override; - ErrCode ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) override; + ErrCode ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) override; ErrCode GetFileHandle(const std::string &bundleName, const std::string &fileName) override; ErrCode AppendBundlesRestoreSession(UniqueFd fd, const std::vector &bundleNames, diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 23d5d713b9e3cb1e920f07db0a9ff803c3a238d2..d76ddf8b842cea8bf5ae4545846cbd2b174e9942 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -43,7 +43,8 @@ public: ErrCode PublishFile(const BFileInfo &fileInfo) override; ErrCode AppFileReady(const std::string &fileName, UniqueFd fd, int32_t errCode) override; ErrCode AppDone(ErrCode errCode) override; - ErrCode ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario sennario) override; + ErrCode ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario sennario, ErrCode errCode) override; ErrCode GetFileHandle(const std::string &bundleName, const std::string &fileName) override; ErrCode AppendBundlesRestoreSession(UniqueFd fd, const std::vector &bundleNames, diff --git a/services/backup_sa/include/module_ipc/service_reverse_proxy.h b/services/backup_sa/include/module_ipc/service_reverse_proxy.h index 9c133524feed5d13a7af182b7703ac63df0c94c6..43d4e13bb459722e5e5c129537270b5f245ccc40 100644 --- a/services/backup_sa/include/module_ipc/service_reverse_proxy.h +++ b/services/backup_sa/include/module_ipc/service_reverse_proxy.h @@ -30,7 +30,8 @@ public: void RestoreOnBundleStarted(int32_t errCode, std::string bundleName) override; void RestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int32_t errCode) override; - void RestoreOnResultReport(std::string result, std::string bundleName) override; + void RestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) override; void RestoreOnBundleFinished(int32_t errCode, std::string bundleName) override; void RestoreOnAllBundlesFinished(int32_t errCode) override; @@ -44,7 +45,8 @@ public: void IncrementalRestoreOnBundleStarted(int32_t errCode, std::string bundleName) override; void IncrementalRestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int manifestFd, int32_t errCode) override; - void IncrementalRestoreOnResultReport(std::string result, std::string bundleName) override; + void IncrementalRestoreOnResultReport(std::string result, std::string bundleName, + ErrCode errCode = 0) override; void IncrementalRestoreOnBundleFinished(int32_t errCode, std::string bundleName) override; void IncrementalRestoreOnAllBundlesFinished(int32_t errCode) override; diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 9bebaffaa6b091aad6c3597dd2c2bfa1c7557548..7417572438a10dc0a1dfc99585147dde64815f74 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -717,16 +717,17 @@ ErrCode Service::AppDone(ErrCode errCode) } } -ErrCode Service::ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario sennario) +ErrCode Service::ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario sennario, ErrCode errCode) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); try { string callerName = VerifyCallerAndGetCallerName(); if (sennario == BackupRestoreScenario::FULL_RESTORE) { - session_->GetServiceReverseProxy()->RestoreOnResultReport(restoreRetInfo, callerName); + session_->GetServiceReverseProxy()->RestoreOnResultReport(restoreRetInfo, callerName, errCode); NotifyCloneBundleFinish(callerName); } else if (sennario == BackupRestoreScenario::INCREMENTAL_RESTORE) { - session_->GetServiceReverseProxy()->IncrementalRestoreOnResultReport(restoreRetInfo, callerName); + session_->GetServiceReverseProxy()->IncrementalRestoreOnResultReport(restoreRetInfo, callerName, errCode); NotifyCloneBundleFinish(callerName); } else if (sennario == BackupRestoreScenario::FULL_BACKUP) { session_->GetServiceReverseProxy()->BackupOnResultReport(restoreRetInfo, callerName); diff --git a/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp b/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp index ee52a03d046f45209b3f71b673438bd2877988e1..6a9cd7560323e766662da0b26105a72ab2c3b006 100644 --- a/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp @@ -175,11 +175,13 @@ void ServiceReverseProxy::IncrementalRestoreOnAllBundlesFinished(int32_t errCode } } -void ServiceReverseProxy::IncrementalRestoreOnResultReport(std::string result, std::string bundleName) +void ServiceReverseProxy::IncrementalRestoreOnResultReport(std::string result, + std::string bundleName, ErrCode errCode) { BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor()) || !data.WriteString(result) || !data.WriteString(bundleName)) { + if (!data.WriteInterfaceToken(GetDescriptor()) || !data.WriteString(result) || + !data.WriteString(bundleName) || !data.WriteInt32(errCode)) { throw BError(BError::Codes::SA_BROKEN_IPC); } diff --git a/services/backup_sa/src/module_ipc/service_reverse_proxy.cpp b/services/backup_sa/src/module_ipc/service_reverse_proxy.cpp index 82488e2a2aeff44b02fe89de0e5501bd0bd81cad..fdb44c962536785c4752db8cc966f103dfbbf6af 100644 --- a/services/backup_sa/src/module_ipc/service_reverse_proxy.cpp +++ b/services/backup_sa/src/module_ipc/service_reverse_proxy.cpp @@ -190,12 +190,13 @@ void ServiceReverseProxy::RestoreOnFileReady(string bundleName, string fileName, } } -void ServiceReverseProxy::RestoreOnResultReport(string result, std::string bundleName) +void ServiceReverseProxy::RestoreOnResultReport(string result, std::string bundleName, ErrCode errCode) { HILOGI("ServiceReverseProxy::RestoreOnResultReport Begin with result: %s", result.c_str()); BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor()) || !data.WriteString(result) || !data.WriteString(bundleName)) { + if (!data.WriteInterfaceToken(GetDescriptor()) || !data.WriteString(result) || + !data.WriteString(bundleName) || !data.WriteInt32(errCode)) { throw BError(BError::Codes::SA_BROKEN_IPC); } diff --git a/services/backup_sa/src/module_ipc/service_stub.cpp b/services/backup_sa/src/module_ipc/service_stub.cpp index 8509c14ec6b17e14608c4da54875641577076765..51596fb49eb88c8eab8561ab73c43f367d345025 100644 --- a/services/backup_sa/src/module_ipc/service_stub.cpp +++ b/services/backup_sa/src/module_ipc/service_stub.cpp @@ -242,6 +242,7 @@ int32_t ServiceStub::CmdResultReport(MessageParcel &data, MessageParcel &reply) { std::string restoreRetInfo; int32_t scenario; + ErrCode errCode; if (!data.ReadString(restoreRetInfo)) { return BError(BError::Codes::SA_INVAL_ARG, "Failed to receive restoreRetInfo"); } @@ -249,7 +250,10 @@ int32_t ServiceStub::CmdResultReport(MessageParcel &data, MessageParcel &reply) return BError(BError::Codes::SA_INVAL_ARG, "Failed to receive scenario"); } BackupRestoreScenario secenrioInfo = static_cast(scenario); - int res = ServiceResultReport(restoreRetInfo, secenrioInfo); + if (!data.ReadInt32(errCode)) { + return BError(BError::Codes::SA_INVAL_ARG, "Failed to receive errCode"); + } + int res = ServiceResultReport(restoreRetInfo, secenrioInfo, errCode); if (!reply.WriteInt32(res)) { stringstream ss; ss << "Failed to send the result " << res; diff --git a/test/fuzztest/backupext_fuzzer/backupext_fuzzer.cpp b/test/fuzztest/backupext_fuzzer/backupext_fuzzer.cpp index c1c7a5866acb5412f8945f32f6b9a9b32840a2f0..ecf34b7e8adc87eaa8102e235c5e41aa8975610c 100644 --- a/test/fuzztest/backupext_fuzzer/backupext_fuzzer.cpp +++ b/test/fuzztest/backupext_fuzzer/backupext_fuzzer.cpp @@ -109,23 +109,23 @@ bool GetExtensionActionFuzzTest(shared_ptr backup, const uint8_t *dat bool OnBackupFuzzTest(shared_ptr backup, const uint8_t *data, size_t size) { - function callback = nullptr; + function callback = nullptr; backup->OnBackup(callback); return true; } bool OnRestoreFuzzTest(shared_ptr backup, const uint8_t *data, size_t size) { - function callback; + function callback; function callbackEx; - function callbackExAppDone; + function callbackExAppDone; backup->OnRestore(callback, callbackEx, callbackExAppDone); return true; } bool OnRestore2FuzzTest(shared_ptr backup, const uint8_t *data, size_t size) { - function callback = nullptr; + function callback = nullptr; backup->OnRestore(callback); return true; } diff --git a/tests/mock/backup_kit_inner/service_proxy_mock.cpp b/tests/mock/backup_kit_inner/service_proxy_mock.cpp index 34ad3169125ab23ea532e7238e6613e259cf2524..95af50b71d06825b69bb51869b7c205e10128787 100644 --- a/tests/mock/backup_kit_inner/service_proxy_mock.cpp +++ b/tests/mock/backup_kit_inner/service_proxy_mock.cpp @@ -75,7 +75,8 @@ ErrCode ServiceProxy::AppDone(ErrCode errCode) return BError(BError::Codes::OK); } -ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) +ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/mock/module_ipc/service_mock.cpp b/tests/mock/module_ipc/service_mock.cpp index 9fedff87bc33aa31f547bdcda8653a35bf14e96d..c058c5e8365192df93ca1661178718dc278033a4 100644 --- a/tests/mock/module_ipc/service_mock.cpp +++ b/tests/mock/module_ipc/service_mock.cpp @@ -72,7 +72,8 @@ ErrCode Service::AppDone(ErrCode errCode) return BError(BError::Codes::OK); } -ErrCode Service::ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario sennario) +ErrCode Service::ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario sennario, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/mock/module_ipc/service_reverse_proxy_mock.cpp b/tests/mock/module_ipc/service_reverse_proxy_mock.cpp index 4e958fc3ad9d7fb317b75c0ed9a838f9fd4322c8..1d7b598d4ce821942ecae41db23bb2ea2126d414 100644 --- a/tests/mock/module_ipc/service_reverse_proxy_mock.cpp +++ b/tests/mock/module_ipc/service_reverse_proxy_mock.cpp @@ -38,7 +38,7 @@ void ServiceReverseProxy::RestoreOnAllBundlesFinished(int32_t errCode) {} void ServiceReverseProxy::RestoreOnFileReady(string bundleName, string fileName, int fd, int32_t errCode) {} -void ServiceReverseProxy::RestoreOnResultReport(string result, string bundleName) {} +void ServiceReverseProxy::RestoreOnResultReport(string result, string bundleName, ErrCode errCode) {} void ServiceReverseProxy::IncrementalBackupOnFileReady(string bundleName, string fileName, int fd, int manifestFd, int32_t errCode) {} @@ -60,5 +60,5 @@ void ServiceReverseProxy::IncrementalRestoreOnAllBundlesFinished(int32_t errCode void ServiceReverseProxy::IncrementalRestoreOnFileReady(string bundleName, string fileName, int fd, int manifestFd, int32_t errCode) {} -void ServiceReverseProxy::IncrementalRestoreOnResultReport(string result, string bundleName) {} +void ServiceReverseProxy::IncrementalRestoreOnResultReport(string result, string bundleName, ErrCode errCode) {} } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/tests/mock/module_ipc/service_stub_mock.cpp b/tests/mock/module_ipc/service_stub_mock.cpp index e143fd136a8f13eefd55121ab8ce6cbbf4dea43c..9d4b055697a1c411c87b79d51e27bf7fbd47fd5d 100644 --- a/tests/mock/module_ipc/service_stub_mock.cpp +++ b/tests/mock/module_ipc/service_stub_mock.cpp @@ -165,8 +165,10 @@ int32_t ServiceStub::CmdResultReport(MessageParcel &data, MessageParcel &reply) data.ReadString(restoreRetInfo); int32_t scenario; data.ReadInt32(scenario); + ErrCode errCode; + data.ReadInt32(errCode); BackupRestoreScenario type = static_cast(scenario); - int res = ServiceResultReport(restoreRetInfo, type); + int res = ServiceResultReport(restoreRetInfo, type, errCode); reply.WriteInt32(res); return BError(BError::Codes::OK); } diff --git a/tests/unittests/backup_api/backup_impl/include/i_service_mock.h b/tests/unittests/backup_api/backup_impl/include/i_service_mock.h index f32448adedc5cd60ec4b3ad4d1d29a4802213dab..0a0ffa7e8217f72fd5116723bb041dc0093140a3 100644 --- a/tests/unittests/backup_api/backup_impl/include/i_service_mock.h +++ b/tests/unittests/backup_api/backup_impl/include/i_service_mock.h @@ -89,7 +89,8 @@ public: return BError(BError::Codes::OK); } - ErrCode ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) override + ErrCode ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) override { return BError(BError::Codes::OK); } diff --git a/tests/unittests/backup_api/backup_impl/include/service_reverse_mock.h b/tests/unittests/backup_api/backup_impl/include/service_reverse_mock.h index d2c7033d433903ba40efbdbefcc5a41b90473886..4ea6262fdc045a4bc65ec2d45105c5eef2572145 100644 --- a/tests/unittests/backup_api/backup_impl/include/service_reverse_mock.h +++ b/tests/unittests/backup_api/backup_impl/include/service_reverse_mock.h @@ -46,7 +46,7 @@ public: void RestoreOnBundleFinished(int32_t errCode, std::string bundleName) override {} void RestoreOnAllBundlesFinished(int32_t errCode) override {} void RestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int32_t errCode) override {} - void RestoreOnResultReport(std::string result, std::string bundleName) override {} + void RestoreOnResultReport(std::string result, std::string bundleName, ErrCode errCode) override {} void IncrementalBackupOnFileReady(std::string bundleName, std::string fileName, int fd, int manifestFd, int32_t errCode) override {} @@ -60,7 +60,7 @@ public: void IncrementalRestoreOnAllBundlesFinished(int32_t errCode) override {} void IncrementalRestoreOnFileReady(std::string bundleName, std::string fileName, int fd, int manifestFd, int32_t errCode) override {} - void IncrementalRestoreOnResultReport(std::string result, std::string bundleName) override {}; + void IncrementalRestoreOnResultReport(std::string result, std::string bundleName, ErrCode errCode) override {}; }; } // namespace OHOS::FileManagement::Backup #endif // MOCK_SERVICE_REVERSE_MOCK_H \ No newline at end of file diff --git a/tests/unittests/backup_api/backup_impl/service_reverse_stub_test.cpp b/tests/unittests/backup_api/backup_impl/service_reverse_stub_test.cpp index 77dc2d8148903519d2e4199232647e686391bf8a..b69f91d463fcc9657d6242d96f30b46e1a373b7c 100644 --- a/tests/unittests/backup_api/backup_impl/service_reverse_stub_test.cpp +++ b/tests/unittests/backup_api/backup_impl/service_reverse_stub_test.cpp @@ -49,7 +49,7 @@ public: MOCK_METHOD2(RestoreOnBundleFinished, void(int32_t errCode, string bundleName)); MOCK_METHOD1(RestoreOnAllBundlesFinished, void(int32_t errCode)); MOCK_METHOD4(RestoreOnFileReady, void(string bundleName, string fileName, int fd, int32_t errCode)); - MOCK_METHOD2(RestoreOnResultReport, void(string result, string bundleName)); + MOCK_METHOD3(RestoreOnResultReport, void(string result, string bundleName, ErrCode errCode)); MOCK_METHOD5(IncrementalBackupOnFileReady, void(string bundleName, string fileName, int fd, int manifestFd, int32_t errCode)); MOCK_METHOD2(IncrementalBackupOnBundleStarted, void(int32_t errCode, string bundleName)); @@ -61,7 +61,7 @@ public: MOCK_METHOD1(IncrementalRestoreOnAllBundlesFinished, void(int32_t errCode)); MOCK_METHOD5(IncrementalRestoreOnFileReady, void(string bundleName, string fileName, int fd, int manifestFd, int32_t errCode)); - MOCK_METHOD2(IncrementalRestoreOnResultReport, void(string result, string bundleName)); + MOCK_METHOD3(IncrementalRestoreOnResultReport, void(string result, string bundleName, ErrCode errCode)); }; class ServiceReverseStubTest : public testing::Test { @@ -816,7 +816,7 @@ HWTEST_F(ServiceReverseStubTest, << "ServiceReverseStubTest-begin SUB_backup_ServiceReverseStub_RestoreOnResultReport_0100"; try { MockServiceReverse service; - EXPECT_CALL(service, RestoreOnResultReport(_, _)).WillOnce(Return()); + EXPECT_CALL(service, RestoreOnResultReport(_, _, _)).WillOnce(Return()); MessageParcel data; MessageParcel reply; MessageOption option; @@ -824,6 +824,7 @@ HWTEST_F(ServiceReverseStubTest, EXPECT_TRUE(data.WriteInterfaceToken(IServiceReverse::GetDescriptor())); EXPECT_TRUE(data.WriteString(resultReport)); EXPECT_TRUE(data.WriteString(BUNDLE_NAME)); + EXPECT_TRUE(data.WriteInt32(0)); EXPECT_EQ( BError(BError::Codes::OK), @@ -855,13 +856,14 @@ HWTEST_F(ServiceReverseStubTest, << "ServiceReverseStubTest-begin SUB_backup_ServiceReverseStub_RestoreOnResultReport_0100"; try { MockServiceReverse service; - EXPECT_CALL(service, IncrementalRestoreOnResultReport(_, _)).WillOnce(Return()); + EXPECT_CALL(service, IncrementalRestoreOnResultReport(_, _, _)).WillOnce(Return()); MessageParcel data; MessageParcel reply; MessageOption option; std::string resultReport = "result_report"; EXPECT_TRUE(data.WriteInterfaceToken(IServiceReverse::GetDescriptor())); EXPECT_TRUE(data.WriteString(resultReport)); + EXPECT_TRUE(data.WriteInt32(0)); EXPECT_EQ( BError(BError::Codes::OK), diff --git a/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp b/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp index a9580be0f149848ac8879b02b991a80a1be04d87..5cf98223801b041f630b4822a20e0ad63f5b8767 100644 --- a/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_reverse_proxy_test.cpp @@ -1918,6 +1918,7 @@ HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_RestoreOnResultReport try { EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &ServiceReverseMock::InvokeSendRequest)); @@ -1976,6 +1977,7 @@ HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_RestoreOnResultReport try { EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(-1)); proxy_->RestoreOnResultReport(RESULT_REPORT, bundleName); EXPECT_TRUE(false); @@ -2005,6 +2007,7 @@ HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_IncrementalRestoreOnR try { EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &ServiceReverseMock::InvokeSendRequest)); @@ -2064,6 +2067,7 @@ HWTEST_F(ServiceReverseProxyTest, SUB_ServiceReverse_proxy_IncrementalRestoreOnR try { EXPECT_CALL(*messageParcelMock_, WriteInterfaceToken(_)).WillOnce(Return(true)); EXPECT_CALL(*messageParcelMock_, WriteString(_)).WillOnce(Return(true)).WillOnce(Return(true)); + EXPECT_CALL(*messageParcelMock_, WriteInt32(_)).WillOnce(Return(true)); EXPECT_CALL(*mock_, SendRequest(_, _, _, _)).WillOnce(Return(-1)); proxy_->IncrementalRestoreOnResultReport(RESULT_REPORT, bundleName); EXPECT_TRUE(false); diff --git a/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp b/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp index 99f55fdfa43737d026d3ef775c99527466c34fe7..9b9947fcbdd92014cd1c73cc32bd0e429cd56b8b 100644 --- a/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp @@ -50,7 +50,8 @@ public: MOCK_METHOD1(PublishFile, ErrCode(const BFileInfo &fileInfo)); MOCK_METHOD3(AppFileReady, ErrCode(const string &fileName, UniqueFd fd, int32_t errCode)); MOCK_METHOD1(AppDone, ErrCode(ErrCode errCode)); - MOCK_METHOD2(ServiceResultReport, ErrCode(const string restoreRetInfo, BackupRestoreScenario scenario)); + MOCK_METHOD3(ServiceResultReport, ErrCode(const string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode)); MOCK_METHOD2(GetFileHandle, ErrCode(const string &bundleName, const string &fileName)); MOCK_METHOD5( AppendBundlesRestoreSession, diff --git a/tests/unittests/backup_sa/session/service_proxy_mock.cpp b/tests/unittests/backup_sa/session/service_proxy_mock.cpp index a3dd9c9b3a804383a471cfde1b8930fabe02953b..6343ed8b09c995812863d0ddceaa3eb4043b65e9 100644 --- a/tests/unittests/backup_sa/session/service_proxy_mock.cpp +++ b/tests/unittests/backup_sa/session/service_proxy_mock.cpp @@ -55,7 +55,8 @@ ErrCode ServiceProxy::AppDone(ErrCode errCode) return BError(BError::Codes::OK); } -ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, BackupRestoreScenario scenario) +ErrCode ServiceProxy::ServiceResultReport(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode) { return BError(BError::Codes::OK); } diff --git a/tests/unittests/backup_sa/session/service_proxy_mock.h b/tests/unittests/backup_sa/session/service_proxy_mock.h index b6dd9df83a607f2abc5a158f02ece94b3019f212..9bbf0ba3c8cea709822c58e8b7f197487fba5bee 100644 --- a/tests/unittests/backup_sa/session/service_proxy_mock.h +++ b/tests/unittests/backup_sa/session/service_proxy_mock.h @@ -35,7 +35,8 @@ public: MOCK_METHOD2(AppFileReady, ErrCode(const std::string &fileName, UniqueFd fd)); MOCK_METHOD3(AppFileReady, ErrCode(const std::string &fileName, UniqueFd fd, int32_t errCode)); MOCK_METHOD1(AppDone, ErrCode(ErrCode errCode)); - MOCK_METHOD2(ServiceResultReport, ErrCode(const std::string restoreRetInfo, BackupRestoreScenario scenario)); + MOCK_METHOD3(ServiceResultReport, ErrCode(const std::string restoreRetInfo, + BackupRestoreScenario scenario, ErrCode errCode)); MOCK_METHOD2(GetFileHandle, ErrCode(const std::string &bundleName, const std::string &fileName)); MOCK_METHOD5(AppendBundlesRestoreSession, ErrCode(UniqueFd fd, const std::vector &bundleNames, const std::vector &detailInfos, RestoreTypeEnum restoreType, int32_t userId)); diff --git a/utils/include/b_jsonutil/b_jsonutil.h b/utils/include/b_jsonutil/b_jsonutil.h index 33c1d4d90994072295d937af6fb271e98cb9748b..f078b3189bceb67dd3f7e2cec31e2fe00d2128d5 100644 --- a/utils/include/b_jsonutil/b_jsonutil.h +++ b/utils/include/b_jsonutil/b_jsonutil.h @@ -82,6 +82,18 @@ public: */ static bool FindBundleInfoByName(std::map> &bundleNameDetailsMap, std::string &bundleName, const std::string &jobType, BundleDetailInfo &bundleDetail); + + /** + * @brief 组建恢复错误信息的json + * + * @param jsonStr 组建结果 + * @param errCode 错误码 + * @param errMsg 错误信息 + * + * @return 是否组建成功 + * + */ + static bool RestoreErrInfo(std::string &jsonStr, int errCode, std::string errMsg); }; } // namespace OHOS::FileManagement::Backup diff --git a/utils/src/b_jsonutil/b_jsonutil.cpp b/utils/src/b_jsonutil/b_jsonutil.cpp index 67447766dc0403be8d62e8290925320fdd7c47e5..2f5dd4c90711c0aa14e267f9b777b44d8587493f 100644 --- a/utils/src/b_jsonutil/b_jsonutil.cpp +++ b/utils/src/b_jsonutil/b_jsonutil.cpp @@ -151,4 +151,32 @@ bool BJsonUtil::FindBundleInfoByName(std::map