From 3f36c89f6165cbda6e9223635b73ef4889068343 Mon Sep 17 00:00:00 2001 From: hunili Date: Thu, 14 Nov 2024 12:51:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=BC=82=E5=B8=B8=E9=80=80?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E6=A1=86=E6=9E=B6=E5=8D=A1=E4=BD=8F=20issue:?= =?UTF-8?q?=20https://gitee.com/openharmony/filemanagement=5Fapp=5Ffile=5F?= =?UTF-8?q?service/issues/IB4A5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hunili --- .../backup_sa/include/module_ipc/service.h | 2 +- .../module_ipc/svc_backup_connection.h | 6 ++--- services/backup_sa/src/module_ipc/service.cpp | 8 +++--- .../backup_sa/src/module_ipc/sub_service.cpp | 4 ++- .../src/module_ipc/svc_backup_connection.cpp | 27 ++++++++++--------- .../src/module_ipc/svc_session_manager.cpp | 4 +-- .../include/svc_backup_connection_mock.h | 4 +-- tests/mock/module_ipc/service_mock.cpp | 2 +- .../src/svc_backup_connection_mock.cpp | 4 +-- .../module_ipc/svc_backup_connection_mock.cpp | 2 +- .../module_ipc/svc_session_manager_mock.cpp | 2 +- .../module_ipc/service_incremental_test.cpp | 2 +- .../module_ipc/service_other_test.cpp | 6 +++-- .../backup_sa/module_ipc/service_test.cpp | 6 ++--- .../module_ipc/svc_backup_connection_test.cpp | 6 ++--- 15 files changed, 45 insertions(+), 40 deletions(-) diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 81aae7530..e43f37649 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -125,7 +125,7 @@ public: * * @param bundleName 应用名称 */ - void OnBackupExtensionDied(const std::string &&bundleName, bool isSecondCalled = false); + void OnBackupExtensionDied(const std::string &&bundleName, bool isCleanCalled = false); /** * @brief extension启动连接成功 diff --git a/services/backup_sa/include/module_ipc/svc_backup_connection.h b/services/backup_sa/include/module_ipc/svc_backup_connection.h index abff875c6..8b6c2477c 100644 --- a/services/backup_sa/include/module_ipc/svc_backup_connection.h +++ b/services/backup_sa/include/module_ipc/svc_backup_connection.h @@ -49,7 +49,7 @@ public: /** * @brief connect remote ability of ExtBackup. */ - ErrCode ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId); + ErrCode ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId, bool isCleanCalled); /** * @brief disconnect remote ability of ExtBackup. @@ -104,8 +104,8 @@ private: std::condition_variable condition_; std::condition_variable waitCondition_; std::atomic isConnected_ = {false}; - std::atomic isConnectedDone_ = {false}; - std::atomic isSecondOnDisCon_ = {false}; + std::atomic isCleanCalled_ = {false}; + std::atomic isConnectCalled_ = {false}; sptr backupProxy_; std::function callDied_; diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index cf65822f4..8e4416c03 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1034,10 +1034,10 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) } } -void Service::OnBackupExtensionDied(const string &&bundleName, bool isSecondCalled) +void Service::OnBackupExtensionDied(const string &&bundleName, bool isCleanCalled) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); - if (isSecondCalled) { + if (isCleanCalled) { HILOGE("Backup <%{public}s> Extension Process second Died", bundleName.c_str()); ClearSessionAndSchedInfo(bundleName); OnAllBundlesFinished(BError(BError::Codes::OK)); @@ -1568,7 +1568,7 @@ std::function Service::GetBackupInfoConnectDone(wptr std::function Service::GetBackupInfoConnectDied( wptr obj, std::string &bundleName) { - return [obj](const string &&bundleName, bool isSecondCalled) { + return [obj](const string &&bundleName, bool isCleanCalled) { HILOGI("GetBackupInfoConnectDied, bundleName: %{public}s", bundleName.c_str()); auto thisPtr = obj.promote(); if (!thisPtr) { @@ -1622,7 +1622,7 @@ ErrCode Service::GetBackupInfoCmdHandle(BundleName &bundleName, std::string &res backupConnection->SetCallback(callConnected); backupConnection->SetCallDied(callDied); AAFwk::Want want = CreateConnectWant(bundleName); - auto ret = backupConnection->ConnectBackupExtAbility(want, GetUserIdDefault()); + auto ret = backupConnection->ConnectBackupExtAbility(want, GetUserIdDefault(), false); if (ret) { HILOGE("ConnectBackupExtAbility faild, bundleName:%{public}s, ret:%{public}d", bundleName.c_str(), ret); return BError(BError::Codes::SA_BOOT_EXT_FAIL); diff --git a/services/backup_sa/src/module_ipc/sub_service.cpp b/services/backup_sa/src/module_ipc/sub_service.cpp index b269ace2a..aeb1e550a 100644 --- a/services/backup_sa/src/module_ipc/sub_service.cpp +++ b/services/backup_sa/src/module_ipc/sub_service.cpp @@ -254,7 +254,9 @@ ErrCode Service::LaunchBackupExtension(const BundleName &bundleName) HILOGE("LaunchBackupExtension error, WaitDisconnectDone failed"); return BError(BError::Codes::SA_INVAL_ARG); } - ErrCode ret = backUpConnection->ConnectBackupExtAbility(want, session_->GetSessionUserId()); + BConstants::ServiceSchedAction bundleAction = session_->GetServiceSchedAction(bundleName); + ErrCode ret = backUpConnection->ConnectBackupExtAbility(want, session_->GetSessionUserId(), + bundleAction == BConstants::ServiceSchedAction::CLEAN); if (ret) { HILOGE("ConnectBackupExtAbility faild, bundleName:%{public}s, ret:%{public}d", bundleName.c_str(), ret); ExtensionConnectFailRadarReport(bundleName, ret, scenario); diff --git a/services/backup_sa/src/module_ipc/svc_backup_connection.cpp b/services/backup_sa/src/module_ipc/svc_backup_connection.cpp index 8fc298baa..7dc6d5eec 100644 --- a/services/backup_sa/src/module_ipc/svc_backup_connection.cpp +++ b/services/backup_sa/src/module_ipc/svc_backup_connection.cpp @@ -87,26 +87,27 @@ void SvcBackupConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName return; } bundleName = bundleNameIndexInfo_; - if (isSecondOnDisCon_ == false) { - isSecondOnDisCon_.store(true); - } else { - HILOGE("It's error that the backup extension second died before the backup sa. name : %{public}s", - bundleName.data()); - callDied_(move(bundleName), true); - } - if (isConnectedDone_ == false) { - isConnectedDone_.store(true); - HILOGE("It's error that the backup extension dies before the backup sa. name : %{public}s", bundleName.data()); - callDied_(move(bundleName), false); + if (isConnectCalled_ == true) { + if (isCleanCalled_ == true) { + HILOGE("It's error that the backup extension clean died before the backup sa. name : %{public}s", + bundleName.data()); + callDied_(move(bundleName), true); + } else { + HILOGE("It's error that the backup extension died before the backup sa. name : %{public}s", + bundleName.data()); + callDied_(move(bundleName), false); + } } condition_.notify_all(); waitCondition_.notify_all(); HILOGI("called end, name: %{public}s", bundleNameIndexInfo_.c_str()); } -ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId) +ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId, bool isCleanCalled) { HILOGI("Called begin"); + isCleanCalled_.store(isCleanCalled); + isConnectCalled_.store(true); std::unique_lock lock(mutex_); ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, this, userId); HILOGI("Called end, ret=%{public}d, userId=%{public}d.", ret, userId); @@ -116,7 +117,7 @@ ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t ErrCode SvcBackupConnection::DisconnectBackupExtAbility() { HILOGI("called begin"); - isConnectedDone_.store(true); + isConnectCalled_.store(false); std::unique_lock lock(mutex_); ErrCode ret = AppExecFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(this); auto callback = [extConn {wptr(this)}] { diff --git a/services/backup_sa/src/module_ipc/svc_session_manager.cpp b/services/backup_sa/src/module_ipc/svc_session_manager.cpp index b8f64714d..f47d3e151 100644 --- a/services/backup_sa/src/module_ipc/svc_session_manager.cpp +++ b/services/backup_sa/src/module_ipc/svc_session_manager.cpp @@ -281,14 +281,14 @@ std::weak_ptr SvcSessionManager::GetSAExtConnection(const Bu sptr SvcSessionManager::GetBackupAbilityExt(const string &bundleName) { - auto callDied = [revPtr {reversePtr_}](const string &&bundleName, bool isSecondCalled = false) { + auto callDied = [revPtr {reversePtr_}](const string &&bundleName, bool isCleanCalled = false) { auto revPtrStrong = revPtr.promote(); if (!revPtrStrong) { // 服务先于客户端死亡是一种异常场景,但该场景对本流程来说也没什么影响,所以只是简单记录一下 HILOGW("It's curious that the backup sa dies before the backup client"); return; } - revPtrStrong->OnBackupExtensionDied(move(bundleName), isSecondCalled); + revPtrStrong->OnBackupExtensionDied(move(bundleName), isCleanCalled); }; auto callConnected = [revPtr {reversePtr_}](const string &&bundleName) { diff --git a/tests/mock/module_ipc/include/svc_backup_connection_mock.h b/tests/mock/module_ipc/include/svc_backup_connection_mock.h index 7e0e3f13b..f8798a65b 100644 --- a/tests/mock/module_ipc/include/svc_backup_connection_mock.h +++ b/tests/mock/module_ipc/include/svc_backup_connection_mock.h @@ -23,7 +23,7 @@ namespace OHOS::FileManagement::Backup { class BSvcBackupConnection : public RefBase { public: - virtual ErrCode ConnectBackupExtAbility(AAFwk::Want&, int32_t) = 0; + virtual ErrCode ConnectBackupExtAbility(AAFwk::Want&, int32_t, bool) = 0; virtual ErrCode DisconnectBackupExtAbility() = 0; virtual bool IsExtAbilityConnected() = 0; virtual sptr GetBackupExtProxy() = 0; @@ -37,7 +37,7 @@ public: class SvcBackupConnectionMock : public BSvcBackupConnection { public: - MOCK_METHOD(ErrCode, ConnectBackupExtAbility, (AAFwk::Want&, int32_t)); + MOCK_METHOD(ErrCode, ConnectBackupExtAbility, (AAFwk::Want&, int32_t, bool)); MOCK_METHOD(ErrCode, DisconnectBackupExtAbility, ()); MOCK_METHOD(bool, IsExtAbilityConnected, ()); MOCK_METHOD((sptr), GetBackupExtProxy, ()); diff --git a/tests/mock/module_ipc/service_mock.cpp b/tests/mock/module_ipc/service_mock.cpp index f7a4f8761..0a7e2bb57 100644 --- a/tests/mock/module_ipc/service_mock.cpp +++ b/tests/mock/module_ipc/service_mock.cpp @@ -123,7 +123,7 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) return BError(BError::Codes::OK); } -void Service::OnBackupExtensionDied(const string &&bundleName, bool isSecondCalled) {} +void Service::OnBackupExtensionDied(const string &&bundleName, bool isCleanCalled) {} void Service::ExtConnectDied(const string &callName) {} diff --git a/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp b/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp index d4eb70721..75c9ffccc 100644 --- a/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp +++ b/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp @@ -24,9 +24,9 @@ void SvcBackupConnection::OnAbilityConnectDone(const AppExecFwk::ElementName&, c void SvcBackupConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName&, int) {} -ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId) +ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId, bool isCleanCalled) { - return BSvcBackupConnection::connect->ConnectBackupExtAbility(want, userId); + return BSvcBackupConnection::connect->ConnectBackupExtAbility(want, userId, isCleanCalled); } ErrCode SvcBackupConnection::DisconnectBackupExtAbility() diff --git a/tests/mock/module_ipc/svc_backup_connection_mock.cpp b/tests/mock/module_ipc/svc_backup_connection_mock.cpp index 8e06902e2..001f3dee2 100644 --- a/tests/mock/module_ipc/svc_backup_connection_mock.cpp +++ b/tests/mock/module_ipc/svc_backup_connection_mock.cpp @@ -45,7 +45,7 @@ void SvcBackupConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName callDied_(move(bundleName), false); } -ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId) +ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t userId, bool isCleanCalled) { return 0; } diff --git a/tests/mock/module_ipc/svc_session_manager_mock.cpp b/tests/mock/module_ipc/svc_session_manager_mock.cpp index ba5f6a5c6..257ad09c2 100644 --- a/tests/mock/module_ipc/svc_session_manager_mock.cpp +++ b/tests/mock/module_ipc/svc_session_manager_mock.cpp @@ -102,7 +102,7 @@ wptr SvcSessionManager::GetExtConnection(const BundleName & return nullptr; } if (!it->second.backUpConnection) { - auto callDied = [](const string &&bundleName, bool isSecondCalled = false) {}; + auto callDied = [](const string &&bundleName, bool isCleanCalled = false) {}; auto callConnected = [](const string &&bundleName) {}; it->second.backUpConnection = sptr(new SvcBackupConnection(callDied, callConnected, bundleName)); diff --git a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp index 677feb583..4cd58d31e 100644 --- a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp @@ -128,7 +128,7 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) return BError(BError::Codes::OK); } -void Service::OnBackupExtensionDied(const string &&bundleName, bool isSecondCalled) {} +void Service::OnBackupExtensionDied(const string &&bundleName, bool isCleanCalled) {} void Service::ExtConnectDied(const string &callName) {} 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 141e4e349..e59fd30f2 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -1337,8 +1337,9 @@ HWTEST_F(ServiceTest, SUB_Service_LaunchBackupExtension_0200, TestSize.Level1) EXPECT_CALL(*session, GetBackupExtInfo(_)).WillOnce(Return("")); EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, IsExtAbilityConnected()).WillOnce(Return(false)); + EXPECT_CALL(*session, GetServiceSchedAction(_)).WillOnce(Return(BConstants::ServiceSchedAction::START)); EXPECT_CALL(*session, GetSessionUserId()).WillOnce(Return(0)); - EXPECT_CALL(*connect, ConnectBackupExtAbility(_, _)) + EXPECT_CALL(*connect, ConnectBackupExtAbility(_, _, _)) .WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG).GetCode())); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); @@ -1356,8 +1357,9 @@ HWTEST_F(ServiceTest, SUB_Service_LaunchBackupExtension_0200, TestSize.Level1) EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, IsExtAbilityConnected()).WillOnce(Return(true)); EXPECT_CALL(*connect, WaitDisconnectDone()).WillOnce(Return(true)); + EXPECT_CALL(*session, GetServiceSchedAction(_)).WillOnce(Return(BConstants::ServiceSchedAction::START)); EXPECT_CALL(*session, GetSessionUserId()).WillOnce(Return(0)); - EXPECT_CALL(*connect, ConnectBackupExtAbility(_, _)) + EXPECT_CALL(*connect, ConnectBackupExtAbility(_, _, _)) .WillOnce(Return(BError(BError::Codes::SA_INVAL_ARG).GetCode())); EXPECT_CALL(*param, GetBackupDebugOverrideAccount()) .WillOnce(Return(make_pair(true, DEBUG_ID + 1))); diff --git a/tests/unittests/backup_sa/module_ipc/service_test.cpp b/tests/unittests/backup_sa/module_ipc/service_test.cpp index 6a83d2469..0835ba5e0 100644 --- a/tests/unittests/backup_sa/module_ipc/service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_test.cpp @@ -581,7 +581,7 @@ HWTEST_F(ServiceTest, SUB_Service_GetFileHandle_0101, testing::ext::TestSize.Lev SvcSessionManager::Impl impl_; impl_.clientToken = 1; BackupExtInfo extInfo {}; - auto callDied = [](const string &&bundleName, bool isSecondCalled) {}; + auto callDied = [](const string &&bundleName, bool isCleanCalled) {}; auto callConnected = [](const string &&bundleName) {}; string bundleNameIndexInfo = "123456"; extInfo.backUpConnection = sptr(new SvcBackupConnection(callDied, callConnected, bundleNameIndexInfo)); @@ -724,7 +724,7 @@ HWTEST_F(ServiceTest, SUB_Service_ExtStart_0101, testing::ext::TestSize.Level1) SvcSessionManager::Impl impl_; impl_.clientToken = 1; BackupExtInfo extInfo {}; - auto callDied = [](const string &&bundleName, bool isSecondCalled) {}; + auto callDied = [](const string &&bundleName, bool isCleanCalled) {}; auto callConnected = [](const string &&bundleName) {}; string bundleNameIndexInfo = "123456789"; extInfo.backUpConnection = sptr(new SvcBackupConnection(callDied, callConnected, bundleNameIndexInfo)); @@ -1592,7 +1592,7 @@ HWTEST_F(ServiceTest, SUB_Service_ExtConnectDied_0100, testing::ext::TestSize.Le SvcSessionManager::Impl impl_; impl_.clientToken = 1; BackupExtInfo extInfo {}; - auto callDied = [](const string &&bundleName, bool isSecondCalled) {}; + auto callDied = [](const string &&bundleName, bool isCleanCalled) {}; auto callConnected = [](const string &&bundleName) {}; string bundleNameIndexInfo = "123456789"; extInfo.backUpConnection = sptr(new SvcBackupConnection(callDied, callConnected, bundleNameIndexInfo)); diff --git a/tests/unittests/backup_sa/module_ipc/svc_backup_connection_test.cpp b/tests/unittests/backup_sa/module_ipc/svc_backup_connection_test.cpp index 886618eb6..bcc180e3c 100644 --- a/tests/unittests/backup_sa/module_ipc/svc_backup_connection_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/svc_backup_connection_test.cpp @@ -41,7 +41,7 @@ public: static inline shared_ptr castMock = nullptr; }; -static void CallDied(const std::string &&name, bool isSecondCalled) +static void CallDied(const std::string &&name, bool isCleanCalled) { GTEST_LOG_(INFO) << "ServiceReverseProxyTest-CallDied SUCCESS"; } @@ -114,12 +114,12 @@ HWTEST_F(SvcBackupConnectionTest, SUB_BackupConnection_OnAbilityDisconnectDone_0 int resultCode = 1; EXPECT_TRUE(backupCon_ != nullptr); - backupCon_->isConnectedDone_ = false; + backupCon_->isConnectCalled_ = false; backupCon_->OnAbilityDisconnectDone(element, resultCode); bool ret = backupCon_->IsExtAbilityConnected(); EXPECT_FALSE(ret); - backupCon_->isConnectedDone_ = true; + backupCon_->isConnectCalled_ = true; backupCon_->OnAbilityDisconnectDone(element, resultCode); ret = backupCon_->IsExtAbilityConnected(); EXPECT_FALSE(ret); -- Gitee