From d07c317a4b67ab75bcbb162a5336420ced9baf9a Mon Sep 17 00:00:00 2001 From: libo429 Date: Tue, 16 Jul 2024 19:28:54 +0800 Subject: [PATCH] onRestore errmsg report Signed-off-by: libo429 --- .../native/backup_ext/include/ext_backup.h | 11 ++-- .../native/backup_ext/include/ext_backup_js.h | 21 +++---- .../native/backup_ext/include/ext_extension.h | 7 ++- .../native/backup_ext/src/ext_backup.cpp | 11 ++-- .../native/backup_ext/src/ext_backup_js.cpp | 46 ++++++++------- .../native/backup_ext/src/ext_extension.cpp | 56 ++++++++++++++----- .../include/service_reverse.h | 6 +- .../src/service_incremental_reverse.cpp | 4 +- .../backup_kit_inner/src/service_proxy.cpp | 6 +- .../backup_kit_inner/src/service_reverse.cpp | 4 +- .../src/service_reverse_stub.cpp | 9 ++- .../native/backup_kit_inner/impl/i_service.h | 2 +- .../backup_kit_inner/impl/i_service_reverse.h | 6 +- .../backup_kit_inner/impl/service_proxy.h | 3 +- .../backup_sa/include/module_ipc/service.h | 3 +- .../module_ipc/service_reverse_proxy.h | 6 +- services/backup_sa/src/module_ipc/service.cpp | 7 ++- .../service_incremental_reverse_proxy.cpp | 6 +- .../src/module_ipc/service_reverse_proxy.cpp | 5 +- .../backup_sa/src/module_ipc/service_stub.cpp | 6 +- .../backupext_fuzzer/backupext_fuzzer.cpp | 8 +-- .../backup_kit_inner/service_proxy_mock.cpp | 3 +- tests/mock/module_ipc/service_mock.cpp | 3 +- .../module_ipc/service_reverse_proxy_mock.cpp | 4 +- tests/mock/module_ipc/service_stub_mock.cpp | 4 +- .../backup_impl/include/i_service_mock.h | 3 +- .../include/service_reverse_mock.h | 4 +- .../backup_impl/service_reverse_stub_test.cpp | 10 ++-- .../module_ipc/service_reverse_proxy_test.cpp | 4 ++ .../module_ipc/service_stub_test.cpp | 3 +- .../backup_sa/session/service_proxy_mock.cpp | 3 +- .../backup_sa/session/service_proxy_mock.h | 3 +- utils/include/b_jsonutil/b_jsonutil.h | 12 ++++ utils/src/b_jsonutil/b_jsonutil.cpp | 28 ++++++++++ 34 files changed, 216 insertions(+), 101 deletions(-) diff --git a/frameworks/native/backup_ext/include/ext_backup.h b/frameworks/native/backup_ext/include/ext_backup.h index 3f5eaff98..707a17043 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 a5c31c804..a98542d35 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 3e8a25fc0..b93bdbb3e 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 b9308f513..04049786f 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 85fc1b83b..399b07e45 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 b3861f9b1..fb5973bc4 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 17008c7ac..178bac3c9 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 a6d27a66d..477a2e05b 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 cb73c0db2..fa0712445 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 98942bd6b..9fd9eb510 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 f24cc6608..0fdeed6c8 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 fe5b0a2ee..49348fb58 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 2cb81d0da..8791c26b2 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 8591c7e41..d0845087e 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 23d5d713b..d76ddf8b8 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 9c133524f..43d4e13bb 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 9bebaffaa..741757243 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 ee52a03d0..6a9cd7560 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 82488e2a2..fdb44c962 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 8509c14ec..51596fb49 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 c1c7a5866..ecf34b7e8 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 34ad31691..95af50b71 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 9fedff87b..c058c5e83 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 4e958fc3a..1d7b598d4 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 e143fd136..9d4b05569 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 f32448ade..0a0ffa7e8 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 d2c7033d4..4ea6262fd 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 77dc2d814..b69f91d46 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 a9580be0f..5cf982238 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 99f55fdfa..9b9947fcb 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 a3dd9c9b3..6343ed8b0 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 b6dd9df83..9bbf0ba3c 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 33c1d4d90..f078b3189 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 67447766d..2f5dd4c90 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