From dffc51bd20d4df7ac64dd96b83460b05bb929a52 Mon Sep 17 00:00:00 2001 From: wanghuajian-6 Date: Mon, 7 Apr 2025 20:17:47 +0800 Subject: [PATCH 1/2] fix ut Signed-off-by: wanghuajian-6 --- .../src/session_manager/session_manager.cpp | 6 +++++- .../service/object/src/object_manager.cpp | 15 ++++++++----- .../service/test/BUILD.gn | 4 ++++ .../test/mock/device_manager_adapter_mock.cpp | 8 +++++++ .../test/mock/device_manager_adapter_mock.h | 2 ++ .../service/test/object_manager_test.cpp | 21 +++++++++++++++++++ 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/services/distributeddataservice/app/src/session_manager/session_manager.cpp b/services/distributeddataservice/app/src/session_manager/session_manager.cpp index d1d8f05e3..4b5d6eaae 100644 --- a/services/distributeddataservice/app/src/session_manager/session_manager.cpp +++ b/services/distributeddataservice/app/src/session_manager/session_manager.cpp @@ -48,7 +48,11 @@ Session SessionManager::GetSession(const SessionPoint &local, const std::string session.sourceDeviceId = local.deviceId; session.targetDeviceId = targetDeviceId; auto users = UserDelegate::GetInstance().GetRemoteUserStatus(targetDeviceId); - + // system service + if (local.userId == UserDelegate::SYSTEM_USER) { + session.targetUserIds.push_back(UserDelegate::SYSTEM_USER); + } + AclParams aclParams; if (!GetSendAuthParams(local, targetDeviceId, aclParams)) { ZLOGE("get send auth params failed:%{public}s", Anonymous::Change(targetDeviceId).c_str()); diff --git a/services/distributeddataservice/service/object/src/object_manager.cpp b/services/distributeddataservice/service/object/src/object_manager.cpp index 588775802..31534759a 100644 --- a/services/distributeddataservice/service/object/src/object_manager.cpp +++ b/services/distributeddataservice/service/object/src/object_manager.cpp @@ -409,12 +409,17 @@ void ObjectStoreManager::NotifyChange(ObjectRecord &changedData) if (!isSameAccount) { ZLOGE("IsSameAccount failed. bundleName:%{public}s, source device:%{public}s", saveInfo.bundleName.c_str(), Anonymous::Change(saveInfo.sourceDeviceId).c_str()); + auto status = Open(); + if (status != OBJECT_SUCCESS) { + ZLOGE("Open failed, bundleName:%{public}s, source device::%{public}s, status: %{public}d", + saveInfo.bundleName.c_str(), Anonymous::Change(saveInfo.sourceDeviceId).c_str(), status); + return; + } std::vector> keys; - std::vector entries; - std::for_each(entries.begin(), entries.end(), [&keys](const DistributedDB::Entry &entry) { - keys.emplace_back(entry.key); - }); - auto status = delegate_->DeleteBatch(keys); + for (const auto &[key, value] : changedData) { + keys.emplace_back(key.begin(), key.end()); + } + status = delegate_->DeleteBatch(keys); if (status != DistributedDB::DBStatus::OK) { ZLOGE("Delete entries failed, bundleName:%{public}s, source device::%{public}s, status: %{public}d", saveInfo.bundleName.c_str(), Anonymous::Change(saveInfo.sourceDeviceId).c_str(), status); diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 1a0d4a4d9..78ba03d29 100755 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -774,6 +774,7 @@ ohos_unittest("ObjectManagerTest") { "../object/src/object_service_stub.cpp", "../object/src/object_snapshot.cpp", "../object/src/object_types_utils.cpp", + "mock/device_manager_adapter_mock.cpp", "mock/kv_store_nb_delegate_mock.cpp", "object_manager_test.cpp", "object_service_impl_test.cpp", @@ -786,6 +787,7 @@ ohos_unittest("ObjectManagerTest") { "${dataobject_path}/frameworks/innerkitsimpl/include/common", "${dataobject_path}/interfaces/innerkits", "${data_service_path}/adapter/include/utils", + "${data_service_path}/service/test/mock", ] configs = [ ":module_private_config" ] @@ -799,6 +801,8 @@ ohos_unittest("ObjectManagerTest") { "dfs_service:cloudsync_asset_kit_inner", "dfs_service:distributed_file_daemon_kit_inner", "dmsfwk:distributed_sdk", + "googletest:gmock_main", + "googletest:gtest_main", "hilog:libhilog", "hisysevent:libhisysevent", "ipc:ipc_core", diff --git a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp index fae2fb0f5..7bc2b7e82 100644 --- a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp +++ b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp @@ -50,6 +50,14 @@ bool DeviceManagerAdapter::IsSameAccount(const AccessCaller &accCaller, const Ac return BDeviceManagerAdapter::deviceManagerAdapter->IsSameAccount(accCaller, accCallee); } +bool DeviceManagerAdapter::IsSameAccount(const std::string &devicdId) +{ + if (BDeviceManagerAdapter::deviceManagerAdapter == nullptr) { + return false; + } + return BDeviceManagerAdapter::deviceManagerAdapter->IsSameAccount(devicdId); +} + bool DeviceManagerAdapter::CheckAccessControl(const AccessCaller &accCaller, const AccessCallee &accCallee) { if (BDeviceManagerAdapter::deviceManagerAdapter == nullptr) { diff --git a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h index 9c1114633..2a47a5510 100644 --- a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h +++ b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h @@ -33,6 +33,7 @@ public: virtual Status StartWatchDeviceChange(const AppDeviceChangeListener *, const PipeInfo &) = 0; virtual Status StopWatchDeviceChange(const AppDeviceChangeListener *, const PipeInfo &) = 0; virtual bool IsSameAccount(const AccessCaller &, const AccessCallee &) = 0; + virtual bool IsSameAccount(const std::string &) = 0; virtual std::string GetUuidByNetworkId(const std::string &); virtual DeviceInfo GetDeviceInfo(const std::string &); virtual std::string ToNetworkID(const std::string &); @@ -51,6 +52,7 @@ public: MOCK_METHOD(Status, StartWatchDeviceChange, (const AppDeviceChangeListener *, const PipeInfo &)); MOCK_METHOD(Status, StopWatchDeviceChange, (const AppDeviceChangeListener *, const PipeInfo &)); MOCK_METHOD(bool, IsSameAccount, (const AccessCaller &, const AccessCallee &)); + MOCK_METHOD(bool, IsSameAccount, (const std::string &)); MOCK_METHOD(std::string, GetUuidByNetworkId, (const std::string &)); MOCK_METHOD(DeviceInfo, GetDeviceInfo, (const std::string &)); MOCK_METHOD(std::string, ToNetworkID, (const std::string &)); diff --git a/services/distributeddataservice/service/test/object_manager_test.cpp b/services/distributeddataservice/service/test/object_manager_test.cpp index 835dca5b6..dfc4bf24a 100644 --- a/services/distributeddataservice/service/test/object_manager_test.cpp +++ b/services/distributeddataservice/service/test/object_manager_test.cpp @@ -20,6 +20,7 @@ #include #include +#include "device_manager_adapter_mock.h" #include "executor_pool.h" #include "kv_store_nb_delegate_mock.h" #include "object_types.h" @@ -27,6 +28,8 @@ using namespace testing::ext; using namespace OHOS::DistributedObject; +using namespace std; +using namespace testing; using AssetValue = OHOS::CommonType::AssetValue; using RestoreStatus = OHOS::DistributedObject::ObjectStoreManager::RestoreStatus; namespace OHOS::Test { @@ -35,6 +38,8 @@ class ObjectManagerTest : public testing::Test { public: void SetUp(); void TearDown(); + static void SetUpTestCase(void); + static void TearDownTestCase(void); protected: Asset asset_; @@ -52,6 +57,7 @@ protected: pid_t pid_ = 10; uint32_t tokenId_ = 100; AssetValue assetValue_; + static inline std::shared_ptr devMgrAdapterMock = nullptr; }; void ObjectManagerTest::SetUp() @@ -91,6 +97,18 @@ void ObjectManagerTest::SetUp() assetBindInfo_ = AssetBindInfo; } +void ObjectManagerTest::SetUpTestCase(void) +{ + devMgrAdapterMock = make_shared(); + BDeviceManagerAdapter::deviceManagerAdapter = devMgrAdapterMock; +} + +void ObjectManagerTest::TearDownTestCase(void) +{ + BDeviceManagerAdapter::deviceManagerAdapter = nullptr; + devMgrAdapterMock = nullptr; +} + void ObjectManagerTest::TearDown() {} /** @@ -349,6 +367,7 @@ HWTEST_F(ObjectManagerTest, NotifyChange002, TestSize.Level0) data.insert_or_assign(assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, value); data.insert_or_assign(assetPrefix + ObjectStore::SIZE_SUFFIX, value); data.insert_or_assign("testkey", value); + EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_)).WillOnce(Return(true)); manager->NotifyChange(data); EXPECT_TRUE(manager->restoreStatus_.Contains(bundleName+sessionId)); auto [has, taskId] = manager->objectTimer_.Find(bundleName+sessionId); @@ -533,10 +552,12 @@ HWTEST_F(ObjectManagerTest, SyncOnStore001, TestSize.Level0) std::vector deviceList; // not local device & syncDevices empty deviceList.push_back("local1"); + EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_)).WillOnce(Return(true)); auto result = manager->SyncOnStore(prefix, deviceList, func); ASSERT_NE(result, OBJECT_SUCCESS); // local device deviceList.push_back("local"); + EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_)).WillOnce(Return(true)); result = manager->SyncOnStore(prefix, deviceList, func); ASSERT_EQ(result, OBJECT_SUCCESS); } -- Gitee From 382b19d2e86449cbb2f60f0d037a5276e6d307ce Mon Sep 17 00:00:00 2001 From: wanghuajian-6 Date: Wed, 9 Apr 2025 11:43:31 +0800 Subject: [PATCH 2/2] fix ut Signed-off-by: wanghuajian-6 --- .../service/object/include/object_manager.h | 2 +- .../service/object/src/object_manager.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/service/object/include/object_manager.h b/services/distributeddataservice/service/object/include/object_manager.h index a2f903436..8fdaea708 100644 --- a/services/distributeddataservice/service/object/include/object_manager.h +++ b/services/distributeddataservice/service/object/include/object_manager.h @@ -95,7 +95,7 @@ public: sptr callback); void UnregisterRemoteCallback(const std::string &bundleName, pid_t pid, uint32_t tokenId, const std::string &sessionId = ""); - void NotifyChange(ObjectRecord &changedData); + void NotifyChange(const ObjectRecord &changedData); void NotifyAssetsReady(const std::string& objectKey, const std::string& bundleName, const std::string& srcNetworkId = ""); void NotifyAssetsStart(const std::string& objectKey, const std::string& srcNetworkId = ""); diff --git a/services/distributeddataservice/service/object/src/object_manager.cpp b/services/distributeddataservice/service/object/src/object_manager.cpp index 31534759a..97ea8fe0c 100644 --- a/services/distributeddataservice/service/object/src/object_manager.cpp +++ b/services/distributeddataservice/service/object/src/object_manager.cpp @@ -393,7 +393,7 @@ void ObjectStoreManager::UnregisterRemoteCallback(const std::string &bundleName, })); } -void ObjectStoreManager::NotifyChange(ObjectRecord &changedData) +void ObjectStoreManager::NotifyChange(const ObjectRecord &changedData) { ZLOGI("OnChange start, size:%{public}zu", changedData.size()); bool hasAsset = false; @@ -424,7 +424,7 @@ void ObjectStoreManager::NotifyChange(ObjectRecord &changedData) ZLOGE("Delete entries failed, bundleName:%{public}s, source device::%{public}s, status: %{public}d", saveInfo.bundleName.c_str(), Anonymous::Change(saveInfo.sourceDeviceId).c_str(), status); } - return; + return Close(); } if (!hasAsset) { ObjectStore::RadarReporter::ReportStateStart(std::string(__FUNCTION__), ObjectStore::DATA_RESTORE, -- Gitee