diff --git a/services/distributeddataservice/app/test/BUILD.gn b/services/distributeddataservice/app/test/BUILD.gn index 3d9a2e9d209cba01d097661a0b5f57f5c5a4ba35..80725c641980d70476245e9e674f7dd0e17ceedc 100644 --- a/services/distributeddataservice/app/test/BUILD.gn +++ b/services/distributeddataservice/app/test/BUILD.gn @@ -147,6 +147,12 @@ ohos_unittest("KvStoreDataServiceTest") { ohos_unittest("KvStoreMetaManagerUpdateKeyTest") { module_out_path = module_output_path + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + blocklist = "${datamgr_service_path}/cfi_blocklist.txt" + } sources = [ "${data_service_path}/app/src/checker/bundle_checker.cpp", "${data_service_path}/app/src/checker/system_checker.cpp", @@ -170,6 +176,7 @@ ohos_unittest("KvStoreMetaManagerUpdateKeyTest") { "${data_service_path}/app/src/task_manager.cpp", "${data_service_path}/app/test/unittest/kvstore_meta_manager_update_key_test.cpp", "${data_service_path}/service/common/xcollie.cpp", + "${data_service_path}/service/test/mock/device_manager_adapter_mock.cpp", ] configs = [ ":module_private_config" ] @@ -184,6 +191,7 @@ ohos_unittest("KvStoreMetaManagerUpdateKeyTest") { "device_auth:deviceauth_sdk", "device_manager:devicemanagersdk", "file_api:securitylabel", + "googletest:gmock", "googletest:gtest_main", "hicollie:libhicollie", "hilog:libhilog", diff --git a/services/distributeddataservice/app/test/unittest/kvstore_meta_manager_update_key_test.cpp b/services/distributeddataservice/app/test/unittest/kvstore_meta_manager_update_key_test.cpp index fa747a9e0dc86ea25acdc0920966425b04d1ec96..a520cfb6e81e036d1f92170e750ca8bd3728abbe 100644 --- a/services/distributeddataservice/app/test/unittest/kvstore_meta_manager_update_key_test.cpp +++ b/services/distributeddataservice/app/test/unittest/kvstore_meta_manager_update_key_test.cpp @@ -14,23 +14,24 @@ */ #define LOG_TAG "KvstoreMetaManagerUpdateKeyTest" -#include "metadata/meta_data_manager.h" - #include "bootstrap.h" #include "device_manager_adapter.h" +#include "device_manager_adapter_mock.h" +#include "executor_pool.h" +#include "gtest/gtest.h" #include "kvstore_meta_manager.h" #include "log_print.h" #include "metadata/device_meta_data.h" +#include "metadata/meta_data_manager.h" #include "metadata/secret_key_meta_data.h" #include "metadata/store_meta_data.h" #include "metadata/store_meta_data_local.h" #include "metadata/version_meta_data.h" -#include "executor_pool.h" #include "semaphore_ex.h" #include "store_types.h" -#include "gtest/gtest.h" namespace { using namespace testing::ext; +using namespace testing; using namespace OHOS::DistributedData; using KvStoreMetaManager = OHOS::DistributedKv::KvStoreMetaManager; using DmAdapter = OHOS::DistributedData::DeviceManagerAdapter; @@ -38,6 +39,14 @@ class KvstoreMetaManagerUpdateKeyTest : public testing::Test { public: static void SetUpTestCase() { + deviceManagerAdapterMock = std::make_shared(); + BDeviceManagerAdapter::deviceManagerAdapter = deviceManagerAdapterMock; + DeviceInfo deviceInfo; + deviceInfo.uuid = "ABCD"; + EXPECT_CALL(*deviceManagerAdapterMock, GetLocalDevice()).WillRepeatedly(Return(deviceInfo)); + EXPECT_CALL(*deviceManagerAdapterMock, GetUuidByNetworkId(_)).WillRepeatedly(Return(deviceInfo.uuid)); + EXPECT_CALL(*deviceManagerAdapterMock, CalcClientUuid(_, _)).WillRepeatedly(Return(deviceInfo.uuid)); + EXPECT_CALL(*deviceManagerAdapterMock, ToUUID(deviceInfo.uuid)).WillRepeatedly(Return(deviceInfo.uuid)); auto executors = std::make_shared(1, 0); Bootstrap::GetInstance().LoadComponents(); Bootstrap::GetInstance().LoadDirectory(); @@ -45,15 +54,22 @@ public: KvStoreMetaManager::GetInstance().BindExecutor(executors); KvStoreMetaManager::GetInstance().InitMetaParameter(); } + static void TearDownTestCase() { + deviceManagerAdapterMock = nullptr; + BDeviceManagerAdapter::deviceManagerAdapter = nullptr; } + void SetUp() { } + void TearDown() { } + + static inline std::shared_ptr deviceManagerAdapterMock = nullptr; }; /** diff --git a/services/distributeddataservice/service/rdb/rdb_general_store.cpp b/services/distributeddataservice/service/rdb/rdb_general_store.cpp index 9a3ba03cb830b15c6eca15b8c4fdf6e17f952dff..cc31eacc8e794d7d1ecc23d79ed8ab511ba275a0 100644 --- a/services/distributeddataservice/service/rdb/rdb_general_store.cpp +++ b/services/distributeddataservice/service/rdb/rdb_general_store.cpp @@ -182,6 +182,7 @@ RdbGeneralStore::RdbGeneralStore(const StoreMetaData &meta) observer_.storeId_ = meta.storeId; observer_.meta_ = meta; RelationalStoreDelegate::Option option = GetOption(meta); + option.isNeedCompressOnSync = true; option.observer = &observer_; if (meta.isEncrypt) { option.passwd = GetDBPassword(meta); @@ -311,7 +312,8 @@ int32_t RdbGeneralStore::Close(bool isForce) return GeneralError::E_OK; } auto [dbStatus, downloadCount] = delegate_->GetDownloadingAssetsCount(); - if (!isForce && (delegate_->GetCloudSyncTaskCount() > 0 || downloadCount > 0)) { + if (!isForce && + (delegate_->GetCloudSyncTaskCount() > 0 || downloadCount > 0 || delegate_->GetDeviceSyncTaskCount() > 0)) { return GeneralError::E_BUSY; } auto status = manager_.CloseStore(delegate_); diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 3f2faa385118f9ef5e6be3be48ce2657832ff008..d9ebefd6f0e8b2a3f088c8851b8f595ea1ee083f 100644 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -559,11 +559,13 @@ ohos_unittest("RdbServiceImplTest") { cfi = true cfi_cross_dso = true debug = false + blocklist = "${datamgr_service_path}/cfi_blocklist.txt" } module_out_path = module_output_path sources = [ "${data_service_path}/service/test/mock/general_store_mock.cpp", "${data_service_path}/service/test/mock/cursor_mock.cpp", + "mock/device_manager_adapter_mock.cpp", "mock/checker_mock.cpp", "mock/db_change_data_mock.cpp", "mock/db_store_mock.cpp", 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 5924460d94e1c786e50459857768bea1a201ac6d..f6da6ffa3799278e918a9cc1e14bb16d9b5c2b5a 100644 --- a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp +++ b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.cpp @@ -43,6 +43,14 @@ std::vector OHOS::DistributedData::DeviceManagerAdapter::ToUUID(con return BDeviceManagerAdapter::deviceManagerAdapter->ToUUID(devices); } +std::string OHOS::DistributedData::DeviceManagerAdapter::ToUUID(const std::string &id) +{ + if (BDeviceManagerAdapter::deviceManagerAdapter == nullptr) { + return id; + } + return BDeviceManagerAdapter::deviceManagerAdapter->ToUUID(id); +} + bool OHOS::DistributedData::DeviceManagerAdapter::IsOHOSType(const std::string &id) { if (BDeviceManagerAdapter::deviceManagerAdapter == nullptr) { @@ -135,6 +143,15 @@ std::string OHOS::DistributedData::DeviceManagerAdapter::ToNetworkID(const std:: return BDeviceManagerAdapter::deviceManagerAdapter->ToNetworkID(id); } +std::string OHOS::DistributedData::DeviceManagerAdapter::CalcClientUuid( + const std::string &appId, const std::string &uuid) +{ + if (BDeviceManagerAdapter::deviceManagerAdapter == nullptr) { + return " "; + } + return BDeviceManagerAdapter::deviceManagerAdapter->CalcClientUuid(appId, uuid); +} + DeviceManagerAdapter::~DeviceManagerAdapter() { } 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 d423327a76f1ada23316caed304e6688641afe71..126862436d07d99533d64058f772823753b222e6 100644 --- a/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h +++ b/services/distributeddataservice/service/test/mock/device_manager_adapter_mock.h @@ -16,8 +16,9 @@ #define OHOS_DISTRIBUTEDDATA_SERVICE_TEST_BDEVICE_MANAGER_ADAPTER_MOCK_H #include -#include "device_manager_adapter.h" + #include "commu_types.h" +#include "device_manager_adapter.h" namespace OHOS { namespace DistributedData { @@ -31,6 +32,7 @@ public: virtual bool IsOHOSType(const std::string &) = 0; virtual std::vector ToUUID(std::vector) = 0; virtual std::vector ToUUID(const std::vector &) = 0; + virtual std::string ToUUID(const std::string &) = 0; virtual Status StartWatchDeviceChange(const AppDeviceChangeListener *, const PipeInfo &) = 0; virtual Status StopWatchDeviceChange(const AppDeviceChangeListener *, const PipeInfo &) = 0; virtual bool IsSameAccount(const AccessCaller &, const AccessCallee &) = 0; @@ -40,6 +42,7 @@ public: virtual std::string ToNetworkID(const std::string &); virtual bool CheckAccessControl(const AccessCaller &, const AccessCallee &) = 0; virtual DeviceInfo GetLocalDevice() = 0; + virtual std::string CalcClientUuid(const std::string &appId, const std::string &uuid) = 0; static inline std::shared_ptr deviceManagerAdapter = nullptr; BDeviceManagerAdapter() = default; virtual ~BDeviceManagerAdapter() = default; @@ -51,6 +54,7 @@ public: MOCK_METHOD(bool, IsOHOSType, (const std::string &)); MOCK_METHOD((std::vector), ToUUID, (std::vector)); MOCK_METHOD((std::vector), ToUUID, (const std::vector &)); + MOCK_METHOD(std::string, ToUUID, (const std::string &)); MOCK_METHOD(Status, StartWatchDeviceChange, (const AppDeviceChangeListener *, const PipeInfo &)); MOCK_METHOD(Status, StopWatchDeviceChange, (const AppDeviceChangeListener *, const PipeInfo &)); MOCK_METHOD(bool, IsSameAccount, (const AccessCaller &, const AccessCallee &)); @@ -60,6 +64,7 @@ public: MOCK_METHOD(std::string, ToNetworkID, (const std::string &)); MOCK_METHOD(bool, CheckAccessControl, (const AccessCaller &, const AccessCallee &)); MOCK_METHOD(DeviceInfo, GetLocalDevice, ()); + MOCK_METHOD(std::string, CalcClientUuid, (const std::string &, const std::string &)); }; } // namespace DistributedData diff --git a/services/distributeddataservice/service/test/mock/relational_store_delegate_mock.h b/services/distributeddataservice/service/test/mock/relational_store_delegate_mock.h index 0f5308d450420f32df105b114cdf0199d968cdf4..a478667ab7bcd63dfabf4ac8ec245d0656c6333e 100644 --- a/services/distributeddataservice/service/test/mock/relational_store_delegate_mock.h +++ b/services/distributeddataservice/service/test/mock/relational_store_delegate_mock.h @@ -25,14 +25,36 @@ public: { return DBStatus::OK; } - + static inline int32_t cloudSyncTask = 0; + static bool SetCloudSyncTaskCount(int32_t task) + { + cloudSyncTask = task; + return true; + } + static inline int32_t deviceSyncTask = 0; + static bool SetDeviceTaskCount(int32_t task) + { + deviceSyncTask = task; + return true; + } + static inline int32_t downloadingAssetsCount = 0; + static bool SetDownloadingAssetsCount(int32_t task) + { + downloadingAssetsCount = task; + return true; + } int32_t GetCloudSyncTaskCount() override { - static int32_t count = 0; - count = (count + 1) % 2; // The result of count + 1 is the remainder of 2. - return count; + return cloudSyncTask; + } + std::pair GetDownloadingAssetsCount() override + { + return {DBStatus::OK, downloadingAssetsCount}; + } + int32_t GetDeviceSyncTaskCount() override + { + return deviceSyncTask; } - DBStatus RemoveDeviceData(const std::string &device, const std::string &tableName) override { return DBStatus::OK; @@ -148,7 +170,6 @@ public: return DBStatus::OK; } static bool gTestResult; - protected: DBStatus RemoveDeviceDataInner(const std::string &device, ClearMode mode) override { diff --git a/services/distributeddataservice/service/test/rdb_general_store_test.cpp b/services/distributeddataservice/service/test/rdb_general_store_test.cpp index 24e4dfab64a3b38cc3327102ee1adce563bb553d..1a4a8f29f257b039b9aae310c37e806c0e83a19f 100644 --- a/services/distributeddataservice/service/test/rdb_general_store_test.cpp +++ b/services/distributeddataservice/service/test/rdb_general_store_test.cpp @@ -227,7 +227,7 @@ HWTEST_F(RdbGeneralStoreTest, Bind003, TestSize.Level1) /** * @tc.name: Close -* @tc.desc: RdbGeneralStore Close and IsBound function test +* @tc.desc: RdbGeneralStore Close and isforce is false and GetDeviceSyncTaskCount is 2 * @tc.type: FUNC */ HWTEST_F(RdbGeneralStoreTest, Close, TestSize.Level1) @@ -239,10 +239,68 @@ HWTEST_F(RdbGeneralStoreTest, Close, TestSize.Level1) EXPECT_EQ(ret, GeneralError::E_OK); metaData_.storeId = "mock"; store = std::make_shared(metaData_); + MockRelationalStoreDelegate::SetCloudSyncTaskCount(0); + MockRelationalStoreDelegate::SetDownloadingAssetsCount(0); + MockRelationalStoreDelegate::SetDeviceTaskCount(2); ret = store->Close(); EXPECT_EQ(ret, GeneralError::E_BUSY); } +/** + * @tc.name: Close1 + * @tc.desc: RdbGeneralStore Close and isforce is false and GetCloudSyncTaskCount is 1 + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Close1, TestSize.Level1) +{ + metaData_.storeId = "mock"; + auto store = std::make_shared(metaData_); + MockRelationalStoreDelegate::SetCloudSyncTaskCount(1); + auto ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_BUSY); +} +/** + * @tc.name: Close2 + * @tc.desc: RdbGeneralStore Close and isforce is false and DownloadingAssetsCount is 1 + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Close2, TestSize.Level1) +{ + metaData_.storeId = "mock"; + auto store = std::make_shared(metaData_); + MockRelationalStoreDelegate::SetCloudSyncTaskCount(0); + MockRelationalStoreDelegate::SetDownloadingAssetsCount(1); + auto ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_BUSY); +} +/** + * @tc.name: Close3 + * @tc.desc: RdbGeneralStore Close and isforce is true + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Close3, TestSize.Level1) +{ + metaData_.storeId = "mock"; + auto store = std::make_shared(metaData_); + auto ret = store->Close(true); + EXPECT_EQ(ret, GeneralError::E_OK); +} +/** + * @tc.name: Close4 + * @tc.desc: RdbGeneralStore Close and there is no task + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Close4, TestSize.Level1) +{ + metaData_.storeId = "mock"; + auto store = std::make_shared(metaData_); + MockRelationalStoreDelegate::SetCloudSyncTaskCount(0); + MockRelationalStoreDelegate::SetDownloadingAssetsCount(0); + MockRelationalStoreDelegate::SetDeviceTaskCount(0); + auto ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_OK); +} + /** * @tc.name: Close * @tc.desc: RdbGeneralStore Close test diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 6b70994996eceb2b37e8c63a86ee36d534645886..d51c8608085c13d3551fac8cf100e4810c39d3e7 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -30,6 +30,7 @@ #include "metadata/store_meta_data.h" #include "metadata/store_meta_data_local.h" #include "metadata/store_debug_info.h" +#include "mock/device_manager_adapter_mock.h" #include "mock/db_store_mock.h" #include "mock/general_store_mock.h" #include "store/general_value.h" @@ -69,6 +70,7 @@ protected: static std::shared_ptr dbStoreMock_; static StoreMetaData metaData_; static CheckerMock checkerMock_; + static inline std::shared_ptr deviceManagerAdapterMock = nullptr; static void InitMetaDataManager(); }; @@ -109,6 +111,14 @@ void RdbServiceImplTest::InitMetaDataManager() void RdbServiceImplTest::SetUpTestCase() { + deviceManagerAdapterMock = std::make_shared(); + BDeviceManagerAdapter::deviceManagerAdapter = deviceManagerAdapterMock; + DeviceInfo deviceInfo; + deviceInfo.uuid = "ABCD"; + EXPECT_CALL(*deviceManagerAdapterMock, GetLocalDevice()).WillRepeatedly(Return(deviceInfo)); + EXPECT_CALL(*deviceManagerAdapterMock, GetUuidByNetworkId(_)).WillRepeatedly(Return(deviceInfo.uuid)); + EXPECT_CALL(*deviceManagerAdapterMock, CalcClientUuid(_, _)).WillRepeatedly(Return(deviceInfo.uuid)); + EXPECT_CALL(*deviceManagerAdapterMock, ToUUID(deviceInfo.uuid)).WillRepeatedly(Return(deviceInfo.uuid)); size_t max = 12; size_t min = 5; @@ -121,6 +131,8 @@ void RdbServiceImplTest::SetUpTestCase() void RdbServiceImplTest::TearDownTestCase() { + deviceManagerAdapterMock = nullptr; + BDeviceManagerAdapter::deviceManagerAdapter = nullptr; } void RdbServiceImplTest::SetUp() diff --git a/services/distributeddataservice/service/test/rdb_service_impl_token_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_token_test.cpp index 62989305ebc7367c1a2545179bf449e061a7e76d..4a49356a4483d43ced32543b8fe80dae36e75291 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_token_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_token_test.cpp @@ -140,9 +140,6 @@ void RdbServiceImplTokenTest::GetRdbSyncerParam(RdbSyncerParam ¶m) */ HWTEST_F(RdbServiceImplTokenTest, VerifyPromiseInfo001, TestSize.Level0) { - EXPECT_CALL(*accTokenMock, GetTokenType(testing::_)) - .WillOnce(testing::Return(ATokenTypeEnum::TOKEN_INVALID)) - .WillRepeatedly(testing::Return(ATokenTypeEnum::TOKEN_INVALID)); RdbServiceImpl service; RdbSyncerParam param; int32_t result = service.VerifyPromiseInfo(param);