From 81aec409528720b62ce19345540f9c645b0db0b2 Mon Sep 17 00:00:00 2001 From: hunili Date: Thu, 14 Nov 2024 09:57:26 +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,=20=E6=B8=85=E7=90=86=E5=90=8E=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E6=96=AD=E8=BF=9E=E5=8D=A1=E4=B8=BB=20issue:https://gitee.com/?= =?UTF-8?q?openharmony/filemanagement=5Fapp=5Ffile=5Fservice/issues/IB47XS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hunili --- .../backup_sa/include/module_ipc/svc_backup_connection.h | 3 ++- services/backup_sa/src/module_ipc/service.cpp | 2 +- services/backup_sa/src/module_ipc/svc_backup_connection.cpp | 5 +++-- tests/mock/module_ipc/include/svc_backup_connection_mock.h | 4 ++-- tests/mock/module_ipc/src/svc_backup_connection_mock.cpp | 4 ++-- tests/mock/module_ipc/svc_backup_connection_mock.cpp | 2 +- .../backup_sa/module_ipc/service_incremental_test.cpp | 2 +- tests/unittests/backup_sa/module_ipc/service_other_test.cpp | 2 +- tests/unittests/backup_sa/module_ipc/sub_service_test.cpp | 2 +- 9 files changed, 14 insertions(+), 12 deletions(-) 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..128807aa7 100644 --- a/services/backup_sa/include/module_ipc/svc_backup_connection.h +++ b/services/backup_sa/include/module_ipc/svc_backup_connection.h @@ -54,7 +54,7 @@ public: /** * @brief disconnect remote ability of ExtBackup. */ - ErrCode DisconnectBackupExtAbility(); + ErrCode DisconnectBackupExtAbility(bool isCleanDisConCalled = false); /** * @brief check whether connected to remote extension ability. @@ -106,6 +106,7 @@ private: std::atomic isConnected_ = {false}; std::atomic isConnectedDone_ = {false}; std::atomic isSecondOnDisCon_ = {false}; + std::atomic isCleanDisConCalled_ = {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 5ba1614be..d4331f9d4 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1596,7 +1596,7 @@ ErrCode Service::ClearResidualBundleData(const std::string &bundleName) // 通知ext清理 ErrCode res = proxy->HandleClear(); if (backUpConnection->IsExtAbilityConnected()) { - backUpConnection->DisconnectBackupExtAbility(); + backUpConnection->DisconnectBackupExtAbility(true); } ClearSessionAndSchedInfo(bundleName); // 非清理任务,需要上报 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 048d1f3aa..ac6a7e46c 100644 --- a/services/backup_sa/src/module_ipc/svc_backup_connection.cpp +++ b/services/backup_sa/src/module_ipc/svc_backup_connection.cpp @@ -89,7 +89,7 @@ void SvcBackupConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName bundleName = bundleNameIndexInfo_; if (isSecondOnDisCon_ == false) { isSecondOnDisCon_.store(true); - } else { + } else if (!isCleanDisConCalled_) { HILOGE("It's error that the backup extension second died before the backup sa. name : %{public}s", bundleName.data()); callDied_(move(bundleName), true); @@ -113,10 +113,11 @@ ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t return ret; } -ErrCode SvcBackupConnection::DisconnectBackupExtAbility() +ErrCode SvcBackupConnection::DisconnectBackupExtAbility(bool isCleanDisConCalled) { HILOGI("called begin"); isConnectedDone_.store(true); + isCleanDisConCalled_.store(isCleanDisConCalled); std::unique_lock lock(mutex_); ErrCode ret = AppExecFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(this); auto callback = [extConn {wptr(this)}] { 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..0dedefe01 100644 --- a/tests/mock/module_ipc/include/svc_backup_connection_mock.h +++ b/tests/mock/module_ipc/include/svc_backup_connection_mock.h @@ -24,7 +24,7 @@ namespace OHOS::FileManagement::Backup { class BSvcBackupConnection : public RefBase { public: virtual ErrCode ConnectBackupExtAbility(AAFwk::Want&, int32_t) = 0; - virtual ErrCode DisconnectBackupExtAbility() = 0; + virtual ErrCode DisconnectBackupExtAbility(bool isCleanDisConCalled = false) = 0; virtual bool IsExtAbilityConnected() = 0; virtual sptr GetBackupExtProxy() = 0; virtual bool WaitDisconnectDone() = 0; @@ -38,7 +38,7 @@ public: class SvcBackupConnectionMock : public BSvcBackupConnection { public: MOCK_METHOD(ErrCode, ConnectBackupExtAbility, (AAFwk::Want&, int32_t)); - MOCK_METHOD(ErrCode, DisconnectBackupExtAbility, ()); + MOCK_METHOD(ErrCode, DisconnectBackupExtAbility, (bool)); MOCK_METHOD(bool, IsExtAbilityConnected, ()); MOCK_METHOD((sptr), GetBackupExtProxy, ()); MOCK_METHOD(bool, WaitDisconnectDone, ()); 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..24b8691d0 100644 --- a/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp +++ b/tests/mock/module_ipc/src/svc_backup_connection_mock.cpp @@ -29,9 +29,9 @@ ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t return BSvcBackupConnection::connect->ConnectBackupExtAbility(want, userId); } -ErrCode SvcBackupConnection::DisconnectBackupExtAbility() +ErrCode SvcBackupConnection::DisconnectBackupExtAbility(bool isCleanDisConCalled) { - return BSvcBackupConnection::connect->DisconnectBackupExtAbility(); + return BSvcBackupConnection::connect->DisconnectBackupExtAbility(isCleanDisConCalled); } bool SvcBackupConnection::IsExtAbilityConnected() diff --git a/tests/mock/module_ipc/svc_backup_connection_mock.cpp b/tests/mock/module_ipc/svc_backup_connection_mock.cpp index 8e06902e2..055dfb789 100644 --- a/tests/mock/module_ipc/svc_backup_connection_mock.cpp +++ b/tests/mock/module_ipc/svc_backup_connection_mock.cpp @@ -50,7 +50,7 @@ ErrCode SvcBackupConnection::ConnectBackupExtAbility(AAFwk::Want &want, int32_t return 0; } -ErrCode SvcBackupConnection::DisconnectBackupExtAbility() +ErrCode SvcBackupConnection::DisconnectBackupExtAbility(bool isCleanDisConCalled) { return 0; } 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..abb1eaaa7 100644 --- a/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_incremental_test.cpp @@ -712,7 +712,7 @@ HWTEST_F(ServiceIncrementalTest, SUB_ServiceIncremental_AppIncrementalFileReady_ EXPECT_CALL(*session, StopFwkTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*session, StopExtTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*srProxy, IncrementalBackupOnBundleFinished(_, _)).WillOnce(Return()); - EXPECT_CALL(*connect, DisconnectBackupExtAbility()).WillOnce(Return(BError(BError::Codes::OK).GetCode())); + EXPECT_CALL(*connect, DisconnectBackupExtAbility(_)).WillOnce(Return(BError(BError::Codes::OK).GetCode())); ret = service->AppIncrementalFileReady(fileName, UniqueFd(-1), UniqueFd(-1), errCode); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { 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..2453d2b54 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -1829,7 +1829,7 @@ HWTEST_F(ServiceTest, SUB_Service_DoTimeout_0000, TestSize.Level1) .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(false)).WillOnce(Return(true)); EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); - EXPECT_CALL(*connect, DisconnectBackupExtAbility()).WillOnce(Return(BError(BError::Codes::OK).GetCode())); + EXPECT_CALL(*connect, DisconnectBackupExtAbility(_)).WillOnce(Return(BError(BError::Codes::OK).GetCode())); EXPECT_CALL(*session, StopFwkTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*session, StopExtTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); diff --git a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp index 80f110bdb..6ddd289e5 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -413,7 +413,7 @@ HWTEST_F(ServiceTest, SUB_Service_ExtConnectDied_0000, TestSize.Level1) EXPECT_CALL(*session, StopExtTimer(_)).WillOnce(Return(true)); EXPECT_CALL(*session, GetExtConnection(_)).WillOnce(Return(connect)); EXPECT_CALL(*connect, IsExtAbilityConnected()).WillOnce(Return(true)); - EXPECT_CALL(*connect, DisconnectBackupExtAbility()).WillOnce(Return(BError(BError::Codes::OK).GetCode())); + EXPECT_CALL(*connect, DisconnectBackupExtAbility(_)).WillOnce(Return(BError(BError::Codes::OK).GetCode())); EXPECT_CALL(*saUtils, IsSABundleName(_)).WillOnce(Return(true)); EXPECT_CALL(*session, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)) .WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)) -- Gitee