diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 7ce63d354260d4a6c5c5cad88d4c423c606e1833..f0e2d9593d7a8e5420d6138dd6f40f74fbbe39ef 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1291,6 +1291,7 @@ void Service::ClearSessionAndSchedInfo(const string &bundleName) HandleRestoreDepsBundle(bundleName); DelClearBundleRecord({bundleName}); if (isOccupyingSession_.load() && session_->IsOnAllBundlesFinished()) { + HILOGI("Cleaning up backup data end."); SetOccupySession(false); StopAll(nullptr, true); return; @@ -1738,6 +1739,14 @@ ErrCode Service::AppendBundlesClearSession(const std::vector &bundle } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + if (backupInfos.empty()) { + if (clearRecorder_ != nullptr) { + clearRecorder_->DeleteConfigFile(); + } + HILOGE("AppendBundles clear session error, backupInfos is empty"); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return EPERM; + } std::vector supportBundleNames; for (auto info : backupInfos) { std::string bundleNameIndexStr = BJsonUtil::BuildBundleNameIndexInfo(info.name, info.appIndex); diff --git a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp index 1c8d8e7206867397ebad2aa863078c533941dc69..814af654988399179419a0e4f9a99f7b66425bc8 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -1435,9 +1435,15 @@ HWTEST_F(ServiceTest, SUB_Service_AppendBundlesClearSession_0000, TestSize.Level EXPECT_EQ(ret, EPERM); vector bundleInfos; + BJsonEntityCaps::BundleInfo info; + info.name = "bundleNames"; + info.appIndex = 0; + bundleInfos.push_back(info); EXPECT_CALL(*session, GetSessionUserId()).WillOnce(Return(0)); EXPECT_CALL(*bms, GetBundleInfos(_, _)).WillOnce(Return(bundleInfos)); EXPECT_CALL(*session, IsOnOnStartSched()).WillOnce(Return(false)); + EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName")) + .WillOnce(Return("bundleName")); ret = service->AppendBundlesClearSession({ "bundleNames" }); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) {