diff --git a/services/distributeddataservice/adapter/communicator/test/unittest/device_manager_adapter_test.cpp b/services/distributeddataservice/adapter/communicator/test/unittest/device_manager_adapter_test.cpp index f08d3153b29341fecb6934cd3cd029a1e53cc6bb..d9362257e420bb04ae85535d63939584f66346e1 100644 --- a/services/distributeddataservice/adapter/communicator/test/unittest/device_manager_adapter_test.cpp +++ b/services/distributeddataservice/adapter/communicator/test/unittest/device_manager_adapter_test.cpp @@ -86,6 +86,24 @@ const std::string DeviceManagerAdapterTest::EMPTY_DEVICE_ID = ""; const uint32_t DeviceManagerAdapterTest::LOCAL_DEVICE_ID_NUM = 3; const uint32_t DeviceManagerAdapterTest::LOCAL_UUID_NUM = 2; +class MockDeviceManagerDelegate : public DeviceManagerDelegate { +public: + static MockDeviceManagerDelegate &GetInstance(); + DeviceInfo GetLocalDevice() override; + static constexpr const char* localDevice = "ABCDEF0123456789"; +}; + +MockDeviceManagerDelegate &MockDeviceManagerDelegate::GetInstance() +{ + static MockDeviceManagerDelegate dmDelegate; + return dmDelegate; +} + +DeviceInfo MockDeviceManagerDelegate::GetLocalDevice() +{ + return { .uuid = localDevice, .networkId = localDevice }; +} + /** * @tc.name: StartWatchDeviceChange * @tc.desc: start watch device change @@ -633,7 +651,7 @@ HWTEST_F(DeviceManagerAdapterTest, RegisterDelegateInstance, TestSize.Level0) { DeviceManagerDelegate::RegisterInstance(&DeviceManagerAdapter::GetInstance()); // Repeated registration - DeviceManagerDelegate::RegisterInstance(&DeviceManagerAdapter::GetInstance()); - EXPECT_NE(nullptr, DeviceManagerDelegate::GetInstance()); + DeviceManagerDelegate::RegisterInstance(&MockDeviceManagerDelegate::GetInstance()); + EXPECT_EQ(DeviceManagerDelegate::GetInstance(), &DeviceManagerAdapter::GetInstance()); } } // namespace \ No newline at end of file diff --git a/services/distributeddataservice/framework/directory/directory_manager.cpp b/services/distributeddataservice/framework/directory/directory_manager.cpp index 805ed1b95868d162530737c9af2f17269cf5c015..9632ad3c8aad470aee5eec4f803d2390eec3b2d2 100644 --- a/services/distributeddataservice/framework/directory/directory_manager.cpp +++ b/services/distributeddataservice/framework/directory/directory_manager.cpp @@ -128,7 +128,13 @@ void DirectoryManager::Initialize(const std::vector &strategies, const std::sort(strategies_.begin(), strategies_.end(), [](const StrategyImpl &curr, const StrategyImpl &prev) { return curr.version > prev.version; }); - storeTypes_ = storeTypes; + storeTypes_.reserve(storeTypes.size()); + for (const auto &storeType : storeTypes) { + if (storeType.range.empty()) { + continue; + } + storeTypes_.push_back(storeType); + } } std::string DirectoryManager::GetType(const StoreMetaData &metaData) const diff --git a/services/distributeddataservice/service/test/directory_manager_test.cpp b/services/distributeddataservice/service/test/directory_manager_test.cpp index 85e3db8e1efda0db6e3cf20f176fb8f9f61a6944..e1d40945c742eebc79b135b757012a5242f5f7b2 100644 --- a/services/distributeddataservice/service/test/directory_manager_test.cpp +++ b/services/distributeddataservice/service/test/directory_manager_test.cpp @@ -20,6 +20,7 @@ #include "accesstoken_kit.h" #include "bootstrap.h" +#include "config_factory.h" #include "nativetoken_kit.h" #include "types.h" @@ -313,4 +314,42 @@ HWTEST_F(DirectoryManagerTest, GetStoreTypePath, TestSize.Level0) metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/other"; path = DirectoryManager::GetInstance().GetStorePath(metaData); EXPECT_EQ(path, metaData.dataDir); +} + +/** +* @tc.name: InitializeTest +* @tc.desc: test initialize DirectoryManager with invalid range +* @tc.type: FUNC +*/ +HWTEST_F(DirectoryManagerTest, InitializeTest, TestSize.Level1) +{ + // Initialize storeTypes_ + auto *config = ConfigFactory::GetInstance().GetDirectoryConfig(); + EXPECT_NE(config, nullptr); + std::vector strategies(config->strategy.size()); + for (size_t i = 0; i < config->strategy.size(); ++i) { + strategies[i] = config->strategy[i]; + } + auto typeSize = config->storeTypes.size(); + std::vector storeTypes(typeSize); + for (size_t i = 0; i < typeSize; ++i) { + storeTypes[i] = config->storeTypes[i]; + storeTypes[i].range = {}; // invalid range + } + DirectoryManager::GetInstance().Initialize(strategies, storeTypes); + + StoreMetaData metaData; + metaData.user = "100"; + metaData.bundleName = "ohos.test.demo"; + metaData.area = 1; + metaData.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0); + metaData.appId = "ohos.test.demo_09AEF01D"; + metaData.storeType = StoreMetaData::StoreType::STORE_BUTT; + metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/other"; + // Traverse storeTypes_ without exception + auto path = DirectoryManager::GetInstance().GetStorePath(metaData); + EXPECT_EQ(path, metaData.dataDir); + + // Restore normal data + Bootstrap::GetInstance().LoadDirectory(); } \ No newline at end of file