From 15585eb829c1f60f17b516b41cb5fda283c49b14 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 09:49:16 +0800 Subject: [PATCH 01/24] code fix Signed-off-by: z30053452 --- .../test/kvdb_service_stub_unittest.cpp | 54 +- .../service/test/rdb_general_store_test.cpp | 978 ------------------ 2 files changed, 52 insertions(+), 980 deletions(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index 28269f5cb..d42382728 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -158,6 +158,9 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) { MessageParcel data; MessageParcel reply; + Option options; + options.hapName = "testHap"; + ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; StoreId storeId = {"testStoreId"}; auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); @@ -174,12 +177,34 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) { MessageParcel data; MessageParcel reply; + Option options; + options.hapName = "testHap"; + ITypesUtil::Marshal(data, options); AppId appId = {"test/App"}; StoreId storeId = {"test\\StoreId"}; auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } +/** + * @tc.name: OnBeforeCreate003 + * @tc.desc: Test OnBeforeCreate + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(KVDBServiceStubTest, OnBeforeCreate003, TestSize.Level1) +{ + MessageParcel data; + MessageParcel reply; + Option options; + options.hapName = "./testHap"; + ITypesUtil::Marshal(data, options); + AppId appId = {"testApp"}; + StoreId storeId = {"testStoreId"}; + auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); + EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); +} + /** * @tc.name: OnAfterCreate001 * @tc.desc: Test OnAfterCreate @@ -191,6 +216,9 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate001, TestSize.Level1) MessageParcel data; data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; + Option options; + options.hapName = "testHap"; + ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; StoreId storeId = {"testStore"}; auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); @@ -208,8 +236,30 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) MessageParcel data; data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; - AppId appId = {"..testApp"}; - StoreId storeId = {"..testStore"}; + Option options; + options.hapName = "testHap"; + ITypesUtil::Marshal(data, options); + AppId appId = {"../testApp"}; + StoreId storeId = {"\\testStore"}; + auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); + EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); +} + +/** + * @tc.name: OnAfterCreate003 + * @tc.desc: Test OnBeforeCreate + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(KVDBServiceStubTest, OnAfterCreate003, TestSize.Level1) +{ + MessageParcel data; + MessageParcel reply; + Option options; + options.hapName = "./testHap"; + ITypesUtil::Marshal(data, options); + AppId appId = {"testApp"}; + StoreId storeId = {"testStoreId"}; auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } diff --git a/services/distributeddataservice/service/test/rdb_general_store_test.cpp b/services/distributeddataservice/service/test/rdb_general_store_test.cpp index 24e4dfab6..fd9b1e690 100644 --- a/services/distributeddataservice/service/test/rdb_general_store_test.cpp +++ b/services/distributeddataservice/service/test/rdb_general_store_test.cpp @@ -105,983 +105,5 @@ public: return; } }; - -/** -* @tc.name: BindSnapshots001 -* @tc.desc: RdbGeneralStore BindSnapshots test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, BindSnapshots001, TestSize.Level1) -{ - BindAssets bindAssets; - auto result = store->BindSnapshots(bindAssets.bindAssets); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: BindSnapshots002 -* @tc.desc: RdbGeneralStore BindSnapshots nullptr test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, BindSnapshots002, TestSize.Level1) -{ - DistributedData::StoreMetaData meta; - meta = metaData_; - meta.isEncrypt = true; - auto store = std::make_shared(meta); - ASSERT_NE(store, nullptr); - store->snapshots_.bindAssets = nullptr; - BindAssets bindAssets; - auto result = store->BindSnapshots(bindAssets.bindAssets); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Bind001 -* @tc.desc: RdbGeneralStore Bind bindInfo test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Bind001, TestSize.Level1) -{ - DistributedData::Database database; - GeneralStore::CloudConfig config; - std::map bindInfos; - auto result = store->Bind(database, bindInfos, config); - EXPECT_TRUE(bindInfos.empty()); - EXPECT_EQ(result, GeneralError::E_OK); - - std::shared_ptr db; - std::shared_ptr loader; - GeneralStore::BindInfo bindInfo(db, loader); - EXPECT_EQ(bindInfo.db_, nullptr); - EXPECT_EQ(bindInfo.loader_, nullptr); - uint32_t key = 1; - bindInfos[key] = bindInfo; - result = store->Bind(database, bindInfos, config); - EXPECT_TRUE(!bindInfos.empty()); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - std::shared_ptr dbs = std::make_shared(); - std::shared_ptr loaders = std::make_shared(); - GeneralStore::BindInfo bindInfo1(dbs, loader); - EXPECT_NE(bindInfo1.db_, nullptr); - bindInfos[key] = bindInfo1; - result = store->Bind(database, bindInfos, config); - EXPECT_TRUE(!bindInfos.empty()); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - GeneralStore::BindInfo bindInfo2(db, loaders); - EXPECT_NE(bindInfo2.loader_, nullptr); - bindInfos[key] = bindInfo2; - result = store->Bind(database, bindInfos, config); - EXPECT_TRUE(!bindInfos.empty()); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); -} - -/** -* @tc.name: Bind002 -* @tc.desc: RdbGeneralStore Bind delegate_ is nullptr test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Bind002, TestSize.Level1) -{ - DistributedData::Database database; - std::map bindInfos; - std::shared_ptr db = std::make_shared(); - std::shared_ptr loader = std::make_shared(); - GeneralStore::BindInfo bindInfo(db, loader); - uint32_t key = 1; - bindInfos[key] = bindInfo; - GeneralStore::CloudConfig config; - auto result = store->Bind(database, bindInfos, config); - EXPECT_EQ(store->delegate_, nullptr); - EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); - - store->isBound_ = true; - result = store->Bind(database, bindInfos, config); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Bind003 -* @tc.desc: RdbGeneralStore Bind delegate_ test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Bind003, TestSize.Level1) -{ - DistributedData::Database database; - std::map bindInfos; - - std::shared_ptr db = std::make_shared(); - std::shared_ptr loader = std::make_shared(); - GeneralStore::BindInfo bindInfo(db, loader); - uint32_t key = 1; - bindInfos[key] = bindInfo; - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - GeneralStore::CloudConfig config; - auto result = store->Bind(database, bindInfos, config); - EXPECT_NE(store->delegate_, nullptr); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Close -* @tc.desc: RdbGeneralStore Close and IsBound function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Close, TestSize.Level1) -{ - auto result = store->IsBound(std::atoi(metaData_.user.c_str())); - EXPECT_EQ(result, false); - EXPECT_EQ(store->delegate_, nullptr); - auto ret = store->Close(); - EXPECT_EQ(ret, GeneralError::E_OK); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - ret = store->Close(); - EXPECT_EQ(ret, GeneralError::E_BUSY); -} - -/** -* @tc.name: Close -* @tc.desc: RdbGeneralStore Close test -* @tc.type: FUNC -* @tc.author: shaoyuanzhao -*/ -HWTEST_F(RdbGeneralStoreTest, BusyClose, TestSize.Level1) -{ - auto store = std::make_shared(metaData_); - ASSERT_NE(store, nullptr); - std::thread thread([store]() { - std::unique_lockrwMutex_)> lock(store->rwMutex_); - std::this_thread::sleep_for(std::chrono::seconds(1)); - }); - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - auto ret = store->Close(); - EXPECT_EQ(ret, GeneralError::E_BUSY); - thread.join(); - ret = store->Close(); - EXPECT_EQ(ret, GeneralError::E_OK); -} - -/** -* @tc.name: Execute -* @tc.desc: RdbGeneralStore Execute function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Execute, TestSize.Level1) -{ - std::string table = "table"; - std::string sql = "sql"; - EXPECT_EQ(store->delegate_, nullptr); - auto result = store->Execute(table, sql); - EXPECT_EQ(result, GeneralError::E_ERROR); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Execute(table, sql); - EXPECT_EQ(result, GeneralError::E_OK); - - std::string null = ""; - result = store->Execute(table, null); - EXPECT_EQ(result, GeneralError::E_ERROR); -} - -/** -* @tc.name: SqlConcatenate -* @tc.desc: RdbGeneralStore SqlConcatenate function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, SqlConcatenate, TestSize.Level1) -{ - DistributedData::VBucket value; - std::string strColumnSql = "strColumnSql"; - std::string strRowValueSql = "strRowValueSql"; - auto result = store->SqlConcatenate(value, strColumnSql, strRowValueSql); - size_t columnSize = value.size(); - EXPECT_EQ(columnSize, 0); - EXPECT_EQ(result, columnSize); - - DistributedData::VBucket values = g_RdbVBucket; - result = store->SqlConcatenate(values, strColumnSql, strRowValueSql); - columnSize = values.size(); - EXPECT_NE(columnSize, 0); - EXPECT_EQ(result, columnSize); -} - -/** -* @tc.name: Insert001 -* @tc.desc: RdbGeneralStore Insert error test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Insert001, TestSize.Level1) -{ - DistributedData::VBuckets values; - EXPECT_EQ(values.size(), 0); - std::string table = "table"; - auto result = store->Insert("", std::move(values)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - result = store->Insert(table, std::move(values)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - DistributedData::VBuckets extends = { { { "#gid", { "0000000" } }, { "#flag", { true } }, - { "#value", { int64_t(100) } }, { "#float", { double(100) } } }, - { { "#gid", { "0000001" } } } }; - result = store->Insert("", std::move(extends)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - DistributedData::VBucket value; - DistributedData::VBuckets vbuckets = { value }; - result = store->Insert(table, std::move(vbuckets)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Insert(table, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); -} - -/** -* @tc.name: Insert002 -* @tc.desc: RdbGeneralStore Insert function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Insert002, TestSize.Level1) -{ - std::string table = "table"; - DistributedData::VBuckets extends = { { g_RdbVBucket } }; - auto result = store->Insert(table, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_ERROR); - - std::string test = "test"; - result = store->Insert(test, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_ERROR); - - result = store->Insert(test, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_ERROR); - - for (size_t i = 0; i < PRINT_ERROR_CNT + 1; i++) { - result = store->Insert(test, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_ERROR); - } - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Insert(table, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Update -* @tc.desc: RdbGeneralStore Update function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Update, TestSize.Level1) -{ - std::string table = "table"; - std::string setSql = "setSql"; - RdbGeneralStore::Values values; - std::string whereSql = "whereSql"; - RdbGeneralStore::Values conditions; - auto result = store->Update("", setSql, std::move(values), whereSql, std::move(conditions)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Update(table, "", std::move(values), whereSql, std::move(conditions)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Update(table, setSql, std::move(values), whereSql, std::move(conditions)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Update(table, setSql, std::move(g_RdbValues), "", std::move(conditions)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(conditions)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); - EXPECT_EQ(result, GeneralError::E_ERROR); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); - EXPECT_EQ(result, GeneralError::E_OK); - - result = store->Update("test", setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); - EXPECT_EQ(result, GeneralError::E_ERROR); -} - -/** -* @tc.name: Replace -* @tc.desc: RdbGeneralStore Replace function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Replace, TestSize.Level1) -{ - std::string table = "table"; - RdbGeneralStore::VBucket values; - auto result = store->Replace("", std::move(g_RdbVBucket)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Replace(table, std::move(values)); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Replace(table, std::move(g_RdbVBucket)); - EXPECT_EQ(result, GeneralError::E_ERROR); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Replace(table, std::move(g_RdbVBucket)); - EXPECT_EQ(result, GeneralError::E_OK); - - result = store->Replace("test", std::move(g_RdbVBucket)); - EXPECT_EQ(result, GeneralError::E_ERROR); -} - -/** -* @tc.name: Delete -* @tc.desc: RdbGeneralStore Delete function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Delete, TestSize.Level1) -{ - std::string table = "table"; - std::string sql = "sql"; - auto result = store->Delete(table, sql, std::move(g_RdbValues)); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Query001 -* @tc.desc: RdbGeneralStore Query function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Query001, TestSize.Level1) -{ - std::string table = "table"; - std::string sql = "sql"; - auto [err1, result1] = store->Query(table, sql, std::move(g_RdbValues)); - EXPECT_EQ(err1, GeneralError::E_ALREADY_CLOSED); - EXPECT_EQ(result1, nullptr); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - auto [err2, result2] = store->Query(table, sql, std::move(g_RdbValues)); - EXPECT_EQ(err2, GeneralError::E_OK); - EXPECT_NE(result2, nullptr); -} - -/** -* @tc.name: Query002 -* @tc.desc: RdbGeneralStore Query function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Query002, TestSize.Level1) -{ - std::string table = "table"; - std::string sql = "sql"; - MockQuery query; - auto [err1, result1] = store->Query(table, query); - EXPECT_EQ(err1, GeneralError::E_INVALID_ARGS); - EXPECT_EQ(result1, nullptr); - - query.lastResult = true; - auto [err2, result2] = store->Query(table, query); - EXPECT_EQ(err2, GeneralError::E_ALREADY_CLOSED); - EXPECT_EQ(result2, nullptr); -} - -/** - * @tc.name: Query003 - * @tc.desc: it is not a remote query return E_ERROR. - * @tc.type: FUNC - */ -HWTEST_F(RdbGeneralStoreTest, Query003, TestSize.Level1) -{ - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - ASSERT_NE(store, nullptr); - - MockQuery query; - const std::string devices = "device1"; - const std::string sql; - Values args; - query.lastResult = true; - std::string table = "test_table"; - auto [err, cursor] = store->Query(table, query); - EXPECT_EQ(err, GeneralError::E_ERROR); -} - -/** - * @tc.name: Query004 - * @tc.desc: Test successful remote query - * @tc.type: FUNC - */ -HWTEST_F(RdbGeneralStoreTest, Query004, TestSize.Level1) -{ - MockQuery query; - const std::string devices = "device1"; - const std::string sql; - Values args; - query.MakeRemoteQuery(devices, sql, std::move(args)); - query.lastResult = true; - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - - std::string table = "test_table"; - auto [err, cursor] = store->Query(table, query); - - EXPECT_EQ(err, GeneralError::E_OK); - EXPECT_NE(cursor, nullptr); -} - -/** -* @tc.name: MergeMigratedData -* @tc.desc: RdbGeneralStore MergeMigratedData function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, MergeMigratedData, TestSize.Level1) -{ - std::string tableName = "tableName"; - DistributedData::VBuckets extends = { { g_RdbVBucket } }; - auto result = store->MergeMigratedData(tableName, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_ERROR); - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->MergeMigratedData(tableName, std::move(extends)); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Sync -* @tc.desc: RdbGeneralStore Sync function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Sync, TestSize.Level1) -{ - GeneralStore::Devices devices; - MockQuery query; - GeneralStore::DetailAsync async; - SyncParam syncParam; - auto result = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result.first, GeneralError::E_ALREADY_CLOSED); - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result.first, GeneralError::E_OK); -} - -/** -* @tc.name: Sync -* @tc.desc: RdbGeneralStore Sync CLOUD_TIME_FIRST test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Sync001, TestSize.Level1) -{ - GeneralStore::Devices devices; - MockQuery query; - GeneralStore::DetailAsync async; - SyncParam syncParam; - syncParam.mode = GeneralStore::CLOUD_TIME_FIRST; - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - auto [result1, result2] = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result1, GeneralError::E_OK); - syncParam.mode = GeneralStore::NEARBY_END; - std::tie(result1, result2) = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result1, GeneralError::E_ERROR); - syncParam.mode = GeneralStore::NEARBY_PULL_PUSH; - std::tie(result1, result2) = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result1, GeneralError::E_OK); -} - -/** -* @tc.name: Sync -* @tc.desc: RdbGeneralStore Sync DistributedTable test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Sync002, TestSize.Level1) -{ - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - ASSERT_NE(store, nullptr); - - GeneralStore::Devices devices; - RdbQuery query; - GeneralStore::DetailAsync async; - SyncParam syncParam; - auto [result1, result2] = store->Sync(devices, query, async, syncParam); - EXPECT_EQ(result1, GeneralError::E_OK); -} - -/** -* @tc.name: PreSharing -* @tc.desc: RdbGeneralStore PreSharing function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, PreSharing, TestSize.Level1) -{ - MockQuery query; - auto [errCode, result] = store->PreSharing(query); - EXPECT_NE(errCode, GeneralError::E_OK); - EXPECT_EQ(result, nullptr); -} - -/** -* @tc.name: PreSharing -* @tc.desc: RdbGeneralStore PreSharing function test, return E_INVALID_ARGS. -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, PreSharing001, TestSize.Level1) -{ - MockQuery query; - query.lastResult = true; - auto [errCode, result] = store->PreSharing(query); - EXPECT_EQ(errCode, GeneralError::E_INVALID_ARGS); - EXPECT_EQ(result, nullptr); -} - -/** -* @tc.name: PreSharing -* @tc.desc: RdbGeneralStore PreSharing function delegate is nullptr test. -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, PreSharing002, TestSize.Level1) -{ - MockQuery query; - DistributedRdb::PredicatesMemo predicates; - predicates.devices_ = { "device1" }; - predicates.tables_ = { "tables1" }; - query.lastResult = true; - query.MakeQuery(predicates); - auto [errCode, result] = store->PreSharing(query); - EXPECT_EQ(errCode, GeneralError::E_ALREADY_CLOSED); - EXPECT_EQ(result, nullptr); -} - -/** -* @tc.name: PreSharing -* @tc.desc: RdbGeneralStore PreSharing function E_CLOUD_DISABLED test. -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, PreSharing003, TestSize.Level1) -{ - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - ASSERT_NE(store, nullptr); - MockQuery query; - DistributedRdb::PredicatesMemo predicates; - predicates.devices_ = { "device1" }; - predicates.tables_ = { "tables1" }; - query.lastResult = true; - query.MakeQuery(predicates); - auto [errCode, result] = store->PreSharing(query); - EXPECT_EQ(errCode, GeneralError::E_CLOUD_DISABLED); - ASSERT_EQ(result, nullptr); -} - -/** -* @tc.name: ExtractExtend -* @tc.desc: RdbGeneralStore ExtractExtend function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, ExtractExtend, TestSize.Level1) -{ - RdbGeneralStore::VBucket extend = { { "#gid", { "0000000" } }, { "#flag", { true } }, - { "#value", { int64_t(100) } }, { "#float", { double(100) } }, { "#cloud_gid", { "cloud_gid" } }, - { "cloud_gid", { "" } } }; - DistributedData::VBuckets extends = { { extend } }; - auto result = store->ExtractExtend(extends); - EXPECT_EQ(result.size(), extends.size()); - DistributedData::VBuckets values; - result = store->ExtractExtend(values); - EXPECT_EQ(result.size(), values.size()); -} - -/** -* @tc.name: Clean -* @tc.desc: RdbGeneralStore Clean function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Clean, TestSize.Level1) -{ - std::string tableName = "tableName"; - std::vector devices = { "device1", "device2" }; - auto result = store->Clean(devices, -1, tableName); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - result = store->Clean(devices, GeneralStore::CLEAN_MODE_BUTT + 1, tableName); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); - EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); - EXPECT_EQ(result, GeneralError::E_OK); - result = store->Clean(devices, GeneralStore::CLOUD_DATA, tableName); - EXPECT_EQ(result, GeneralError::E_OK); - std::vector devices1; - result = store->Clean(devices1, GeneralStore::NEARBY_DATA, tableName); - EXPECT_EQ(result, GeneralError::E_OK); - - MockRelationalStoreDelegate::gTestResult = true; - result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); - EXPECT_EQ(result, GeneralError::E_ERROR); - result = store->Clean(devices, GeneralStore::CLOUD_DATA, tableName); - EXPECT_EQ(result, GeneralError::E_ERROR); - result = store->Clean(devices, GeneralStore::CLEAN_MODE_BUTT, tableName); - EXPECT_EQ(result, GeneralError::E_ERROR); - result = store->Clean(devices, GeneralStore::NEARBY_DATA, tableName); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Watch -* @tc.desc: RdbGeneralStore Watch and Unwatch function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Watch, TestSize.Level1) -{ - MockGeneralWatcher watcher; - auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_CLOUD, watcher); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_CLOUD, watcher); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); - result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); - - result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); - result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); -} - -/** -* @tc.name: OnChange -* @tc.desc: RdbGeneralStore OnChange function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, OnChange, TestSize.Level1) -{ - MockGeneralWatcher watcher; - MockStoreChangedData data; - DistributedDB::ChangedData changedData; - store->observer_.OnChange(data); - store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); - auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); - store->observer_.OnChange(data); - store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); - result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: OnChange001 -* @tc.desc: RdbGeneralStore OnChange function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, OnChange001, TestSize.Level1) -{ - MockGeneralWatcher watcher; - MockStoreChangedData data; - DistributedDB::ChangedData changedData; - changedData.primaryData[0] = { { std::monostate{}, 42, 3.14, "hello", true }, - { Bytes{ 1, 2, 3, 4 }, - DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", - static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, - Bytes{ 5, 6, 7, 8 } }, - { int64_t(-123), 2.718, 100, 0.001 } }; - changedData.primaryData[1] = { { std::monostate{}, 42, 3.14, "hello", true }, - { Bytes{ 1, 2, 3, 4 }, - DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", - static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, - Bytes{ 5, 6, 7, 8 } }, - { int64_t(-123), 2.718, 100, 0.001 } }; - changedData.primaryData[2] = { { "DELETE#ALL_CLOUDDATA", std::monostate{}, 42, 3.14, "hello", true }, - { Bytes{ 1, 2, 3, 4 }, - DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", - static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, - Bytes{ 5, 6, 7, 8 } }, - { int64_t(-123), 2.718, 100, 0.001 } }; - changedData.field = { "name", "age" }; - changedData.tableName = "test"; - DistributedDB::ChangedData changedDataTmp; - changedDataTmp = changedData; - auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); - store->observer_.OnChange(data); - store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); - EXPECT_EQ(watcher.primaryFields_[changedDataTmp.tableName], *(changedDataTmp.field.begin())); - store->observer_.OnChange(DistributedDB::Origin::ORIGIN_LOCAL, "originalId", std::move(changedDataTmp)); - ASSERT_NE(watcher.origin_.id.size(), 0); - EXPECT_EQ(watcher.origin_.id[0], "originalId"); - result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: Release -* @tc.desc: RdbGeneralStore Release and AddRef function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, Release, TestSize.Level1) -{ - auto store = new (std::nothrow) RdbGeneralStore(metaData_); - ASSERT_NE(store, nullptr); - auto result = store->Release(); - EXPECT_EQ(result, 0); - store = new (std::nothrow) RdbGeneralStore(metaData_); - store->ref_ = 0; - result = store->Release(); - EXPECT_EQ(result, 0); - store->ref_ = 2; - result = store->Release(); - EXPECT_EQ(result, 1); - - result = store->AddRef(); - EXPECT_EQ(result, 2); - store->ref_ = 0; - result = store->AddRef(); - EXPECT_EQ(result, 0); -} - -/** -* @tc.name: SetDistributedTables -* @tc.desc: RdbGeneralStore SetDistributedTables function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, SetDistributedTables, TestSize.Level1) -{ - std::vector tables = { "table1", "table2" }; - int32_t type = DistributedTableType::DISTRIBUTED_DEVICE; - std::vector references; - auto result = store->SetDistributedTables(tables, type, references); - EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->SetDistributedTables(tables, type, references); - EXPECT_EQ(result, GeneralError::E_OK); - - std::vector test = { "test" }; - result = store->SetDistributedTables(test, type, references); - EXPECT_EQ(result, GeneralError::E_ERROR); - MockRelationalStoreDelegate::gTestResult = true; - result = store->SetDistributedTables(tables, type, references); - EXPECT_EQ(result, GeneralError::E_OK); - type = DistributedTableType::DISTRIBUTED_CLOUD; - result = store->SetDistributedTables(tables, type, references); - EXPECT_EQ(result, GeneralError::E_ERROR); -} - -/** -* @tc.name: SetTrackerTable -* @tc.desc: RdbGeneralStore SetTrackerTable function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, SetTrackerTable, TestSize.Level1) -{ - std::string tableName = "tableName"; - std::set trackerColNames = { "col1", "col2" }; - std::set extendColNames = { "extendColName1", "extendColName2" }; - auto result = store->SetTrackerTable(tableName, trackerColNames, extendColNames); - EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); - - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->SetTrackerTable(tableName, trackerColNames, extendColNames); - EXPECT_EQ(result, GeneralError::E_OK); - result = store->SetTrackerTable("WITH_INVENTORY_DATA", trackerColNames, extendColNames); - EXPECT_EQ(result, GeneralError::E_WITH_INVENTORY_DATA); - result = store->SetTrackerTable("test", trackerColNames, extendColNames); - EXPECT_EQ(result, GeneralError::E_ERROR); -} - -/** -* @tc.name: RemoteQuery -* @tc.desc: RdbGeneralStore RemoteQuery function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, RemoteQuery, TestSize.Level1) -{ - std::string device = "device"; - DistributedDB::RemoteCondition remoteCondition; - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - auto result = store->RemoteQuery("test", remoteCondition); - EXPECT_EQ(result, nullptr); - result = store->RemoteQuery(device, remoteCondition); - EXPECT_NE(result, nullptr); -} - -/** -* @tc.name: ConvertStatus -* @tc.desc: RdbGeneralStore ConvertStatus function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, ConvertStatus, TestSize.Level1) -{ - auto result = store->ConvertStatus(DBStatus::OK); - EXPECT_EQ(result, GeneralError::E_OK); - result = store->ConvertStatus(DBStatus::CLOUD_NETWORK_ERROR); - EXPECT_EQ(result, GeneralError::E_NETWORK_ERROR); - result = store->ConvertStatus(DBStatus::CLOUD_LOCK_ERROR); - EXPECT_EQ(result, GeneralError::E_LOCKED_BY_OTHERS); - result = store->ConvertStatus(DBStatus::CLOUD_FULL_RECORDS); - EXPECT_EQ(result, GeneralError::E_RECODE_LIMIT_EXCEEDED); - result = store->ConvertStatus(DBStatus::CLOUD_ASSET_SPACE_INSUFFICIENT); - EXPECT_EQ(result, GeneralError::E_NO_SPACE_FOR_ASSET); - result = store->ConvertStatus(DBStatus::BUSY); - EXPECT_EQ(result, GeneralError::E_BUSY); - result = store->ConvertStatus(DBStatus::DB_ERROR); - EXPECT_EQ(result, GeneralError::E_ERROR); - result = store->ConvertStatus(DBStatus::CLOUD_DISABLED); - EXPECT_EQ(result, GeneralError::E_CLOUD_DISABLED); - result = store->ConvertStatus(DBStatus::CLOUD_SYNC_TASK_MERGED); - EXPECT_EQ(result, GeneralError::E_SYNC_TASK_MERGED); -} - -/** -* @tc.name: QuerySql -* @tc.desc: RdbGeneralStore QuerySql function test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, QuerySql, TestSize.Level1) -{ - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - ASSERT_NE(store, nullptr); - auto [err1, result1] = store->QuerySql("", std::move(g_RdbValues)); - EXPECT_EQ(err1, GeneralError::E_ERROR); - EXPECT_TRUE(result1.empty()); - - auto [err2, result2] = store->QuerySql("sql", std::move(g_RdbValues)); - EXPECT_EQ(err1, GeneralError::E_ERROR); - EXPECT_TRUE(result2.empty()); -} - -/** -* @tc.name: BuildSqlWhenCloumnEmpty -* @tc.desc: test buildsql method when cloumn empty -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, BuildSqlWhenCloumnEmpty, TestSize.Level1) -{ - std::string table = "mock_table"; - std::string statement = "mock_statement"; - std::vector columns; - std::string expectSql = "select cloud_gid from naturalbase_rdb_aux_mock_table_log, (select rowid from " - "mock_tablemock_statement) where data_key = rowid"; - std::string resultSql = store->BuildSql(table, statement, columns); - EXPECT_EQ(resultSql, expectSql); -} - -/** -* @tc.name: BuildSqlWhenParamValid -* @tc.desc: test buildsql method when param valid -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, BuildSqlWhenParamValid, TestSize.Level1) -{ - std::string table = "mock_table"; - std::string statement = "mock_statement"; - std::vector columns; - columns.push_back("mock_column_1"); - columns.push_back("mock_column_2"); - std::string expectSql = "select cloud_gid, mock_column_1, mock_column_2 from naturalbase_rdb_aux_mock_table_log, " - "(select rowid, mock_column_1, mock_column_2 from mock_tablemock_statement) where " - "data_key = rowid"; - std::string resultSql = store->BuildSql(table, statement, columns); - EXPECT_EQ(resultSql, expectSql); -} - -/** -* @tc.name: LockAndUnLockCloudDBTest -* @tc.desc: lock and unlock cloudDB test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, LockAndUnLockCloudDBTest, TestSize.Level1) -{ - auto result = store->LockCloudDB(); - EXPECT_EQ(result.first, 1); - EXPECT_EQ(result.second, 0); - auto unlockResult = store->UnLockCloudDB(); - EXPECT_EQ(unlockResult, 1); -} - -/** -* @tc.name: InFinishedTest -* @tc.desc: isFinished test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, InFinishedTest, TestSize.Level1) -{ - DistributedRdb::RdbGeneralStore::SyncId syncId = 1; - bool isFinished = store->IsFinished(syncId); - EXPECT_TRUE(isFinished); -} - -/** -* @tc.name: GetRdbCloudTest -* @tc.desc: getRdbCloud test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, GetRdbCloudTest, TestSize.Level1) -{ - auto rdbCloud = store->GetRdbCloud(); - EXPECT_EQ(rdbCloud, nullptr); -} - -/** -* @tc.name: RegisterDetailProgressObserverTest -* @tc.desc: RegisterDetailProgressObserver test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, RegisterDetailProgressObserverTest, TestSize.Level1) -{ - DistributedData::GeneralStore::DetailAsync async; - auto result = store->RegisterDetailProgressObserver(async); - EXPECT_EQ(result, GeneralError::E_OK); -} - -/** -* @tc.name: GetFinishTaskTest -* @tc.desc: GetFinishTask test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, GetFinishTaskTest, TestSize.Level1) -{ - DistributedRdb::RdbGeneralStore::SyncId syncId = 1; - auto result = store->GetFinishTask(syncId); - ASSERT_NE(result, nullptr); -} - -/** -* @tc.name: GetCBTest -* @tc.desc: GetCB test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, GetCBTest, TestSize.Level1) -{ - DistributedRdb::RdbGeneralStore::SyncId syncId = 1; - auto result = store->GetCB(syncId); - ASSERT_NE(result, nullptr); -} - -/** -* @tc.name: UpdateDBStatus -* @tc.desc: UpdateDBStatus test -* @tc.type: FUNC -*/ -HWTEST_F(RdbGeneralStoreTest, UpdateDBStatus, TestSize.Level1) -{ - auto result = store->UpdateDBStatus(); - EXPECT_EQ(result, E_ALREADY_CLOSED); - metaData_.storeId = "mock"; - store = std::make_shared(metaData_); - result = store->UpdateDBStatus(); - EXPECT_EQ(result, E_OK); -} } // namespace DistributedRDBTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From aaf30f6b58a62599caf53b1f284ea7c3c452b7ee Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 09:55:22 +0800 Subject: [PATCH 02/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_general_store_test.cpp | 977 ++++++++++++++++++ 1 file changed, 977 insertions(+) diff --git a/services/distributeddataservice/service/test/rdb_general_store_test.cpp b/services/distributeddataservice/service/test/rdb_general_store_test.cpp index fd9b1e690..456c114c7 100644 --- a/services/distributeddataservice/service/test/rdb_general_store_test.cpp +++ b/services/distributeddataservice/service/test/rdb_general_store_test.cpp @@ -105,5 +105,982 @@ public: return; } }; +/** +* @tc.name: BindSnapshots001 +* @tc.desc: RdbGeneralStore BindSnapshots test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, BindSnapshots001, TestSize.Level1) +{ + BindAssets bindAssets; + auto result = store->BindSnapshots(bindAssets.bindAssets); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: BindSnapshots002 +* @tc.desc: RdbGeneralStore BindSnapshots nullptr test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, BindSnapshots002, TestSize.Level1) +{ + DistributedData::StoreMetaData meta; + meta = metaData_; + meta.isEncrypt = true; + auto store = std::make_shared(meta); + ASSERT_NE(store, nullptr); + store->snapshots_.bindAssets = nullptr; + BindAssets bindAssets; + auto result = store->BindSnapshots(bindAssets.bindAssets); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Bind001 +* @tc.desc: RdbGeneralStore Bind bindInfo test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Bind001, TestSize.Level1) +{ + DistributedData::Database database; + GeneralStore::CloudConfig config; + std::map bindInfos; + auto result = store->Bind(database, bindInfos, config); + EXPECT_TRUE(bindInfos.empty()); + EXPECT_EQ(result, GeneralError::E_OK); + + std::shared_ptr db; + std::shared_ptr loader; + GeneralStore::BindInfo bindInfo(db, loader); + EXPECT_EQ(bindInfo.db_, nullptr); + EXPECT_EQ(bindInfo.loader_, nullptr); + uint32_t key = 1; + bindInfos[key] = bindInfo; + result = store->Bind(database, bindInfos, config); + EXPECT_TRUE(!bindInfos.empty()); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + std::shared_ptr dbs = std::make_shared(); + std::shared_ptr loaders = std::make_shared(); + GeneralStore::BindInfo bindInfo1(dbs, loader); + EXPECT_NE(bindInfo1.db_, nullptr); + bindInfos[key] = bindInfo1; + result = store->Bind(database, bindInfos, config); + EXPECT_TRUE(!bindInfos.empty()); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + GeneralStore::BindInfo bindInfo2(db, loaders); + EXPECT_NE(bindInfo2.loader_, nullptr); + bindInfos[key] = bindInfo2; + result = store->Bind(database, bindInfos, config); + EXPECT_TRUE(!bindInfos.empty()); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); +} + +/** +* @tc.name: Bind002 +* @tc.desc: RdbGeneralStore Bind delegate_ is nullptr test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Bind002, TestSize.Level1) +{ + DistributedData::Database database; + std::map bindInfos; + std::shared_ptr db = std::make_shared(); + std::shared_ptr loader = std::make_shared(); + GeneralStore::BindInfo bindInfo(db, loader); + uint32_t key = 1; + bindInfos[key] = bindInfo; + GeneralStore::CloudConfig config; + auto result = store->Bind(database, bindInfos, config); + EXPECT_EQ(store->delegate_, nullptr); + EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); + + store->isBound_ = true; + result = store->Bind(database, bindInfos, config); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Bind003 +* @tc.desc: RdbGeneralStore Bind delegate_ test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Bind003, TestSize.Level1) +{ + DistributedData::Database database; + std::map bindInfos; + + std::shared_ptr db = std::make_shared(); + std::shared_ptr loader = std::make_shared(); + GeneralStore::BindInfo bindInfo(db, loader); + uint32_t key = 1; + bindInfos[key] = bindInfo; + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + GeneralStore::CloudConfig config; + auto result = store->Bind(database, bindInfos, config); + EXPECT_NE(store->delegate_, nullptr); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Close +* @tc.desc: RdbGeneralStore Close and IsBound function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Close, TestSize.Level1) +{ + auto result = store->IsBound(std::atoi(metaData_.user.c_str())); + EXPECT_EQ(result, false); + EXPECT_EQ(store->delegate_, nullptr); + auto ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_OK); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_BUSY); +} + +/** +* @tc.name: Close +* @tc.desc: RdbGeneralStore Close test +* @tc.type: FUNC +* @tc.author: shaoyuanzhao +*/ +HWTEST_F(RdbGeneralStoreTest, BusyClose, TestSize.Level1) +{ + auto store = std::make_shared(metaData_); + ASSERT_NE(store, nullptr); + std::thread thread([store]() { + std::unique_lockrwMutex_)> lock(store->rwMutex_); + std::this_thread::sleep_for(std::chrono::seconds(1)); + }); + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + auto ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_BUSY); + thread.join(); + ret = store->Close(); + EXPECT_EQ(ret, GeneralError::E_OK); +} + +/** +* @tc.name: Execute +* @tc.desc: RdbGeneralStore Execute function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Execute, TestSize.Level1) +{ + std::string table = "table"; + std::string sql = "sql"; + EXPECT_EQ(store->delegate_, nullptr); + auto result = store->Execute(table, sql); + EXPECT_EQ(result, GeneralError::E_ERROR); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Execute(table, sql); + EXPECT_EQ(result, GeneralError::E_OK); + + std::string null = ""; + result = store->Execute(table, null); + EXPECT_EQ(result, GeneralError::E_ERROR); +} + +/** +* @tc.name: SqlConcatenate +* @tc.desc: RdbGeneralStore SqlConcatenate function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, SqlConcatenate, TestSize.Level1) +{ + DistributedData::VBucket value; + std::string strColumnSql = "strColumnSql"; + std::string strRowValueSql = "strRowValueSql"; + auto result = store->SqlConcatenate(value, strColumnSql, strRowValueSql); + size_t columnSize = value.size(); + EXPECT_EQ(columnSize, 0); + EXPECT_EQ(result, columnSize); + + DistributedData::VBucket values = g_RdbVBucket; + result = store->SqlConcatenate(values, strColumnSql, strRowValueSql); + columnSize = values.size(); + EXPECT_NE(columnSize, 0); + EXPECT_EQ(result, columnSize); +} + +/** +* @tc.name: Insert001 +* @tc.desc: RdbGeneralStore Insert error test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Insert001, TestSize.Level1) +{ + DistributedData::VBuckets values; + EXPECT_EQ(values.size(), 0); + std::string table = "table"; + auto result = store->Insert("", std::move(values)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + result = store->Insert(table, std::move(values)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + DistributedData::VBuckets extends = { { { "#gid", { "0000000" } }, { "#flag", { true } }, + { "#value", { int64_t(100) } }, { "#float", { double(100) } } }, + { { "#gid", { "0000001" } } } }; + result = store->Insert("", std::move(extends)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + DistributedData::VBucket value; + DistributedData::VBuckets vbuckets = { value }; + result = store->Insert(table, std::move(vbuckets)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Insert(table, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); +} + +/** +* @tc.name: Insert002 +* @tc.desc: RdbGeneralStore Insert function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Insert002, TestSize.Level1) +{ + std::string table = "table"; + DistributedData::VBuckets extends = { { g_RdbVBucket } }; + auto result = store->Insert(table, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_ERROR); + + std::string test = "test"; + result = store->Insert(test, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_ERROR); + + result = store->Insert(test, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_ERROR); + + for (size_t i = 0; i < PRINT_ERROR_CNT + 1; i++) { + result = store->Insert(test, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_ERROR); + } + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Insert(table, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Update +* @tc.desc: RdbGeneralStore Update function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Update, TestSize.Level1) +{ + std::string table = "table"; + std::string setSql = "setSql"; + RdbGeneralStore::Values values; + std::string whereSql = "whereSql"; + RdbGeneralStore::Values conditions; + auto result = store->Update("", setSql, std::move(values), whereSql, std::move(conditions)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Update(table, "", std::move(values), whereSql, std::move(conditions)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Update(table, setSql, std::move(values), whereSql, std::move(conditions)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Update(table, setSql, std::move(g_RdbValues), "", std::move(conditions)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(conditions)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); + EXPECT_EQ(result, GeneralError::E_ERROR); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Update(table, setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); + EXPECT_EQ(result, GeneralError::E_OK); + + result = store->Update("test", setSql, std::move(g_RdbValues), whereSql, std::move(g_RdbValues)); + EXPECT_EQ(result, GeneralError::E_ERROR); +} + +/** +* @tc.name: Replace +* @tc.desc: RdbGeneralStore Replace function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Replace, TestSize.Level1) +{ + std::string table = "table"; + RdbGeneralStore::VBucket values; + auto result = store->Replace("", std::move(g_RdbVBucket)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Replace(table, std::move(values)); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Replace(table, std::move(g_RdbVBucket)); + EXPECT_EQ(result, GeneralError::E_ERROR); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Replace(table, std::move(g_RdbVBucket)); + EXPECT_EQ(result, GeneralError::E_OK); + + result = store->Replace("test", std::move(g_RdbVBucket)); + EXPECT_EQ(result, GeneralError::E_ERROR); +} + +/** +* @tc.name: Delete +* @tc.desc: RdbGeneralStore Delete function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Delete, TestSize.Level1) +{ + std::string table = "table"; + std::string sql = "sql"; + auto result = store->Delete(table, sql, std::move(g_RdbValues)); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Query001 +* @tc.desc: RdbGeneralStore Query function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Query001, TestSize.Level1) +{ + std::string table = "table"; + std::string sql = "sql"; + auto [err1, result1] = store->Query(table, sql, std::move(g_RdbValues)); + EXPECT_EQ(err1, GeneralError::E_ALREADY_CLOSED); + EXPECT_EQ(result1, nullptr); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + auto [err2, result2] = store->Query(table, sql, std::move(g_RdbValues)); + EXPECT_EQ(err2, GeneralError::E_OK); + EXPECT_NE(result2, nullptr); +} + +/** +* @tc.name: Query002 +* @tc.desc: RdbGeneralStore Query function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Query002, TestSize.Level1) +{ + std::string table = "table"; + std::string sql = "sql"; + MockQuery query; + auto [err1, result1] = store->Query(table, query); + EXPECT_EQ(err1, GeneralError::E_INVALID_ARGS); + EXPECT_EQ(result1, nullptr); + + query.lastResult = true; + auto [err2, result2] = store->Query(table, query); + EXPECT_EQ(err2, GeneralError::E_ALREADY_CLOSED); + EXPECT_EQ(result2, nullptr); +} + +/** + * @tc.name: Query003 + * @tc.desc: it is not a remote query return E_ERROR. + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Query003, TestSize.Level1) +{ + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + ASSERT_NE(store, nullptr); + + MockQuery query; + const std::string devices = "device1"; + const std::string sql; + Values args; + query.lastResult = true; + std::string table = "test_table"; + auto [err, cursor] = store->Query(table, query); + EXPECT_EQ(err, GeneralError::E_ERROR); +} + +/** + * @tc.name: Query004 + * @tc.desc: Test successful remote query + * @tc.type: FUNC + */ +HWTEST_F(RdbGeneralStoreTest, Query004, TestSize.Level1) +{ + MockQuery query; + const std::string devices = "device1"; + const std::string sql; + Values args; + query.MakeRemoteQuery(devices, sql, std::move(args)); + query.lastResult = true; + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + + std::string table = "test_table"; + auto [err, cursor] = store->Query(table, query); + + EXPECT_EQ(err, GeneralError::E_OK); + EXPECT_NE(cursor, nullptr); +} + +/** +* @tc.name: MergeMigratedData +* @tc.desc: RdbGeneralStore MergeMigratedData function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, MergeMigratedData, TestSize.Level1) +{ + std::string tableName = "tableName"; + DistributedData::VBuckets extends = { { g_RdbVBucket } }; + auto result = store->MergeMigratedData(tableName, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_ERROR); + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->MergeMigratedData(tableName, std::move(extends)); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Sync +* @tc.desc: RdbGeneralStore Sync function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Sync, TestSize.Level1) +{ + GeneralStore::Devices devices; + MockQuery query; + GeneralStore::DetailAsync async; + SyncParam syncParam; + auto result = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result.first, GeneralError::E_ALREADY_CLOSED); + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result.first, GeneralError::E_OK); +} + +/** +* @tc.name: Sync +* @tc.desc: RdbGeneralStore Sync CLOUD_TIME_FIRST test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Sync001, TestSize.Level1) +{ + GeneralStore::Devices devices; + MockQuery query; + GeneralStore::DetailAsync async; + SyncParam syncParam; + syncParam.mode = GeneralStore::CLOUD_TIME_FIRST; + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + auto [result1, result2] = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result1, GeneralError::E_OK); + syncParam.mode = GeneralStore::NEARBY_END; + std::tie(result1, result2) = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result1, GeneralError::E_ERROR); + syncParam.mode = GeneralStore::NEARBY_PULL_PUSH; + std::tie(result1, result2) = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result1, GeneralError::E_OK); +} + +/** +* @tc.name: Sync +* @tc.desc: RdbGeneralStore Sync DistributedTable test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Sync002, TestSize.Level1) +{ + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + ASSERT_NE(store, nullptr); + + GeneralStore::Devices devices; + RdbQuery query; + GeneralStore::DetailAsync async; + SyncParam syncParam; + auto [result1, result2] = store->Sync(devices, query, async, syncParam); + EXPECT_EQ(result1, GeneralError::E_OK); +} + +/** +* @tc.name: PreSharing +* @tc.desc: RdbGeneralStore PreSharing function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, PreSharing, TestSize.Level1) +{ + MockQuery query; + auto [errCode, result] = store->PreSharing(query); + EXPECT_NE(errCode, GeneralError::E_OK); + EXPECT_EQ(result, nullptr); +} + +/** +* @tc.name: PreSharing +* @tc.desc: RdbGeneralStore PreSharing function test, return E_INVALID_ARGS. +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, PreSharing001, TestSize.Level1) +{ + MockQuery query; + query.lastResult = true; + auto [errCode, result] = store->PreSharing(query); + EXPECT_EQ(errCode, GeneralError::E_INVALID_ARGS); + EXPECT_EQ(result, nullptr); +} + +/** +* @tc.name: PreSharing +* @tc.desc: RdbGeneralStore PreSharing function delegate is nullptr test. +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, PreSharing002, TestSize.Level1) +{ + MockQuery query; + DistributedRdb::PredicatesMemo predicates; + predicates.devices_ = { "device1" }; + predicates.tables_ = { "tables1" }; + query.lastResult = true; + query.MakeQuery(predicates); + auto [errCode, result] = store->PreSharing(query); + EXPECT_EQ(errCode, GeneralError::E_ALREADY_CLOSED); + EXPECT_EQ(result, nullptr); +} + +/** +* @tc.name: PreSharing +* @tc.desc: RdbGeneralStore PreSharing function E_CLOUD_DISABLED test. +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, PreSharing003, TestSize.Level1) +{ + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + ASSERT_NE(store, nullptr); + MockQuery query; + DistributedRdb::PredicatesMemo predicates; + predicates.devices_ = { "device1" }; + predicates.tables_ = { "tables1" }; + query.lastResult = true; + query.MakeQuery(predicates); + auto [errCode, result] = store->PreSharing(query); + EXPECT_EQ(errCode, GeneralError::E_CLOUD_DISABLED); + ASSERT_EQ(result, nullptr); +} + +/** +* @tc.name: ExtractExtend +* @tc.desc: RdbGeneralStore ExtractExtend function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, ExtractExtend, TestSize.Level1) +{ + RdbGeneralStore::VBucket extend = { { "#gid", { "0000000" } }, { "#flag", { true } }, + { "#value", { int64_t(100) } }, { "#float", { double(100) } }, { "#cloud_gid", { "cloud_gid" } }, + { "cloud_gid", { "" } } }; + DistributedData::VBuckets extends = { { extend } }; + auto result = store->ExtractExtend(extends); + EXPECT_EQ(result.size(), extends.size()); + DistributedData::VBuckets values; + result = store->ExtractExtend(values); + EXPECT_EQ(result.size(), values.size()); +} + +/** +* @tc.name: Clean +* @tc.desc: RdbGeneralStore Clean function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Clean, TestSize.Level1) +{ + std::string tableName = "tableName"; + std::vector devices = { "device1", "device2" }; + auto result = store->Clean(devices, -1, tableName); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + result = store->Clean(devices, GeneralStore::CLEAN_MODE_BUTT + 1, tableName); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); + EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); + EXPECT_EQ(result, GeneralError::E_OK); + result = store->Clean(devices, GeneralStore::CLOUD_DATA, tableName); + EXPECT_EQ(result, GeneralError::E_OK); + std::vector devices1; + result = store->Clean(devices1, GeneralStore::NEARBY_DATA, tableName); + EXPECT_EQ(result, GeneralError::E_OK); + + MockRelationalStoreDelegate::gTestResult = true; + result = store->Clean(devices, GeneralStore::CLOUD_INFO, tableName); + EXPECT_EQ(result, GeneralError::E_ERROR); + result = store->Clean(devices, GeneralStore::CLOUD_DATA, tableName); + EXPECT_EQ(result, GeneralError::E_ERROR); + result = store->Clean(devices, GeneralStore::CLEAN_MODE_BUTT, tableName); + EXPECT_EQ(result, GeneralError::E_ERROR); + result = store->Clean(devices, GeneralStore::NEARBY_DATA, tableName); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Watch +* @tc.desc: RdbGeneralStore Watch and Unwatch function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Watch, TestSize.Level1) +{ + MockGeneralWatcher watcher; + auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_CLOUD, watcher); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_CLOUD, watcher); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); + result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); + + result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); + result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_INVALID_ARGS); +} + +/** +* @tc.name: OnChange +* @tc.desc: RdbGeneralStore OnChange function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, OnChange, TestSize.Level1) +{ + MockGeneralWatcher watcher; + MockStoreChangedData data; + DistributedDB::ChangedData changedData; + store->observer_.OnChange(data); + store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); + auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); + store->observer_.OnChange(data); + store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); + result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: OnChange001 +* @tc.desc: RdbGeneralStore OnChange function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, OnChange001, TestSize.Level1) +{ + MockGeneralWatcher watcher; + MockStoreChangedData data; + DistributedDB::ChangedData changedData; + changedData.primaryData[0] = { { std::monostate{}, 42, 3.14, "hello", true }, + { Bytes{ 1, 2, 3, 4 }, + DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", + static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, + Bytes{ 5, 6, 7, 8 } }, + { int64_t(-123), 2.718, 100, 0.001 } }; + changedData.primaryData[1] = { { std::monostate{}, 42, 3.14, "hello", true }, + { Bytes{ 1, 2, 3, 4 }, + DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", + static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, + Bytes{ 5, 6, 7, 8 } }, + { int64_t(-123), 2.718, 100, 0.001 } }; + changedData.primaryData[2] = { { "DELETE#ALL_CLOUDDATA", std::monostate{}, 42, 3.14, "hello", true }, + { Bytes{ 1, 2, 3, 4 }, + DistributedDB::Asset{ 1, "zhangsan", "123", "/data/test", "file://xxx", "123", "100", "100", "999", + static_cast(AssetOpType::NO_CHANGE), static_cast(AssetStatus::NORMAL), 0 }, + Bytes{ 5, 6, 7, 8 } }, + { int64_t(-123), 2.718, 100, 0.001 } }; + changedData.field = { "name", "age" }; + changedData.tableName = "test"; + DistributedDB::ChangedData changedDataTmp; + changedDataTmp = changedData; + auto result = store->Watch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); + store->observer_.OnChange(data); + store->observer_.OnChange(DistributedDB::Origin::ORIGIN_CLOUD, "originalId", std::move(changedData)); + EXPECT_EQ(watcher.primaryFields_[changedDataTmp.tableName], *(changedDataTmp.field.begin())); + store->observer_.OnChange(DistributedDB::Origin::ORIGIN_LOCAL, "originalId", std::move(changedDataTmp)); + ASSERT_NE(watcher.origin_.id.size(), 0); + EXPECT_EQ(watcher.origin_.id[0], "originalId"); + result = store->Unwatch(GeneralWatcher::Origin::ORIGIN_ALL, watcher); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: Release +* @tc.desc: RdbGeneralStore Release and AddRef function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, Release, TestSize.Level1) +{ + auto store = new (std::nothrow) RdbGeneralStore(metaData_); + ASSERT_NE(store, nullptr); + auto result = store->Release(); + EXPECT_EQ(result, 0); + store = new (std::nothrow) RdbGeneralStore(metaData_); + store->ref_ = 0; + result = store->Release(); + EXPECT_EQ(result, 0); + store->ref_ = 2; + result = store->Release(); + EXPECT_EQ(result, 1); + + result = store->AddRef(); + EXPECT_EQ(result, 2); + store->ref_ = 0; + result = store->AddRef(); + EXPECT_EQ(result, 0); +} + +/** +* @tc.name: SetDistributedTables +* @tc.desc: RdbGeneralStore SetDistributedTables function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, SetDistributedTables, TestSize.Level1) +{ + std::vector tables = { "table1", "table2" }; + int32_t type = DistributedTableType::DISTRIBUTED_DEVICE; + std::vector references; + auto result = store->SetDistributedTables(tables, type, references); + EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->SetDistributedTables(tables, type, references); + EXPECT_EQ(result, GeneralError::E_OK); + + std::vector test = { "test" }; + result = store->SetDistributedTables(test, type, references); + EXPECT_EQ(result, GeneralError::E_ERROR); + MockRelationalStoreDelegate::gTestResult = true; + result = store->SetDistributedTables(tables, type, references); + EXPECT_EQ(result, GeneralError::E_OK); + type = DistributedTableType::DISTRIBUTED_CLOUD; + result = store->SetDistributedTables(tables, type, references); + EXPECT_EQ(result, GeneralError::E_ERROR); +} + +/** +* @tc.name: SetTrackerTable +* @tc.desc: RdbGeneralStore SetTrackerTable function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, SetTrackerTable, TestSize.Level1) +{ + std::string tableName = "tableName"; + std::set trackerColNames = { "col1", "col2" }; + std::set extendColNames = { "extendColName1", "extendColName2" }; + auto result = store->SetTrackerTable(tableName, trackerColNames, extendColNames); + EXPECT_EQ(result, GeneralError::E_ALREADY_CLOSED); + + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->SetTrackerTable(tableName, trackerColNames, extendColNames); + EXPECT_EQ(result, GeneralError::E_OK); + result = store->SetTrackerTable("WITH_INVENTORY_DATA", trackerColNames, extendColNames); + EXPECT_EQ(result, GeneralError::E_WITH_INVENTORY_DATA); + result = store->SetTrackerTable("test", trackerColNames, extendColNames); + EXPECT_EQ(result, GeneralError::E_ERROR); +} + +/** +* @tc.name: RemoteQuery +* @tc.desc: RdbGeneralStore RemoteQuery function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, RemoteQuery, TestSize.Level1) +{ + std::string device = "device"; + DistributedDB::RemoteCondition remoteCondition; + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + auto result = store->RemoteQuery("test", remoteCondition); + EXPECT_EQ(result, nullptr); + result = store->RemoteQuery(device, remoteCondition); + EXPECT_NE(result, nullptr); +} + +/** +* @tc.name: ConvertStatus +* @tc.desc: RdbGeneralStore ConvertStatus function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, ConvertStatus, TestSize.Level1) +{ + auto result = store->ConvertStatus(DBStatus::OK); + EXPECT_EQ(result, GeneralError::E_OK); + result = store->ConvertStatus(DBStatus::CLOUD_NETWORK_ERROR); + EXPECT_EQ(result, GeneralError::E_NETWORK_ERROR); + result = store->ConvertStatus(DBStatus::CLOUD_LOCK_ERROR); + EXPECT_EQ(result, GeneralError::E_LOCKED_BY_OTHERS); + result = store->ConvertStatus(DBStatus::CLOUD_FULL_RECORDS); + EXPECT_EQ(result, GeneralError::E_RECODE_LIMIT_EXCEEDED); + result = store->ConvertStatus(DBStatus::CLOUD_ASSET_SPACE_INSUFFICIENT); + EXPECT_EQ(result, GeneralError::E_NO_SPACE_FOR_ASSET); + result = store->ConvertStatus(DBStatus::BUSY); + EXPECT_EQ(result, GeneralError::E_BUSY); + result = store->ConvertStatus(DBStatus::DB_ERROR); + EXPECT_EQ(result, GeneralError::E_ERROR); + result = store->ConvertStatus(DBStatus::CLOUD_DISABLED); + EXPECT_EQ(result, GeneralError::E_CLOUD_DISABLED); + result = store->ConvertStatus(DBStatus::CLOUD_SYNC_TASK_MERGED); + EXPECT_EQ(result, GeneralError::E_SYNC_TASK_MERGED); +} + +/** +* @tc.name: QuerySql +* @tc.desc: RdbGeneralStore QuerySql function test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, QuerySql, TestSize.Level1) +{ + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + ASSERT_NE(store, nullptr); + auto [err1, result1] = store->QuerySql("", std::move(g_RdbValues)); + EXPECT_EQ(err1, GeneralError::E_ERROR); + EXPECT_TRUE(result1.empty()); + + auto [err2, result2] = store->QuerySql("sql", std::move(g_RdbValues)); + EXPECT_EQ(err1, GeneralError::E_ERROR); + EXPECT_TRUE(result2.empty()); +} + +/** +* @tc.name: BuildSqlWhenCloumnEmpty +* @tc.desc: test buildsql method when cloumn empty +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, BuildSqlWhenCloumnEmpty, TestSize.Level1) +{ + std::string table = "mock_table"; + std::string statement = "mock_statement"; + std::vector columns; + std::string expectSql = "select cloud_gid from naturalbase_rdb_aux_mock_table_log, (select rowid from " + "mock_tablemock_statement) where data_key = rowid"; + std::string resultSql = store->BuildSql(table, statement, columns); + EXPECT_EQ(resultSql, expectSql); +} + +/** +* @tc.name: BuildSqlWhenParamValid +* @tc.desc: test buildsql method when param valid +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, BuildSqlWhenParamValid, TestSize.Level1) +{ + std::string table = "mock_table"; + std::string statement = "mock_statement"; + std::vector columns; + columns.push_back("mock_column_1"); + columns.push_back("mock_column_2"); + std::string expectSql = "select cloud_gid, mock_column_1, mock_column_2 from naturalbase_rdb_aux_mock_table_log, " + "(select rowid, mock_column_1, mock_column_2 from mock_tablemock_statement) where " + "data_key = rowid"; + std::string resultSql = store->BuildSql(table, statement, columns); + EXPECT_EQ(resultSql, expectSql); +} + +/** +* @tc.name: LockAndUnLockCloudDBTest +* @tc.desc: lock and unlock cloudDB test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, LockAndUnLockCloudDBTest, TestSize.Level1) +{ + auto result = store->LockCloudDB(); + EXPECT_EQ(result.first, 1); + EXPECT_EQ(result.second, 0); + auto unlockResult = store->UnLockCloudDB(); + EXPECT_EQ(unlockResult, 1); +} + +/** +* @tc.name: InFinishedTest +* @tc.desc: isFinished test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, InFinishedTest, TestSize.Level1) +{ + DistributedRdb::RdbGeneralStore::SyncId syncId = 1; + bool isFinished = store->IsFinished(syncId); + EXPECT_TRUE(isFinished); +} + +/** +* @tc.name: GetRdbCloudTest +* @tc.desc: getRdbCloud test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, GetRdbCloudTest, TestSize.Level1) +{ + auto rdbCloud = store->GetRdbCloud(); + EXPECT_EQ(rdbCloud, nullptr); +} + +/** +* @tc.name: RegisterDetailProgressObserverTest +* @tc.desc: RegisterDetailProgressObserver test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, RegisterDetailProgressObserverTest, TestSize.Level1) +{ + DistributedData::GeneralStore::DetailAsync async; + auto result = store->RegisterDetailProgressObserver(async); + EXPECT_EQ(result, GeneralError::E_OK); +} + +/** +* @tc.name: GetFinishTaskTest +* @tc.desc: GetFinishTask test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, GetFinishTaskTest, TestSize.Level1) +{ + DistributedRdb::RdbGeneralStore::SyncId syncId = 1; + auto result = store->GetFinishTask(syncId); + ASSERT_NE(result, nullptr); +} + +/** +* @tc.name: GetCBTest +* @tc.desc: GetCB test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, GetCBTest, TestSize.Level1) +{ + DistributedRdb::RdbGeneralStore::SyncId syncId = 1; + auto result = store->GetCB(syncId); + ASSERT_NE(result, nullptr); +} + +/** +* @tc.name: UpdateDBStatus +* @tc.desc: UpdateDBStatus test +* @tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, UpdateDBStatus, TestSize.Level1) +{ + auto result = store->UpdateDBStatus(); + EXPECT_EQ(result, E_ALREADY_CLOSED); + metaData_.storeId = "mock"; + store = std::make_shared(metaData_); + result = store->UpdateDBStatus(); + EXPECT_EQ(result, E_OK); +} } // namespace DistributedRDBTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From 9efd0790fd5012dfe2795f4d86ab7933d4d0ae24 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 09:57:43 +0800 Subject: [PATCH 03/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_general_store_test.cpp | 1 + .../service/test/rdb_service_impl_test.cpp | 1898 ----------------- 2 files changed, 1 insertion(+), 1898 deletions(-) diff --git a/services/distributeddataservice/service/test/rdb_general_store_test.cpp b/services/distributeddataservice/service/test/rdb_general_store_test.cpp index 456c114c7..24e4dfab6 100644 --- a/services/distributeddataservice/service/test/rdb_general_store_test.cpp +++ b/services/distributeddataservice/service/test/rdb_general_store_test.cpp @@ -105,6 +105,7 @@ public: return; } }; + /** * @tc.name: BindSnapshots001 * @tc.desc: RdbGeneralStore BindSnapshots test diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 6b7099499..97bc0f159 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -417,1903 +417,5 @@ HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } -/** - * @tc.name: IsNeedMetaSync001 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: IsNeedMetaSync002 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) -{ - CapMetaData capMetaData; - auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, false); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: ProcessResult001 - * @tc.desc: Test ProcessResult when all results have DBStatus::OK. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult002 - * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::DB_ERROR)}, - {"device3", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); - EXPECT_EQ(result.second.at("device3"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult004 - * @tc.desc: Test ProcessResult with an empty results map. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.first.size(), 0); - EXPECT_EQ(result.second.size(), 0); -} - -/** - * @tc.name: DoCompensateSync001 - * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) -{ - RdbServiceImpl service; - - int32_t eventId = 1; - DistributedData::BindEvent::BindEventInfo bindInfo; - bindInfo.bundleName = TEST_BUNDLE; - bindInfo.tokenId = metaData_.tokenId; - bindInfo.user = metaData_.uid; - bindInfo.storeName = TEST_STORE; - bindInfo.tableName = "test_table"; - bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; - - BindEvent event(eventId, std::move(bindInfo)); - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - service.DoCompensateSync(event); - EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); -} - -/** - * @tc.name: ReportStatistic001 - * @tc.desc: Test ReportStatistic when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: ReportStatistic002 - * @tc.desc: Test ReportStatistic when CheckAccess success. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, OK); -} - -/** - * @tc.name: GetReuseDevice001 - * @tc.desc: Test GetReuseDevice when all devices are reusable. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - StoreMetaData metaData; - auto result = service.GetReuseDevice(devices, metaData); - EXPECT_EQ(result.size(), 0); -} - -/** - * @tc.name: DoAutoSync001 - * @tc.desc: Test DoAutoSync when the store is null. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - std::vector tables = {"table1"}; - - auto result = service.DoAutoSync(devices, dataBase, tables); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: DoOnlineSync001 - * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - dataBase.name = TEST_STORE; - - DistributedData::Table table1; - table1.name = "table1"; - table1.deviceSyncFields = {"field1", "field2"}; - DistributedData::Table table2; - table2.name = "table2"; - table2.deviceSyncFields = {}; - - dataBase.tables = {table1, table2}; - - auto result = service.DoOnlineSync(devices, dataBase); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: OnReady001 - * @tc.desc: Test OnReady when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = "test_device"; - - int32_t result = service.OnReady(device); - EXPECT_EQ(result, 0); -} - -/** - * @tc.name: OnReady002 - * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = metaData_.deviceId; - - DistributedData::Database dataBase1; - dataBase1.name = "test_rdb_service_impl_sync_store2"; - dataBase1.bundleName = TEST_BUNDLE; - dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; - - DistributedData::Database dataBase2; - dataBase2.name = "test_rdb_service_impl_sync_store2"; - dataBase2.bundleName = TEST_BUNDLE; - dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); - int32_t result = service.OnReady(device); - - EXPECT_EQ(result, 0); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); -} - -/** - * @tc.name: AfterOpen001 - * @tc.desc: Test AfterOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen002 - * @tc.desc: Test AfterOpen when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen003 - * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: NotifyDataChange001 - * @tc.desc: Test NotifyDataChange when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange002 - * @tc.desc: Test NotifyDataChange when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange003 - * @tc.desc: Test NotifyDataChange when Check pass. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.storeName_ = "validStoreName"; - param.bundleName_ = "validBundleName"; - param.user_ = "validUser"; - param.hapName_ = "validHapName"; - param.customDir_ = "dir1/dir2"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - rdbNotifyConfig.delay_ = 0; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); - rdbNotifyConfig.delay_ = DELY_TIME; - result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetSearchable001 - * @tc.desc: Test SetSearchable when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetSearchable002 - * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: GetPassword001 - * @tc.desc: Test GetPassword when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword002 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); -} - -/** - * @tc.name: GetPassword003 - * @tc.desc: Test GetPassword when decryption fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - secretKey.sKey = sKey; // Invalid key for decryption - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: GetPassword004 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: GetPassword005 - * @tc.desc: Test GetPassword when no meta data. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword006 - * @tc.desc: Test GetPassword when meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: SetDistributedTables001 - * @tc.desc: Test SetDistributedTables when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector tables; - std::vector references; - - int32_t result = service.SetDistributedTables(param, tables, references, false); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetDistributedTables002 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetDistributedTables003 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - param.hapName_ = "test/test"; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync001 - * @tc.desc: Test Sync when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync002 - * @tc.desc: Test Sync when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: QuerySharingResource001 - * @tc.desc: Test QuerySharingResource when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - PredicatesMemo predicates; - std::vector columns; - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen001 - * @tc.desc: Test BeforeOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen002 - * @tc.desc: Test BeforeOpen when checkacess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen003 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_NO_META); -} - -/** - * @tc.name: BeforeOpen004 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); -} - -/** - * @tc.name: Subscribe001 - * @tc.desc: Test Subscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.Subscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnSubscribe001 - * @tc.desc: Test UnSubscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.UnSubscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo001 - * @tc.desc: Test GetDfxInfo when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - DistributedRdb::RdbDfxInfo dfxInfo; - - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo002 - * @tc.desc: Test GetDfxInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - DistributedData::StoreDfxInfo dfxMeta; - dfxMeta.lastOpenTime = "test"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - DistributedRdb::RdbDfxInfo dfxInfo; - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); - EXPECT_EQ(result, RDB_OK); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); -} - -/** - * @tc.name: LockCloudContainer001 - * @tc.desc: Test LockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - auto result = service.LockCloudContainer(param); - - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); -} - -/** - * @tc.name: LockCloudContainer002 - * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - auto result = service.LockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: UnlockCloudContainer001 - * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.UnlockCloudContainer(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnlockCloudContainer002 - * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - int32_t result = service.UnlockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: GetDebugInfo001 - * @tc.desc: Test GetDebugInfo when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::map debugInfo; - - int32_t result = service.GetDebugInfo(param, debugInfo); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_TRUE(debugInfo.empty()); -} - -/** - * @tc.name: GetDebugInfo002 - * @tc.desc: Test GetDebugInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) -{ - auto meta = metaData_; - DistributedData::StoreDebugInfo debugMeta; - DistributedData::StoreDebugInfo::FileInfo fileInfo1; - fileInfo1.inode = 4; - fileInfo1.size = 5; - fileInfo1.dev = 6; - fileInfo1.mode = 7; - fileInfo1.uid = 8; - fileInfo1.gid = 9; - debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::map debugInfo; - int32_t result = service.GetDebugInfo(param, debugInfo); - EXPECT_EQ(result, RDB_OK); - RdbDebugInfo rdbInfo = debugInfo["test1"]; - EXPECT_EQ(rdbInfo.inode_, 4); - EXPECT_EQ(rdbInfo.size_, 5); - EXPECT_EQ(rdbInfo.dev_, 6); - EXPECT_EQ(rdbInfo.mode_, 7); - EXPECT_EQ(rdbInfo.uid_, 8); - EXPECT_EQ(rdbInfo.gid_, 9); - EXPECT_EQ(debugInfo.size(), 1); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); -} - -/** - * @tc.name: VerifyPromiseInfo001 - * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: VerifyPromiseInfo002 - * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) -{ - StoreMetaDataLocal localMeta; - auto tokenId = IPCSkeleton::GetCallingTokenID(); - localMeta.isAutoSync = true; - localMeta.promiseInfo.tokenIds = {tokenId}; - localMeta.promiseInfo.uids = {}; - localMeta.promiseInfo.permissionNames = {}; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_OK); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); -} - -/** - * @tc.name: CheckParam001 - * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test/test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.bundleName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.bundleName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam002 - * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test/test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.hapName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.hapName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam003 - * @tc.desc: Test CheckParam when user_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test/test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.user_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.user_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam004 - * @tc.desc: Test CheckParam. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam005 - * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test/test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam006 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/./../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././//////////////////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam007 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = ""; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../test/../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////////////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: Delete_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = ""; - auto errCode = service.Delete(param); - EXPECT_EQ(errCode, RDB_ERROR); -} - -/** - * @tc.name: RegisterEvent_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) -{ - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "RegisterEvent_bundleName"; - storeInfo.storeName = "RegisterEvent_storeName"; - storeInfo.user = 100; - storeInfo.path = "RegisterEvent_path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC -} - -/** - * @tc.name: RegisterEvent_002 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); -} - - -/** - * @tc.name: RegisterEvent_003 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir ="path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_004 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_KV_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_005 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - - meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_006 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_007 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_END; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_008 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir = "path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_009 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SetDistributedTables004 - * @tc.desc: Test SetDistributedTables when type is device. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "SetDistributedTables004"; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - auto meta = service.GetStoreMetaData(param); - ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { - auto store = new (std::nothrow) GeneralStoreMock(); - return store; - }; - AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_DEVICE); - EXPECT_EQ(result, RDB_OK); - ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RemoteQuery003 - * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "RemoteQuery003"; - std::vector selectionArgs; - auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); - EXPECT_EQ(ret.first, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: Sync003 - * @tc.desc: Test Sync when mode is nearby begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync003"; - RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: Sync004 - * @tc.desc: Test Sync when mode is cloud begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync004"; - RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_001 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_002 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 - * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) -{ - // Prepare metaData and secret key - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area < 0 and empty nonce - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - // Clean up - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with empty sKey - SecretKeyMetaData cloneKey; - cloneKey.sKey.clear(); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area >= 0 and nonce not empty - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = 1; - cloneKey.nonce = { 1, 2, 3, 4 }; - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From 6b03a955e0902b3f6345eed22694af0e6051534e Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 09:58:36 +0800 Subject: [PATCH 04/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_service_impl_test.cpp | 1898 +++++++++++++++++ 1 file changed, 1898 insertions(+) diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 97bc0f159..577771216 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -417,5 +417,1903 @@ HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } +/** + * @tc.name: IsNeedMetaSync001 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: IsNeedMetaSync002 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) +{ + CapMetaData capMetaData; + auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, false); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: ProcessResult001 + * @tc.desc: Test ProcessResult when all results have DBStatus::OK. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult002 + * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::DB_ERROR)}, + {"device3", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); + EXPECT_EQ(result.second.at("device3"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult004 + * @tc.desc: Test ProcessResult with an empty results map. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.first.size(), 0); + EXPECT_EQ(result.second.size(), 0); +} + +/** + * @tc.name: DoCompensateSync001 + * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) +{ + RdbServiceImpl service; + + int32_t eventId = 1; + DistributedData::BindEvent::BindEventInfo bindInfo; + bindInfo.bundleName = TEST_BUNDLE; + bindInfo.tokenId = metaData_.tokenId; + bindInfo.user = metaData_.uid; + bindInfo.storeName = TEST_STORE; + bindInfo.tableName = "test_table"; + bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; + + BindEvent event(eventId, std::move(bindInfo)); + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + service.DoCompensateSync(event); + EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); +} + +/** + * @tc.name: ReportStatistic001 + * @tc.desc: Test ReportStatistic when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: ReportStatistic002 + * @tc.desc: Test ReportStatistic when CheckAccess success. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, OK); +} + +/** + * @tc.name: GetReuseDevice001 + * @tc.desc: Test GetReuseDevice when all devices are reusable. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + StoreMetaData metaData; + auto result = service.GetReuseDevice(devices, metaData); + EXPECT_EQ(result.size(), 0); +} + +/** + * @tc.name: DoAutoSync001 + * @tc.desc: Test DoAutoSync when the store is null. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + std::vector tables = {"table1"}; + + auto result = service.DoAutoSync(devices, dataBase, tables); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: DoOnlineSync001 + * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + dataBase.name = TEST_STORE; + + DistributedData::Table table1; + table1.name = "table1"; + table1.deviceSyncFields = {"field1", "field2"}; + DistributedData::Table table2; + table2.name = "table2"; + table2.deviceSyncFields = {}; + + dataBase.tables = {table1, table2}; + + auto result = service.DoOnlineSync(devices, dataBase); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: OnReady001 + * @tc.desc: Test OnReady when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = "test_device"; + + int32_t result = service.OnReady(device); + EXPECT_EQ(result, 0); +} + +/** + * @tc.name: OnReady002 + * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = metaData_.deviceId; + + DistributedData::Database dataBase1; + dataBase1.name = "test_rdb_service_impl_sync_store2"; + dataBase1.bundleName = TEST_BUNDLE; + dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; + + DistributedData::Database dataBase2; + dataBase2.name = "test_rdb_service_impl_sync_store2"; + dataBase2.bundleName = TEST_BUNDLE; + dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); + int32_t result = service.OnReady(device); + + EXPECT_EQ(result, 0); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); +} + +/** + * @tc.name: AfterOpen001 + * @tc.desc: Test AfterOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen002 + * @tc.desc: Test AfterOpen when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen003 + * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: NotifyDataChange001 + * @tc.desc: Test NotifyDataChange when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange002 + * @tc.desc: Test NotifyDataChange when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange003 + * @tc.desc: Test NotifyDataChange when Check pass. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.storeName_ = "validStoreName"; + param.bundleName_ = "validBundleName"; + param.user_ = "validUser"; + param.hapName_ = "validHapName"; + param.customDir_ = "dir1/dir2"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + rdbNotifyConfig.delay_ = 0; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); + rdbNotifyConfig.delay_ = DELY_TIME; + result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetSearchable001 + * @tc.desc: Test SetSearchable when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetSearchable002 + * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: GetPassword001 + * @tc.desc: Test GetPassword when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword002 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); +} + +/** + * @tc.name: GetPassword003 + * @tc.desc: Test GetPassword when decryption fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + secretKey.sKey = sKey; // Invalid key for decryption + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: GetPassword004 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: GetPassword005 + * @tc.desc: Test GetPassword when no meta data. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword006 + * @tc.desc: Test GetPassword when meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: SetDistributedTables001 + * @tc.desc: Test SetDistributedTables when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector tables; + std::vector references; + + int32_t result = service.SetDistributedTables(param, tables, references, false); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetDistributedTables002 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetDistributedTables003 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + param.hapName_ = "test/test"; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync001 + * @tc.desc: Test Sync when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync002 + * @tc.desc: Test Sync when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: QuerySharingResource001 + * @tc.desc: Test QuerySharingResource when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + PredicatesMemo predicates; + std::vector columns; + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen001 + * @tc.desc: Test BeforeOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen002 + * @tc.desc: Test BeforeOpen when checkacess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen003 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_NO_META); +} + +/** + * @tc.name: BeforeOpen004 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); +} + +/** + * @tc.name: Subscribe001 + * @tc.desc: Test Subscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.Subscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnSubscribe001 + * @tc.desc: Test UnSubscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.UnSubscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo001 + * @tc.desc: Test GetDfxInfo when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + DistributedRdb::RdbDfxInfo dfxInfo; + + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo002 + * @tc.desc: Test GetDfxInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + DistributedData::StoreDfxInfo dfxMeta; + dfxMeta.lastOpenTime = "test"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + DistributedRdb::RdbDfxInfo dfxInfo; + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); + EXPECT_EQ(result, RDB_OK); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); +} + +/** + * @tc.name: LockCloudContainer001 + * @tc.desc: Test LockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + auto result = service.LockCloudContainer(param); + + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); +} + +/** + * @tc.name: LockCloudContainer002 + * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + auto result = service.LockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: UnlockCloudContainer001 + * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.UnlockCloudContainer(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnlockCloudContainer002 + * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + int32_t result = service.UnlockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: GetDebugInfo001 + * @tc.desc: Test GetDebugInfo when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::map debugInfo; + + int32_t result = service.GetDebugInfo(param, debugInfo); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_TRUE(debugInfo.empty()); +} + +/** + * @tc.name: GetDebugInfo002 + * @tc.desc: Test GetDebugInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) +{ + auto meta = metaData_; + DistributedData::StoreDebugInfo debugMeta; + DistributedData::StoreDebugInfo::FileInfo fileInfo1; + fileInfo1.inode = 4; + fileInfo1.size = 5; + fileInfo1.dev = 6; + fileInfo1.mode = 7; + fileInfo1.uid = 8; + fileInfo1.gid = 9; + debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::map debugInfo; + int32_t result = service.GetDebugInfo(param, debugInfo); + EXPECT_EQ(result, RDB_OK); + RdbDebugInfo rdbInfo = debugInfo["test1"]; + EXPECT_EQ(rdbInfo.inode_, 4); + EXPECT_EQ(rdbInfo.size_, 5); + EXPECT_EQ(rdbInfo.dev_, 6); + EXPECT_EQ(rdbInfo.mode_, 7); + EXPECT_EQ(rdbInfo.uid_, 8); + EXPECT_EQ(rdbInfo.gid_, 9); + EXPECT_EQ(debugInfo.size(), 1); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); +} + +/** + * @tc.name: VerifyPromiseInfo001 + * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: VerifyPromiseInfo002 + * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) +{ + StoreMetaDataLocal localMeta; + auto tokenId = IPCSkeleton::GetCallingTokenID(); + localMeta.isAutoSync = true; + localMeta.promiseInfo.tokenIds = {tokenId}; + localMeta.promiseInfo.uids = {}; + localMeta.promiseInfo.permissionNames = {}; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_OK); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); +} + +/** + * @tc.name: CheckParam001 + * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test/test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.bundleName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.bundleName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam002 + * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test/test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.hapName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.hapName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam003 + * @tc.desc: Test CheckParam when user_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test/test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.user_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.user_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam004 + * @tc.desc: Test CheckParam. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam005 + * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test/test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam006 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/./../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././//////////////////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam007 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = ""; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../test/../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////////////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: Delete_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = ""; + auto errCode = service.Delete(param); + EXPECT_EQ(errCode, RDB_ERROR); +} + +/** + * @tc.name: RegisterEvent_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) +{ + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "RegisterEvent_bundleName"; + storeInfo.storeName = "RegisterEvent_storeName"; + storeInfo.user = 100; + storeInfo.path = "RegisterEvent_path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC +} + +/** + * @tc.name: RegisterEvent_002 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); +} + + +/** + * @tc.name: RegisterEvent_003 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir ="path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_004 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_KV_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_005 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + + meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_006 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_007 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_END; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_008 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir = "path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_009 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SetDistributedTables004 + * @tc.desc: Test SetDistributedTables when type is device. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "SetDistributedTables004"; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + auto meta = service.GetStoreMetaData(param); + ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { + auto store = new (std::nothrow) GeneralStoreMock(); + return store; + }; + AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_DEVICE); + EXPECT_EQ(result, RDB_OK); + ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RemoteQuery003 + * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "RemoteQuery003"; + std::vector selectionArgs; + auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); + EXPECT_EQ(ret.first, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: Sync003 + * @tc.desc: Test Sync when mode is nearby begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync003"; + RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: Sync004 + * @tc.desc: Test Sync when mode is cloud begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync004"; + RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_001 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_002 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 + * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) +{ + // Prepare metaData and secret key + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area < 0 and empty nonce + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + // Clean up + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with empty sKey + SecretKeyMetaData cloneKey; + cloneKey.sKey.clear(); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area >= 0 and nonce not empty + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = 1; + cloneKey.nonce = { 1, 2, 3, 4 }; + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From 8b5a622a9d1265f6278a2b5c2d4395852906e5e7 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:05:23 +0800 Subject: [PATCH 05/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_service_impl_test.cpp | 1899 ----------------- 1 file changed, 1899 deletions(-) diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 577771216..b36e1857d 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -416,1904 +416,5 @@ HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } - -/** - * @tc.name: IsNeedMetaSync001 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: IsNeedMetaSync002 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) -{ - CapMetaData capMetaData; - auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, false); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: ProcessResult001 - * @tc.desc: Test ProcessResult when all results have DBStatus::OK. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult002 - * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::DB_ERROR)}, - {"device3", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); - EXPECT_EQ(result.second.at("device3"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult004 - * @tc.desc: Test ProcessResult with an empty results map. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.first.size(), 0); - EXPECT_EQ(result.second.size(), 0); -} - -/** - * @tc.name: DoCompensateSync001 - * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) -{ - RdbServiceImpl service; - - int32_t eventId = 1; - DistributedData::BindEvent::BindEventInfo bindInfo; - bindInfo.bundleName = TEST_BUNDLE; - bindInfo.tokenId = metaData_.tokenId; - bindInfo.user = metaData_.uid; - bindInfo.storeName = TEST_STORE; - bindInfo.tableName = "test_table"; - bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; - - BindEvent event(eventId, std::move(bindInfo)); - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - service.DoCompensateSync(event); - EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); -} - -/** - * @tc.name: ReportStatistic001 - * @tc.desc: Test ReportStatistic when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: ReportStatistic002 - * @tc.desc: Test ReportStatistic when CheckAccess success. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, OK); -} - -/** - * @tc.name: GetReuseDevice001 - * @tc.desc: Test GetReuseDevice when all devices are reusable. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - StoreMetaData metaData; - auto result = service.GetReuseDevice(devices, metaData); - EXPECT_EQ(result.size(), 0); -} - -/** - * @tc.name: DoAutoSync001 - * @tc.desc: Test DoAutoSync when the store is null. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - std::vector tables = {"table1"}; - - auto result = service.DoAutoSync(devices, dataBase, tables); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: DoOnlineSync001 - * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - dataBase.name = TEST_STORE; - - DistributedData::Table table1; - table1.name = "table1"; - table1.deviceSyncFields = {"field1", "field2"}; - DistributedData::Table table2; - table2.name = "table2"; - table2.deviceSyncFields = {}; - - dataBase.tables = {table1, table2}; - - auto result = service.DoOnlineSync(devices, dataBase); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: OnReady001 - * @tc.desc: Test OnReady when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = "test_device"; - - int32_t result = service.OnReady(device); - EXPECT_EQ(result, 0); -} - -/** - * @tc.name: OnReady002 - * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = metaData_.deviceId; - - DistributedData::Database dataBase1; - dataBase1.name = "test_rdb_service_impl_sync_store2"; - dataBase1.bundleName = TEST_BUNDLE; - dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; - - DistributedData::Database dataBase2; - dataBase2.name = "test_rdb_service_impl_sync_store2"; - dataBase2.bundleName = TEST_BUNDLE; - dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); - int32_t result = service.OnReady(device); - - EXPECT_EQ(result, 0); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); -} - -/** - * @tc.name: AfterOpen001 - * @tc.desc: Test AfterOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen002 - * @tc.desc: Test AfterOpen when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen003 - * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: NotifyDataChange001 - * @tc.desc: Test NotifyDataChange when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange002 - * @tc.desc: Test NotifyDataChange when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange003 - * @tc.desc: Test NotifyDataChange when Check pass. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.storeName_ = "validStoreName"; - param.bundleName_ = "validBundleName"; - param.user_ = "validUser"; - param.hapName_ = "validHapName"; - param.customDir_ = "dir1/dir2"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - rdbNotifyConfig.delay_ = 0; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); - rdbNotifyConfig.delay_ = DELY_TIME; - result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetSearchable001 - * @tc.desc: Test SetSearchable when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetSearchable002 - * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: GetPassword001 - * @tc.desc: Test GetPassword when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword002 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); -} - -/** - * @tc.name: GetPassword003 - * @tc.desc: Test GetPassword when decryption fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - secretKey.sKey = sKey; // Invalid key for decryption - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: GetPassword004 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: GetPassword005 - * @tc.desc: Test GetPassword when no meta data. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword006 - * @tc.desc: Test GetPassword when meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: SetDistributedTables001 - * @tc.desc: Test SetDistributedTables when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector tables; - std::vector references; - - int32_t result = service.SetDistributedTables(param, tables, references, false); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetDistributedTables002 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetDistributedTables003 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - param.hapName_ = "test/test"; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync001 - * @tc.desc: Test Sync when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync002 - * @tc.desc: Test Sync when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: QuerySharingResource001 - * @tc.desc: Test QuerySharingResource when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - PredicatesMemo predicates; - std::vector columns; - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen001 - * @tc.desc: Test BeforeOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen002 - * @tc.desc: Test BeforeOpen when checkacess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen003 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_NO_META); -} - -/** - * @tc.name: BeforeOpen004 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); -} - -/** - * @tc.name: Subscribe001 - * @tc.desc: Test Subscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.Subscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnSubscribe001 - * @tc.desc: Test UnSubscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.UnSubscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo001 - * @tc.desc: Test GetDfxInfo when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - DistributedRdb::RdbDfxInfo dfxInfo; - - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo002 - * @tc.desc: Test GetDfxInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - DistributedData::StoreDfxInfo dfxMeta; - dfxMeta.lastOpenTime = "test"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - DistributedRdb::RdbDfxInfo dfxInfo; - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); - EXPECT_EQ(result, RDB_OK); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); -} - -/** - * @tc.name: LockCloudContainer001 - * @tc.desc: Test LockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - auto result = service.LockCloudContainer(param); - - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); -} - -/** - * @tc.name: LockCloudContainer002 - * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - auto result = service.LockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: UnlockCloudContainer001 - * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.UnlockCloudContainer(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnlockCloudContainer002 - * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - int32_t result = service.UnlockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: GetDebugInfo001 - * @tc.desc: Test GetDebugInfo when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::map debugInfo; - - int32_t result = service.GetDebugInfo(param, debugInfo); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_TRUE(debugInfo.empty()); -} - -/** - * @tc.name: GetDebugInfo002 - * @tc.desc: Test GetDebugInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) -{ - auto meta = metaData_; - DistributedData::StoreDebugInfo debugMeta; - DistributedData::StoreDebugInfo::FileInfo fileInfo1; - fileInfo1.inode = 4; - fileInfo1.size = 5; - fileInfo1.dev = 6; - fileInfo1.mode = 7; - fileInfo1.uid = 8; - fileInfo1.gid = 9; - debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::map debugInfo; - int32_t result = service.GetDebugInfo(param, debugInfo); - EXPECT_EQ(result, RDB_OK); - RdbDebugInfo rdbInfo = debugInfo["test1"]; - EXPECT_EQ(rdbInfo.inode_, 4); - EXPECT_EQ(rdbInfo.size_, 5); - EXPECT_EQ(rdbInfo.dev_, 6); - EXPECT_EQ(rdbInfo.mode_, 7); - EXPECT_EQ(rdbInfo.uid_, 8); - EXPECT_EQ(rdbInfo.gid_, 9); - EXPECT_EQ(debugInfo.size(), 1); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); -} - -/** - * @tc.name: VerifyPromiseInfo001 - * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: VerifyPromiseInfo002 - * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) -{ - StoreMetaDataLocal localMeta; - auto tokenId = IPCSkeleton::GetCallingTokenID(); - localMeta.isAutoSync = true; - localMeta.promiseInfo.tokenIds = {tokenId}; - localMeta.promiseInfo.uids = {}; - localMeta.promiseInfo.permissionNames = {}; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_OK); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); -} - -/** - * @tc.name: CheckParam001 - * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test/test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.bundleName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.bundleName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam002 - * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test/test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.hapName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.hapName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam003 - * @tc.desc: Test CheckParam when user_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test/test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.user_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.user_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam004 - * @tc.desc: Test CheckParam. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam005 - * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test/test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam006 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/./../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././//////////////////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam007 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = ""; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../test/../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////////////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: Delete_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = ""; - auto errCode = service.Delete(param); - EXPECT_EQ(errCode, RDB_ERROR); -} - -/** - * @tc.name: RegisterEvent_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) -{ - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "RegisterEvent_bundleName"; - storeInfo.storeName = "RegisterEvent_storeName"; - storeInfo.user = 100; - storeInfo.path = "RegisterEvent_path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC -} - -/** - * @tc.name: RegisterEvent_002 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); -} - - -/** - * @tc.name: RegisterEvent_003 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir ="path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_004 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_KV_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_005 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - - meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_006 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_007 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_END; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_008 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir = "path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_009 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SetDistributedTables004 - * @tc.desc: Test SetDistributedTables when type is device. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "SetDistributedTables004"; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - auto meta = service.GetStoreMetaData(param); - ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { - auto store = new (std::nothrow) GeneralStoreMock(); - return store; - }; - AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_DEVICE); - EXPECT_EQ(result, RDB_OK); - ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RemoteQuery003 - * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "RemoteQuery003"; - std::vector selectionArgs; - auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); - EXPECT_EQ(ret.first, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: Sync003 - * @tc.desc: Test Sync when mode is nearby begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync003"; - RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: Sync004 - * @tc.desc: Test Sync when mode is cloud begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync004"; - RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_001 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_002 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 - * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) -{ - // Prepare metaData and secret key - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area < 0 and empty nonce - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - // Clean up - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with empty sKey - SecretKeyMetaData cloneKey; - cloneKey.sKey.clear(); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area >= 0 and nonce not empty - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = 1; - cloneKey.nonce = { 1, 2, 3, 4 }; - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From ced53389b336f9541118e338655c3c36eb1c747a Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:09:29 +0800 Subject: [PATCH 06/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_service_impl_test.cpp | 1899 +++++++++++++++++ 1 file changed, 1899 insertions(+) diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index b36e1857d..577771216 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -416,5 +416,1904 @@ HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } + +/** + * @tc.name: IsNeedMetaSync001 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: IsNeedMetaSync002 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) +{ + CapMetaData capMetaData; + auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, false); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: ProcessResult001 + * @tc.desc: Test ProcessResult when all results have DBStatus::OK. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult002 + * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::DB_ERROR)}, + {"device3", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); + EXPECT_EQ(result.second.at("device3"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult004 + * @tc.desc: Test ProcessResult with an empty results map. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.first.size(), 0); + EXPECT_EQ(result.second.size(), 0); +} + +/** + * @tc.name: DoCompensateSync001 + * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) +{ + RdbServiceImpl service; + + int32_t eventId = 1; + DistributedData::BindEvent::BindEventInfo bindInfo; + bindInfo.bundleName = TEST_BUNDLE; + bindInfo.tokenId = metaData_.tokenId; + bindInfo.user = metaData_.uid; + bindInfo.storeName = TEST_STORE; + bindInfo.tableName = "test_table"; + bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; + + BindEvent event(eventId, std::move(bindInfo)); + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + service.DoCompensateSync(event); + EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); +} + +/** + * @tc.name: ReportStatistic001 + * @tc.desc: Test ReportStatistic when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: ReportStatistic002 + * @tc.desc: Test ReportStatistic when CheckAccess success. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, OK); +} + +/** + * @tc.name: GetReuseDevice001 + * @tc.desc: Test GetReuseDevice when all devices are reusable. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + StoreMetaData metaData; + auto result = service.GetReuseDevice(devices, metaData); + EXPECT_EQ(result.size(), 0); +} + +/** + * @tc.name: DoAutoSync001 + * @tc.desc: Test DoAutoSync when the store is null. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + std::vector tables = {"table1"}; + + auto result = service.DoAutoSync(devices, dataBase, tables); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: DoOnlineSync001 + * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + dataBase.name = TEST_STORE; + + DistributedData::Table table1; + table1.name = "table1"; + table1.deviceSyncFields = {"field1", "field2"}; + DistributedData::Table table2; + table2.name = "table2"; + table2.deviceSyncFields = {}; + + dataBase.tables = {table1, table2}; + + auto result = service.DoOnlineSync(devices, dataBase); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: OnReady001 + * @tc.desc: Test OnReady when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = "test_device"; + + int32_t result = service.OnReady(device); + EXPECT_EQ(result, 0); +} + +/** + * @tc.name: OnReady002 + * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = metaData_.deviceId; + + DistributedData::Database dataBase1; + dataBase1.name = "test_rdb_service_impl_sync_store2"; + dataBase1.bundleName = TEST_BUNDLE; + dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; + + DistributedData::Database dataBase2; + dataBase2.name = "test_rdb_service_impl_sync_store2"; + dataBase2.bundleName = TEST_BUNDLE; + dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); + int32_t result = service.OnReady(device); + + EXPECT_EQ(result, 0); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); +} + +/** + * @tc.name: AfterOpen001 + * @tc.desc: Test AfterOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen002 + * @tc.desc: Test AfterOpen when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen003 + * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: NotifyDataChange001 + * @tc.desc: Test NotifyDataChange when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange002 + * @tc.desc: Test NotifyDataChange when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange003 + * @tc.desc: Test NotifyDataChange when Check pass. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.storeName_ = "validStoreName"; + param.bundleName_ = "validBundleName"; + param.user_ = "validUser"; + param.hapName_ = "validHapName"; + param.customDir_ = "dir1/dir2"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + rdbNotifyConfig.delay_ = 0; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); + rdbNotifyConfig.delay_ = DELY_TIME; + result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetSearchable001 + * @tc.desc: Test SetSearchable when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetSearchable002 + * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: GetPassword001 + * @tc.desc: Test GetPassword when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword002 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); +} + +/** + * @tc.name: GetPassword003 + * @tc.desc: Test GetPassword when decryption fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + secretKey.sKey = sKey; // Invalid key for decryption + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: GetPassword004 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: GetPassword005 + * @tc.desc: Test GetPassword when no meta data. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword006 + * @tc.desc: Test GetPassword when meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: SetDistributedTables001 + * @tc.desc: Test SetDistributedTables when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector tables; + std::vector references; + + int32_t result = service.SetDistributedTables(param, tables, references, false); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetDistributedTables002 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetDistributedTables003 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + param.hapName_ = "test/test"; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync001 + * @tc.desc: Test Sync when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync002 + * @tc.desc: Test Sync when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: QuerySharingResource001 + * @tc.desc: Test QuerySharingResource when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + PredicatesMemo predicates; + std::vector columns; + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen001 + * @tc.desc: Test BeforeOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen002 + * @tc.desc: Test BeforeOpen when checkacess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen003 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_NO_META); +} + +/** + * @tc.name: BeforeOpen004 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); +} + +/** + * @tc.name: Subscribe001 + * @tc.desc: Test Subscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.Subscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnSubscribe001 + * @tc.desc: Test UnSubscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.UnSubscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo001 + * @tc.desc: Test GetDfxInfo when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + DistributedRdb::RdbDfxInfo dfxInfo; + + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo002 + * @tc.desc: Test GetDfxInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + DistributedData::StoreDfxInfo dfxMeta; + dfxMeta.lastOpenTime = "test"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + DistributedRdb::RdbDfxInfo dfxInfo; + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); + EXPECT_EQ(result, RDB_OK); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); +} + +/** + * @tc.name: LockCloudContainer001 + * @tc.desc: Test LockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + auto result = service.LockCloudContainer(param); + + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); +} + +/** + * @tc.name: LockCloudContainer002 + * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + auto result = service.LockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: UnlockCloudContainer001 + * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.UnlockCloudContainer(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnlockCloudContainer002 + * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + int32_t result = service.UnlockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: GetDebugInfo001 + * @tc.desc: Test GetDebugInfo when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::map debugInfo; + + int32_t result = service.GetDebugInfo(param, debugInfo); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_TRUE(debugInfo.empty()); +} + +/** + * @tc.name: GetDebugInfo002 + * @tc.desc: Test GetDebugInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) +{ + auto meta = metaData_; + DistributedData::StoreDebugInfo debugMeta; + DistributedData::StoreDebugInfo::FileInfo fileInfo1; + fileInfo1.inode = 4; + fileInfo1.size = 5; + fileInfo1.dev = 6; + fileInfo1.mode = 7; + fileInfo1.uid = 8; + fileInfo1.gid = 9; + debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::map debugInfo; + int32_t result = service.GetDebugInfo(param, debugInfo); + EXPECT_EQ(result, RDB_OK); + RdbDebugInfo rdbInfo = debugInfo["test1"]; + EXPECT_EQ(rdbInfo.inode_, 4); + EXPECT_EQ(rdbInfo.size_, 5); + EXPECT_EQ(rdbInfo.dev_, 6); + EXPECT_EQ(rdbInfo.mode_, 7); + EXPECT_EQ(rdbInfo.uid_, 8); + EXPECT_EQ(rdbInfo.gid_, 9); + EXPECT_EQ(debugInfo.size(), 1); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); +} + +/** + * @tc.name: VerifyPromiseInfo001 + * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: VerifyPromiseInfo002 + * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) +{ + StoreMetaDataLocal localMeta; + auto tokenId = IPCSkeleton::GetCallingTokenID(); + localMeta.isAutoSync = true; + localMeta.promiseInfo.tokenIds = {tokenId}; + localMeta.promiseInfo.uids = {}; + localMeta.promiseInfo.permissionNames = {}; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_OK); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); +} + +/** + * @tc.name: CheckParam001 + * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test/test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.bundleName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.bundleName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam002 + * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test/test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.hapName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.hapName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam003 + * @tc.desc: Test CheckParam when user_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test/test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.user_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.user_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam004 + * @tc.desc: Test CheckParam. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam005 + * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test/test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam006 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/./../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././//////////////////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam007 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = ""; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../test/../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////////////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: Delete_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = ""; + auto errCode = service.Delete(param); + EXPECT_EQ(errCode, RDB_ERROR); +} + +/** + * @tc.name: RegisterEvent_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) +{ + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "RegisterEvent_bundleName"; + storeInfo.storeName = "RegisterEvent_storeName"; + storeInfo.user = 100; + storeInfo.path = "RegisterEvent_path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC +} + +/** + * @tc.name: RegisterEvent_002 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); +} + + +/** + * @tc.name: RegisterEvent_003 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir ="path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_004 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_KV_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_005 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + + meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_006 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_007 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_END; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_008 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir = "path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_009 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SetDistributedTables004 + * @tc.desc: Test SetDistributedTables when type is device. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "SetDistributedTables004"; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + auto meta = service.GetStoreMetaData(param); + ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { + auto store = new (std::nothrow) GeneralStoreMock(); + return store; + }; + AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_DEVICE); + EXPECT_EQ(result, RDB_OK); + ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RemoteQuery003 + * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "RemoteQuery003"; + std::vector selectionArgs; + auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); + EXPECT_EQ(ret.first, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: Sync003 + * @tc.desc: Test Sync when mode is nearby begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync003"; + RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: Sync004 + * @tc.desc: Test Sync when mode is cloud begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync004"; + RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_001 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_002 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 + * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) +{ + // Prepare metaData and secret key + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area < 0 and empty nonce + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + // Clean up + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with empty sKey + SecretKeyMetaData cloneKey; + cloneKey.sKey.clear(); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area >= 0 and nonce not empty + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = 1; + cloneKey.nonce = { 1, 2, 3, 4 }; + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From e9cc9e8afb293542598d864a7f6a50c332ac856f Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:14:01 +0800 Subject: [PATCH 07/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1768 ----------------- 1 file changed, 1768 deletions(-) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 40d393946..929d59087 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1383,1773 +1383,5 @@ HWTEST_F(CloudDataTest, DisableCloud001, TestSize.Level0) ret = cloudServiceImpl_->DisableCloud(TEST_CLOUD_ID); EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); } - -/** -* @tc.name: ChangeAppSwitch -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ChangeAppSwitch, TestSize.Level0) -{ - std::string id = "testId"; - std::string bundleName = "testName"; - auto ret = cloudServiceImpl_->ChangeAppSwitch(id, bundleName, CloudData::CloudService::SWITCH_ON); - EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); - ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, bundleName, CloudData::CloudService::SWITCH_ON); - EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); - ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_OFF); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: EnableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, EnableCloud, TestSize.Level0) -{ - std::string bundleName = "testName"; - std::map switches; - switches.insert_or_assign(TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_ON); - switches.insert_or_assign(bundleName, CloudData::CloudService::SWITCH_ON); - auto ret = cloudServiceImpl_->EnableCloud(TEST_CLOUD_ID, switches); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: OnEnableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnEnableCloud, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string id = "testId"; - std::map switches; - ITypesUtil::Marshal(data, id, switches); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnDisableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnDisableCloud, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeAppSwitch -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeAppSwitch, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteInt32(CloudData::CloudService::SWITCH_ON); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnClean -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnClean, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string id = TEST_CLOUD_ID; - std::map actions; - ITypesUtil::Marshal(data, id, actions); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnNotifyDataChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnNotifyDataChange, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnNotifyChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnNotifyChange, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - int32_t userId = 100; - data.WriteInt32(userId); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryStatistics -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryStatistics, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteString(TEST_CLOUD_STORE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryLastSyncInfo -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteString(TEST_CLOUD_STORE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetGlobalCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = - cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnAllocResourceAndShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest( - CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string storeId = "storeId"; - DistributedRdb::PredicatesMemo predicates; - std::vector columns; - std::vector participants; - ITypesUtil::Marshal(data, storeId, predicates, columns, participants); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnUnshare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnExit -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangePrivilege -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQuery -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, sharingRes, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryByInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, invitation, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnConfirmInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - int32_t confirmation = 0; - std::tuple result; - ITypesUtil::Marshal(data, invitation, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeConfirmation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - int32_t confirmation = 0; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnCloudSync -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - std::string storeId = "storeId"; - CloudData::CloudService::Option option; - option.syncMode = 4; - option.seqNum = 1; - ITypesUtil::Marshal(data, bundleName, storeId, option); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnInitNotifier -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - sptr notifier = nullptr; - ITypesUtil::Marshal(data, bundleName, notifier); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); -} - -/** -* @tc.name: SharingUtil001 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); - EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); - EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); - EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil002 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); - EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); - EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); - EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil003 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); - EXPECT_EQ(status, Status::IPC_ERROR); - status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); - EXPECT_EQ(status, Status::SUCCESS); -} - -/** -* @tc.name: SharingUtil004 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); - EXPECT_EQ(status, Status::SUCCESS); - status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); - EXPECT_EQ(status, Status::ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); - EXPECT_EQ(status, Status::INVALID_ARGUMENT); - status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_EQ(status, Status::STRATEGY_BLOCKING); - status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); - EXPECT_EQ(status, Status::CLOUD_DISABLE); - status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); - EXPECT_EQ(status, Status::NETWORK_ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); - EXPECT_EQ(status, Status::ERROR); -} - -/** -* @tc.name: DoCloudSync -* @tc.desc: Test the executor_ uninitialized and initialized scenarios -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager sync; - CloudData::SyncManager::SyncInfo info(user); - auto ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - size_t max = 12; - size_t min = 5; - sync.executor_ = std::make_shared(max, min); - ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_OK); - int32_t invalidUser = -1; - sync.StopCloudSync(invalidUser); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_OK); -} - -/** -* @tc.name: GetPostEventTask -* @tc.desc: Test the interface to verify the package name and table name -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) -{ - std::vector schemas; - schemaMeta_.databases[0].name = "test"; - schemas.push_back(schemaMeta_); - schemaMeta_.bundleName = "test"; - schemas.push_back(schemaMeta_); - - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - std::vector value; - info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); - - CloudData::SyncManager sync; - std::map traceIds; - auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); - task(); - std::vector lastSyncInfos; - MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); - EXPECT_TRUE(lastSyncInfos.size() == 0); -} - -/** -* @tc.name: GetRetryer -* @tc.desc: Test the input parameters of different interfaces -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - CloudData::SyncManager::Duration duration; - std::string prepareTraceId; - auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( - duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: GetCallback -* @tc.desc: Test the processing logic of different progress callbacks -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - DistributedData::GenDetails result; - StoreInfo storeInfo; - storeInfo.user = user; - storeInfo.bundleName = "testBundleName"; - int32_t triggerMode = MODE_DEFAULT; - std::string prepareTraceId; - GenAsync async = nullptr; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - int32_t process = 0; - async = [&process](const GenDetails &details) { - process = details.begin()->second.progress; - }; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - result.insert_or_assign("test", detail); - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); - detail.progress = GenProgress::SYNC_FINISH; - result.insert_or_assign("test", detail); - storeInfo.user = -1; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - storeInfo.user = user; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_FINISH); -} - -/** -* @tc.name: GetInterval -* @tc.desc: Test the Interval transformation logic of the interface -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) -{ - CloudData::SyncManager sync; - - auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); - EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); - ret = sync.GetInterval(E_BUSY); - EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); - ret = sync.GetInterval(E_OK); - EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); -} - -/** -* @tc.name: GetCloudSyncInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) -{ - CloudData::SyncManager sync; - CloudInfo cloud; - cloud.user = cloudInfo_.user; - cloud.enableCloud = false; - CloudData::SyncManager::SyncInfo info(cloudInfo_.user); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - info.bundleName_ = TEST_CLOUD_BUNDLE; - auto ret = sync.GetCloudSyncInfo(info, cloud); - EXPECT_TRUE(!ret.empty()); -} - -/** -* @tc.name: RetryCallback -* @tc.desc: Test the retry logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) -{ - int32_t user = 100; - std::string prepareTraceId; - CloudData::SyncManager sync; - StoreInfo storeInfo; - int32_t retCode = -1; - CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, - int32_t dbCode, const std::string &prepareTraceId) { - retCode = code; - return true; - }; - DistributedData::GenDetails result; - auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert_or_assign("test", detail); - task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - EXPECT_EQ(retCode, detail.code); -} - -/** -* @tc.name: UpdateCloudInfoFromServer -* @tc.desc: Test updating cloudinfo from the server -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) -{ - auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); - EXPECT_EQ(ret, E_OK); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) -{ - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(ret.first, CloudData::SUCCESS); -} - -/** -* @tc.name: UpdateSchemaFromServer_001 -* @tc.desc: Test get UpdateSchemaFromServer -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) -{ - auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); - EXPECT_EQ(status, CloudData::SUCCESS); -} - -/** - * @tc.name: OnAppInstallTest - * @tc.desc: Test the OnAppInstallTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppInstallTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, GeneralError::E_OK); -} - -/** - * @tc.name: OnAppUpdateTest - * @tc.desc: Test the OnAppUpdateTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppUpdateTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: UpdateE2eeEnableTest -* @tc.desc: Test the UpdateE2eeEnable -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) -{ - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - - ASSERT_NE(cloudServiceImpl_, nullptr); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, true); -} - -/** -* @tc.name: SubTask -* @tc.desc: Test the subtask execution logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) -{ - DistributedData::Subscription sub; - cloudServiceImpl_->InitSubTask(sub, 0); - MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); - cloudServiceImpl_->InitSubTask(sub, 0); - int32_t userId = 0; - CloudData::CloudServiceImpl::Task task = [&userId]() { - userId = cloudInfo_.user; - }; - cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); - EXPECT_EQ(userId, cloudInfo_.user); -} - -/** -* @tc.name: ConvertCursor -* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) -{ - std::map entry; - entry.insert_or_assign("test", "entry"); - auto resultSet = std::make_shared(1, entry); - auto cursor = std::make_shared(resultSet); - auto result = cloudServiceImpl_->ConvertCursor(cursor); - EXPECT_TRUE(!result.empty()); - auto resultSet1 = std::make_shared(); - auto cursor1 = std::make_shared(resultSet1); - auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); - EXPECT_TRUE(result1.empty()); -} - -/** -* @tc.name: GetDbInfoFromExtraData -* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) -{ - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.alias = TEST_CLOUD_DATABASE_ALIAS_1; - - SchemaMeta schemaMeta; - schemaMeta.databases.push_back(database); - - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - database.tables.push_back(table); - SchemaMeta::Table table1; - table1.name = "test_cloud_table_name1"; - table1.alias = "test_cloud_table_alias1"; - table1.sharedTableName = "test_share_table_name1"; - database.tables.emplace_back(table1); - - database.alias = TEST_CLOUD_DATABASE_ALIAS_2; - schemaMeta.databases.push_back(database); - - ExtraData extraData; - extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; - auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName = "test_cloud_table_alias2"; - extraData.info.tables.emplace_back(tableName); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName1 = "test_cloud_table_alias1"; - extraData.info.tables.emplace_back(tableName1); - extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); -} - -/** -* @tc.name: QueryTableStatistic -* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) -{ - auto store = std::make_shared(); - if (store != nullptr) { - std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; - store->MakeCursor(entry); - } - auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - if (store != nullptr) { - std::map entry = { { "Test", 1 } }; - store->MakeCursor(entry); - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - - if (store != nullptr) { - store->cursor_ = nullptr; - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetSchemaMeta -* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) -{ - int32_t userId = 101; - int32_t instanceId = 0; - CloudInfo cloudInfo; - cloudInfo.user = userId; - cloudInfo.id = TEST_CLOUD_ID; - cloudInfo.enableCloud = true; - - CloudInfo::AppInfo appInfo; - appInfo.bundleName = TEST_CLOUD_BUNDLE; - appInfo.appId = TEST_CLOUD_APPID; - appInfo.version = 1; - appInfo.cloudSwitch = true; - - cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - std::string bundleName = "testName"; - auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - bundleName = TEST_CLOUD_BUNDLE; - DistributedData::SchemaMeta schemeMeta; - schemeMeta.bundleName = TEST_CLOUD_BUNDLE; - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); -} - -/** -* @tc.name: GetAppSchemaFromServer -* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) -{ - int32_t userId = CloudServerMock::INVALID_USER_ID; - std::string bundleName; - delegate_.isNetworkAvailable_ = false; - auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - userId = 100; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - bundleName = TEST_CLOUD_BUNDLE; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); -} - -/** -* @tc.name: OnAppUninstall -* @tc.desc: Test the OnAppUninstall function delete the subscription data -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) -{ - CloudData::CloudServiceImpl::CloudStatic cloudStatic; - int32_t userId = 1001; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); - MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); - CloudInfo cloudInfo; - cloudInfo.user = userId; - CloudInfo::AppInfo appInfo; - cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - int32_t index = 1; - auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); - EXPECT_EQ(ret, E_OK); - Subscription sub1; - EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); - EXPECT_EQ(sub1.expiresTime.size(), 0); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test the GetCloudInfo with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) -{ - int32_t userId = 1000; - auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - delegate_.isNetworkAvailable_ = false; - std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; -} - -/** -* @tc.name: PreShare -* @tc.desc: Test the PreShare with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) -{ - int32_t userId = 1000; - StoreInfo info; - info.instanceId = 0; - info.bundleName = TEST_CLOUD_BUNDLE; - info.storeName = TEST_CLOUD_BUNDLE; - info.user = userId; - info.path = TEST_CLOUD_PATH; - StoreMetaData meta(info); - meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); - DistributedRdb::RdbQuery query; - auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); - EXPECT_EQ(status, GeneralError::E_ERROR); -} - -/** -* @tc.name: InitSubTask -* @tc.desc: Test the InitSubTask with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) -{ - uint64_t minInterval = 0; - uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms - ExecutorPool::TaskId taskId = 100; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); - cloudServiceImpl_->executor_ = nullptr; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(sub.GetMinExpireTime(), expire); - cloudServiceImpl_->executor_ = std::move(executor); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->expireTime_ = 0; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); -} - -/** -* @tc.name: DoSubscribe -* @tc.desc: Test DoSubscribe functions with invalid parameter. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) -{ - Subscription sub; - sub.userId = cloudInfo_.user; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - int user = cloudInfo_.user; - auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = "testId"; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = TEST_CLOUD_APPID; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); -} - -/** -* @tc.name: Report -* @tc.desc: Test Report. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, Report, TestSize.Level0) -{ - auto cloudReport = std::make_shared(); - auto prepareTraceId = cloudReport->GetPrepareTraceId(100); - EXPECT_EQ(prepareTraceId, ""); - auto requestTraceId = cloudReport->GetRequestTraceId(100); - EXPECT_EQ(requestTraceId, ""); - ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; - auto ret = cloudReport->Report(reportParam); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: IsOn -* @tc.desc: Test IsOn. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - int32_t instanceId = 0; - auto ret = cloudInfo.IsOn("", instanceId); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: IsAllSwitchOff -* @tc.desc: Test IsAllSwitchOff. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - auto ret = cloudInfo.IsAllSwitchOff(); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetMinExpireTime -* @tc.desc: Test GetMinExpireTime. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) -{ - uint64_t expire = 0; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - sub.GetMinExpireTime(); - expire = 24 * 60 * 60 * 1000; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - expire = 24 * 60 * 60; - sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); - EXPECT_EQ(sub.GetMinExpireTime(), expire); -} - - /** -* @tc.name: GetTableNames -* @tc.desc: Test GetTableNames. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) -{ - SchemaMeta::Database database; - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - table.sharedTableName = "test_share_table_name"; - database.tables.emplace_back(table); - auto tableNames = database.GetTableNames(); - EXPECT_EQ(tableNames.size(), 2); -} - -/** -* @tc.name: BlobToAssets -* @tc.desc: cloud_data_translate BlobToAsset error test. -* @tc.type: FUNC -* @tc.require: -* @tc.author: SQL -*/ -HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) -{ - CloudData::RdbCloudDataTranslate rdbTranslate; - DistributedDB::Asset asset = { - .name = "", - .assetId = "", - .subpath = "", - .uri = "", - .modifyTime = "", - .createTime = "", - .size = "", - .hash = "" - }; - std::vector blob; - auto result = rdbTranslate.BlobToAsset(blob); - EXPECT_EQ(result, asset); - - DistributedDB::Assets assets; - blob = rdbTranslate.AssetsToBlob(assets); - auto results = rdbTranslate.BlobToAssets(blob); - EXPECT_EQ(results, assets); -} - -/** -* @tc.name: GetPriorityLevel001 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel002 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel003 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel004 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, - .seqNum = 0, - .isAsync = true, - .isAutoSync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: UpdateSchemaFromHap001 -* @tc.desc: Test the UpdateSchemaFromHap with invalid user -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap002 -* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap003 -* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, schemaMeta_.version); -} - -/** -* @tc.name: UpdateSchemaFromHap004 -* @tc.desc: Test the UpdateSchemaFromHap with valid parameter -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudInfo::AppInfo exampleAppInfo; - exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.version = 1; - exampleAppInfo.cloudSwitch = true; - CloudInfo cloudInfo; - MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); - cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); -} - -/** -* @tc.name: UpdateClearWaterMark001 -* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE_1; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark002 -* @tc.desc: Test UpdateClearWaterMark002 the same database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 1; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark003 -* @tc.desc: Test UpdateClearWaterMark003 the different database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); - EXPECT_TRUE(metaData.isClearWaterMark); - MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); -} - -/** -* @tc.name: GetPrepareTraceId -* @tc.desc: Test GetPrepareTraceId && GetUser -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) -{ - SyncParam syncParam; - syncParam.prepareTraceId = TEST_TRACE_ID; - syncParam.user = EVT_USER; - auto async = [](const GenDetails &details) {}; - SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); - StoreInfo storeInfo; - SyncEvent evt(storeInfo, std::move(eventInfo)); - EXPECT_EQ(evt.GetUser(), EVT_USER); - EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); -} - -/** -* @tc.name: TryUpdateDeviceId001 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId002 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId003 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId004 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: OnInitialize -* @tc.desc: OnInitialize test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) -{ - auto code = cloudServiceImpl_->OnInitialize(); - EXPECT_EQ(code, E_OK); -} - -/** -* @tc.name: CleanWaterVersion -* @tc.desc: CleanWaterVersion test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) -{ - auto ret = cloudServiceImpl_->CleanWaterVersion(200); - EXPECT_FALSE(ret); - ret = cloudServiceImpl_->CleanWaterVersion( - AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: ConvertGenDetailsCode -* @tc.desc: Test ConvertGenDetailsCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) -{ - DistributedData::GenDetails result; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert(std::make_pair("test", detail)); - auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result1; - GenProgressDetail detail1; - detail1.progress = GenProgress::SYNC_IN_PROGRESS; - detail1.code = E_ERROR; - result1.insert(std::make_pair("test", detail1)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result1); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result2; - GenProgressDetail detail2; - detail2.progress = GenProgress::SYNC_IN_PROGRESS; - detail2.code = E_OK; - result2.insert(std::make_pair("test", detail2)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result2); - EXPECT_TRUE(details["test"].code == E_OK); - - DistributedData::GenDetails result3; - GenProgressDetail detail3; - detail3.progress = GenProgress::SYNC_IN_PROGRESS; - detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; - result3.insert(std::make_pair("test", detail3)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result3); - EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); - - DistributedData::GenDetails result4; - GenProgressDetail detail4; - detail4.progress = GenProgress::SYNC_IN_PROGRESS; - detail4.code = E_BUSY; - result4.insert(std::make_pair("test", detail4)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result4); - EXPECT_TRUE(details["test"].code == E_ERROR); -} - -/** -* @tc.name: ConvertValidGeneralCode -* @tc.desc: Test ConvertValidGeneralCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) -{ - auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); - EXPECT_TRUE(ret == E_OK); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); - EXPECT_TRUE(ret == E_NETWORK_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); - EXPECT_TRUE(ret == E_CLOUD_DISABLED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); - EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); - EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); - EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); - EXPECT_TRUE(ret == E_ERROR); -} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From cfbef9ee149081eaa4ec12018aca394ca383fdbe Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:14:32 +0800 Subject: [PATCH 08/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1768 +++++++++++++++++ 1 file changed, 1768 insertions(+) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 929d59087..40d393946 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1383,5 +1383,1773 @@ HWTEST_F(CloudDataTest, DisableCloud001, TestSize.Level0) ret = cloudServiceImpl_->DisableCloud(TEST_CLOUD_ID); EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); } + +/** +* @tc.name: ChangeAppSwitch +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ChangeAppSwitch, TestSize.Level0) +{ + std::string id = "testId"; + std::string bundleName = "testName"; + auto ret = cloudServiceImpl_->ChangeAppSwitch(id, bundleName, CloudData::CloudService::SWITCH_ON); + EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); + ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, bundleName, CloudData::CloudService::SWITCH_ON); + EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); + ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_OFF); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: EnableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, EnableCloud, TestSize.Level0) +{ + std::string bundleName = "testName"; + std::map switches; + switches.insert_or_assign(TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_ON); + switches.insert_or_assign(bundleName, CloudData::CloudService::SWITCH_ON); + auto ret = cloudServiceImpl_->EnableCloud(TEST_CLOUD_ID, switches); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: OnEnableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnEnableCloud, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string id = "testId"; + std::map switches; + ITypesUtil::Marshal(data, id, switches); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnDisableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnDisableCloud, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeAppSwitch +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeAppSwitch, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteInt32(CloudData::CloudService::SWITCH_ON); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnClean +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnClean, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string id = TEST_CLOUD_ID; + std::map actions; + ITypesUtil::Marshal(data, id, actions); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnNotifyDataChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnNotifyDataChange, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnNotifyChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnNotifyChange, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + int32_t userId = 100; + data.WriteInt32(userId); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryStatistics +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryStatistics, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteString(TEST_CLOUD_STORE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryLastSyncInfo +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteString(TEST_CLOUD_STORE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetGlobalCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = + cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnAllocResourceAndShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest( + CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string storeId = "storeId"; + DistributedRdb::PredicatesMemo predicates; + std::vector columns; + std::vector participants; + ITypesUtil::Marshal(data, storeId, predicates, columns, participants); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnUnshare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnExit +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangePrivilege +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQuery +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, sharingRes, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryByInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, invitation, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnConfirmInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + int32_t confirmation = 0; + std::tuple result; + ITypesUtil::Marshal(data, invitation, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeConfirmation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + int32_t confirmation = 0; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnCloudSync +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + std::string storeId = "storeId"; + CloudData::CloudService::Option option; + option.syncMode = 4; + option.seqNum = 1; + ITypesUtil::Marshal(data, bundleName, storeId, option); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnInitNotifier +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + sptr notifier = nullptr; + ITypesUtil::Marshal(data, bundleName, notifier); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); +} + +/** +* @tc.name: SharingUtil001 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); + EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); + EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); + EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil002 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); + EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); + EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); + EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil003 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); + EXPECT_EQ(status, Status::IPC_ERROR); + status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); + EXPECT_EQ(status, Status::SUCCESS); +} + +/** +* @tc.name: SharingUtil004 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); + EXPECT_EQ(status, Status::SUCCESS); + status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); + EXPECT_EQ(status, Status::ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); + EXPECT_EQ(status, Status::INVALID_ARGUMENT); + status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_EQ(status, Status::STRATEGY_BLOCKING); + status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); + EXPECT_EQ(status, Status::CLOUD_DISABLE); + status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); + EXPECT_EQ(status, Status::NETWORK_ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); + EXPECT_EQ(status, Status::ERROR); +} + +/** +* @tc.name: DoCloudSync +* @tc.desc: Test the executor_ uninitialized and initialized scenarios +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager sync; + CloudData::SyncManager::SyncInfo info(user); + auto ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + size_t max = 12; + size_t min = 5; + sync.executor_ = std::make_shared(max, min); + ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_OK); + int32_t invalidUser = -1; + sync.StopCloudSync(invalidUser); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_OK); +} + +/** +* @tc.name: GetPostEventTask +* @tc.desc: Test the interface to verify the package name and table name +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) +{ + std::vector schemas; + schemaMeta_.databases[0].name = "test"; + schemas.push_back(schemaMeta_); + schemaMeta_.bundleName = "test"; + schemas.push_back(schemaMeta_); + + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + std::vector value; + info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); + + CloudData::SyncManager sync; + std::map traceIds; + auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); + task(); + std::vector lastSyncInfos; + MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); + EXPECT_TRUE(lastSyncInfos.size() == 0); +} + +/** +* @tc.name: GetRetryer +* @tc.desc: Test the input parameters of different interfaces +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + CloudData::SyncManager::Duration duration; + std::string prepareTraceId; + auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( + duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: GetCallback +* @tc.desc: Test the processing logic of different progress callbacks +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + DistributedData::GenDetails result; + StoreInfo storeInfo; + storeInfo.user = user; + storeInfo.bundleName = "testBundleName"; + int32_t triggerMode = MODE_DEFAULT; + std::string prepareTraceId; + GenAsync async = nullptr; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + int32_t process = 0; + async = [&process](const GenDetails &details) { + process = details.begin()->second.progress; + }; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + result.insert_or_assign("test", detail); + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); + detail.progress = GenProgress::SYNC_FINISH; + result.insert_or_assign("test", detail); + storeInfo.user = -1; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + storeInfo.user = user; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_FINISH); +} + +/** +* @tc.name: GetInterval +* @tc.desc: Test the Interval transformation logic of the interface +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) +{ + CloudData::SyncManager sync; + + auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); + EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); + ret = sync.GetInterval(E_BUSY); + EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); + ret = sync.GetInterval(E_OK); + EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); +} + +/** +* @tc.name: GetCloudSyncInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) +{ + CloudData::SyncManager sync; + CloudInfo cloud; + cloud.user = cloudInfo_.user; + cloud.enableCloud = false; + CloudData::SyncManager::SyncInfo info(cloudInfo_.user); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + info.bundleName_ = TEST_CLOUD_BUNDLE; + auto ret = sync.GetCloudSyncInfo(info, cloud); + EXPECT_TRUE(!ret.empty()); +} + +/** +* @tc.name: RetryCallback +* @tc.desc: Test the retry logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) +{ + int32_t user = 100; + std::string prepareTraceId; + CloudData::SyncManager sync; + StoreInfo storeInfo; + int32_t retCode = -1; + CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, + int32_t dbCode, const std::string &prepareTraceId) { + retCode = code; + return true; + }; + DistributedData::GenDetails result; + auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert_or_assign("test", detail); + task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + EXPECT_EQ(retCode, detail.code); +} + +/** +* @tc.name: UpdateCloudInfoFromServer +* @tc.desc: Test updating cloudinfo from the server +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) +{ + auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); + EXPECT_EQ(ret, E_OK); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) +{ + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(ret.first, CloudData::SUCCESS); +} + +/** +* @tc.name: UpdateSchemaFromServer_001 +* @tc.desc: Test get UpdateSchemaFromServer +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) +{ + auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); + EXPECT_EQ(status, CloudData::SUCCESS); +} + +/** + * @tc.name: OnAppInstallTest + * @tc.desc: Test the OnAppInstallTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppInstallTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, GeneralError::E_OK); +} + +/** + * @tc.name: OnAppUpdateTest + * @tc.desc: Test the OnAppUpdateTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppUpdateTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: UpdateE2eeEnableTest +* @tc.desc: Test the UpdateE2eeEnable +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) +{ + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + + ASSERT_NE(cloudServiceImpl_, nullptr); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, true); +} + +/** +* @tc.name: SubTask +* @tc.desc: Test the subtask execution logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) +{ + DistributedData::Subscription sub; + cloudServiceImpl_->InitSubTask(sub, 0); + MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); + cloudServiceImpl_->InitSubTask(sub, 0); + int32_t userId = 0; + CloudData::CloudServiceImpl::Task task = [&userId]() { + userId = cloudInfo_.user; + }; + cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); + EXPECT_EQ(userId, cloudInfo_.user); +} + +/** +* @tc.name: ConvertCursor +* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) +{ + std::map entry; + entry.insert_or_assign("test", "entry"); + auto resultSet = std::make_shared(1, entry); + auto cursor = std::make_shared(resultSet); + auto result = cloudServiceImpl_->ConvertCursor(cursor); + EXPECT_TRUE(!result.empty()); + auto resultSet1 = std::make_shared(); + auto cursor1 = std::make_shared(resultSet1); + auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); + EXPECT_TRUE(result1.empty()); +} + +/** +* @tc.name: GetDbInfoFromExtraData +* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) +{ + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.alias = TEST_CLOUD_DATABASE_ALIAS_1; + + SchemaMeta schemaMeta; + schemaMeta.databases.push_back(database); + + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + database.tables.push_back(table); + SchemaMeta::Table table1; + table1.name = "test_cloud_table_name1"; + table1.alias = "test_cloud_table_alias1"; + table1.sharedTableName = "test_share_table_name1"; + database.tables.emplace_back(table1); + + database.alias = TEST_CLOUD_DATABASE_ALIAS_2; + schemaMeta.databases.push_back(database); + + ExtraData extraData; + extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; + auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName = "test_cloud_table_alias2"; + extraData.info.tables.emplace_back(tableName); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName1 = "test_cloud_table_alias1"; + extraData.info.tables.emplace_back(tableName1); + extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); +} + +/** +* @tc.name: QueryTableStatistic +* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) +{ + auto store = std::make_shared(); + if (store != nullptr) { + std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; + store->MakeCursor(entry); + } + auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + if (store != nullptr) { + std::map entry = { { "Test", 1 } }; + store->MakeCursor(entry); + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + + if (store != nullptr) { + store->cursor_ = nullptr; + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetSchemaMeta +* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) +{ + int32_t userId = 101; + int32_t instanceId = 0; + CloudInfo cloudInfo; + cloudInfo.user = userId; + cloudInfo.id = TEST_CLOUD_ID; + cloudInfo.enableCloud = true; + + CloudInfo::AppInfo appInfo; + appInfo.bundleName = TEST_CLOUD_BUNDLE; + appInfo.appId = TEST_CLOUD_APPID; + appInfo.version = 1; + appInfo.cloudSwitch = true; + + cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + std::string bundleName = "testName"; + auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + bundleName = TEST_CLOUD_BUNDLE; + DistributedData::SchemaMeta schemeMeta; + schemeMeta.bundleName = TEST_CLOUD_BUNDLE; + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); +} + +/** +* @tc.name: GetAppSchemaFromServer +* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) +{ + int32_t userId = CloudServerMock::INVALID_USER_ID; + std::string bundleName; + delegate_.isNetworkAvailable_ = false; + auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + userId = 100; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + bundleName = TEST_CLOUD_BUNDLE; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); +} + +/** +* @tc.name: OnAppUninstall +* @tc.desc: Test the OnAppUninstall function delete the subscription data +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) +{ + CloudData::CloudServiceImpl::CloudStatic cloudStatic; + int32_t userId = 1001; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); + MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); + CloudInfo cloudInfo; + cloudInfo.user = userId; + CloudInfo::AppInfo appInfo; + cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + int32_t index = 1; + auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); + EXPECT_EQ(ret, E_OK); + Subscription sub1; + EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); + EXPECT_EQ(sub1.expiresTime.size(), 0); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test the GetCloudInfo with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) +{ + int32_t userId = 1000; + auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + delegate_.isNetworkAvailable_ = false; + std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; +} + +/** +* @tc.name: PreShare +* @tc.desc: Test the PreShare with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) +{ + int32_t userId = 1000; + StoreInfo info; + info.instanceId = 0; + info.bundleName = TEST_CLOUD_BUNDLE; + info.storeName = TEST_CLOUD_BUNDLE; + info.user = userId; + info.path = TEST_CLOUD_PATH; + StoreMetaData meta(info); + meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); + DistributedRdb::RdbQuery query; + auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); + EXPECT_EQ(status, GeneralError::E_ERROR); +} + +/** +* @tc.name: InitSubTask +* @tc.desc: Test the InitSubTask with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) +{ + uint64_t minInterval = 0; + uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms + ExecutorPool::TaskId taskId = 100; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); + cloudServiceImpl_->executor_ = nullptr; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(sub.GetMinExpireTime(), expire); + cloudServiceImpl_->executor_ = std::move(executor); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->expireTime_ = 0; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); +} + +/** +* @tc.name: DoSubscribe +* @tc.desc: Test DoSubscribe functions with invalid parameter. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) +{ + Subscription sub; + sub.userId = cloudInfo_.user; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + int user = cloudInfo_.user; + auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = "testId"; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = TEST_CLOUD_APPID; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); +} + +/** +* @tc.name: Report +* @tc.desc: Test Report. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, Report, TestSize.Level0) +{ + auto cloudReport = std::make_shared(); + auto prepareTraceId = cloudReport->GetPrepareTraceId(100); + EXPECT_EQ(prepareTraceId, ""); + auto requestTraceId = cloudReport->GetRequestTraceId(100); + EXPECT_EQ(requestTraceId, ""); + ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; + auto ret = cloudReport->Report(reportParam); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: IsOn +* @tc.desc: Test IsOn. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + int32_t instanceId = 0; + auto ret = cloudInfo.IsOn("", instanceId); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: IsAllSwitchOff +* @tc.desc: Test IsAllSwitchOff. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + auto ret = cloudInfo.IsAllSwitchOff(); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetMinExpireTime +* @tc.desc: Test GetMinExpireTime. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) +{ + uint64_t expire = 0; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + sub.GetMinExpireTime(); + expire = 24 * 60 * 60 * 1000; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + expire = 24 * 60 * 60; + sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); + EXPECT_EQ(sub.GetMinExpireTime(), expire); +} + + /** +* @tc.name: GetTableNames +* @tc.desc: Test GetTableNames. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) +{ + SchemaMeta::Database database; + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + table.sharedTableName = "test_share_table_name"; + database.tables.emplace_back(table); + auto tableNames = database.GetTableNames(); + EXPECT_EQ(tableNames.size(), 2); +} + +/** +* @tc.name: BlobToAssets +* @tc.desc: cloud_data_translate BlobToAsset error test. +* @tc.type: FUNC +* @tc.require: +* @tc.author: SQL +*/ +HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) +{ + CloudData::RdbCloudDataTranslate rdbTranslate; + DistributedDB::Asset asset = { + .name = "", + .assetId = "", + .subpath = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "" + }; + std::vector blob; + auto result = rdbTranslate.BlobToAsset(blob); + EXPECT_EQ(result, asset); + + DistributedDB::Assets assets; + blob = rdbTranslate.AssetsToBlob(assets); + auto results = rdbTranslate.BlobToAssets(blob); + EXPECT_EQ(results, assets); +} + +/** +* @tc.name: GetPriorityLevel001 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel002 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel003 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel004 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, + .seqNum = 0, + .isAsync = true, + .isAutoSync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: UpdateSchemaFromHap001 +* @tc.desc: Test the UpdateSchemaFromHap with invalid user +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap002 +* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap003 +* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, schemaMeta_.version); +} + +/** +* @tc.name: UpdateSchemaFromHap004 +* @tc.desc: Test the UpdateSchemaFromHap with valid parameter +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudInfo::AppInfo exampleAppInfo; + exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.version = 1; + exampleAppInfo.cloudSwitch = true; + CloudInfo cloudInfo; + MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); + cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); +} + +/** +* @tc.name: UpdateClearWaterMark001 +* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE_1; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark002 +* @tc.desc: Test UpdateClearWaterMark002 the same database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 1; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark003 +* @tc.desc: Test UpdateClearWaterMark003 the different database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); + EXPECT_TRUE(metaData.isClearWaterMark); + MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); +} + +/** +* @tc.name: GetPrepareTraceId +* @tc.desc: Test GetPrepareTraceId && GetUser +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) +{ + SyncParam syncParam; + syncParam.prepareTraceId = TEST_TRACE_ID; + syncParam.user = EVT_USER; + auto async = [](const GenDetails &details) {}; + SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); + StoreInfo storeInfo; + SyncEvent evt(storeInfo, std::move(eventInfo)); + EXPECT_EQ(evt.GetUser(), EVT_USER); + EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); +} + +/** +* @tc.name: TryUpdateDeviceId001 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId002 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId003 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId004 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: OnInitialize +* @tc.desc: OnInitialize test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) +{ + auto code = cloudServiceImpl_->OnInitialize(); + EXPECT_EQ(code, E_OK); +} + +/** +* @tc.name: CleanWaterVersion +* @tc.desc: CleanWaterVersion test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) +{ + auto ret = cloudServiceImpl_->CleanWaterVersion(200); + EXPECT_FALSE(ret); + ret = cloudServiceImpl_->CleanWaterVersion( + AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: ConvertGenDetailsCode +* @tc.desc: Test ConvertGenDetailsCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) +{ + DistributedData::GenDetails result; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert(std::make_pair("test", detail)); + auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result1; + GenProgressDetail detail1; + detail1.progress = GenProgress::SYNC_IN_PROGRESS; + detail1.code = E_ERROR; + result1.insert(std::make_pair("test", detail1)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result1); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result2; + GenProgressDetail detail2; + detail2.progress = GenProgress::SYNC_IN_PROGRESS; + detail2.code = E_OK; + result2.insert(std::make_pair("test", detail2)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result2); + EXPECT_TRUE(details["test"].code == E_OK); + + DistributedData::GenDetails result3; + GenProgressDetail detail3; + detail3.progress = GenProgress::SYNC_IN_PROGRESS; + detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; + result3.insert(std::make_pair("test", detail3)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result3); + EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); + + DistributedData::GenDetails result4; + GenProgressDetail detail4; + detail4.progress = GenProgress::SYNC_IN_PROGRESS; + detail4.code = E_BUSY; + result4.insert(std::make_pair("test", detail4)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result4); + EXPECT_TRUE(details["test"].code == E_ERROR); +} + +/** +* @tc.name: ConvertValidGeneralCode +* @tc.desc: Test ConvertValidGeneralCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) +{ + auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); + EXPECT_TRUE(ret == E_OK); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); + EXPECT_TRUE(ret == E_NETWORK_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); + EXPECT_TRUE(ret == E_CLOUD_DISABLED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); + EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); + EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); + EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); + EXPECT_TRUE(ret == E_ERROR); +} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From ddeb8c3d5ddc36842dabd9ea87f96cc4b897845f Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:15:44 +0800 Subject: [PATCH 09/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1227 ----------------- 1 file changed, 1227 deletions(-) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 40d393946..67fba0638 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1584,1233 +1584,6 @@ HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) EXPECT_EQ(ret, ERR_NONE); } -/** -* @tc.name: OnSetGlobalCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = - cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnAllocResourceAndShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest( - CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string storeId = "storeId"; - DistributedRdb::PredicatesMemo predicates; - std::vector columns; - std::vector participants; - ITypesUtil::Marshal(data, storeId, predicates, columns, participants); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnUnshare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnExit -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangePrivilege -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQuery -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, sharingRes, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryByInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, invitation, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnConfirmInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - int32_t confirmation = 0; - std::tuple result; - ITypesUtil::Marshal(data, invitation, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeConfirmation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - int32_t confirmation = 0; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnCloudSync -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - std::string storeId = "storeId"; - CloudData::CloudService::Option option; - option.syncMode = 4; - option.seqNum = 1; - ITypesUtil::Marshal(data, bundleName, storeId, option); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnInitNotifier -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - sptr notifier = nullptr; - ITypesUtil::Marshal(data, bundleName, notifier); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); -} - -/** -* @tc.name: SharingUtil001 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); - EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); - EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); - EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil002 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); - EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); - EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); - EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil003 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); - EXPECT_EQ(status, Status::IPC_ERROR); - status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); - EXPECT_EQ(status, Status::SUCCESS); -} - -/** -* @tc.name: SharingUtil004 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); - EXPECT_EQ(status, Status::SUCCESS); - status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); - EXPECT_EQ(status, Status::ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); - EXPECT_EQ(status, Status::INVALID_ARGUMENT); - status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_EQ(status, Status::STRATEGY_BLOCKING); - status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); - EXPECT_EQ(status, Status::CLOUD_DISABLE); - status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); - EXPECT_EQ(status, Status::NETWORK_ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); - EXPECT_EQ(status, Status::ERROR); -} - -/** -* @tc.name: DoCloudSync -* @tc.desc: Test the executor_ uninitialized and initialized scenarios -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager sync; - CloudData::SyncManager::SyncInfo info(user); - auto ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - size_t max = 12; - size_t min = 5; - sync.executor_ = std::make_shared(max, min); - ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_OK); - int32_t invalidUser = -1; - sync.StopCloudSync(invalidUser); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_OK); -} - -/** -* @tc.name: GetPostEventTask -* @tc.desc: Test the interface to verify the package name and table name -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) -{ - std::vector schemas; - schemaMeta_.databases[0].name = "test"; - schemas.push_back(schemaMeta_); - schemaMeta_.bundleName = "test"; - schemas.push_back(schemaMeta_); - - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - std::vector value; - info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); - - CloudData::SyncManager sync; - std::map traceIds; - auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); - task(); - std::vector lastSyncInfos; - MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); - EXPECT_TRUE(lastSyncInfos.size() == 0); -} - -/** -* @tc.name: GetRetryer -* @tc.desc: Test the input parameters of different interfaces -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - CloudData::SyncManager::Duration duration; - std::string prepareTraceId; - auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( - duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: GetCallback -* @tc.desc: Test the processing logic of different progress callbacks -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - DistributedData::GenDetails result; - StoreInfo storeInfo; - storeInfo.user = user; - storeInfo.bundleName = "testBundleName"; - int32_t triggerMode = MODE_DEFAULT; - std::string prepareTraceId; - GenAsync async = nullptr; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - int32_t process = 0; - async = [&process](const GenDetails &details) { - process = details.begin()->second.progress; - }; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - result.insert_or_assign("test", detail); - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); - detail.progress = GenProgress::SYNC_FINISH; - result.insert_or_assign("test", detail); - storeInfo.user = -1; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - storeInfo.user = user; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_FINISH); -} - -/** -* @tc.name: GetInterval -* @tc.desc: Test the Interval transformation logic of the interface -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) -{ - CloudData::SyncManager sync; - - auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); - EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); - ret = sync.GetInterval(E_BUSY); - EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); - ret = sync.GetInterval(E_OK); - EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); -} - -/** -* @tc.name: GetCloudSyncInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) -{ - CloudData::SyncManager sync; - CloudInfo cloud; - cloud.user = cloudInfo_.user; - cloud.enableCloud = false; - CloudData::SyncManager::SyncInfo info(cloudInfo_.user); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - info.bundleName_ = TEST_CLOUD_BUNDLE; - auto ret = sync.GetCloudSyncInfo(info, cloud); - EXPECT_TRUE(!ret.empty()); -} - -/** -* @tc.name: RetryCallback -* @tc.desc: Test the retry logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) -{ - int32_t user = 100; - std::string prepareTraceId; - CloudData::SyncManager sync; - StoreInfo storeInfo; - int32_t retCode = -1; - CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, - int32_t dbCode, const std::string &prepareTraceId) { - retCode = code; - return true; - }; - DistributedData::GenDetails result; - auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert_or_assign("test", detail); - task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - EXPECT_EQ(retCode, detail.code); -} - -/** -* @tc.name: UpdateCloudInfoFromServer -* @tc.desc: Test updating cloudinfo from the server -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) -{ - auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); - EXPECT_EQ(ret, E_OK); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) -{ - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(ret.first, CloudData::SUCCESS); -} - -/** -* @tc.name: UpdateSchemaFromServer_001 -* @tc.desc: Test get UpdateSchemaFromServer -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) -{ - auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); - EXPECT_EQ(status, CloudData::SUCCESS); -} - -/** - * @tc.name: OnAppInstallTest - * @tc.desc: Test the OnAppInstallTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppInstallTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, GeneralError::E_OK); -} - -/** - * @tc.name: OnAppUpdateTest - * @tc.desc: Test the OnAppUpdateTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppUpdateTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: UpdateE2eeEnableTest -* @tc.desc: Test the UpdateE2eeEnable -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) -{ - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - - ASSERT_NE(cloudServiceImpl_, nullptr); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, true); -} - -/** -* @tc.name: SubTask -* @tc.desc: Test the subtask execution logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) -{ - DistributedData::Subscription sub; - cloudServiceImpl_->InitSubTask(sub, 0); - MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); - cloudServiceImpl_->InitSubTask(sub, 0); - int32_t userId = 0; - CloudData::CloudServiceImpl::Task task = [&userId]() { - userId = cloudInfo_.user; - }; - cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); - EXPECT_EQ(userId, cloudInfo_.user); -} - -/** -* @tc.name: ConvertCursor -* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) -{ - std::map entry; - entry.insert_or_assign("test", "entry"); - auto resultSet = std::make_shared(1, entry); - auto cursor = std::make_shared(resultSet); - auto result = cloudServiceImpl_->ConvertCursor(cursor); - EXPECT_TRUE(!result.empty()); - auto resultSet1 = std::make_shared(); - auto cursor1 = std::make_shared(resultSet1); - auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); - EXPECT_TRUE(result1.empty()); -} - -/** -* @tc.name: GetDbInfoFromExtraData -* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) -{ - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.alias = TEST_CLOUD_DATABASE_ALIAS_1; - - SchemaMeta schemaMeta; - schemaMeta.databases.push_back(database); - - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - database.tables.push_back(table); - SchemaMeta::Table table1; - table1.name = "test_cloud_table_name1"; - table1.alias = "test_cloud_table_alias1"; - table1.sharedTableName = "test_share_table_name1"; - database.tables.emplace_back(table1); - - database.alias = TEST_CLOUD_DATABASE_ALIAS_2; - schemaMeta.databases.push_back(database); - - ExtraData extraData; - extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; - auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName = "test_cloud_table_alias2"; - extraData.info.tables.emplace_back(tableName); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName1 = "test_cloud_table_alias1"; - extraData.info.tables.emplace_back(tableName1); - extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); -} - -/** -* @tc.name: QueryTableStatistic -* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) -{ - auto store = std::make_shared(); - if (store != nullptr) { - std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; - store->MakeCursor(entry); - } - auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - if (store != nullptr) { - std::map entry = { { "Test", 1 } }; - store->MakeCursor(entry); - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - - if (store != nullptr) { - store->cursor_ = nullptr; - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetSchemaMeta -* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) -{ - int32_t userId = 101; - int32_t instanceId = 0; - CloudInfo cloudInfo; - cloudInfo.user = userId; - cloudInfo.id = TEST_CLOUD_ID; - cloudInfo.enableCloud = true; - - CloudInfo::AppInfo appInfo; - appInfo.bundleName = TEST_CLOUD_BUNDLE; - appInfo.appId = TEST_CLOUD_APPID; - appInfo.version = 1; - appInfo.cloudSwitch = true; - - cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - std::string bundleName = "testName"; - auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - bundleName = TEST_CLOUD_BUNDLE; - DistributedData::SchemaMeta schemeMeta; - schemeMeta.bundleName = TEST_CLOUD_BUNDLE; - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); -} - -/** -* @tc.name: GetAppSchemaFromServer -* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) -{ - int32_t userId = CloudServerMock::INVALID_USER_ID; - std::string bundleName; - delegate_.isNetworkAvailable_ = false; - auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - userId = 100; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - bundleName = TEST_CLOUD_BUNDLE; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); -} - -/** -* @tc.name: OnAppUninstall -* @tc.desc: Test the OnAppUninstall function delete the subscription data -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) -{ - CloudData::CloudServiceImpl::CloudStatic cloudStatic; - int32_t userId = 1001; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); - MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); - CloudInfo cloudInfo; - cloudInfo.user = userId; - CloudInfo::AppInfo appInfo; - cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - int32_t index = 1; - auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); - EXPECT_EQ(ret, E_OK); - Subscription sub1; - EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); - EXPECT_EQ(sub1.expiresTime.size(), 0); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test the GetCloudInfo with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) -{ - int32_t userId = 1000; - auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - delegate_.isNetworkAvailable_ = false; - std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; -} - -/** -* @tc.name: PreShare -* @tc.desc: Test the PreShare with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) -{ - int32_t userId = 1000; - StoreInfo info; - info.instanceId = 0; - info.bundleName = TEST_CLOUD_BUNDLE; - info.storeName = TEST_CLOUD_BUNDLE; - info.user = userId; - info.path = TEST_CLOUD_PATH; - StoreMetaData meta(info); - meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); - DistributedRdb::RdbQuery query; - auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); - EXPECT_EQ(status, GeneralError::E_ERROR); -} - -/** -* @tc.name: InitSubTask -* @tc.desc: Test the InitSubTask with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) -{ - uint64_t minInterval = 0; - uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms - ExecutorPool::TaskId taskId = 100; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); - cloudServiceImpl_->executor_ = nullptr; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(sub.GetMinExpireTime(), expire); - cloudServiceImpl_->executor_ = std::move(executor); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->expireTime_ = 0; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); -} - -/** -* @tc.name: DoSubscribe -* @tc.desc: Test DoSubscribe functions with invalid parameter. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) -{ - Subscription sub; - sub.userId = cloudInfo_.user; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - int user = cloudInfo_.user; - auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = "testId"; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = TEST_CLOUD_APPID; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); -} - -/** -* @tc.name: Report -* @tc.desc: Test Report. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, Report, TestSize.Level0) -{ - auto cloudReport = std::make_shared(); - auto prepareTraceId = cloudReport->GetPrepareTraceId(100); - EXPECT_EQ(prepareTraceId, ""); - auto requestTraceId = cloudReport->GetRequestTraceId(100); - EXPECT_EQ(requestTraceId, ""); - ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; - auto ret = cloudReport->Report(reportParam); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: IsOn -* @tc.desc: Test IsOn. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - int32_t instanceId = 0; - auto ret = cloudInfo.IsOn("", instanceId); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: IsAllSwitchOff -* @tc.desc: Test IsAllSwitchOff. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - auto ret = cloudInfo.IsAllSwitchOff(); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetMinExpireTime -* @tc.desc: Test GetMinExpireTime. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) -{ - uint64_t expire = 0; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - sub.GetMinExpireTime(); - expire = 24 * 60 * 60 * 1000; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - expire = 24 * 60 * 60; - sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); - EXPECT_EQ(sub.GetMinExpireTime(), expire); -} - - /** -* @tc.name: GetTableNames -* @tc.desc: Test GetTableNames. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) -{ - SchemaMeta::Database database; - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - table.sharedTableName = "test_share_table_name"; - database.tables.emplace_back(table); - auto tableNames = database.GetTableNames(); - EXPECT_EQ(tableNames.size(), 2); -} - -/** -* @tc.name: BlobToAssets -* @tc.desc: cloud_data_translate BlobToAsset error test. -* @tc.type: FUNC -* @tc.require: -* @tc.author: SQL -*/ -HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) -{ - CloudData::RdbCloudDataTranslate rdbTranslate; - DistributedDB::Asset asset = { - .name = "", - .assetId = "", - .subpath = "", - .uri = "", - .modifyTime = "", - .createTime = "", - .size = "", - .hash = "" - }; - std::vector blob; - auto result = rdbTranslate.BlobToAsset(blob); - EXPECT_EQ(result, asset); - - DistributedDB::Assets assets; - blob = rdbTranslate.AssetsToBlob(assets); - auto results = rdbTranslate.BlobToAssets(blob); - EXPECT_EQ(results, assets); -} - -/** -* @tc.name: GetPriorityLevel001 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel002 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel003 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel004 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, - .seqNum = 0, - .isAsync = true, - .isAutoSync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: UpdateSchemaFromHap001 -* @tc.desc: Test the UpdateSchemaFromHap with invalid user -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap002 -* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap003 -* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, schemaMeta_.version); -} - -/** -* @tc.name: UpdateSchemaFromHap004 -* @tc.desc: Test the UpdateSchemaFromHap with valid parameter -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudInfo::AppInfo exampleAppInfo; - exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.version = 1; - exampleAppInfo.cloudSwitch = true; - CloudInfo cloudInfo; - MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); - cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); -} - /** * @tc.name: UpdateClearWaterMark001 * @tc.desc: Test UpdateClearWaterMark001 the database.version not found. -- Gitee From 691b9c240826173f2c665ca75ad1dc1e90783076 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:16:10 +0800 Subject: [PATCH 10/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1227 +++++++++++++++++ 1 file changed, 1227 insertions(+) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 67fba0638..40d393946 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1584,6 +1584,1233 @@ HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) EXPECT_EQ(ret, ERR_NONE); } +/** +* @tc.name: OnSetGlobalCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = + cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnAllocResourceAndShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest( + CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string storeId = "storeId"; + DistributedRdb::PredicatesMemo predicates; + std::vector columns; + std::vector participants; + ITypesUtil::Marshal(data, storeId, predicates, columns, participants); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnUnshare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnExit +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangePrivilege +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQuery +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, sharingRes, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryByInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, invitation, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnConfirmInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + int32_t confirmation = 0; + std::tuple result; + ITypesUtil::Marshal(data, invitation, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeConfirmation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + int32_t confirmation = 0; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnCloudSync +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + std::string storeId = "storeId"; + CloudData::CloudService::Option option; + option.syncMode = 4; + option.seqNum = 1; + ITypesUtil::Marshal(data, bundleName, storeId, option); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnInitNotifier +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + sptr notifier = nullptr; + ITypesUtil::Marshal(data, bundleName, notifier); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); +} + +/** +* @tc.name: SharingUtil001 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); + EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); + EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); + EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil002 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); + EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); + EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); + EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil003 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); + EXPECT_EQ(status, Status::IPC_ERROR); + status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); + EXPECT_EQ(status, Status::SUCCESS); +} + +/** +* @tc.name: SharingUtil004 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); + EXPECT_EQ(status, Status::SUCCESS); + status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); + EXPECT_EQ(status, Status::ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); + EXPECT_EQ(status, Status::INVALID_ARGUMENT); + status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_EQ(status, Status::STRATEGY_BLOCKING); + status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); + EXPECT_EQ(status, Status::CLOUD_DISABLE); + status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); + EXPECT_EQ(status, Status::NETWORK_ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); + EXPECT_EQ(status, Status::ERROR); +} + +/** +* @tc.name: DoCloudSync +* @tc.desc: Test the executor_ uninitialized and initialized scenarios +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager sync; + CloudData::SyncManager::SyncInfo info(user); + auto ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + size_t max = 12; + size_t min = 5; + sync.executor_ = std::make_shared(max, min); + ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_OK); + int32_t invalidUser = -1; + sync.StopCloudSync(invalidUser); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_OK); +} + +/** +* @tc.name: GetPostEventTask +* @tc.desc: Test the interface to verify the package name and table name +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) +{ + std::vector schemas; + schemaMeta_.databases[0].name = "test"; + schemas.push_back(schemaMeta_); + schemaMeta_.bundleName = "test"; + schemas.push_back(schemaMeta_); + + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + std::vector value; + info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); + + CloudData::SyncManager sync; + std::map traceIds; + auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); + task(); + std::vector lastSyncInfos; + MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); + EXPECT_TRUE(lastSyncInfos.size() == 0); +} + +/** +* @tc.name: GetRetryer +* @tc.desc: Test the input parameters of different interfaces +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + CloudData::SyncManager::Duration duration; + std::string prepareTraceId; + auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( + duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: GetCallback +* @tc.desc: Test the processing logic of different progress callbacks +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + DistributedData::GenDetails result; + StoreInfo storeInfo; + storeInfo.user = user; + storeInfo.bundleName = "testBundleName"; + int32_t triggerMode = MODE_DEFAULT; + std::string prepareTraceId; + GenAsync async = nullptr; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + int32_t process = 0; + async = [&process](const GenDetails &details) { + process = details.begin()->second.progress; + }; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + result.insert_or_assign("test", detail); + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); + detail.progress = GenProgress::SYNC_FINISH; + result.insert_or_assign("test", detail); + storeInfo.user = -1; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + storeInfo.user = user; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_FINISH); +} + +/** +* @tc.name: GetInterval +* @tc.desc: Test the Interval transformation logic of the interface +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) +{ + CloudData::SyncManager sync; + + auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); + EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); + ret = sync.GetInterval(E_BUSY); + EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); + ret = sync.GetInterval(E_OK); + EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); +} + +/** +* @tc.name: GetCloudSyncInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) +{ + CloudData::SyncManager sync; + CloudInfo cloud; + cloud.user = cloudInfo_.user; + cloud.enableCloud = false; + CloudData::SyncManager::SyncInfo info(cloudInfo_.user); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + info.bundleName_ = TEST_CLOUD_BUNDLE; + auto ret = sync.GetCloudSyncInfo(info, cloud); + EXPECT_TRUE(!ret.empty()); +} + +/** +* @tc.name: RetryCallback +* @tc.desc: Test the retry logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) +{ + int32_t user = 100; + std::string prepareTraceId; + CloudData::SyncManager sync; + StoreInfo storeInfo; + int32_t retCode = -1; + CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, + int32_t dbCode, const std::string &prepareTraceId) { + retCode = code; + return true; + }; + DistributedData::GenDetails result; + auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert_or_assign("test", detail); + task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + EXPECT_EQ(retCode, detail.code); +} + +/** +* @tc.name: UpdateCloudInfoFromServer +* @tc.desc: Test updating cloudinfo from the server +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) +{ + auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); + EXPECT_EQ(ret, E_OK); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) +{ + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(ret.first, CloudData::SUCCESS); +} + +/** +* @tc.name: UpdateSchemaFromServer_001 +* @tc.desc: Test get UpdateSchemaFromServer +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) +{ + auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); + EXPECT_EQ(status, CloudData::SUCCESS); +} + +/** + * @tc.name: OnAppInstallTest + * @tc.desc: Test the OnAppInstallTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppInstallTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, GeneralError::E_OK); +} + +/** + * @tc.name: OnAppUpdateTest + * @tc.desc: Test the OnAppUpdateTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppUpdateTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: UpdateE2eeEnableTest +* @tc.desc: Test the UpdateE2eeEnable +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) +{ + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + + ASSERT_NE(cloudServiceImpl_, nullptr); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, true); +} + +/** +* @tc.name: SubTask +* @tc.desc: Test the subtask execution logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) +{ + DistributedData::Subscription sub; + cloudServiceImpl_->InitSubTask(sub, 0); + MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); + cloudServiceImpl_->InitSubTask(sub, 0); + int32_t userId = 0; + CloudData::CloudServiceImpl::Task task = [&userId]() { + userId = cloudInfo_.user; + }; + cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); + EXPECT_EQ(userId, cloudInfo_.user); +} + +/** +* @tc.name: ConvertCursor +* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) +{ + std::map entry; + entry.insert_or_assign("test", "entry"); + auto resultSet = std::make_shared(1, entry); + auto cursor = std::make_shared(resultSet); + auto result = cloudServiceImpl_->ConvertCursor(cursor); + EXPECT_TRUE(!result.empty()); + auto resultSet1 = std::make_shared(); + auto cursor1 = std::make_shared(resultSet1); + auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); + EXPECT_TRUE(result1.empty()); +} + +/** +* @tc.name: GetDbInfoFromExtraData +* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) +{ + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.alias = TEST_CLOUD_DATABASE_ALIAS_1; + + SchemaMeta schemaMeta; + schemaMeta.databases.push_back(database); + + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + database.tables.push_back(table); + SchemaMeta::Table table1; + table1.name = "test_cloud_table_name1"; + table1.alias = "test_cloud_table_alias1"; + table1.sharedTableName = "test_share_table_name1"; + database.tables.emplace_back(table1); + + database.alias = TEST_CLOUD_DATABASE_ALIAS_2; + schemaMeta.databases.push_back(database); + + ExtraData extraData; + extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; + auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName = "test_cloud_table_alias2"; + extraData.info.tables.emplace_back(tableName); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName1 = "test_cloud_table_alias1"; + extraData.info.tables.emplace_back(tableName1); + extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); +} + +/** +* @tc.name: QueryTableStatistic +* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) +{ + auto store = std::make_shared(); + if (store != nullptr) { + std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; + store->MakeCursor(entry); + } + auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + if (store != nullptr) { + std::map entry = { { "Test", 1 } }; + store->MakeCursor(entry); + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + + if (store != nullptr) { + store->cursor_ = nullptr; + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetSchemaMeta +* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) +{ + int32_t userId = 101; + int32_t instanceId = 0; + CloudInfo cloudInfo; + cloudInfo.user = userId; + cloudInfo.id = TEST_CLOUD_ID; + cloudInfo.enableCloud = true; + + CloudInfo::AppInfo appInfo; + appInfo.bundleName = TEST_CLOUD_BUNDLE; + appInfo.appId = TEST_CLOUD_APPID; + appInfo.version = 1; + appInfo.cloudSwitch = true; + + cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + std::string bundleName = "testName"; + auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + bundleName = TEST_CLOUD_BUNDLE; + DistributedData::SchemaMeta schemeMeta; + schemeMeta.bundleName = TEST_CLOUD_BUNDLE; + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); +} + +/** +* @tc.name: GetAppSchemaFromServer +* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) +{ + int32_t userId = CloudServerMock::INVALID_USER_ID; + std::string bundleName; + delegate_.isNetworkAvailable_ = false; + auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + userId = 100; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + bundleName = TEST_CLOUD_BUNDLE; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); +} + +/** +* @tc.name: OnAppUninstall +* @tc.desc: Test the OnAppUninstall function delete the subscription data +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) +{ + CloudData::CloudServiceImpl::CloudStatic cloudStatic; + int32_t userId = 1001; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); + MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); + CloudInfo cloudInfo; + cloudInfo.user = userId; + CloudInfo::AppInfo appInfo; + cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + int32_t index = 1; + auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); + EXPECT_EQ(ret, E_OK); + Subscription sub1; + EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); + EXPECT_EQ(sub1.expiresTime.size(), 0); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test the GetCloudInfo with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) +{ + int32_t userId = 1000; + auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + delegate_.isNetworkAvailable_ = false; + std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; +} + +/** +* @tc.name: PreShare +* @tc.desc: Test the PreShare with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) +{ + int32_t userId = 1000; + StoreInfo info; + info.instanceId = 0; + info.bundleName = TEST_CLOUD_BUNDLE; + info.storeName = TEST_CLOUD_BUNDLE; + info.user = userId; + info.path = TEST_CLOUD_PATH; + StoreMetaData meta(info); + meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); + DistributedRdb::RdbQuery query; + auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); + EXPECT_EQ(status, GeneralError::E_ERROR); +} + +/** +* @tc.name: InitSubTask +* @tc.desc: Test the InitSubTask with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) +{ + uint64_t minInterval = 0; + uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms + ExecutorPool::TaskId taskId = 100; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); + cloudServiceImpl_->executor_ = nullptr; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(sub.GetMinExpireTime(), expire); + cloudServiceImpl_->executor_ = std::move(executor); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->expireTime_ = 0; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); +} + +/** +* @tc.name: DoSubscribe +* @tc.desc: Test DoSubscribe functions with invalid parameter. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) +{ + Subscription sub; + sub.userId = cloudInfo_.user; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + int user = cloudInfo_.user; + auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = "testId"; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = TEST_CLOUD_APPID; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); +} + +/** +* @tc.name: Report +* @tc.desc: Test Report. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, Report, TestSize.Level0) +{ + auto cloudReport = std::make_shared(); + auto prepareTraceId = cloudReport->GetPrepareTraceId(100); + EXPECT_EQ(prepareTraceId, ""); + auto requestTraceId = cloudReport->GetRequestTraceId(100); + EXPECT_EQ(requestTraceId, ""); + ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; + auto ret = cloudReport->Report(reportParam); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: IsOn +* @tc.desc: Test IsOn. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + int32_t instanceId = 0; + auto ret = cloudInfo.IsOn("", instanceId); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: IsAllSwitchOff +* @tc.desc: Test IsAllSwitchOff. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + auto ret = cloudInfo.IsAllSwitchOff(); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetMinExpireTime +* @tc.desc: Test GetMinExpireTime. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) +{ + uint64_t expire = 0; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + sub.GetMinExpireTime(); + expire = 24 * 60 * 60 * 1000; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + expire = 24 * 60 * 60; + sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); + EXPECT_EQ(sub.GetMinExpireTime(), expire); +} + + /** +* @tc.name: GetTableNames +* @tc.desc: Test GetTableNames. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) +{ + SchemaMeta::Database database; + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + table.sharedTableName = "test_share_table_name"; + database.tables.emplace_back(table); + auto tableNames = database.GetTableNames(); + EXPECT_EQ(tableNames.size(), 2); +} + +/** +* @tc.name: BlobToAssets +* @tc.desc: cloud_data_translate BlobToAsset error test. +* @tc.type: FUNC +* @tc.require: +* @tc.author: SQL +*/ +HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) +{ + CloudData::RdbCloudDataTranslate rdbTranslate; + DistributedDB::Asset asset = { + .name = "", + .assetId = "", + .subpath = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "" + }; + std::vector blob; + auto result = rdbTranslate.BlobToAsset(blob); + EXPECT_EQ(result, asset); + + DistributedDB::Assets assets; + blob = rdbTranslate.AssetsToBlob(assets); + auto results = rdbTranslate.BlobToAssets(blob); + EXPECT_EQ(results, assets); +} + +/** +* @tc.name: GetPriorityLevel001 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel002 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel003 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel004 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, + .seqNum = 0, + .isAsync = true, + .isAutoSync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: UpdateSchemaFromHap001 +* @tc.desc: Test the UpdateSchemaFromHap with invalid user +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap002 +* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap003 +* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, schemaMeta_.version); +} + +/** +* @tc.name: UpdateSchemaFromHap004 +* @tc.desc: Test the UpdateSchemaFromHap with valid parameter +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudInfo::AppInfo exampleAppInfo; + exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.version = 1; + exampleAppInfo.cloudSwitch = true; + CloudInfo cloudInfo; + MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); + cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); +} + /** * @tc.name: UpdateClearWaterMark001 * @tc.desc: Test UpdateClearWaterMark001 the database.version not found. -- Gitee From 3f3b709613652ec5ccfa113c09a1e83dd49f1cf9 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:17:06 +0800 Subject: [PATCH 11/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1568 ----------------- 1 file changed, 1568 deletions(-) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 40d393946..a29353f00 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1583,1573 +1583,5 @@ HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); EXPECT_EQ(ret, ERR_NONE); } - -/** -* @tc.name: OnSetGlobalCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = - cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnAllocResourceAndShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest( - CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string storeId = "storeId"; - DistributedRdb::PredicatesMemo predicates; - std::vector columns; - std::vector participants; - ITypesUtil::Marshal(data, storeId, predicates, columns, participants); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnUnshare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnExit -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangePrivilege -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQuery -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, sharingRes, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryByInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, invitation, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnConfirmInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - int32_t confirmation = 0; - std::tuple result; - ITypesUtil::Marshal(data, invitation, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeConfirmation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - int32_t confirmation = 0; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnCloudSync -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - std::string storeId = "storeId"; - CloudData::CloudService::Option option; - option.syncMode = 4; - option.seqNum = 1; - ITypesUtil::Marshal(data, bundleName, storeId, option); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnInitNotifier -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - sptr notifier = nullptr; - ITypesUtil::Marshal(data, bundleName, notifier); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); -} - -/** -* @tc.name: SharingUtil001 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); - EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); - EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); - EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil002 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); - EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); - EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); - EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil003 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); - EXPECT_EQ(status, Status::IPC_ERROR); - status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); - EXPECT_EQ(status, Status::SUCCESS); -} - -/** -* @tc.name: SharingUtil004 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); - EXPECT_EQ(status, Status::SUCCESS); - status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); - EXPECT_EQ(status, Status::ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); - EXPECT_EQ(status, Status::INVALID_ARGUMENT); - status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_EQ(status, Status::STRATEGY_BLOCKING); - status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); - EXPECT_EQ(status, Status::CLOUD_DISABLE); - status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); - EXPECT_EQ(status, Status::NETWORK_ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); - EXPECT_EQ(status, Status::ERROR); -} - -/** -* @tc.name: DoCloudSync -* @tc.desc: Test the executor_ uninitialized and initialized scenarios -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager sync; - CloudData::SyncManager::SyncInfo info(user); - auto ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - size_t max = 12; - size_t min = 5; - sync.executor_ = std::make_shared(max, min); - ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_OK); - int32_t invalidUser = -1; - sync.StopCloudSync(invalidUser); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_OK); -} - -/** -* @tc.name: GetPostEventTask -* @tc.desc: Test the interface to verify the package name and table name -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) -{ - std::vector schemas; - schemaMeta_.databases[0].name = "test"; - schemas.push_back(schemaMeta_); - schemaMeta_.bundleName = "test"; - schemas.push_back(schemaMeta_); - - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - std::vector value; - info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); - - CloudData::SyncManager sync; - std::map traceIds; - auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); - task(); - std::vector lastSyncInfos; - MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); - EXPECT_TRUE(lastSyncInfos.size() == 0); -} - -/** -* @tc.name: GetRetryer -* @tc.desc: Test the input parameters of different interfaces -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - CloudData::SyncManager::Duration duration; - std::string prepareTraceId; - auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( - duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: GetCallback -* @tc.desc: Test the processing logic of different progress callbacks -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - DistributedData::GenDetails result; - StoreInfo storeInfo; - storeInfo.user = user; - storeInfo.bundleName = "testBundleName"; - int32_t triggerMode = MODE_DEFAULT; - std::string prepareTraceId; - GenAsync async = nullptr; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - int32_t process = 0; - async = [&process](const GenDetails &details) { - process = details.begin()->second.progress; - }; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - result.insert_or_assign("test", detail); - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); - detail.progress = GenProgress::SYNC_FINISH; - result.insert_or_assign("test", detail); - storeInfo.user = -1; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - storeInfo.user = user; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_FINISH); -} - -/** -* @tc.name: GetInterval -* @tc.desc: Test the Interval transformation logic of the interface -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) -{ - CloudData::SyncManager sync; - - auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); - EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); - ret = sync.GetInterval(E_BUSY); - EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); - ret = sync.GetInterval(E_OK); - EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); -} - -/** -* @tc.name: GetCloudSyncInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) -{ - CloudData::SyncManager sync; - CloudInfo cloud; - cloud.user = cloudInfo_.user; - cloud.enableCloud = false; - CloudData::SyncManager::SyncInfo info(cloudInfo_.user); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - info.bundleName_ = TEST_CLOUD_BUNDLE; - auto ret = sync.GetCloudSyncInfo(info, cloud); - EXPECT_TRUE(!ret.empty()); -} - -/** -* @tc.name: RetryCallback -* @tc.desc: Test the retry logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) -{ - int32_t user = 100; - std::string prepareTraceId; - CloudData::SyncManager sync; - StoreInfo storeInfo; - int32_t retCode = -1; - CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, - int32_t dbCode, const std::string &prepareTraceId) { - retCode = code; - return true; - }; - DistributedData::GenDetails result; - auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert_or_assign("test", detail); - task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - EXPECT_EQ(retCode, detail.code); -} - -/** -* @tc.name: UpdateCloudInfoFromServer -* @tc.desc: Test updating cloudinfo from the server -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) -{ - auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); - EXPECT_EQ(ret, E_OK); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) -{ - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(ret.first, CloudData::SUCCESS); -} - -/** -* @tc.name: UpdateSchemaFromServer_001 -* @tc.desc: Test get UpdateSchemaFromServer -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) -{ - auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); - EXPECT_EQ(status, CloudData::SUCCESS); -} - -/** - * @tc.name: OnAppInstallTest - * @tc.desc: Test the OnAppInstallTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppInstallTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, GeneralError::E_OK); -} - -/** - * @tc.name: OnAppUpdateTest - * @tc.desc: Test the OnAppUpdateTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppUpdateTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: UpdateE2eeEnableTest -* @tc.desc: Test the UpdateE2eeEnable -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) -{ - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - - ASSERT_NE(cloudServiceImpl_, nullptr); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, true); -} - -/** -* @tc.name: SubTask -* @tc.desc: Test the subtask execution logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) -{ - DistributedData::Subscription sub; - cloudServiceImpl_->InitSubTask(sub, 0); - MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); - cloudServiceImpl_->InitSubTask(sub, 0); - int32_t userId = 0; - CloudData::CloudServiceImpl::Task task = [&userId]() { - userId = cloudInfo_.user; - }; - cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); - EXPECT_EQ(userId, cloudInfo_.user); -} - -/** -* @tc.name: ConvertCursor -* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) -{ - std::map entry; - entry.insert_or_assign("test", "entry"); - auto resultSet = std::make_shared(1, entry); - auto cursor = std::make_shared(resultSet); - auto result = cloudServiceImpl_->ConvertCursor(cursor); - EXPECT_TRUE(!result.empty()); - auto resultSet1 = std::make_shared(); - auto cursor1 = std::make_shared(resultSet1); - auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); - EXPECT_TRUE(result1.empty()); -} - -/** -* @tc.name: GetDbInfoFromExtraData -* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) -{ - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.alias = TEST_CLOUD_DATABASE_ALIAS_1; - - SchemaMeta schemaMeta; - schemaMeta.databases.push_back(database); - - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - database.tables.push_back(table); - SchemaMeta::Table table1; - table1.name = "test_cloud_table_name1"; - table1.alias = "test_cloud_table_alias1"; - table1.sharedTableName = "test_share_table_name1"; - database.tables.emplace_back(table1); - - database.alias = TEST_CLOUD_DATABASE_ALIAS_2; - schemaMeta.databases.push_back(database); - - ExtraData extraData; - extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; - auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName = "test_cloud_table_alias2"; - extraData.info.tables.emplace_back(tableName); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName1 = "test_cloud_table_alias1"; - extraData.info.tables.emplace_back(tableName1); - extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); -} - -/** -* @tc.name: QueryTableStatistic -* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) -{ - auto store = std::make_shared(); - if (store != nullptr) { - std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; - store->MakeCursor(entry); - } - auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - if (store != nullptr) { - std::map entry = { { "Test", 1 } }; - store->MakeCursor(entry); - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - - if (store != nullptr) { - store->cursor_ = nullptr; - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetSchemaMeta -* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) -{ - int32_t userId = 101; - int32_t instanceId = 0; - CloudInfo cloudInfo; - cloudInfo.user = userId; - cloudInfo.id = TEST_CLOUD_ID; - cloudInfo.enableCloud = true; - - CloudInfo::AppInfo appInfo; - appInfo.bundleName = TEST_CLOUD_BUNDLE; - appInfo.appId = TEST_CLOUD_APPID; - appInfo.version = 1; - appInfo.cloudSwitch = true; - - cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - std::string bundleName = "testName"; - auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - bundleName = TEST_CLOUD_BUNDLE; - DistributedData::SchemaMeta schemeMeta; - schemeMeta.bundleName = TEST_CLOUD_BUNDLE; - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); -} - -/** -* @tc.name: GetAppSchemaFromServer -* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) -{ - int32_t userId = CloudServerMock::INVALID_USER_ID; - std::string bundleName; - delegate_.isNetworkAvailable_ = false; - auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - userId = 100; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - bundleName = TEST_CLOUD_BUNDLE; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); -} - -/** -* @tc.name: OnAppUninstall -* @tc.desc: Test the OnAppUninstall function delete the subscription data -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) -{ - CloudData::CloudServiceImpl::CloudStatic cloudStatic; - int32_t userId = 1001; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); - MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); - CloudInfo cloudInfo; - cloudInfo.user = userId; - CloudInfo::AppInfo appInfo; - cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - int32_t index = 1; - auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); - EXPECT_EQ(ret, E_OK); - Subscription sub1; - EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); - EXPECT_EQ(sub1.expiresTime.size(), 0); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test the GetCloudInfo with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) -{ - int32_t userId = 1000; - auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - delegate_.isNetworkAvailable_ = false; - std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; -} - -/** -* @tc.name: PreShare -* @tc.desc: Test the PreShare with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) -{ - int32_t userId = 1000; - StoreInfo info; - info.instanceId = 0; - info.bundleName = TEST_CLOUD_BUNDLE; - info.storeName = TEST_CLOUD_BUNDLE; - info.user = userId; - info.path = TEST_CLOUD_PATH; - StoreMetaData meta(info); - meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); - DistributedRdb::RdbQuery query; - auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); - EXPECT_EQ(status, GeneralError::E_ERROR); -} - -/** -* @tc.name: InitSubTask -* @tc.desc: Test the InitSubTask with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) -{ - uint64_t minInterval = 0; - uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms - ExecutorPool::TaskId taskId = 100; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); - cloudServiceImpl_->executor_ = nullptr; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(sub.GetMinExpireTime(), expire); - cloudServiceImpl_->executor_ = std::move(executor); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->expireTime_ = 0; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); -} - -/** -* @tc.name: DoSubscribe -* @tc.desc: Test DoSubscribe functions with invalid parameter. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) -{ - Subscription sub; - sub.userId = cloudInfo_.user; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - int user = cloudInfo_.user; - auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = "testId"; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = TEST_CLOUD_APPID; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); -} - -/** -* @tc.name: Report -* @tc.desc: Test Report. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, Report, TestSize.Level0) -{ - auto cloudReport = std::make_shared(); - auto prepareTraceId = cloudReport->GetPrepareTraceId(100); - EXPECT_EQ(prepareTraceId, ""); - auto requestTraceId = cloudReport->GetRequestTraceId(100); - EXPECT_EQ(requestTraceId, ""); - ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; - auto ret = cloudReport->Report(reportParam); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: IsOn -* @tc.desc: Test IsOn. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - int32_t instanceId = 0; - auto ret = cloudInfo.IsOn("", instanceId); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: IsAllSwitchOff -* @tc.desc: Test IsAllSwitchOff. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - auto ret = cloudInfo.IsAllSwitchOff(); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetMinExpireTime -* @tc.desc: Test GetMinExpireTime. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) -{ - uint64_t expire = 0; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - sub.GetMinExpireTime(); - expire = 24 * 60 * 60 * 1000; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - expire = 24 * 60 * 60; - sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); - EXPECT_EQ(sub.GetMinExpireTime(), expire); -} - - /** -* @tc.name: GetTableNames -* @tc.desc: Test GetTableNames. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) -{ - SchemaMeta::Database database; - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - table.sharedTableName = "test_share_table_name"; - database.tables.emplace_back(table); - auto tableNames = database.GetTableNames(); - EXPECT_EQ(tableNames.size(), 2); -} - -/** -* @tc.name: BlobToAssets -* @tc.desc: cloud_data_translate BlobToAsset error test. -* @tc.type: FUNC -* @tc.require: -* @tc.author: SQL -*/ -HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) -{ - CloudData::RdbCloudDataTranslate rdbTranslate; - DistributedDB::Asset asset = { - .name = "", - .assetId = "", - .subpath = "", - .uri = "", - .modifyTime = "", - .createTime = "", - .size = "", - .hash = "" - }; - std::vector blob; - auto result = rdbTranslate.BlobToAsset(blob); - EXPECT_EQ(result, asset); - - DistributedDB::Assets assets; - blob = rdbTranslate.AssetsToBlob(assets); - auto results = rdbTranslate.BlobToAssets(blob); - EXPECT_EQ(results, assets); -} - -/** -* @tc.name: GetPriorityLevel001 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel002 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel003 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel004 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, - .seqNum = 0, - .isAsync = true, - .isAutoSync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: UpdateSchemaFromHap001 -* @tc.desc: Test the UpdateSchemaFromHap with invalid user -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap002 -* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap003 -* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, schemaMeta_.version); -} - -/** -* @tc.name: UpdateSchemaFromHap004 -* @tc.desc: Test the UpdateSchemaFromHap with valid parameter -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudInfo::AppInfo exampleAppInfo; - exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.version = 1; - exampleAppInfo.cloudSwitch = true; - CloudInfo cloudInfo; - MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); - cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); -} - -/** -* @tc.name: UpdateClearWaterMark001 -* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE_1; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark002 -* @tc.desc: Test UpdateClearWaterMark002 the same database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 1; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark003 -* @tc.desc: Test UpdateClearWaterMark003 the different database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); - EXPECT_TRUE(metaData.isClearWaterMark); - MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); -} - -/** -* @tc.name: GetPrepareTraceId -* @tc.desc: Test GetPrepareTraceId && GetUser -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) -{ - SyncParam syncParam; - syncParam.prepareTraceId = TEST_TRACE_ID; - syncParam.user = EVT_USER; - auto async = [](const GenDetails &details) {}; - SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); - StoreInfo storeInfo; - SyncEvent evt(storeInfo, std::move(eventInfo)); - EXPECT_EQ(evt.GetUser(), EVT_USER); - EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); -} - -/** -* @tc.name: TryUpdateDeviceId001 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId002 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId003 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId004 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: OnInitialize -* @tc.desc: OnInitialize test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) -{ - auto code = cloudServiceImpl_->OnInitialize(); - EXPECT_EQ(code, E_OK); -} - -/** -* @tc.name: CleanWaterVersion -* @tc.desc: CleanWaterVersion test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) -{ - auto ret = cloudServiceImpl_->CleanWaterVersion(200); - EXPECT_FALSE(ret); - ret = cloudServiceImpl_->CleanWaterVersion( - AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: ConvertGenDetailsCode -* @tc.desc: Test ConvertGenDetailsCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) -{ - DistributedData::GenDetails result; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert(std::make_pair("test", detail)); - auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result1; - GenProgressDetail detail1; - detail1.progress = GenProgress::SYNC_IN_PROGRESS; - detail1.code = E_ERROR; - result1.insert(std::make_pair("test", detail1)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result1); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result2; - GenProgressDetail detail2; - detail2.progress = GenProgress::SYNC_IN_PROGRESS; - detail2.code = E_OK; - result2.insert(std::make_pair("test", detail2)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result2); - EXPECT_TRUE(details["test"].code == E_OK); - - DistributedData::GenDetails result3; - GenProgressDetail detail3; - detail3.progress = GenProgress::SYNC_IN_PROGRESS; - detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; - result3.insert(std::make_pair("test", detail3)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result3); - EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); - - DistributedData::GenDetails result4; - GenProgressDetail detail4; - detail4.progress = GenProgress::SYNC_IN_PROGRESS; - detail4.code = E_BUSY; - result4.insert(std::make_pair("test", detail4)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result4); - EXPECT_TRUE(details["test"].code == E_ERROR); -} - -/** -* @tc.name: ConvertValidGeneralCode -* @tc.desc: Test ConvertValidGeneralCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) -{ - auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); - EXPECT_TRUE(ret == E_OK); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); - EXPECT_TRUE(ret == E_NETWORK_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); - EXPECT_TRUE(ret == E_CLOUD_DISABLED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); - EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); - EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); - EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); - EXPECT_TRUE(ret == E_ERROR); -} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From 22bb824b08ae3b3f2651f833526e557d23251ad2 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 10:17:29 +0800 Subject: [PATCH 12/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1568 +++++++++++++++++ 1 file changed, 1568 insertions(+) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index a29353f00..40d393946 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1583,5 +1583,1573 @@ HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); EXPECT_EQ(ret, ERR_NONE); } + +/** +* @tc.name: OnSetGlobalCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = + cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnAllocResourceAndShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest( + CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string storeId = "storeId"; + DistributedRdb::PredicatesMemo predicates; + std::vector columns; + std::vector participants; + ITypesUtil::Marshal(data, storeId, predicates, columns, participants); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnUnshare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnExit +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangePrivilege +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQuery +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, sharingRes, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryByInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, invitation, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnConfirmInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + int32_t confirmation = 0; + std::tuple result; + ITypesUtil::Marshal(data, invitation, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeConfirmation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + int32_t confirmation = 0; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnCloudSync +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + std::string storeId = "storeId"; + CloudData::CloudService::Option option; + option.syncMode = 4; + option.seqNum = 1; + ITypesUtil::Marshal(data, bundleName, storeId, option); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnInitNotifier +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + sptr notifier = nullptr; + ITypesUtil::Marshal(data, bundleName, notifier); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); +} + +/** +* @tc.name: SharingUtil001 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); + EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); + EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); + EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil002 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); + EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); + EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); + EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil003 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); + EXPECT_EQ(status, Status::IPC_ERROR); + status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); + EXPECT_EQ(status, Status::SUCCESS); +} + +/** +* @tc.name: SharingUtil004 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); + EXPECT_EQ(status, Status::SUCCESS); + status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); + EXPECT_EQ(status, Status::ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); + EXPECT_EQ(status, Status::INVALID_ARGUMENT); + status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_EQ(status, Status::STRATEGY_BLOCKING); + status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); + EXPECT_EQ(status, Status::CLOUD_DISABLE); + status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); + EXPECT_EQ(status, Status::NETWORK_ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); + EXPECT_EQ(status, Status::ERROR); +} + +/** +* @tc.name: DoCloudSync +* @tc.desc: Test the executor_ uninitialized and initialized scenarios +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager sync; + CloudData::SyncManager::SyncInfo info(user); + auto ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + size_t max = 12; + size_t min = 5; + sync.executor_ = std::make_shared(max, min); + ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_OK); + int32_t invalidUser = -1; + sync.StopCloudSync(invalidUser); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_OK); +} + +/** +* @tc.name: GetPostEventTask +* @tc.desc: Test the interface to verify the package name and table name +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) +{ + std::vector schemas; + schemaMeta_.databases[0].name = "test"; + schemas.push_back(schemaMeta_); + schemaMeta_.bundleName = "test"; + schemas.push_back(schemaMeta_); + + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + std::vector value; + info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); + + CloudData::SyncManager sync; + std::map traceIds; + auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); + task(); + std::vector lastSyncInfos; + MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); + EXPECT_TRUE(lastSyncInfos.size() == 0); +} + +/** +* @tc.name: GetRetryer +* @tc.desc: Test the input parameters of different interfaces +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + CloudData::SyncManager::Duration duration; + std::string prepareTraceId; + auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( + duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: GetCallback +* @tc.desc: Test the processing logic of different progress callbacks +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + DistributedData::GenDetails result; + StoreInfo storeInfo; + storeInfo.user = user; + storeInfo.bundleName = "testBundleName"; + int32_t triggerMode = MODE_DEFAULT; + std::string prepareTraceId; + GenAsync async = nullptr; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + int32_t process = 0; + async = [&process](const GenDetails &details) { + process = details.begin()->second.progress; + }; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + result.insert_or_assign("test", detail); + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); + detail.progress = GenProgress::SYNC_FINISH; + result.insert_or_assign("test", detail); + storeInfo.user = -1; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + storeInfo.user = user; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_FINISH); +} + +/** +* @tc.name: GetInterval +* @tc.desc: Test the Interval transformation logic of the interface +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) +{ + CloudData::SyncManager sync; + + auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); + EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); + ret = sync.GetInterval(E_BUSY); + EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); + ret = sync.GetInterval(E_OK); + EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); +} + +/** +* @tc.name: GetCloudSyncInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) +{ + CloudData::SyncManager sync; + CloudInfo cloud; + cloud.user = cloudInfo_.user; + cloud.enableCloud = false; + CloudData::SyncManager::SyncInfo info(cloudInfo_.user); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + info.bundleName_ = TEST_CLOUD_BUNDLE; + auto ret = sync.GetCloudSyncInfo(info, cloud); + EXPECT_TRUE(!ret.empty()); +} + +/** +* @tc.name: RetryCallback +* @tc.desc: Test the retry logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) +{ + int32_t user = 100; + std::string prepareTraceId; + CloudData::SyncManager sync; + StoreInfo storeInfo; + int32_t retCode = -1; + CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, + int32_t dbCode, const std::string &prepareTraceId) { + retCode = code; + return true; + }; + DistributedData::GenDetails result; + auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert_or_assign("test", detail); + task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + EXPECT_EQ(retCode, detail.code); +} + +/** +* @tc.name: UpdateCloudInfoFromServer +* @tc.desc: Test updating cloudinfo from the server +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) +{ + auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); + EXPECT_EQ(ret, E_OK); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) +{ + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(ret.first, CloudData::SUCCESS); +} + +/** +* @tc.name: UpdateSchemaFromServer_001 +* @tc.desc: Test get UpdateSchemaFromServer +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) +{ + auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); + EXPECT_EQ(status, CloudData::SUCCESS); +} + +/** + * @tc.name: OnAppInstallTest + * @tc.desc: Test the OnAppInstallTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppInstallTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, GeneralError::E_OK); +} + +/** + * @tc.name: OnAppUpdateTest + * @tc.desc: Test the OnAppUpdateTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppUpdateTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: UpdateE2eeEnableTest +* @tc.desc: Test the UpdateE2eeEnable +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) +{ + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + + ASSERT_NE(cloudServiceImpl_, nullptr); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, true); +} + +/** +* @tc.name: SubTask +* @tc.desc: Test the subtask execution logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) +{ + DistributedData::Subscription sub; + cloudServiceImpl_->InitSubTask(sub, 0); + MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); + cloudServiceImpl_->InitSubTask(sub, 0); + int32_t userId = 0; + CloudData::CloudServiceImpl::Task task = [&userId]() { + userId = cloudInfo_.user; + }; + cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); + EXPECT_EQ(userId, cloudInfo_.user); +} + +/** +* @tc.name: ConvertCursor +* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) +{ + std::map entry; + entry.insert_or_assign("test", "entry"); + auto resultSet = std::make_shared(1, entry); + auto cursor = std::make_shared(resultSet); + auto result = cloudServiceImpl_->ConvertCursor(cursor); + EXPECT_TRUE(!result.empty()); + auto resultSet1 = std::make_shared(); + auto cursor1 = std::make_shared(resultSet1); + auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); + EXPECT_TRUE(result1.empty()); +} + +/** +* @tc.name: GetDbInfoFromExtraData +* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) +{ + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.alias = TEST_CLOUD_DATABASE_ALIAS_1; + + SchemaMeta schemaMeta; + schemaMeta.databases.push_back(database); + + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + database.tables.push_back(table); + SchemaMeta::Table table1; + table1.name = "test_cloud_table_name1"; + table1.alias = "test_cloud_table_alias1"; + table1.sharedTableName = "test_share_table_name1"; + database.tables.emplace_back(table1); + + database.alias = TEST_CLOUD_DATABASE_ALIAS_2; + schemaMeta.databases.push_back(database); + + ExtraData extraData; + extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; + auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName = "test_cloud_table_alias2"; + extraData.info.tables.emplace_back(tableName); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName1 = "test_cloud_table_alias1"; + extraData.info.tables.emplace_back(tableName1); + extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); +} + +/** +* @tc.name: QueryTableStatistic +* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) +{ + auto store = std::make_shared(); + if (store != nullptr) { + std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; + store->MakeCursor(entry); + } + auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + if (store != nullptr) { + std::map entry = { { "Test", 1 } }; + store->MakeCursor(entry); + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + + if (store != nullptr) { + store->cursor_ = nullptr; + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetSchemaMeta +* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) +{ + int32_t userId = 101; + int32_t instanceId = 0; + CloudInfo cloudInfo; + cloudInfo.user = userId; + cloudInfo.id = TEST_CLOUD_ID; + cloudInfo.enableCloud = true; + + CloudInfo::AppInfo appInfo; + appInfo.bundleName = TEST_CLOUD_BUNDLE; + appInfo.appId = TEST_CLOUD_APPID; + appInfo.version = 1; + appInfo.cloudSwitch = true; + + cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + std::string bundleName = "testName"; + auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + bundleName = TEST_CLOUD_BUNDLE; + DistributedData::SchemaMeta schemeMeta; + schemeMeta.bundleName = TEST_CLOUD_BUNDLE; + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); +} + +/** +* @tc.name: GetAppSchemaFromServer +* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) +{ + int32_t userId = CloudServerMock::INVALID_USER_ID; + std::string bundleName; + delegate_.isNetworkAvailable_ = false; + auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + userId = 100; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + bundleName = TEST_CLOUD_BUNDLE; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); +} + +/** +* @tc.name: OnAppUninstall +* @tc.desc: Test the OnAppUninstall function delete the subscription data +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) +{ + CloudData::CloudServiceImpl::CloudStatic cloudStatic; + int32_t userId = 1001; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); + MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); + CloudInfo cloudInfo; + cloudInfo.user = userId; + CloudInfo::AppInfo appInfo; + cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + int32_t index = 1; + auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); + EXPECT_EQ(ret, E_OK); + Subscription sub1; + EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); + EXPECT_EQ(sub1.expiresTime.size(), 0); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test the GetCloudInfo with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) +{ + int32_t userId = 1000; + auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + delegate_.isNetworkAvailable_ = false; + std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; +} + +/** +* @tc.name: PreShare +* @tc.desc: Test the PreShare with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) +{ + int32_t userId = 1000; + StoreInfo info; + info.instanceId = 0; + info.bundleName = TEST_CLOUD_BUNDLE; + info.storeName = TEST_CLOUD_BUNDLE; + info.user = userId; + info.path = TEST_CLOUD_PATH; + StoreMetaData meta(info); + meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); + DistributedRdb::RdbQuery query; + auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); + EXPECT_EQ(status, GeneralError::E_ERROR); +} + +/** +* @tc.name: InitSubTask +* @tc.desc: Test the InitSubTask with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) +{ + uint64_t minInterval = 0; + uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms + ExecutorPool::TaskId taskId = 100; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); + cloudServiceImpl_->executor_ = nullptr; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(sub.GetMinExpireTime(), expire); + cloudServiceImpl_->executor_ = std::move(executor); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->expireTime_ = 0; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); +} + +/** +* @tc.name: DoSubscribe +* @tc.desc: Test DoSubscribe functions with invalid parameter. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) +{ + Subscription sub; + sub.userId = cloudInfo_.user; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + int user = cloudInfo_.user; + auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = "testId"; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = TEST_CLOUD_APPID; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); +} + +/** +* @tc.name: Report +* @tc.desc: Test Report. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, Report, TestSize.Level0) +{ + auto cloudReport = std::make_shared(); + auto prepareTraceId = cloudReport->GetPrepareTraceId(100); + EXPECT_EQ(prepareTraceId, ""); + auto requestTraceId = cloudReport->GetRequestTraceId(100); + EXPECT_EQ(requestTraceId, ""); + ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; + auto ret = cloudReport->Report(reportParam); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: IsOn +* @tc.desc: Test IsOn. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + int32_t instanceId = 0; + auto ret = cloudInfo.IsOn("", instanceId); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: IsAllSwitchOff +* @tc.desc: Test IsAllSwitchOff. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + auto ret = cloudInfo.IsAllSwitchOff(); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetMinExpireTime +* @tc.desc: Test GetMinExpireTime. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) +{ + uint64_t expire = 0; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + sub.GetMinExpireTime(); + expire = 24 * 60 * 60 * 1000; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + expire = 24 * 60 * 60; + sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); + EXPECT_EQ(sub.GetMinExpireTime(), expire); +} + + /** +* @tc.name: GetTableNames +* @tc.desc: Test GetTableNames. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) +{ + SchemaMeta::Database database; + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + table.sharedTableName = "test_share_table_name"; + database.tables.emplace_back(table); + auto tableNames = database.GetTableNames(); + EXPECT_EQ(tableNames.size(), 2); +} + +/** +* @tc.name: BlobToAssets +* @tc.desc: cloud_data_translate BlobToAsset error test. +* @tc.type: FUNC +* @tc.require: +* @tc.author: SQL +*/ +HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) +{ + CloudData::RdbCloudDataTranslate rdbTranslate; + DistributedDB::Asset asset = { + .name = "", + .assetId = "", + .subpath = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "" + }; + std::vector blob; + auto result = rdbTranslate.BlobToAsset(blob); + EXPECT_EQ(result, asset); + + DistributedDB::Assets assets; + blob = rdbTranslate.AssetsToBlob(assets); + auto results = rdbTranslate.BlobToAssets(blob); + EXPECT_EQ(results, assets); +} + +/** +* @tc.name: GetPriorityLevel001 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel002 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel003 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel004 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, + .seqNum = 0, + .isAsync = true, + .isAutoSync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: UpdateSchemaFromHap001 +* @tc.desc: Test the UpdateSchemaFromHap with invalid user +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap002 +* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap003 +* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, schemaMeta_.version); +} + +/** +* @tc.name: UpdateSchemaFromHap004 +* @tc.desc: Test the UpdateSchemaFromHap with valid parameter +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudInfo::AppInfo exampleAppInfo; + exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.version = 1; + exampleAppInfo.cloudSwitch = true; + CloudInfo cloudInfo; + MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); + cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); +} + +/** +* @tc.name: UpdateClearWaterMark001 +* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE_1; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark002 +* @tc.desc: Test UpdateClearWaterMark002 the same database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 1; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark003 +* @tc.desc: Test UpdateClearWaterMark003 the different database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); + EXPECT_TRUE(metaData.isClearWaterMark); + MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); +} + +/** +* @tc.name: GetPrepareTraceId +* @tc.desc: Test GetPrepareTraceId && GetUser +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) +{ + SyncParam syncParam; + syncParam.prepareTraceId = TEST_TRACE_ID; + syncParam.user = EVT_USER; + auto async = [](const GenDetails &details) {}; + SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); + StoreInfo storeInfo; + SyncEvent evt(storeInfo, std::move(eventInfo)); + EXPECT_EQ(evt.GetUser(), EVT_USER); + EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); +} + +/** +* @tc.name: TryUpdateDeviceId001 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId002 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId003 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId004 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: OnInitialize +* @tc.desc: OnInitialize test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) +{ + auto code = cloudServiceImpl_->OnInitialize(); + EXPECT_EQ(code, E_OK); +} + +/** +* @tc.name: CleanWaterVersion +* @tc.desc: CleanWaterVersion test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) +{ + auto ret = cloudServiceImpl_->CleanWaterVersion(200); + EXPECT_FALSE(ret); + ret = cloudServiceImpl_->CleanWaterVersion( + AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: ConvertGenDetailsCode +* @tc.desc: Test ConvertGenDetailsCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) +{ + DistributedData::GenDetails result; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert(std::make_pair("test", detail)); + auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result1; + GenProgressDetail detail1; + detail1.progress = GenProgress::SYNC_IN_PROGRESS; + detail1.code = E_ERROR; + result1.insert(std::make_pair("test", detail1)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result1); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result2; + GenProgressDetail detail2; + detail2.progress = GenProgress::SYNC_IN_PROGRESS; + detail2.code = E_OK; + result2.insert(std::make_pair("test", detail2)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result2); + EXPECT_TRUE(details["test"].code == E_OK); + + DistributedData::GenDetails result3; + GenProgressDetail detail3; + detail3.progress = GenProgress::SYNC_IN_PROGRESS; + detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; + result3.insert(std::make_pair("test", detail3)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result3); + EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); + + DistributedData::GenDetails result4; + GenProgressDetail detail4; + detail4.progress = GenProgress::SYNC_IN_PROGRESS; + detail4.code = E_BUSY; + result4.insert(std::make_pair("test", detail4)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result4); + EXPECT_TRUE(details["test"].code == E_ERROR); +} + +/** +* @tc.name: ConvertValidGeneralCode +* @tc.desc: Test ConvertValidGeneralCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) +{ + auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); + EXPECT_TRUE(ret == E_OK); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); + EXPECT_TRUE(ret == E_NETWORK_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); + EXPECT_TRUE(ret == E_CLOUD_DISABLED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); + EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); + EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); + EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); + EXPECT_TRUE(ret == E_ERROR); +} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From 786359e597605a7a98395e5b036db1f12c16591b Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 11:06:34 +0800 Subject: [PATCH 13/24] code fix Signed-off-by: z30053452 --- .../service/test/kvdb_service_stub_unittest.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index d42382728..20366dbd1 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -158,7 +158,7 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) { MessageParcel data; MessageParcel reply; - Option options; + Options options; options.hapName = "testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; @@ -177,7 +177,7 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) { MessageParcel data; MessageParcel reply; - Option options; + Options options; options.hapName = "testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"test/App"}; @@ -196,7 +196,7 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate003, TestSize.Level1) { MessageParcel data; MessageParcel reply; - Option options; + Options options; options.hapName = "./testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; @@ -216,7 +216,7 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate001, TestSize.Level1) MessageParcel data; data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; - Option options; + Options options; options.hapName = "testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; @@ -236,7 +236,7 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) MessageParcel data; data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; - Option options; + Options options; options.hapName = "testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"../testApp"}; @@ -255,7 +255,7 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate003, TestSize.Level1) { MessageParcel data; MessageParcel reply; - Option options; + Options options; options.hapName = "./testHap"; ITypesUtil::Marshal(data, options); AppId appId = {"testApp"}; -- Gitee From 1d8cd89015dab01010c3e027b3272d2996dd8cc1 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 11:39:16 +0800 Subject: [PATCH 14/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_service_impl_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 577771216..6b7099499 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -1579,7 +1579,7 @@ HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) result = service.IsValidParam(param); EXPECT_EQ(result, false); - + param.hapName_ = "test\\..test"; result = service.IsValidParam(param); -- Gitee From 5ac67c3372c110c8edcd488d14aaf1405c925a81 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 11:48:12 +0800 Subject: [PATCH 15/24] code fix Signed-off-by: z30053452 --- .../service/test/rdb_service_impl_test.cpp | 1955 ----------------- 1 file changed, 1955 deletions(-) diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 6b7099499..801b410b5 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -360,1960 +360,5 @@ HWTEST_F(RdbServiceImplTest, GetCallbacks001, TestSize.Level0) EXPECT_EQ(ret, nullptr); EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } - -/** - * @tc.name: DoSync001 - * @tc.desc: Test DoSync when the store is null. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoSync001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbService::Option option; - PredicatesMemo predicates; - AsyncDetail async; - - auto result = service.DoSync(param, option, predicates, async); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: DoSync002 - * @tc.desc: Test DoSync when meta sync is needed and succeeds. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - - RdbService::Option option; - option.mode = DistributedData::GeneralStore::AUTO_SYNC_MODE; - option.seqNum = 1; - - PredicatesMemo predicates; - AsyncDetail async; - - auto result = service.DoSync(param, option, predicates, async); - EXPECT_EQ(result, RDB_ERROR); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: IsNeedMetaSync001 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: IsNeedMetaSync002 - * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) -{ - CapMetaData capMetaData; - auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; - RdbServiceImpl service; - bool result = service.IsNeedMetaSync(metaData_, devices); - - EXPECT_EQ(result, false); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: ProcessResult001 - * @tc.desc: Test ProcessResult when all results have DBStatus::OK. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult002 - * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results = {{"device1", static_cast(DBStatus::OK)}, - {"device2", static_cast(DBStatus::DB_ERROR)}, - {"device3", static_cast(DBStatus::OK)}}; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.second.at("device1"), DBStatus::OK); - EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); - EXPECT_EQ(result.second.at("device3"), DBStatus::OK); -} - -/** - * @tc.name: ProcessResult004 - * @tc.desc: Test ProcessResult with an empty results map. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) -{ - RdbServiceImpl service; - std::map results; - - auto result = service.ProcessResult(results); - - EXPECT_EQ(result.first.size(), 0); - EXPECT_EQ(result.second.size(), 0); -} - -/** - * @tc.name: DoCompensateSync001 - * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) -{ - RdbServiceImpl service; - - int32_t eventId = 1; - DistributedData::BindEvent::BindEventInfo bindInfo; - bindInfo.bundleName = TEST_BUNDLE; - bindInfo.tokenId = metaData_.tokenId; - bindInfo.user = metaData_.uid; - bindInfo.storeName = TEST_STORE; - bindInfo.tableName = "test_table"; - bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; - - BindEvent event(eventId, std::move(bindInfo)); - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - service.DoCompensateSync(event); - EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); -} - -/** - * @tc.name: ReportStatistic001 - * @tc.desc: Test ReportStatistic when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: ReportStatistic002 - * @tc.desc: Test ReportStatistic when CheckAccess success. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - RdbStatEvent statEvent; - - int32_t result = service.ReportStatistic(param, statEvent); - - EXPECT_EQ(result, OK); -} - -/** - * @tc.name: GetReuseDevice001 - * @tc.desc: Test GetReuseDevice when all devices are reusable. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - StoreMetaData metaData; - auto result = service.GetReuseDevice(devices, metaData); - EXPECT_EQ(result.size(), 0); -} - -/** - * @tc.name: DoAutoSync001 - * @tc.desc: Test DoAutoSync when the store is null. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - std::vector tables = {"table1"}; - - auto result = service.DoAutoSync(devices, dataBase, tables); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: DoOnlineSync001 - * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) -{ - RdbServiceImpl service; - std::vector devices = {"device1"}; - DistributedData::Database dataBase; - dataBase.name = TEST_STORE; - - DistributedData::Table table1; - table1.name = "table1"; - table1.deviceSyncFields = {"field1", "field2"}; - DistributedData::Table table2; - table2.name = "table2"; - table2.deviceSyncFields = {}; - - dataBase.tables = {table1, table2}; - - auto result = service.DoOnlineSync(devices, dataBase); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: OnReady001 - * @tc.desc: Test OnReady when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = "test_device"; - - int32_t result = service.OnReady(device); - EXPECT_EQ(result, 0); -} - -/** - * @tc.name: OnReady002 - * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) -{ - RdbServiceImpl service; - std::string device = metaData_.deviceId; - - DistributedData::Database dataBase1; - dataBase1.name = "test_rdb_service_impl_sync_store2"; - dataBase1.bundleName = TEST_BUNDLE; - dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; - - DistributedData::Database dataBase2; - dataBase2.name = "test_rdb_service_impl_sync_store2"; - dataBase2.bundleName = TEST_BUNDLE; - dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); - dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); - int32_t result = service.OnReady(device); - - EXPECT_EQ(result, 0); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); -} - -/** - * @tc.name: AfterOpen001 - * @tc.desc: Test AfterOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen002 - * @tc.desc: Test AfterOpen when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: AfterOpen003 - * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - int32_t result = service.AfterOpen(param); - - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: NotifyDataChange001 - * @tc.desc: Test NotifyDataChange when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.hapName_ = "test/test"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange002 - * @tc.desc: Test NotifyDataChange when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: NotifyDataChange003 - * @tc.desc: Test NotifyDataChange when Check pass. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.storeName_ = "validStoreName"; - param.bundleName_ = "validBundleName"; - param.user_ = "validUser"; - param.hapName_ = "validHapName"; - param.customDir_ = "dir1/dir2"; - RdbChangedData rdbChangedData; - RdbNotifyConfig rdbNotifyConfig; - rdbNotifyConfig.delay_ = 0; - int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); - rdbNotifyConfig.delay_ = DELY_TIME; - result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetSearchable001 - * @tc.desc: Test SetSearchable when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetSearchable002 - * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - bool isSearchable = true; - int32_t result = service.SetSearchable(param, isSearchable); - - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: GetPassword001 - * @tc.desc: Test GetPassword when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword002 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); -} - -/** - * @tc.name: GetPassword003 - * @tc.desc: Test GetPassword when decryption fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - secretKey.sKey = sKey; // Invalid key for decryption - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: GetPassword004 - * @tc.desc: Test GetPassword when no meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: GetPassword005 - * @tc.desc: Test GetPassword when no meta data. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetPassword006 - * @tc.desc: Test GetPassword when meta data is found. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - meta.isEncrypt = true; - auto sKey = Random(KEY_LENGTH); - ASSERT_FALSE(sKey.empty()); - SecretKeyMetaData secretKey; - CryptoManager::CryptoParams encryptParams; - secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); - secretKey.area = encryptParams.area; - secretKey.storeType = meta.storeType; - secretKey.nonce = encryptParams.nonce; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::vector> password; - - int32_t result = service.GetPassword(param, password); - - EXPECT_EQ(result, RDB_OK); - ASSERT_GT(password.size(), 0); - EXPECT_EQ(password.at(0), sKey); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); -} - -/** - * @tc.name: SetDistributedTables001 - * @tc.desc: Test SetDistributedTables when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::vector tables; - std::vector references; - - int32_t result = service.SetDistributedTables(param, tables, references, false); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: SetDistributedTables002 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: SetDistributedTables003 - * @tc.desc: Test SetDistributedTables when type is search. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - param.hapName_ = "test/test"; - std::vector tables; - std::vector references; - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_SEARCH); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync001 - * @tc.desc: Test Sync when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: Sync002 - * @tc.desc: Test Sync when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - RdbService::Option option {}; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: QuerySharingResource001 - * @tc.desc: Test QuerySharingResource when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - PredicatesMemo predicates; - std::vector columns; - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen001 - * @tc.desc: Test BeforeOpen when CheckParam not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - param.hapName_ = "test/test"; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen002 - * @tc.desc: Test BeforeOpen when checkacess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: BeforeOpen003 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_NO_META); -} - -/** - * @tc.name: BeforeOpen004 - * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - int32_t result = service.BeforeOpen(param); - EXPECT_EQ(result, RDB_OK); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); -} - -/** - * @tc.name: Subscribe001 - * @tc.desc: Test Subscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.Subscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnSubscribe001 - * @tc.desc: Test UnSubscribe when option mode invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - SubscribeOption option {}; - option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; - - int32_t result = service.UnSubscribe(param, option, nullptr); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo001 - * @tc.desc: Test GetDfxInfo when CheckAccess not pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - DistributedRdb::RdbDfxInfo dfxInfo; - - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: GetDfxInfo002 - * @tc.desc: Test GetDfxInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) -{ - MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); - auto meta = metaData_; - DistributedData::StoreDfxInfo dfxMeta; - dfxMeta.lastOpenTime = "test"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = meta.bundleName; - param.storeName_ = meta.storeId; - param.type_ = meta.storeType; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - DistributedRdb::RdbDfxInfo dfxInfo; - int32_t result = service.GetDfxInfo(param, dfxInfo); - EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); - EXPECT_EQ(result, RDB_OK); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); -} - -/** - * @tc.name: LockCloudContainer001 - * @tc.desc: Test LockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - auto result = service.LockCloudContainer(param); - - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); -} - -/** - * @tc.name: LockCloudContainer002 - * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - auto result = service.LockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, 0); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: UnlockCloudContainer001 - * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.UnlockCloudContainer(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: UnlockCloudContainer002 - * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) -{ - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - - int32_t result = service.UnlockCloudContainer(param); - - // Simulate callback execution - EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: GetDebugInfo001 - * @tc.desc: Test GetDebugInfo when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - std::map debugInfo; - - int32_t result = service.GetDebugInfo(param, debugInfo); - - EXPECT_EQ(result, RDB_ERROR); - EXPECT_TRUE(debugInfo.empty()); -} - -/** - * @tc.name: GetDebugInfo002 - * @tc.desc: Test GetDebugInfo when CheckAccess pass. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) -{ - auto meta = metaData_; - DistributedData::StoreDebugInfo debugMeta; - DistributedData::StoreDebugInfo::FileInfo fileInfo1; - fileInfo1.inode = 4; - fileInfo1.size = 5; - fileInfo1.dev = 6; - fileInfo1.mode = 7; - fileInfo1.uid = 8; - fileInfo1.gid = 9; - debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; - std::map debugInfo; - int32_t result = service.GetDebugInfo(param, debugInfo); - EXPECT_EQ(result, RDB_OK); - RdbDebugInfo rdbInfo = debugInfo["test1"]; - EXPECT_EQ(rdbInfo.inode_, 4); - EXPECT_EQ(rdbInfo.size_, 5); - EXPECT_EQ(rdbInfo.dev_, 6); - EXPECT_EQ(rdbInfo.mode_, 7); - EXPECT_EQ(rdbInfo.uid_, 8); - EXPECT_EQ(rdbInfo.gid_, 9); - EXPECT_EQ(debugInfo.size(), 1); - MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); - MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); -} - -/** - * @tc.name: VerifyPromiseInfo001 - * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_ERROR); -} - -/** - * @tc.name: VerifyPromiseInfo002 - * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) -{ - StoreMetaDataLocal localMeta; - auto tokenId = IPCSkeleton::GetCallingTokenID(); - localMeta.isAutoSync = true; - localMeta.promiseInfo.tokenIds = {tokenId}; - localMeta.promiseInfo.uids = {}; - localMeta.promiseInfo.permissionNames = {}; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); - - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = metaData_.bundleName; - param.type_ = metaData_.storeType; - param.level_ = metaData_.securityLevel; - param.area_ = metaData_.area; - param.hapName_ = metaData_.bundleName; - param.storeName_ = metaData_.storeId; - param.isEncrypt_ = metaData_.isEncrypt; - param.isSearchable_ = metaData_.isSearchable; - param.haMode_ = metaData_.haMode; - param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; - param.user_ = metaData_.user; - - int32_t result = service.VerifyPromiseInfo(param); - - EXPECT_EQ(result, RDB_OK); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); -} - -/** - * @tc.name: CheckParam001 - * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test/test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.bundleName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.bundleName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam002 - * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test/test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.hapName_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.hapName_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam003 - * @tc.desc: Test CheckParam when user_ contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test/test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - - param.user_ = ".."; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); - param.user_ = "test\\..test"; - - result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam004 - * @tc.desc: Test CheckParam. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam005 - * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test/test"; - param.user_ = "test"; - param.customDir_ = "test"; - - bool result = service.IsValidParam(param); - - EXPECT_EQ(result, false); -} - -/** - * @tc.name: CheckParam006 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = "test"; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/./../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././//////////////////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: CheckParam007 - * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zd - */ -HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = "test"; - param.hapName_ = ""; - param.storeName_ = "test"; - param.user_ = "test"; - param.customDir_ = "test/../../test/../../../"; - bool result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/../../../test/../../../../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/.../../test/../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../test/test/../test/../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/test/../../../../../test/test/test/"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = ""; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "/test"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test//////////////////..///////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..//////////////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////..///////../../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, false); - - param.customDir_ = "test/..////./././///////////////////../"; - result = service.IsValidParam(param); - EXPECT_EQ(result, true); -} - -/** - * @tc.name: Delete_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = ""; - auto errCode = service.Delete(param); - EXPECT_EQ(errCode, RDB_ERROR); -} - -/** - * @tc.name: RegisterEvent_001 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) -{ - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "RegisterEvent_bundleName"; - storeInfo.storeName = "RegisterEvent_storeName"; - storeInfo.user = 100; - storeInfo.path = "RegisterEvent_path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC -} - -/** - * @tc.name: RegisterEvent_002 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); -} - - -/** - * @tc.name: RegisterEvent_003 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir ="path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_004 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_KV_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_005 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - - meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_006 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_007 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.storeType = StoreMetaData::STORE_RELATIONAL_END; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_008 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - meta.dataDir = "path1"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RegisterEvent_009 - * @tc.desc: Test Delete when param is invalid. - * @tc.type: FUNC - */ -HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) -{ - StoreMetaMapping metaMapping; - InitMapping(metaMapping); - metaMapping.cloudPath ="path"; - metaMapping.dataDir ="path"; - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); - - StoreMetaData meta(metaMapping); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); - RdbServiceImpl service; - DistributedData::StoreInfo storeInfo; - storeInfo.bundleName = "bundleName"; - storeInfo.storeName = "storeName"; - storeInfo.user = 100; - storeInfo.path = "path"; - auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); - EXPECT_NE(event, nullptr); - auto result = EventCenter::GetInstance().PostEvent(move(event)); - EXPECT_EQ(result, 1); // CODE_SYNC - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SetDistributedTables004 - * @tc.desc: Test SetDistributedTables when type is device. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "SetDistributedTables004"; - param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - std::vector tables; - std::vector references; - - auto meta = service.GetStoreMetaData(param); - ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { - auto store = new (std::nothrow) GeneralStoreMock(); - return store; - }; - AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); - - int32_t result = - service.SetDistributedTables(param, tables, references, false, - DistributedTableType::DISTRIBUTED_DEVICE); - EXPECT_EQ(result, RDB_OK); - ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: RemoteQuery003 - * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "RemoteQuery003"; - std::vector selectionArgs; - auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); - EXPECT_EQ(ret.first, RDB_ERROR); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); -} - -/** - * @tc.name: Sync003 - * @tc.desc: Test Sync when mode is nearby begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync003"; - RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: Sync004 - * @tc.desc: Test Sync when mode is cloud begin. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = "Sync004"; - RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; - PredicatesMemo predicates; - - int32_t result = service.Sync(param, option, predicates, nullptr); - EXPECT_EQ(result, RDB_OK); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_001 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: QuerySharingResource_PermissionDenied_002 - * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) -{ - RdbServiceImpl service; - RdbSyncerParam param; - param.bundleName_ = TEST_BUNDLE; - param.storeName_ = TEST_STORE; - PredicatesMemo predicates; - predicates.tables_ = {"table1"}; - std::vector columns = {"col1", "col2"}; - - auto result = service.QuerySharingResource(param, predicates, columns); - EXPECT_EQ(result.first, RDB_ERROR); - EXPECT_EQ(result.second, nullptr); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 - * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) -{ - // Prepare metaData and secret key - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area < 0 and empty nonce - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - // Clean up - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with empty sKey - SecretKeyMetaData cloneKey; - cloneKey.sKey.clear(); - cloneKey.area = -1; - cloneKey.nonce.clear(); - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} - -/** - * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 - * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. - * @tc.type: FUNC - * @tc.require: - * @tc.author: zhaojh - */ -HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) -{ - auto meta = metaData_; - meta.isEncrypt = true; - std::vector password = Random(KEY_LENGTH); - - // Prepare cloneKey with area >= 0 and nonce not empty - SecretKeyMetaData cloneKey; - CryptoManager::CryptoParams params; - cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); - cloneKey.area = 1; - cloneKey.nonce = { 1, 2, 3, 4 }; - cloneKey.storeType = meta.storeType; - - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); - EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); - - RdbServiceImpl service; - service.SaveSecretKeyMeta(meta, password); - - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); - EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); -} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From 086d0b52e6b0ccf2863f94b297a56c3af8aa6aac Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 11:51:19 +0800 Subject: [PATCH 16/24] code fix Signed-off-by: z30053452 --- .../test/kvdb_service_stub_unittest.cpp | 3 +- .../service/test/rdb_service_impl_test.cpp | 1955 +++++++++++++++++ 2 files changed, 1957 insertions(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index 20366dbd1..ff38778db 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -247,13 +247,14 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) /** * @tc.name: OnAfterCreate003 - * @tc.desc: Test OnBeforeCreate + * @tc.desc: Test OnAfterCreate * @tc.type: FUNC * @tc.require: */ HWTEST_F(KVDBServiceStubTest, OnAfterCreate003, TestSize.Level1) { MessageParcel data; + data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; options.hapName = "./testHap"; diff --git a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp index 801b410b5..6b7099499 100644 --- a/services/distributeddataservice/service/test/rdb_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/rdb_service_impl_test.cpp @@ -360,5 +360,1960 @@ HWTEST_F(RdbServiceImplTest, GetCallbacks001, TestSize.Level0) EXPECT_EQ(ret, nullptr); EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); } + +/** + * @tc.name: DoSync001 + * @tc.desc: Test DoSync when the store is null. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoSync001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbService::Option option; + PredicatesMemo predicates; + AsyncDetail async; + + auto result = service.DoSync(param, option, predicates, async); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: DoSync002 + * @tc.desc: Test DoSync when meta sync is needed and succeeds. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoSync002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + + RdbService::Option option; + option.mode = DistributedData::GeneralStore::AUTO_SYNC_MODE; + option.seqNum = 1; + + PredicatesMemo predicates; + AsyncDetail async; + + auto result = service.DoSync(param, option, predicates, async); + EXPECT_EQ(result, RDB_ERROR); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: IsNeedMetaSync001 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for CapMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync001, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: IsNeedMetaSync002 + * @tc.desc: Test IsNeedMetaSync when LoadMeta fails for StoreMetaData. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, IsNeedMetaSync002, TestSize.Level0) +{ + CapMetaData capMetaData; + auto capKey = CapMetaRow::GetKeyFor(metaData_.deviceId); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(std::string(capKey.begin(), capKey.end()), capMetaData), true); + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + std::vector devices = {DmAdapter::GetInstance().ToUUID(metaData_.deviceId)}; + RdbServiceImpl service; + bool result = service.IsNeedMetaSync(metaData_, devices); + + EXPECT_EQ(result, false); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: ProcessResult001 + * @tc.desc: Test ProcessResult when all results have DBStatus::OK. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult001, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult002 + * @tc.desc: Test ProcessResult when some results have DBStatus::OK and others do not. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult002, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results = {{"device1", static_cast(DBStatus::OK)}, + {"device2", static_cast(DBStatus::DB_ERROR)}, + {"device3", static_cast(DBStatus::OK)}}; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.second.at("device1"), DBStatus::OK); + EXPECT_EQ(result.second.at("device2"), DBStatus::DB_ERROR); + EXPECT_EQ(result.second.at("device3"), DBStatus::OK); +} + +/** + * @tc.name: ProcessResult004 + * @tc.desc: Test ProcessResult with an empty results map. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ProcessResult004, TestSize.Level0) +{ + RdbServiceImpl service; + std::map results; + + auto result = service.ProcessResult(results); + + EXPECT_EQ(result.first.size(), 0); + EXPECT_EQ(result.second.size(), 0); +} + +/** + * @tc.name: DoCompensateSync001 + * @tc.desc: Test DoCompensateSync when the event has valid bindInfo and COMPENSATE_SYNC event ID. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoCompensateSync001, TestSize.Level0) +{ + RdbServiceImpl service; + + int32_t eventId = 1; + DistributedData::BindEvent::BindEventInfo bindInfo; + bindInfo.bundleName = TEST_BUNDLE; + bindInfo.tokenId = metaData_.tokenId; + bindInfo.user = metaData_.uid; + bindInfo.storeName = TEST_STORE; + bindInfo.tableName = "test_table"; + bindInfo.primaryKey = {{"key1", "value1"}, {"key2", "value2"}}; + + BindEvent event(eventId, std::move(bindInfo)); + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [this] (const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + service.DoCompensateSync(event); + EventCenter::GetInstance().Unsubscribe(CloudEvent::LOCAL_CHANGE); +} + +/** + * @tc.name: ReportStatistic001 + * @tc.desc: Test ReportStatistic when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: ReportStatistic002 + * @tc.desc: Test ReportStatistic when CheckAccess success. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, ReportStatistic002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + RdbStatEvent statEvent; + + int32_t result = service.ReportStatistic(param, statEvent); + + EXPECT_EQ(result, OK); +} + +/** + * @tc.name: GetReuseDevice001 + * @tc.desc: Test GetReuseDevice when all devices are reusable. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetReuseDevice001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + StoreMetaData metaData; + auto result = service.GetReuseDevice(devices, metaData); + EXPECT_EQ(result.size(), 0); +} + +/** + * @tc.name: DoAutoSync001 + * @tc.desc: Test DoAutoSync when the store is null. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoAutoSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + std::vector tables = {"table1"}; + + auto result = service.DoAutoSync(devices, dataBase, tables); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: DoOnlineSync001 + * @tc.desc: Test DoOnlineSync when all tables have deviceSyncFields. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, DoOnlineSync001, TestSize.Level0) +{ + RdbServiceImpl service; + std::vector devices = {"device1"}; + DistributedData::Database dataBase; + dataBase.name = TEST_STORE; + + DistributedData::Table table1; + table1.name = "table1"; + table1.deviceSyncFields = {"field1", "field2"}; + DistributedData::Table table2; + table2.name = "table2"; + table2.deviceSyncFields = {}; + + dataBase.tables = {table1, table2}; + + auto result = service.DoOnlineSync(devices, dataBase); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: OnReady001 + * @tc.desc: Test OnReady when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady001, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = "test_device"; + + int32_t result = service.OnReady(device); + EXPECT_EQ(result, 0); +} + +/** + * @tc.name: OnReady002 + * @tc.desc: Test OnReady when no databases have autoSyncType SYNC_ON_READY or SYNC_ON_CHANGE_READY. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, OnReady002, TestSize.Level0) +{ + RdbServiceImpl service; + std::string device = metaData_.deviceId; + + DistributedData::Database dataBase1; + dataBase1.name = "test_rdb_service_impl_sync_store2"; + dataBase1.bundleName = TEST_BUNDLE; + dataBase1.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase1.autoSyncType = AutoSyncType::SYNC_ON_READY; + + DistributedData::Database dataBase2; + dataBase2.name = "test_rdb_service_impl_sync_store2"; + dataBase2.bundleName = TEST_BUNDLE; + dataBase2.user = std::to_string(AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId)); + dataBase2.autoSyncType = AutoSyncType::SYNC_ON_CHANGE_READY; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); + int32_t result = service.OnReady(device); + + EXPECT_EQ(result, 0); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase1.GetKey(), metaData_, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(dataBase2.GetKey(), metaData_, true), true); +} + +/** + * @tc.name: AfterOpen001 + * @tc.desc: Test AfterOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen002 + * @tc.desc: Test AfterOpen when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: AfterOpen003 + * @tc.desc: Test AfterOpen when CheckAccess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, AfterOpen003, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + int32_t result = service.AfterOpen(param); + + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: NotifyDataChange001 + * @tc.desc: Test NotifyDataChange when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.hapName_ = "test/test"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange002 + * @tc.desc: Test NotifyDataChange when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: NotifyDataChange003 + * @tc.desc: Test NotifyDataChange when Check pass. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, NotifyDataChange003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.storeName_ = "validStoreName"; + param.bundleName_ = "validBundleName"; + param.user_ = "validUser"; + param.hapName_ = "validHapName"; + param.customDir_ = "dir1/dir2"; + RdbChangedData rdbChangedData; + RdbNotifyConfig rdbNotifyConfig; + rdbNotifyConfig.delay_ = 0; + int32_t result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); + rdbNotifyConfig.delay_ = DELY_TIME; + result = service.NotifyDataChange(param, rdbChangedData, rdbNotifyConfig); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetSearchable001 + * @tc.desc: Test SetSearchable when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetSearchable002 + * @tc.desc: Test SetSearchable when CheckAccess succeeds and PostSearchEvent is called. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetSearchable002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + bool isSearchable = true; + int32_t result = service.SetSearchable(param, isSearchable); + + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: GetPassword001 + * @tc.desc: Test GetPassword when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword002 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true); +} + +/** + * @tc.name: GetPassword003 + * @tc.desc: Test GetPassword when decryption fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword003, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + secretKey.sKey = sKey; // Invalid key for decryption + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetSecretKey(), secretKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: GetPassword004 + * @tc.desc: Test GetPassword when no meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword004, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: GetPassword005 + * @tc.desc: Test GetPassword when no meta data. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetPassword005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetPassword006 + * @tc.desc: Test GetPassword when meta data is found. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetPassword006, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + meta.isEncrypt = true; + auto sKey = Random(KEY_LENGTH); + ASSERT_FALSE(sKey.empty()); + SecretKeyMetaData secretKey; + CryptoManager::CryptoParams encryptParams; + secretKey.sKey = CryptoManager::GetInstance().Encrypt(sKey, encryptParams); + secretKey.area = encryptParams.area; + secretKey.storeType = meta.storeType; + secretKey.nonce = encryptParams.nonce; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), secretKey, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::vector> password; + + int32_t result = service.GetPassword(param, password); + + EXPECT_EQ(result, RDB_OK); + ASSERT_GT(password.size(), 0); + EXPECT_EQ(password.at(0), sKey); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true); +} + +/** + * @tc.name: SetDistributedTables001 + * @tc.desc: Test SetDistributedTables when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::vector tables; + std::vector references; + + int32_t result = service.SetDistributedTables(param, tables, references, false); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: SetDistributedTables002 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: SetDistributedTables003 + * @tc.desc: Test SetDistributedTables when type is search. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + param.hapName_ = "test/test"; + std::vector tables; + std::vector references; + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_SEARCH); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync001 + * @tc.desc: Test Sync when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: Sync002 + * @tc.desc: Test Sync when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, Sync002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + RdbService::Option option {}; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: QuerySharingResource001 + * @tc.desc: Test QuerySharingResource when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + PredicatesMemo predicates; + std::vector columns; + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen001 + * @tc.desc: Test BeforeOpen when CheckParam not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + param.hapName_ = "test/test"; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen002 + * @tc.desc: Test BeforeOpen when checkacess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: BeforeOpen003 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_NO_META); +} + +/** + * @tc.name: BeforeOpen004 + * @tc.desc: Test BeforeOpen when checkacess pass and CheckParam pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, BeforeOpen004, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + int32_t result = service.BeforeOpen(param); + EXPECT_EQ(result, RDB_OK); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKey(), true), true); +} + +/** + * @tc.name: Subscribe001 + * @tc.desc: Test Subscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Subscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.Subscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnSubscribe001 + * @tc.desc: Test UnSubscribe when option mode invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnSubscribe001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + SubscribeOption option {}; + option.mode = SubscribeMode::SUBSCRIBE_MODE_MAX; + + int32_t result = service.UnSubscribe(param, option, nullptr); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo001 + * @tc.desc: Test GetDfxInfo when CheckAccess not pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + DistributedRdb::RdbDfxInfo dfxInfo; + + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: GetDfxInfo002 + * @tc.desc: Test GetDfxInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDfxInfo002, TestSize.Level0) +{ + MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr, ""); + auto meta = metaData_; + DistributedData::StoreDfxInfo dfxMeta; + dfxMeta.lastOpenTime = "test"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDfxInfoKey(), dfxMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = meta.bundleName; + param.storeName_ = meta.storeId; + param.type_ = meta.storeType; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + DistributedRdb::RdbDfxInfo dfxInfo; + int32_t result = service.GetDfxInfo(param, dfxInfo); + EXPECT_EQ(dfxInfo.lastOpenTime_, "test"); + EXPECT_EQ(result, RDB_OK); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDfxInfoKey(), true); +} + +/** + * @tc.name: LockCloudContainer001 + * @tc.desc: Test LockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + auto result = service.LockCloudContainer(param); + + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); +} + +/** + * @tc.name: LockCloudContainer002 + * @tc.desc: Test LockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, LockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + auto result = service.LockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, 0); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: UnlockCloudContainer001 + * @tc.desc: Test UnlockCloudContainer when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.UnlockCloudContainer(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: UnlockCloudContainer002 + * @tc.desc: Test UnlockCloudContainer when CheckAccess succeeds and callback updates the result. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, UnlockCloudContainer002, TestSize.Level0) +{ + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyWithoutPath(), metaData_, false), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + + int32_t result = service.UnlockCloudContainer(param); + + // Simulate callback execution + EXPECT_EQ(result, RDB_ERROR); // Assuming the callback sets status to RDB_OK + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: GetDebugInfo001 + * @tc.desc: Test GetDebugInfo when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + std::map debugInfo; + + int32_t result = service.GetDebugInfo(param, debugInfo); + + EXPECT_EQ(result, RDB_ERROR); + EXPECT_TRUE(debugInfo.empty()); +} + +/** + * @tc.name: GetDebugInfo002 + * @tc.desc: Test GetDebugInfo when CheckAccess pass. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, GetDebugInfo002, TestSize.Level0) +{ + auto meta = metaData_; + DistributedData::StoreDebugInfo debugMeta; + DistributedData::StoreDebugInfo::FileInfo fileInfo1; + fileInfo1.inode = 4; + fileInfo1.size = 5; + fileInfo1.dev = 6; + fileInfo1.mode = 7; + fileInfo1.uid = 8; + fileInfo1.gid = 9; + debugMeta.fileInfos.insert(std::pair{ "test1", fileInfo1 }); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetDebugInfoKey(), debugMeta, true), true); + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + param.customDir_ = "../../../base/haps/entry/files/.backup/textautofill"; + std::map debugInfo; + int32_t result = service.GetDebugInfo(param, debugInfo); + EXPECT_EQ(result, RDB_OK); + RdbDebugInfo rdbInfo = debugInfo["test1"]; + EXPECT_EQ(rdbInfo.inode_, 4); + EXPECT_EQ(rdbInfo.size_, 5); + EXPECT_EQ(rdbInfo.dev_, 6); + EXPECT_EQ(rdbInfo.mode_, 7); + EXPECT_EQ(rdbInfo.uid_, 8); + EXPECT_EQ(rdbInfo.gid_, 9); + EXPECT_EQ(debugInfo.size(), 1); + MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true); + MetaDataManager::GetInstance().DelMeta(meta.GetDebugInfoKey(), true); +} + +/** + * @tc.name: VerifyPromiseInfo001 + * @tc.desc: Test VerifyPromiseInfo when LoadMeta fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_ERROR); +} + +/** + * @tc.name: VerifyPromiseInfo002 + * @tc.desc: Test VerifyPromiseInfo when tokenId and uid are not in promiseInfo. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, VerifyPromiseInfo002, TestSize.Level0) +{ + StoreMetaDataLocal localMeta; + auto tokenId = IPCSkeleton::GetCallingTokenID(); + localMeta.isAutoSync = true; + localMeta.promiseInfo.tokenIds = {tokenId}; + localMeta.promiseInfo.uids = {}; + localMeta.promiseInfo.permissionNames = {}; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta, true), true); + + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = metaData_.bundleName; + param.type_ = metaData_.storeType; + param.level_ = metaData_.securityLevel; + param.area_ = metaData_.area; + param.hapName_ = metaData_.bundleName; + param.storeName_ = metaData_.storeId; + param.isEncrypt_ = metaData_.isEncrypt; + param.isSearchable_ = metaData_.isSearchable; + param.haMode_ = metaData_.haMode; + param.asyncDownloadAsset_ = metaData_.asyncDownloadAsset; + param.user_ = metaData_.user; + + int32_t result = service.VerifyPromiseInfo(param); + + EXPECT_EQ(result, RDB_OK); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyLocal(), true), true); +} + +/** + * @tc.name: CheckParam001 + * @tc.desc: Test VerifyPromiseInfo when bundleName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test/test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.bundleName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.bundleName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam002 + * @tc.desc: Test VerifyPromiseInfo when hapName_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test/test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.hapName_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.hapName_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam003 + * @tc.desc: Test CheckParam when user_ contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test/test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + + param.user_ = ".."; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); + param.user_ = "test\\..test"; + + result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam004 + * @tc.desc: Test CheckParam. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam005 + * @tc.desc: Test VerifyPromiseInfo when storename contain '/'. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam005, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test/test"; + param.user_ = "test"; + param.customDir_ = "test"; + + bool result = service.IsValidParam(param); + + EXPECT_EQ(result, false); +} + +/** + * @tc.name: CheckParam006 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam006, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = "test"; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/./../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././//////////////////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: CheckParam007 + * @tc.desc: Test VerifyPromiseInfo when customDir is invalid and hapname is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zd + */ +HWTEST_F(RdbServiceImplTest, CheckParam007, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = "test"; + param.hapName_ = ""; + param.storeName_ = "test"; + param.user_ = "test"; + param.customDir_ = "test/../../test/../../../"; + bool result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/../../../test/../../../../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/.../../test/../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../test/test/../test/../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/test/../../../../../test/test/test/"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = ""; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "/test"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test//////////////////..///////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..//////////////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////..///////../../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, false); + + param.customDir_ = "test/..////./././///////////////////../"; + result = service.IsValidParam(param); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: Delete_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, Delete_001, TestSize.Level1) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = ""; + auto errCode = service.Delete(param); + EXPECT_EQ(errCode, RDB_ERROR); +} + +/** + * @tc.name: RegisterEvent_001 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_001, TestSize.Level1) +{ + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "RegisterEvent_bundleName"; + storeInfo.storeName = "RegisterEvent_storeName"; + storeInfo.user = 100; + storeInfo.path = "RegisterEvent_path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC +} + +/** + * @tc.name: RegisterEvent_002 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_002, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); +} + + +/** + * @tc.name: RegisterEvent_003 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_003, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir ="path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_004 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_004, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_KV_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_005 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_005, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + + meta.storeType = StoreMetaData::STORE_OBJECT_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_006 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_006, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_BEGIN; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_007 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_007, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.storeType = StoreMetaData::STORE_RELATIONAL_END; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_008 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_008, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + meta.dataDir = "path1"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RegisterEvent_009 + * @tc.desc: Test Delete when param is invalid. + * @tc.type: FUNC + */ +HWTEST_F(RdbServiceImplTest, RegisterEvent_009, TestSize.Level1) +{ + StoreMetaMapping metaMapping; + InitMapping(metaMapping); + metaMapping.cloudPath ="path"; + metaMapping.dataDir ="path"; + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(metaMapping.GetKey(), metaMapping, true), true); + + StoreMetaData meta(metaMapping); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), metaMapping, true), true); + RdbServiceImpl service; + DistributedData::StoreInfo storeInfo; + storeInfo.bundleName = "bundleName"; + storeInfo.storeName = "storeName"; + storeInfo.user = 100; + storeInfo.path = "path"; + auto event = std::make_unique(CloudEvent::CLOUD_SYNC, storeInfo); + EXPECT_NE(event, nullptr); + auto result = EventCenter::GetInstance().PostEvent(move(event)); + EXPECT_EQ(result, 1); // CODE_SYNC + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaMapping.GetKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SetDistributedTables004 + * @tc.desc: Test SetDistributedTables when type is device. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SetDistributedTables004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "SetDistributedTables004"; + param.type_ = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + std::vector tables; + std::vector references; + + auto meta = service.GetStoreMetaData(param); + ASSERT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + auto creator = [](const StoreMetaData &metaData) -> GeneralStore* { + auto store = new (std::nothrow) GeneralStoreMock(); + return store; + }; + AutoCache::GetInstance().RegCreator(DistributedRdb::RDB_DEVICE_COLLABORATION, creator); + + int32_t result = + service.SetDistributedTables(param, tables, references, false, + DistributedTableType::DISTRIBUTED_DEVICE); + EXPECT_EQ(result, RDB_OK); + ASSERT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: RemoteQuery003 + * @tc.desc: test RemoteQuery, when CheckAccess pass but query failed. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, RemoteQuery003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "RemoteQuery003"; + std::vector selectionArgs; + auto deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + auto ret = service.RemoteQuery(param, deviceId, "", selectionArgs); + EXPECT_EQ(ret.first, RDB_ERROR); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath(), false), true); +} + +/** + * @tc.name: Sync003 + * @tc.desc: Test Sync when mode is nearby begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync003, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync003"; + RdbService::Option option { DistributedData::GeneralStore::NEARBY_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: Sync004 + * @tc.desc: Test Sync when mode is cloud begin. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, Sync004, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = "Sync004"; + RdbService::Option option { DistributedData::GeneralStore::CLOUD_BEGIN }; + PredicatesMemo predicates; + + int32_t result = service.Sync(param, option, predicates, nullptr); + EXPECT_EQ(result, RDB_OK); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_001 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when CheckAccess fails. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_001, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + // param.bundleName_ and param.storeName_ left empty to trigger CheckAccess failure + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: QuerySharingResource_PermissionDenied_002 + * @tc.desc: Test QuerySharingResource returns RDB_ERROR when not system app. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, QuerySharingResource_PermissionDenied_002, TestSize.Level0) +{ + RdbServiceImpl service; + RdbSyncerParam param; + param.bundleName_ = TEST_BUNDLE; + param.storeName_ = TEST_STORE; + PredicatesMemo predicates; + predicates.tables_ = {"table1"}; + std::vector columns = {"col1", "col2"}; + + auto result = service.QuerySharingResource(param, predicates, columns); + EXPECT_EQ(result.first, RDB_ERROR); + EXPECT_EQ(result.second, nullptr); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_001 + * @tc.desc: Test SaveSecretKeyMeta updates clone secret key when area < 0 or nonce is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_001, TestSize.Level0) +{ + // Prepare metaData and secret key + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area < 0 and empty nonce + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + // Call SaveSecretKeyMeta, should trigger UpdateSecretMeta for cloneKey + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + // Clean up + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if sKey is empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_EmptySKey_002, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with empty sKey + SecretKeyMetaData cloneKey; + cloneKey.sKey.clear(); + cloneKey.area = -1; + cloneKey.nonce.clear(); + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} + +/** + * @tc.name: SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003 + * @tc.desc: Test SaveSecretKeyMeta does not update clone secret key if area >= 0 and nonce not empty. + * @tc.type: FUNC + * @tc.require: + * @tc.author: zhaojh + */ +HWTEST_F(RdbServiceImplTest, SaveSecretKeyMeta_CloneKeyUpdate_NoUpdate_003, TestSize.Level0) +{ + auto meta = metaData_; + meta.isEncrypt = true; + std::vector password = Random(KEY_LENGTH); + + // Prepare cloneKey with area >= 0 and nonce not empty + SecretKeyMetaData cloneKey; + CryptoManager::CryptoParams params; + cloneKey.sKey = CryptoManager::GetInstance().Encrypt(password, params); + cloneKey.area = 1; + cloneKey.nonce = { 1, 2, 3, 4 }; + cloneKey.storeType = meta.storeType; + + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetCloneSecretKey(), cloneKey, true), true); + EXPECT_EQ(MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true), true); + + RdbServiceImpl service; + service.SaveSecretKeyMeta(meta, password); + + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetCloneSecretKey(), true), true); + EXPECT_EQ(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true), true); +} } // namespace DistributedRDBTest } // namespace OHOS::Test -- Gitee From 78bbe2015b636b6bad6c0b810b008ff4365160e8 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 11:55:10 +0800 Subject: [PATCH 17/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1886 ----------------- 1 file changed, 1886 deletions(-) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 40d393946..01d61b568 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1265,1891 +1265,5 @@ HWTEST_F(CloudDataTest, NotifyDataChange002, TestSize.Level0) ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, invalidUserId); EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); } - -/** -* @tc.name: NotifyDataChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, NotifyDataChange003, TestSize.Level1) -{ - constexpr const int32_t userId = 100; - constexpr const int32_t defaultUserId = 0; - std::string extraData = "{\"data\":\"{\\\"accountId\\\":\\\"test_cloud_id\\\",\\\"bundleName\\\":\\\"test_cloud_" - "bundleName\\\",\\\"containerName\\\":\\\"test_cloud_database_alias_1\\\", " - "\\\"databaseScopes\\\": " - "\\\"[\\\\\\\"private\\\\\\\", " - "\\\\\\\"shared\\\\\\\"]\\\",\\\"recordTypes\\\":\\\"[\\\\\\\"\\\\\\\"]\\\"}\"}"; - auto ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, defaultUserId); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); - extraData = "{\"data\":\"{\\\"accountId\\\":\\\"test_cloud_id\\\",\\\"bundleName\\\":\\\"test_cloud_" - "bundleName\\\",\\\"containerName\\\":\\\"test_cloud_database_alias_1\\\", \\\"databaseScopes\\\": " - "\\\"[\\\\\\\"private\\\\\\\", " - "\\\\\\\"shared\\\\\\\"]\\\",\\\"recordTypes\\\":\\\"[\\\\\\\"test_cloud_table_alias\\\\\\\"]\\\"}\"}"; - ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, userId); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: OnReady -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnReady001, TestSize.Level0) -{ - std::string device = "test"; - auto ret = cloudServiceImpl_->OnReady(device); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); - ret = cloudServiceImpl_->OnReady(DeviceManagerAdapter::CLOUD_DEVICE_UUID); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: Offline -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, Offline001, TestSize.Level0) -{ - std::string device = "test"; - auto ret = cloudServiceImpl_->Offline(device); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); - ret = cloudServiceImpl_->Offline(DeviceManagerAdapter::CLOUD_DEVICE_UUID); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: CloudShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, CloudShare001, TestSize.Level0) -{ - StoreInfo storeInfo{ OHOS::IPCSkeleton::GetCallingTokenID(), TEST_CLOUD_BUNDLE, TEST_CLOUD_STORE, 0 }; - std::pair> result; - CloudShareEvent::Callback asyncCallback = [&result](int32_t status, std::shared_ptr cursor) { - result.first = status; - result.second = cursor; - }; - auto event = std::make_unique(storeInfo, nullptr, nullptr); - EventCenter::GetInstance().PostEvent(std::move(event)); - auto event1 = std::make_unique(storeInfo, nullptr, asyncCallback); - EventCenter::GetInstance().PostEvent(std::move(event1)); - EXPECT_EQ(result.first, GeneralError::E_ERROR); - auto rdbQuery = std::make_shared(); - auto event2 = std::make_unique(storeInfo, rdbQuery, nullptr); - EventCenter::GetInstance().PostEvent(std::move(event2)); - auto event3 = std::make_unique(storeInfo, rdbQuery, asyncCallback); - EventCenter::GetInstance().PostEvent(std::move(event3)); - EXPECT_EQ(result.first, GeneralError::E_ERROR); -} - -/** -* @tc.name: OnUserChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnUserChange001, TestSize.Level0) -{ - constexpr const uint32_t ACCOUNT_DEFAULT = 2; - constexpr const uint32_t ACCOUNT_DELETE = 3; - constexpr const uint32_t ACCOUNT_SWITCHED = 4; - constexpr const uint32_t ACCOUNT_UNLOCKED = 5; - auto ret = cloudServiceImpl_->OnUserChange(ACCOUNT_DEFAULT, "0", "test"); - EXPECT_EQ(ret, GeneralError::E_OK); - ret = cloudServiceImpl_->OnUserChange(ACCOUNT_DELETE, "0", "test"); - EXPECT_EQ(ret, GeneralError::E_OK); - ret = cloudServiceImpl_->OnUserChange(ACCOUNT_SWITCHED, "0", "test"); - EXPECT_EQ(ret, GeneralError::E_OK); - ret = cloudServiceImpl_->OnUserChange(ACCOUNT_UNLOCKED, "0", "test"); - EXPECT_EQ(ret, GeneralError::E_OK); -} - -/** -* @tc.name: DisableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DisableCloud001, TestSize.Level0) -{ - auto ret = cloudServiceImpl_->DisableCloud("test"); - EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); - ret = cloudServiceImpl_->DisableCloud(TEST_CLOUD_ID); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: ChangeAppSwitch -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ChangeAppSwitch, TestSize.Level0) -{ - std::string id = "testId"; - std::string bundleName = "testName"; - auto ret = cloudServiceImpl_->ChangeAppSwitch(id, bundleName, CloudData::CloudService::SWITCH_ON); - EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); - ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, bundleName, CloudData::CloudService::SWITCH_ON); - EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); - ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_OFF); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: EnableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, EnableCloud, TestSize.Level0) -{ - std::string bundleName = "testName"; - std::map switches; - switches.insert_or_assign(TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_ON); - switches.insert_or_assign(bundleName, CloudData::CloudService::SWITCH_ON); - auto ret = cloudServiceImpl_->EnableCloud(TEST_CLOUD_ID, switches); - EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: OnEnableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnEnableCloud, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string id = "testId"; - std::map switches; - ITypesUtil::Marshal(data, id, switches); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnDisableCloud -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnDisableCloud, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeAppSwitch -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeAppSwitch, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteInt32(CloudData::CloudService::SWITCH_ON); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnClean -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnClean, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string id = TEST_CLOUD_ID; - std::map actions; - ITypesUtil::Marshal(data, id, actions); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnNotifyDataChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnNotifyDataChange, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnNotifyChange -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnNotifyChange, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - int32_t userId = 100; - data.WriteInt32(userId); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryStatistics -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryStatistics, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteString(TEST_CLOUD_STORE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryLastSyncInfo -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - data.WriteString(TEST_CLOUD_ID); - data.WriteString(TEST_CLOUD_BUNDLE); - data.WriteString(TEST_CLOUD_STORE); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetGlobalCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = - cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnAllocResourceAndShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest( - CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string storeId = "storeId"; - DistributedRdb::PredicatesMemo predicates; - std::vector columns; - std::vector participants; - ITypesUtil::Marshal(data, storeId, predicates, columns, participants); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnShare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnUnshare -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnExit -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangePrivilege -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::Participants participants; - CloudData::Results results; - ITypesUtil::Marshal(data, sharingRes, participants, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQuery -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, sharingRes, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnQueryByInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - CloudData::QueryResults results; - ITypesUtil::Marshal(data, invitation, results); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnConfirmInvitation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string invitation; - int32_t confirmation = 0; - std::tuple result; - ITypesUtil::Marshal(data, invitation, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnChangeConfirmation -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string sharingRes; - int32_t confirmation = 0; - std::pair result; - ITypesUtil::Marshal(data, sharingRes, confirmation, result); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnSetCloudStrategy -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - uint32_t strategy = 0; - std::vector values; - ITypesUtil::Marshal(data, strategy, values); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnCloudSync -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - std::string storeId = "storeId"; - CloudData::CloudService::Option option; - option.syncMode = 4; - option.seqNum = 1; - ITypesUtil::Marshal(data, bundleName, storeId, option); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); - EXPECT_EQ(ret, ERR_NONE); -} - -/** -* @tc.name: OnInitNotifier -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) -{ - MessageParcel reply; - MessageParcel data; - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); - data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); - std::string bundleName = "bundleName"; - sptr notifier = nullptr; - ITypesUtil::Marshal(data, bundleName, notifier); - ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); - EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); -} - -/** -* @tc.name: SharingUtil001 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); - EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); - EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); - EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); - EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil002 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) -{ - auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); - EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); - EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); - EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); - EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); - cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); - EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); -} - -/** -* @tc.name: SharingUtil003 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); - EXPECT_EQ(status, Status::IPC_ERROR); - status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); - EXPECT_EQ(status, Status::SUCCESS); -} - -/** -* @tc.name: SharingUtil004 -* @tc.desc: -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) -{ - auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); - EXPECT_EQ(status, Status::SUCCESS); - status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); - EXPECT_EQ(status, Status::ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); - EXPECT_EQ(status, Status::INVALID_ARGUMENT); - status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_EQ(status, Status::STRATEGY_BLOCKING); - status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); - EXPECT_EQ(status, Status::CLOUD_DISABLE); - status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); - EXPECT_EQ(status, Status::NETWORK_ERROR); - status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); - EXPECT_EQ(status, Status::ERROR); -} - -/** -* @tc.name: DoCloudSync -* @tc.desc: Test the executor_ uninitialized and initialized scenarios -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager sync; - CloudData::SyncManager::SyncInfo info(user); - auto ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_NOT_INIT); - size_t max = 12; - size_t min = 5; - sync.executor_ = std::make_shared(max, min); - ret = sync.DoCloudSync(info); - EXPECT_EQ(ret, GenErr::E_OK); - int32_t invalidUser = -1; - sync.StopCloudSync(invalidUser); - ret = sync.StopCloudSync(user); - EXPECT_EQ(ret, GenErr::E_OK); -} - -/** -* @tc.name: GetPostEventTask -* @tc.desc: Test the interface to verify the package name and table name -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) -{ - std::vector schemas; - schemaMeta_.databases[0].name = "test"; - schemas.push_back(schemaMeta_); - schemaMeta_.bundleName = "test"; - schemas.push_back(schemaMeta_); - - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - std::vector value; - info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); - - CloudData::SyncManager sync; - std::map traceIds; - auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); - task(); - std::vector lastSyncInfos; - MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); - EXPECT_TRUE(lastSyncInfos.size() == 0); -} - -/** -* @tc.name: GetRetryer -* @tc.desc: Test the input parameters of different interfaces -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - CloudData::SyncManager::Duration duration; - std::string prepareTraceId; - auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( - duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); - EXPECT_TRUE(ret); - ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: GetCallback -* @tc.desc: Test the processing logic of different progress callbacks -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) -{ - int32_t user = 100; - CloudData::SyncManager::SyncInfo info(user); - CloudData::SyncManager sync; - DistributedData::GenDetails result; - StoreInfo storeInfo; - storeInfo.user = user; - storeInfo.bundleName = "testBundleName"; - int32_t triggerMode = MODE_DEFAULT; - std::string prepareTraceId; - GenAsync async = nullptr; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - int32_t process = 0; - async = [&process](const GenDetails &details) { - process = details.begin()->second.progress; - }; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - result.insert_or_assign("test", detail); - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); - detail.progress = GenProgress::SYNC_FINISH; - result.insert_or_assign("test", detail); - storeInfo.user = -1; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - storeInfo.user = user; - sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); - EXPECT_EQ(process, GenProgress::SYNC_FINISH); -} - -/** -* @tc.name: GetInterval -* @tc.desc: Test the Interval transformation logic of the interface -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) -{ - CloudData::SyncManager sync; - - auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); - EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); - ret = sync.GetInterval(E_BUSY); - EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); - ret = sync.GetInterval(E_OK); - EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); -} - -/** -* @tc.name: GetCloudSyncInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) -{ - CloudData::SyncManager sync; - CloudInfo cloud; - cloud.user = cloudInfo_.user; - cloud.enableCloud = false; - CloudData::SyncManager::SyncInfo info(cloudInfo_.user); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - info.bundleName_ = TEST_CLOUD_BUNDLE; - auto ret = sync.GetCloudSyncInfo(info, cloud); - EXPECT_TRUE(!ret.empty()); -} - -/** -* @tc.name: RetryCallback -* @tc.desc: Test the retry logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) -{ - int32_t user = 100; - std::string prepareTraceId; - CloudData::SyncManager sync; - StoreInfo storeInfo; - int32_t retCode = -1; - CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, - int32_t dbCode, const std::string &prepareTraceId) { - retCode = code; - return true; - }; - DistributedData::GenDetails result; - auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert_or_assign("test", detail); - task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); - task(result); - EXPECT_EQ(retCode, detail.code); -} - -/** -* @tc.name: UpdateCloudInfoFromServer -* @tc.desc: Test updating cloudinfo from the server -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) -{ - auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); - EXPECT_EQ(ret, E_OK); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test get cloudInfo -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) -{ - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(ret.first, CloudData::SUCCESS); -} - -/** -* @tc.name: UpdateSchemaFromServer_001 -* @tc.desc: Test get UpdateSchemaFromServer -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) -{ - auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); - EXPECT_EQ(status, CloudData::SUCCESS); -} - -/** - * @tc.name: OnAppInstallTest - * @tc.desc: Test the OnAppInstallTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppInstallTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, GeneralError::E_OK); -} - -/** - * @tc.name: OnAppUpdateTest - * @tc.desc: Test the OnAppUpdateTest - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) -{ - ZLOGI("CloudDataTest OnAppUpdateTest start"); - ASSERT_NE(cloudServiceImpl_, nullptr); - ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); - int32_t index = 0; - auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); -} - -/** -* @tc.name: UpdateE2eeEnableTest -* @tc.desc: Test the UpdateE2eeEnable -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) -{ - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - - ASSERT_NE(cloudServiceImpl_, nullptr); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); - cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.e2eeEnable, true); -} - -/** -* @tc.name: SubTask -* @tc.desc: Test the subtask execution logic -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) -{ - DistributedData::Subscription sub; - cloudServiceImpl_->InitSubTask(sub, 0); - MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); - cloudServiceImpl_->InitSubTask(sub, 0); - int32_t userId = 0; - CloudData::CloudServiceImpl::Task task = [&userId]() { - userId = cloudInfo_.user; - }; - cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); - EXPECT_EQ(userId, cloudInfo_.user); -} - -/** -* @tc.name: ConvertCursor -* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) -{ - std::map entry; - entry.insert_or_assign("test", "entry"); - auto resultSet = std::make_shared(1, entry); - auto cursor = std::make_shared(resultSet); - auto result = cloudServiceImpl_->ConvertCursor(cursor); - EXPECT_TRUE(!result.empty()); - auto resultSet1 = std::make_shared(); - auto cursor1 = std::make_shared(resultSet1); - auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); - EXPECT_TRUE(result1.empty()); -} - -/** -* @tc.name: GetDbInfoFromExtraData -* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) -{ - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.alias = TEST_CLOUD_DATABASE_ALIAS_1; - - SchemaMeta schemaMeta; - schemaMeta.databases.push_back(database); - - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - database.tables.push_back(table); - SchemaMeta::Table table1; - table1.name = "test_cloud_table_name1"; - table1.alias = "test_cloud_table_alias1"; - table1.sharedTableName = "test_share_table_name1"; - database.tables.emplace_back(table1); - - database.alias = TEST_CLOUD_DATABASE_ALIAS_2; - schemaMeta.databases.push_back(database); - - ExtraData extraData; - extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; - auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName = "test_cloud_table_alias2"; - extraData.info.tables.emplace_back(tableName); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); - - std::string tableName1 = "test_cloud_table_alias1"; - extraData.info.tables.emplace_back(tableName1); - extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); - result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); - EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); -} - -/** -* @tc.name: QueryTableStatistic -* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) -{ - auto store = std::make_shared(); - if (store != nullptr) { - std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; - store->MakeCursor(entry); - } - auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - if (store != nullptr) { - std::map entry = { { "Test", 1 } }; - store->MakeCursor(entry); - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_TRUE(ret); - - if (store != nullptr) { - store->cursor_ = nullptr; - } - std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetSchemaMeta -* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) -{ - int32_t userId = 101; - int32_t instanceId = 0; - CloudInfo cloudInfo; - cloudInfo.user = userId; - cloudInfo.id = TEST_CLOUD_ID; - cloudInfo.enableCloud = true; - - CloudInfo::AppInfo appInfo; - appInfo.bundleName = TEST_CLOUD_BUNDLE; - appInfo.appId = TEST_CLOUD_APPID; - appInfo.version = 1; - appInfo.cloudSwitch = true; - - cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - std::string bundleName = "testName"; - auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - bundleName = TEST_CLOUD_BUNDLE; - DistributedData::SchemaMeta schemeMeta; - schemeMeta.bundleName = TEST_CLOUD_BUNDLE; - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); - std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); - MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); -} - -/** -* @tc.name: GetAppSchemaFromServer -* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) -{ - int32_t userId = CloudServerMock::INVALID_USER_ID; - std::string bundleName; - delegate_.isNetworkAvailable_ = false; - auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - userId = 100; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); - bundleName = TEST_CLOUD_BUNDLE; - std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); - EXPECT_EQ(status, CloudData::CloudService::SUCCESS); - EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); -} - -/** -* @tc.name: OnAppUninstall -* @tc.desc: Test the OnAppUninstall function delete the subscription data -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) -{ - CloudData::CloudServiceImpl::CloudStatic cloudStatic; - int32_t userId = 1001; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); - MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); - CloudInfo cloudInfo; - cloudInfo.user = userId; - CloudInfo::AppInfo appInfo; - cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); - int32_t index = 1; - auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); - EXPECT_EQ(ret, E_OK); - Subscription sub1; - EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); - EXPECT_EQ(sub1.expiresTime.size(), 0); -} - -/** -* @tc.name: GetCloudInfo -* @tc.desc: Test the GetCloudInfo with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) -{ - int32_t userId = 1000; - auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); - EXPECT_EQ(status, CloudData::CloudService::ERROR); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - delegate_.isNetworkAvailable_ = false; - std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); - EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); - delegate_.isNetworkAvailable_ = true; -} - -/** -* @tc.name: PreShare -* @tc.desc: Test the PreShare with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) -{ - int32_t userId = 1000; - StoreInfo info; - info.instanceId = 0; - info.bundleName = TEST_CLOUD_BUNDLE; - info.storeName = TEST_CLOUD_BUNDLE; - info.user = userId; - info.path = TEST_CLOUD_PATH; - StoreMetaData meta(info); - meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); - DistributedRdb::RdbQuery query; - auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); - EXPECT_EQ(status, GeneralError::E_ERROR); -} - -/** -* @tc.name: InitSubTask -* @tc.desc: Test the InitSubTask with invalid parameters -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) -{ - uint64_t minInterval = 0; - uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms - ExecutorPool::TaskId taskId = 100; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); - cloudServiceImpl_->executor_ = nullptr; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(sub.GetMinExpireTime(), expire); - cloudServiceImpl_->executor_ = std::move(executor); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = taskId; - cloudServiceImpl_->expireTime_ = 0; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); - cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; - cloudServiceImpl_->InitSubTask(sub, minInterval); - EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); -} - -/** -* @tc.name: DoSubscribe -* @tc.desc: Test DoSubscribe functions with invalid parameter. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) -{ - Subscription sub; - sub.userId = cloudInfo_.user; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - int user = cloudInfo_.user; - auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = "testId"; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - sub.id = TEST_CLOUD_APPID; - MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); - MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); - status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); - EXPECT_FALSE(status); -} - -/** -* @tc.name: Report -* @tc.desc: Test Report. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, Report, TestSize.Level0) -{ - auto cloudReport = std::make_shared(); - auto prepareTraceId = cloudReport->GetPrepareTraceId(100); - EXPECT_EQ(prepareTraceId, ""); - auto requestTraceId = cloudReport->GetRequestTraceId(100); - EXPECT_EQ(requestTraceId, ""); - ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; - auto ret = cloudReport->Report(reportParam); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: IsOn -* @tc.desc: Test IsOn. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - int32_t instanceId = 0; - auto ret = cloudInfo.IsOn("", instanceId); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: IsAllSwitchOff -* @tc.desc: Test IsAllSwitchOff. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) -{ - auto cloudServerMock = std::make_shared(); - auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); - auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); - auto ret = cloudInfo.IsAllSwitchOff(); - EXPECT_FALSE(ret); -} - -/** -* @tc.name: GetMinExpireTime -* @tc.desc: Test GetMinExpireTime. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) -{ - uint64_t expire = 0; - Subscription sub; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - sub.GetMinExpireTime(); - expire = 24 * 60 * 60 * 1000; - sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); - expire = 24 * 60 * 60; - sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); - EXPECT_EQ(sub.GetMinExpireTime(), expire); -} - - /** -* @tc.name: GetTableNames -* @tc.desc: Test GetTableNames. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) -{ - SchemaMeta::Database database; - SchemaMeta::Table table; - table.name = "test_cloud_table_name"; - table.alias = "test_cloud_table_alias"; - table.sharedTableName = "test_share_table_name"; - database.tables.emplace_back(table); - auto tableNames = database.GetTableNames(); - EXPECT_EQ(tableNames.size(), 2); -} - -/** -* @tc.name: BlobToAssets -* @tc.desc: cloud_data_translate BlobToAsset error test. -* @tc.type: FUNC -* @tc.require: -* @tc.author: SQL -*/ -HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) -{ - CloudData::RdbCloudDataTranslate rdbTranslate; - DistributedDB::Asset asset = { - .name = "", - .assetId = "", - .subpath = "", - .uri = "", - .modifyTime = "", - .createTime = "", - .size = "", - .hash = "" - }; - std::vector blob; - auto result = rdbTranslate.BlobToAsset(blob); - EXPECT_EQ(result, asset); - - DistributedDB::Assets assets; - blob = rdbTranslate.AssetsToBlob(assets); - auto results = rdbTranslate.BlobToAssets(blob); - EXPECT_EQ(results, assets); -} - -/** -* @tc.name: GetPriorityLevel001 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel002 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - memo.tables_ = { TEST_CLOUD_TABLE }; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel003 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: GetPriorityLevel004 -* @tc.desc: GetPriorityLevel test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) -{ - EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { - auto &evt = static_cast(event); - auto mode = evt.GetMode(); - EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); - }); - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, - .seqNum = 0, - .isAsync = true, - .isAutoSync = true }; - DistributedRdb::PredicatesMemo memo; - rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); -} - -/** -* @tc.name: UpdateSchemaFromHap001 -* @tc.desc: Test the UpdateSchemaFromHap with invalid user -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap002 -* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::ERROR); -} - -/** -* @tc.name: UpdateSchemaFromHap003 -* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, schemaMeta_.version); -} - -/** -* @tc.name: UpdateSchemaFromHap004 -* @tc.desc: Test the UpdateSchemaFromHap with valid parameter -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudInfo::AppInfo exampleAppInfo; - exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; - exampleAppInfo.version = 1; - exampleAppInfo.cloudSwitch = true; - CloudInfo cloudInfo; - MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); - cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); - MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); - CloudData::CloudServiceImpl::HapInfo info = { - .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user - }; - auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); - EXPECT_EQ(ret, Status::SUCCESS); - SchemaMeta schemaMeta; - std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); - EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); -} - -/** -* @tc.name: UpdateClearWaterMark001 -* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE_1; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark002 -* @tc.desc: Test UpdateClearWaterMark002 the same database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 1; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); -} - -/** -* @tc.name: UpdateClearWaterMark003 -* @tc.desc: Test UpdateClearWaterMark003 the different database.version -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) -{ - ASSERT_NE(cloudServiceImpl_, nullptr); - CloudData::CloudServiceImpl::HapInfo hapInfo = { - .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user - }; - SchemaMeta::Database database; - database.name = TEST_CLOUD_STORE; - database.version = 1; - SchemaMeta schemaMeta; - schemaMeta.version = 1; - schemaMeta.databases.push_back(database); - - SchemaMeta::Database database1; - database1.name = TEST_CLOUD_STORE; - database1.version = 2; - SchemaMeta newSchemaMeta; - newSchemaMeta.version = 0; - newSchemaMeta.databases.push_back(database1); - cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); - - CloudMark metaData; - metaData.bundleName = hapInfo.bundleName; - metaData.userId = hapInfo.user; - metaData.index = hapInfo.instIndex; - metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; - metaData.storeId = database1.name; - ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); - EXPECT_TRUE(metaData.isClearWaterMark); - MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); -} - -/** -* @tc.name: GetPrepareTraceId -* @tc.desc: Test GetPrepareTraceId && GetUser -* @tc.type: FUNC -* @tc.require: -*/ -HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) -{ - SyncParam syncParam; - syncParam.prepareTraceId = TEST_TRACE_ID; - syncParam.user = EVT_USER; - auto async = [](const GenDetails &details) {}; - SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); - StoreInfo storeInfo; - SyncEvent evt(storeInfo, std::move(eventInfo)); - EXPECT_EQ(evt.GetUser(), EVT_USER); - EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); -} - -/** -* @tc.name: TryUpdateDeviceId001 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId002 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId003 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = true; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: TryUpdateDeviceId004 -* @tc.desc: TryUpdateDeviceId test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) -{ - DistributedRdb::RdbServiceImpl rdbServiceImpl; - DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; - StoreMetaData oldMeta; - oldMeta.deviceId = "oldUuidtest"; - oldMeta.user = "100"; - oldMeta.bundleName = "test_appid_001"; - oldMeta.storeId = "test_storeid_001"; - oldMeta.isNeedUpdateDeviceId = false; - oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; - bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); - EXPECT_EQ(isSuccess, true); - StoreMetaData meta1 = oldMeta; - auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); - EXPECT_EQ(ret, true); - MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); -} - -/** -* @tc.name: OnInitialize -* @tc.desc: OnInitialize test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) -{ - auto code = cloudServiceImpl_->OnInitialize(); - EXPECT_EQ(code, E_OK); -} - -/** -* @tc.name: CleanWaterVersion -* @tc.desc: CleanWaterVersion test -* @tc.type: FUNC -* @tc.require: -* @tc.author: -*/ -HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) -{ - auto ret = cloudServiceImpl_->CleanWaterVersion(200); - EXPECT_FALSE(ret); - ret = cloudServiceImpl_->CleanWaterVersion( - AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); - EXPECT_TRUE(ret); -} - -/** -* @tc.name: ConvertGenDetailsCode -* @tc.desc: Test ConvertGenDetailsCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) -{ - DistributedData::GenDetails result; - GenProgressDetail detail; - detail.progress = GenProgress::SYNC_IN_PROGRESS; - detail.code = 100; - result.insert(std::make_pair("test", detail)); - auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result1; - GenProgressDetail detail1; - detail1.progress = GenProgress::SYNC_IN_PROGRESS; - detail1.code = E_ERROR; - result1.insert(std::make_pair("test", detail1)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result1); - EXPECT_TRUE(details["test"].code == E_ERROR); - - DistributedData::GenDetails result2; - GenProgressDetail detail2; - detail2.progress = GenProgress::SYNC_IN_PROGRESS; - detail2.code = E_OK; - result2.insert(std::make_pair("test", detail2)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result2); - EXPECT_TRUE(details["test"].code == E_OK); - - DistributedData::GenDetails result3; - GenProgressDetail detail3; - detail3.progress = GenProgress::SYNC_IN_PROGRESS; - detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; - result3.insert(std::make_pair("test", detail3)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result3); - EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); - - DistributedData::GenDetails result4; - GenProgressDetail detail4; - detail4.progress = GenProgress::SYNC_IN_PROGRESS; - detail4.code = E_BUSY; - result4.insert(std::make_pair("test", detail4)); - details = CloudData::SyncManager::ConvertGenDetailsCode(result4); - EXPECT_TRUE(details["test"].code == E_ERROR); -} - -/** -* @tc.name: ConvertValidGeneralCode -* @tc.desc: Test ConvertValidGeneralCode function. -* @tc.type: FUNC -* @tc.require: - */ -HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) -{ - auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); - EXPECT_TRUE(ret == E_OK); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); - EXPECT_TRUE(ret == E_NETWORK_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); - EXPECT_TRUE(ret == E_CLOUD_DISABLED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); - EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); - EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); - EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); - EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); - EXPECT_TRUE(ret == E_ERROR); - ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); - EXPECT_TRUE(ret == E_ERROR); -} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From 585409222804bc968fb8a5d12b72c90a2675ff0e Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 14:14:29 +0800 Subject: [PATCH 18/24] code fix Signed-off-by: z30053452 --- .../service/test/cloud_data_test.cpp | 1886 +++++++++++++++++ 1 file changed, 1886 insertions(+) diff --git a/services/distributeddataservice/service/test/cloud_data_test.cpp b/services/distributeddataservice/service/test/cloud_data_test.cpp index 01d61b568..40d393946 100644 --- a/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -1265,5 +1265,1891 @@ HWTEST_F(CloudDataTest, NotifyDataChange002, TestSize.Level0) ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, invalidUserId); EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); } + +/** +* @tc.name: NotifyDataChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, NotifyDataChange003, TestSize.Level1) +{ + constexpr const int32_t userId = 100; + constexpr const int32_t defaultUserId = 0; + std::string extraData = "{\"data\":\"{\\\"accountId\\\":\\\"test_cloud_id\\\",\\\"bundleName\\\":\\\"test_cloud_" + "bundleName\\\",\\\"containerName\\\":\\\"test_cloud_database_alias_1\\\", " + "\\\"databaseScopes\\\": " + "\\\"[\\\\\\\"private\\\\\\\", " + "\\\\\\\"shared\\\\\\\"]\\\",\\\"recordTypes\\\":\\\"[\\\\\\\"\\\\\\\"]\\\"}\"}"; + auto ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, defaultUserId); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); + extraData = "{\"data\":\"{\\\"accountId\\\":\\\"test_cloud_id\\\",\\\"bundleName\\\":\\\"test_cloud_" + "bundleName\\\",\\\"containerName\\\":\\\"test_cloud_database_alias_1\\\", \\\"databaseScopes\\\": " + "\\\"[\\\\\\\"private\\\\\\\", " + "\\\\\\\"shared\\\\\\\"]\\\",\\\"recordTypes\\\":\\\"[\\\\\\\"test_cloud_table_alias\\\\\\\"]\\\"}\"}"; + ret = cloudServiceImpl_->NotifyDataChange(CloudData::DATA_CHANGE_EVENT_ID, extraData, userId); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: OnReady +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnReady001, TestSize.Level0) +{ + std::string device = "test"; + auto ret = cloudServiceImpl_->OnReady(device); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); + ret = cloudServiceImpl_->OnReady(DeviceManagerAdapter::CLOUD_DEVICE_UUID); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: Offline +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, Offline001, TestSize.Level0) +{ + std::string device = "test"; + auto ret = cloudServiceImpl_->Offline(device); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); + ret = cloudServiceImpl_->Offline(DeviceManagerAdapter::CLOUD_DEVICE_UUID); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: CloudShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, CloudShare001, TestSize.Level0) +{ + StoreInfo storeInfo{ OHOS::IPCSkeleton::GetCallingTokenID(), TEST_CLOUD_BUNDLE, TEST_CLOUD_STORE, 0 }; + std::pair> result; + CloudShareEvent::Callback asyncCallback = [&result](int32_t status, std::shared_ptr cursor) { + result.first = status; + result.second = cursor; + }; + auto event = std::make_unique(storeInfo, nullptr, nullptr); + EventCenter::GetInstance().PostEvent(std::move(event)); + auto event1 = std::make_unique(storeInfo, nullptr, asyncCallback); + EventCenter::GetInstance().PostEvent(std::move(event1)); + EXPECT_EQ(result.first, GeneralError::E_ERROR); + auto rdbQuery = std::make_shared(); + auto event2 = std::make_unique(storeInfo, rdbQuery, nullptr); + EventCenter::GetInstance().PostEvent(std::move(event2)); + auto event3 = std::make_unique(storeInfo, rdbQuery, asyncCallback); + EventCenter::GetInstance().PostEvent(std::move(event3)); + EXPECT_EQ(result.first, GeneralError::E_ERROR); +} + +/** +* @tc.name: OnUserChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnUserChange001, TestSize.Level0) +{ + constexpr const uint32_t ACCOUNT_DEFAULT = 2; + constexpr const uint32_t ACCOUNT_DELETE = 3; + constexpr const uint32_t ACCOUNT_SWITCHED = 4; + constexpr const uint32_t ACCOUNT_UNLOCKED = 5; + auto ret = cloudServiceImpl_->OnUserChange(ACCOUNT_DEFAULT, "0", "test"); + EXPECT_EQ(ret, GeneralError::E_OK); + ret = cloudServiceImpl_->OnUserChange(ACCOUNT_DELETE, "0", "test"); + EXPECT_EQ(ret, GeneralError::E_OK); + ret = cloudServiceImpl_->OnUserChange(ACCOUNT_SWITCHED, "0", "test"); + EXPECT_EQ(ret, GeneralError::E_OK); + ret = cloudServiceImpl_->OnUserChange(ACCOUNT_UNLOCKED, "0", "test"); + EXPECT_EQ(ret, GeneralError::E_OK); +} + +/** +* @tc.name: DisableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DisableCloud001, TestSize.Level0) +{ + auto ret = cloudServiceImpl_->DisableCloud("test"); + EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); + ret = cloudServiceImpl_->DisableCloud(TEST_CLOUD_ID); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: ChangeAppSwitch +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ChangeAppSwitch, TestSize.Level0) +{ + std::string id = "testId"; + std::string bundleName = "testName"; + auto ret = cloudServiceImpl_->ChangeAppSwitch(id, bundleName, CloudData::CloudService::SWITCH_ON); + EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); + ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, bundleName, CloudData::CloudService::SWITCH_ON); + EXPECT_EQ(ret, CloudData::CloudService::INVALID_ARGUMENT); + ret = cloudServiceImpl_->ChangeAppSwitch(TEST_CLOUD_ID, TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_OFF); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: EnableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, EnableCloud, TestSize.Level0) +{ + std::string bundleName = "testName"; + std::map switches; + switches.insert_or_assign(TEST_CLOUD_BUNDLE, CloudData::CloudService::SWITCH_ON); + switches.insert_or_assign(bundleName, CloudData::CloudService::SWITCH_ON); + auto ret = cloudServiceImpl_->EnableCloud(TEST_CLOUD_ID, switches); + EXPECT_EQ(ret, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: OnEnableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnEnableCloud, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string id = "testId"; + std::map switches; + ITypesUtil::Marshal(data, id, switches); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ENABLE_CLOUD, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnDisableCloud +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnDisableCloud, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_DISABLE_CLOUD, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeAppSwitch +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeAppSwitch, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteInt32(CloudData::CloudService::SWITCH_ON); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_APP_SWITCH, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnClean +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnClean, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string id = TEST_CLOUD_ID; + std::map actions; + ITypesUtil::Marshal(data, id, actions); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLEAN, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnNotifyDataChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnNotifyDataChange, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnNotifyChange +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnNotifyChange, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + int32_t userId = 100; + data.WriteInt32(userId); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_NOTIFY_DATA_CHANGE_EXT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryStatistics +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryStatistics, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteString(TEST_CLOUD_STORE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_STATISTICS, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryLastSyncInfo +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryLastSyncInfo, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + data.WriteString(TEST_CLOUD_ID); + data.WriteString(TEST_CLOUD_BUNDLE); + data.WriteString(TEST_CLOUD_STORE); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_LAST_SYNC_INFO, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetGlobalCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetGlobalCloudStrategy, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = + cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_GLOBAL_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnAllocResourceAndShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAllocResourceAndShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest( + CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string storeId = "storeId"; + DistributedRdb::PredicatesMemo predicates; + std::vector columns; + std::vector participants; + ITypesUtil::Marshal(data, storeId, predicates, columns, participants); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_ALLOC_RESOURCE_AND_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnShare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnShare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnUnshare +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnUnshare, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_UNSHARE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnExit +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnExit, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_EXIT, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangePrivilege +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangePrivilege, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::Participants participants; + CloudData::Results results; + ITypesUtil::Marshal(data, sharingRes, participants, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_PRIVILEGE, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQuery +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQuery, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, sharingRes, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnQueryByInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnQueryByInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + CloudData::QueryResults results; + ITypesUtil::Marshal(data, invitation, results); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_QUERY_BY_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnConfirmInvitation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnConfirmInvitation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string invitation; + int32_t confirmation = 0; + std::tuple result; + ITypesUtil::Marshal(data, invitation, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CONFIRM_INVITATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnChangeConfirmation +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnChangeConfirmation, TestSize.Level1) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string sharingRes; + int32_t confirmation = 0; + std::pair result; + ITypesUtil::Marshal(data, sharingRes, confirmation, result); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CHANGE_CONFIRMATION, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnSetCloudStrategy +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnSetCloudStrategy, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + uint32_t strategy = 0; + std::vector values; + ITypesUtil::Marshal(data, strategy, values); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_SET_CLOUD_STRATEGY, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnCloudSync +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnCloudSync, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + std::string storeId = "storeId"; + CloudData::CloudService::Option option; + option.syncMode = 4; + option.seqNum = 1; + ITypesUtil::Marshal(data, bundleName, storeId, option); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_CLOUD_SYNC, data, reply); + EXPECT_EQ(ret, ERR_NONE); +} + +/** +* @tc.name: OnInitNotifier +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnInitNotifier, TestSize.Level0) +{ + MessageParcel reply; + MessageParcel data; + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + auto ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); + data.WriteInterfaceToken(cloudServiceImpl_->GetDescriptor()); + std::string bundleName = "bundleName"; + sptr notifier = nullptr; + ITypesUtil::Marshal(data, bundleName, notifier); + ret = cloudServiceImpl_->OnRemoteRequest(CloudData::CloudService::TRANS_INIT_NOTIFIER, data, reply); + EXPECT_EQ(ret, IPC_STUB_INVALID_DATA_ERR); +} + +/** +* @tc.name: SharingUtil001 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil001, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNKNOWN); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_ACCEPTED); + EXPECT_EQ(cfm, SharingCfm::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_REJECTED); + EXPECT_EQ(cfm, SharingCfm::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_SUSPENDED); + EXPECT_EQ(cfm, SharingCfm::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, SharingCfm::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(Confirmation::CFM_BUTT); + EXPECT_EQ(cfm, SharingCfm::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil002 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil002, TestSize.Level0) +{ + auto cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNKNOWN); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_ACCEPTED); + EXPECT_EQ(cfm, Confirmation::CFM_ACCEPTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_REJECTED); + EXPECT_EQ(cfm, Confirmation::CFM_REJECTED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_SUSPENDED); + EXPECT_EQ(cfm, Confirmation::CFM_SUSPENDED); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_UNAVAILABLE); + EXPECT_EQ(cfm, Confirmation::CFM_UNAVAILABLE); + cfm = CloudData::SharingUtil::Convert(SharingCfm::CFM_BUTT); + EXPECT_EQ(cfm, Confirmation::CFM_UNKNOWN); +} + +/** +* @tc.name: SharingUtil003 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil003, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(CenterCode::IPC_ERROR); + EXPECT_EQ(status, Status::IPC_ERROR); + status = CloudData::SharingUtil::Convert(CenterCode::NOT_SUPPORT); + EXPECT_EQ(status, Status::SUCCESS); +} + +/** +* @tc.name: SharingUtil004 +* @tc.desc: +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SharingUtil004, TestSize.Level0) +{ + auto status = CloudData::SharingUtil::Convert(GenErr::E_OK); + EXPECT_EQ(status, Status::SUCCESS); + status = CloudData::SharingUtil::Convert(GenErr::E_ERROR); + EXPECT_EQ(status, Status::ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_INVALID_ARGS); + EXPECT_EQ(status, Status::INVALID_ARGUMENT); + status = CloudData::SharingUtil::Convert(GenErr::E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_EQ(status, Status::STRATEGY_BLOCKING); + status = CloudData::SharingUtil::Convert(GenErr::E_CLOUD_DISABLED); + EXPECT_EQ(status, Status::CLOUD_DISABLE); + status = CloudData::SharingUtil::Convert(GenErr::E_NETWORK_ERROR); + EXPECT_EQ(status, Status::NETWORK_ERROR); + status = CloudData::SharingUtil::Convert(GenErr::E_BUSY); + EXPECT_EQ(status, Status::ERROR); +} + +/** +* @tc.name: DoCloudSync +* @tc.desc: Test the executor_ uninitialized and initialized scenarios +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoCloudSync, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager sync; + CloudData::SyncManager::SyncInfo info(user); + auto ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_NOT_INIT); + size_t max = 12; + size_t min = 5; + sync.executor_ = std::make_shared(max, min); + ret = sync.DoCloudSync(info); + EXPECT_EQ(ret, GenErr::E_OK); + int32_t invalidUser = -1; + sync.StopCloudSync(invalidUser); + ret = sync.StopCloudSync(user); + EXPECT_EQ(ret, GenErr::E_OK); +} + +/** +* @tc.name: GetPostEventTask +* @tc.desc: Test the interface to verify the package name and table name +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetPostEventTask, TestSize.Level0) +{ + std::vector schemas; + schemaMeta_.databases[0].name = "test"; + schemas.push_back(schemaMeta_); + schemaMeta_.bundleName = "test"; + schemas.push_back(schemaMeta_); + + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + std::vector value; + info.tables_.insert_or_assign(TEST_CLOUD_STORE, value); + + CloudData::SyncManager sync; + std::map traceIds; + auto task = sync.GetPostEventTask(schemas, cloudInfo_, info, true, traceIds); + task(); + std::vector lastSyncInfos; + MetaDataManager::GetInstance().LoadMeta(CloudLastSyncInfo::GetKey(user, "test", "test"), lastSyncInfos, true); + EXPECT_TRUE(lastSyncInfos.size() == 0); +} + +/** +* @tc.name: GetRetryer +* @tc.desc: Test the input parameters of different interfaces +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetRetryer, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + CloudData::SyncManager::Duration duration; + std::string prepareTraceId; + auto ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(CloudData::SyncManager::RETRY_TIMES, info, user)( + duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_OK, E_OK, prepareTraceId); + EXPECT_TRUE(ret); + ret = sync.GetRetryer(0, info, user)(duration, E_SYNC_TASK_MERGED, E_SYNC_TASK_MERGED, prepareTraceId); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: GetCallback +* @tc.desc: Test the processing logic of different progress callbacks +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCallback, TestSize.Level0) +{ + int32_t user = 100; + CloudData::SyncManager::SyncInfo info(user); + CloudData::SyncManager sync; + DistributedData::GenDetails result; + StoreInfo storeInfo; + storeInfo.user = user; + storeInfo.bundleName = "testBundleName"; + int32_t triggerMode = MODE_DEFAULT; + std::string prepareTraceId; + GenAsync async = nullptr; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + int32_t process = 0; + async = [&process](const GenDetails &details) { + process = details.begin()->second.progress; + }; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + result.insert_or_assign("test", detail); + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_IN_PROGRESS); + detail.progress = GenProgress::SYNC_FINISH; + result.insert_or_assign("test", detail); + storeInfo.user = -1; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + storeInfo.user = user; + sync.GetCallback(async, storeInfo, triggerMode, prepareTraceId, user)(result); + EXPECT_EQ(process, GenProgress::SYNC_FINISH); +} + +/** +* @tc.name: GetInterval +* @tc.desc: Test the Interval transformation logic of the interface +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetInterval, TestSize.Level0) +{ + CloudData::SyncManager sync; + + auto ret = sync.GetInterval(E_LOCKED_BY_OTHERS); + EXPECT_EQ(ret, CloudData::SyncManager::LOCKED_INTERVAL); + ret = sync.GetInterval(E_BUSY); + EXPECT_EQ(ret, CloudData::SyncManager::BUSY_INTERVAL); + ret = sync.GetInterval(E_OK); + EXPECT_EQ(ret, CloudData::SyncManager::RETRY_INTERVAL); +} + +/** +* @tc.name: GetCloudSyncInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudSyncInfo, TestSize.Level0) +{ + CloudData::SyncManager sync; + CloudInfo cloud; + cloud.user = cloudInfo_.user; + cloud.enableCloud = false; + CloudData::SyncManager::SyncInfo info(cloudInfo_.user); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + info.bundleName_ = TEST_CLOUD_BUNDLE; + auto ret = sync.GetCloudSyncInfo(info, cloud); + EXPECT_TRUE(!ret.empty()); +} + +/** +* @tc.name: RetryCallback +* @tc.desc: Test the retry logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, RetryCallback, TestSize.Level0) +{ + int32_t user = 100; + std::string prepareTraceId; + CloudData::SyncManager sync; + StoreInfo storeInfo; + int32_t retCode = -1; + CloudData::SyncManager::Retryer retry = [&retCode](CloudData::SyncManager::Duration interval, int32_t code, + int32_t dbCode, const std::string &prepareTraceId) { + retCode = code; + return true; + }; + DistributedData::GenDetails result; + auto task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert_or_assign("test", detail); + task = sync.RetryCallback(storeInfo, retry, MODE_DEFAULT, prepareTraceId, user); + task(result); + EXPECT_EQ(retCode, detail.code); +} + +/** +* @tc.name: UpdateCloudInfoFromServer +* @tc.desc: Test updating cloudinfo from the server +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateCloudInfoFromServer, TestSize.Level0) +{ + auto ret = cloudServiceImpl_->UpdateCloudInfoFromServer(cloudInfo_.user); + EXPECT_EQ(ret, E_OK); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test get cloudInfo +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo, TestSize.Level1) +{ + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + auto ret = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(ret.first, CloudData::SUCCESS); +} + +/** +* @tc.name: UpdateSchemaFromServer_001 +* @tc.desc: Test get UpdateSchemaFromServer +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, UpdateSchemaFromServer_001, TestSize.Level1) +{ + auto status = cloudServiceImpl_->UpdateSchemaFromServer(cloudInfo_.user); + EXPECT_EQ(status, CloudData::SUCCESS); +} + +/** + * @tc.name: OnAppInstallTest + * @tc.desc: Test the OnAppInstallTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppInstallTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppInstallTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppInstall(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, GeneralError::E_OK); +} + +/** + * @tc.name: OnAppUpdateTest + * @tc.desc: Test the OnAppUpdateTest + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUpdateTest, TestSize.Level1) +{ + ZLOGI("CloudDataTest OnAppUpdateTest start"); + ASSERT_NE(cloudServiceImpl_, nullptr); + ASSERT_NE(cloudServiceImpl_->factory_.staticActs_, nullptr); + int32_t index = 0; + auto status = cloudServiceImpl_->factory_.staticActs_->OnAppUpdate(TEST_CLOUD_BUNDLE, cloudInfo_.user, index); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); +} + +/** +* @tc.name: UpdateE2eeEnableTest +* @tc.desc: Test the UpdateE2eeEnable +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateE2eeEnableTest, TestSize.Level1) +{ + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(cloudInfo_.user, TEST_CLOUD_BUNDLE, 0); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + + ASSERT_NE(cloudServiceImpl_, nullptr); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, false, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, schemaMeta_.e2eeEnable); + cloudServiceImpl_->UpdateE2eeEnable(schemaKey, true, TEST_CLOUD_BUNDLE); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.e2eeEnable, true); +} + +/** +* @tc.name: SubTask +* @tc.desc: Test the subtask execution logic +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, SubTask, TestSize.Level0) +{ + DistributedData::Subscription sub; + cloudServiceImpl_->InitSubTask(sub, 0); + MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(cloudInfo_.user), sub, true); + cloudServiceImpl_->InitSubTask(sub, 0); + int32_t userId = 0; + CloudData::CloudServiceImpl::Task task = [&userId]() { + userId = cloudInfo_.user; + }; + cloudServiceImpl_->GenSubTask(task, cloudInfo_.user)(); + EXPECT_EQ(userId, cloudInfo_.user); +} + +/** +* @tc.name: ConvertCursor +* @tc.desc: Test the cursor conversion logic when the ResultSet is empty and non-null +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertCursor, TestSize.Level0) +{ + std::map entry; + entry.insert_or_assign("test", "entry"); + auto resultSet = std::make_shared(1, entry); + auto cursor = std::make_shared(resultSet); + auto result = cloudServiceImpl_->ConvertCursor(cursor); + EXPECT_TRUE(!result.empty()); + auto resultSet1 = std::make_shared(); + auto cursor1 = std::make_shared(resultSet1); + auto result1 = cloudServiceImpl_->ConvertCursor(cursor1); + EXPECT_TRUE(result1.empty()); +} + +/** +* @tc.name: GetDbInfoFromExtraData +* @tc.desc: Test the GetDbInfoFromExtraData function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetDbInfoFromExtraData, TestSize.Level0) +{ + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.alias = TEST_CLOUD_DATABASE_ALIAS_1; + + SchemaMeta schemaMeta; + schemaMeta.databases.push_back(database); + + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + database.tables.push_back(table); + SchemaMeta::Table table1; + table1.name = "test_cloud_table_name1"; + table1.alias = "test_cloud_table_alias1"; + table1.sharedTableName = "test_share_table_name1"; + database.tables.emplace_back(table1); + + database.alias = TEST_CLOUD_DATABASE_ALIAS_2; + schemaMeta.databases.push_back(database); + + ExtraData extraData; + extraData.info.containerName = TEST_CLOUD_DATABASE_ALIAS_2; + auto result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName = "test_cloud_table_alias2"; + extraData.info.tables.emplace_back(tableName); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); + + std::string tableName1 = "test_cloud_table_alias1"; + extraData.info.tables.emplace_back(tableName1); + extraData.info.scopes.emplace_back(DistributedData::ExtraData::SHARED_TABLE); + result = cloudServiceImpl_->GetDbInfoFromExtraData(extraData, schemaMeta); + EXPECT_EQ(result.begin()->first, TEST_CLOUD_STORE); +} + +/** +* @tc.name: QueryTableStatistic +* @tc.desc: Test the QueryTableStatistic function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, QueryTableStatistic, TestSize.Level0) +{ + auto store = std::make_shared(); + if (store != nullptr) { + std::map entry = { { "inserted", "TEST" }, { "updated", "TEST" }, { "normal", "TEST" } }; + store->MakeCursor(entry); + } + auto [ret, result] = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + if (store != nullptr) { + std::map entry = { { "Test", 1 } }; + store->MakeCursor(entry); + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_TRUE(ret); + + if (store != nullptr) { + store->cursor_ = nullptr; + } + std::tie(ret, result) = cloudServiceImpl_->QueryTableStatistic("test", store); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetSchemaMeta +* @tc.desc: Test the GetSchemaMeta function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetSchemaMeta, TestSize.Level0) +{ + int32_t userId = 101; + int32_t instanceId = 0; + CloudInfo cloudInfo; + cloudInfo.user = userId; + cloudInfo.id = TEST_CLOUD_ID; + cloudInfo.enableCloud = true; + + CloudInfo::AppInfo appInfo; + appInfo.bundleName = TEST_CLOUD_BUNDLE; + appInfo.appId = TEST_CLOUD_APPID; + appInfo.version = 1; + appInfo.cloudSwitch = true; + + cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + std::string bundleName = "testName"; + auto [status, meta] = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + bundleName = TEST_CLOUD_BUNDLE; + DistributedData::SchemaMeta schemeMeta; + schemeMeta.bundleName = TEST_CLOUD_BUNDLE; + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION + 1; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + schemeMeta.metaVersion = DistributedData::SchemaMeta::CURRENT_VERSION; + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), schemeMeta, true); + std::tie(status, meta) = cloudServiceImpl_->GetSchemaMeta(userId, bundleName, instanceId); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.metaVersion, DistributedData::SchemaMeta::CURRENT_VERSION); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE, instanceId), true); + MetaDataManager::GetInstance().DelMeta(cloudInfo.GetKey(), true); +} + +/** +* @tc.name: GetAppSchemaFromServer +* @tc.desc: Test the GetAppSchemaFromServer function input parameters of different parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetAppSchemaFromServer, TestSize.Level0) +{ + int32_t userId = CloudServerMock::INVALID_USER_ID; + std::string bundleName; + delegate_.isNetworkAvailable_ = false; + auto [status, meta] = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + userId = 100; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SCHEMA_INVALID); + bundleName = TEST_CLOUD_BUNDLE; + std::tie(status, meta) = cloudServiceImpl_->GetAppSchemaFromServer(userId, bundleName); + EXPECT_EQ(status, CloudData::CloudService::SUCCESS); + EXPECT_EQ(meta.bundleName, schemaMeta_.bundleName); +} + +/** +* @tc.name: OnAppUninstall +* @tc.desc: Test the OnAppUninstall function delete the subscription data +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, OnAppUninstall, TestSize.Level0) +{ + CloudData::CloudServiceImpl::CloudStatic cloudStatic; + int32_t userId = 1001; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, 0); + MetaDataManager::GetInstance().SaveMeta(Subscription::GetKey(userId), sub, true); + CloudInfo cloudInfo; + cloudInfo.user = userId; + CloudInfo::AppInfo appInfo; + cloudInfo.apps.insert_or_assign(TEST_CLOUD_BUNDLE, appInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo.GetKey(), cloudInfo, true); + int32_t index = 1; + auto ret = cloudStatic.OnAppUninstall(TEST_CLOUD_BUNDLE, userId, index); + EXPECT_EQ(ret, E_OK); + Subscription sub1; + EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(Subscription::GetKey(userId), sub1, true)); + EXPECT_EQ(sub1.expiresTime.size(), 0); +} + +/** +* @tc.name: GetCloudInfo +* @tc.desc: Test the GetCloudInfo with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetCloudInfo001, TestSize.Level1) +{ + int32_t userId = 1000; + auto [status, cloudInfo] = cloudServiceImpl_->GetCloudInfo(userId); + EXPECT_EQ(status, CloudData::CloudService::ERROR); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + delegate_.isNetworkAvailable_ = false; + std::tie(status, cloudInfo) = cloudServiceImpl_->GetCloudInfo(cloudInfo_.user); + EXPECT_EQ(status, CloudData::CloudService::NETWORK_ERROR); + delegate_.isNetworkAvailable_ = true; +} + +/** +* @tc.name: PreShare +* @tc.desc: Test the PreShare with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, PreShare, TestSize.Level0) +{ + int32_t userId = 1000; + StoreInfo info; + info.instanceId = 0; + info.bundleName = TEST_CLOUD_BUNDLE; + info.storeName = TEST_CLOUD_BUNDLE; + info.user = userId; + info.path = TEST_CLOUD_PATH; + StoreMetaData meta(info); + meta.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + MetaDataManager::GetInstance().SaveMeta(meta.GetKey(), meta, true); + DistributedRdb::RdbQuery query; + auto [status, cursor] = cloudServiceImpl_->PreShare(info, query); + EXPECT_EQ(status, GeneralError::E_ERROR); +} + +/** +* @tc.name: InitSubTask +* @tc.desc: Test the InitSubTask with invalid parameters +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, InitSubTask, TestSize.Level0) +{ + uint64_t minInterval = 0; + uint64_t expire = 24 * 60 * 60 * 1000; // 24hours, ms + ExecutorPool::TaskId taskId = 100; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + std::shared_ptr executor = std::move(cloudServiceImpl_->executor_); + cloudServiceImpl_->executor_ = nullptr; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(sub.GetMinExpireTime(), expire); + cloudServiceImpl_->executor_ = std::move(executor); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = taskId; + cloudServiceImpl_->expireTime_ = 0; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_EQ(cloudServiceImpl_->subTask_, taskId); + cloudServiceImpl_->subTask_ = ExecutorPool::INVALID_TASK_ID; + cloudServiceImpl_->InitSubTask(sub, minInterval); + EXPECT_NE(cloudServiceImpl_->subTask_, ExecutorPool::INVALID_TASK_ID); +} + +/** +* @tc.name: DoSubscribe +* @tc.desc: Test DoSubscribe functions with invalid parameter. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, DoSubscribe, TestSize.Level0) +{ + Subscription sub; + sub.userId = cloudInfo_.user; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + int user = cloudInfo_.user; + auto status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = "testId"; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + sub.id = TEST_CLOUD_APPID; + MetaDataManager::GetInstance().SaveMeta(sub.GetKey(), sub, true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); + MetaDataManager::GetInstance().DelMeta(cloudInfo_.GetKey(), true); + status = cloudServiceImpl_->DoSubscribe(user, CloudSyncScene::ENABLE_CLOUD); + EXPECT_FALSE(status); +} + +/** +* @tc.name: Report +* @tc.desc: Test Report. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, Report, TestSize.Level0) +{ + auto cloudReport = std::make_shared(); + auto prepareTraceId = cloudReport->GetPrepareTraceId(100); + EXPECT_EQ(prepareTraceId, ""); + auto requestTraceId = cloudReport->GetRequestTraceId(100); + EXPECT_EQ(requestTraceId, ""); + ReportParam reportParam{ 100, TEST_CLOUD_BUNDLE }; + auto ret = cloudReport->Report(reportParam); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: IsOn +* @tc.desc: Test IsOn. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsOn, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + int32_t instanceId = 0; + auto ret = cloudInfo.IsOn("", instanceId); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: IsAllSwitchOff +* @tc.desc: Test IsAllSwitchOff. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, IsAllSwitchOff, TestSize.Level0) +{ + auto cloudServerMock = std::make_shared(); + auto user = AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID()); + auto [status, cloudInfo] = cloudServerMock->GetServerInfo(user, true); + auto ret = cloudInfo.IsAllSwitchOff(); + EXPECT_FALSE(ret); +} + +/** +* @tc.name: GetMinExpireTime +* @tc.desc: Test GetMinExpireTime. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetMinExpireTime, TestSize.Level0) +{ + uint64_t expire = 0; + Subscription sub; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + sub.GetMinExpireTime(); + expire = 24 * 60 * 60 * 1000; + sub.expiresTime.insert_or_assign(TEST_CLOUD_BUNDLE, expire); + expire = 24 * 60 * 60; + sub.expiresTime.insert_or_assign("test_cloud_bundleName1", expire); + EXPECT_EQ(sub.GetMinExpireTime(), expire); +} + + /** +* @tc.name: GetTableNames +* @tc.desc: Test GetTableNames. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetTableNames, TestSize.Level0) +{ + SchemaMeta::Database database; + SchemaMeta::Table table; + table.name = "test_cloud_table_name"; + table.alias = "test_cloud_table_alias"; + table.sharedTableName = "test_share_table_name"; + database.tables.emplace_back(table); + auto tableNames = database.GetTableNames(); + EXPECT_EQ(tableNames.size(), 2); +} + +/** +* @tc.name: BlobToAssets +* @tc.desc: cloud_data_translate BlobToAsset error test. +* @tc.type: FUNC +* @tc.require: +* @tc.author: SQL +*/ +HWTEST_F(CloudDataTest, BlobToAssets, TestSize.Level1) +{ + CloudData::RdbCloudDataTranslate rdbTranslate; + DistributedDB::Asset asset = { + .name = "", + .assetId = "", + .subpath = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "" + }; + std::vector blob; + auto result = rdbTranslate.BlobToAsset(blob); + EXPECT_EQ(result, asset); + + DistributedDB::Assets assets; + blob = rdbTranslate.AssetsToBlob(assets); + auto results = rdbTranslate.BlobToAssets(blob); + EXPECT_EQ(results, assets); +} + +/** +* @tc.name: GetPriorityLevel001 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel001, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 2); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel002 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel002, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_TIME_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + memo.tables_ = { TEST_CLOUD_TABLE }; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel003 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel003, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 0); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, .isAsync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: GetPriorityLevel004 +* @tc.desc: GetPriorityLevel test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, GetPriorityLevel004, TestSize.Level1) +{ + EventCenter::GetInstance().Subscribe(CloudEvent::LOCAL_CHANGE, [](const Event &event) { + auto &evt = static_cast(event); + auto mode = evt.GetMode(); + EXPECT_EQ(GeneralStore::GetPriorityLevel(GeneralStore::GetHighMode(static_cast(mode))), 1); + }); + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + DistributedRdb::RdbService::Option option{ .mode = GeneralStore::SyncMode::CLOUD_CLOUD_FIRST, + .seqNum = 0, + .isAsync = true, + .isAutoSync = true }; + DistributedRdb::PredicatesMemo memo; + rdbServiceImpl.DoCloudSync(param, option, memo, nullptr); +} + +/** +* @tc.name: UpdateSchemaFromHap001 +* @tc.desc: Test the UpdateSchemaFromHap with invalid user +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap001, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = -1 }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap002 +* @tc.desc: Test the UpdateSchemaFromHap with invalid bundleName +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap002, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { .instIndex = 0, .bundleName = "", .user = cloudInfo_.user }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::ERROR); +} + +/** +* @tc.name: UpdateSchemaFromHap003 +* @tc.desc: Test the UpdateSchemaFromHap with the schema application is not configured +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap003, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, schemaMeta_.version); +} + +/** +* @tc.name: UpdateSchemaFromHap004 +* @tc.desc: Test the UpdateSchemaFromHap with valid parameter +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateSchemaFromHap004, TestSize.Level1) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudInfo::AppInfo exampleAppInfo; + exampleAppInfo.bundleName = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.appId = COM_EXAMPLE_TEST_CLOUD; + exampleAppInfo.version = 1; + exampleAppInfo.cloudSwitch = true; + CloudInfo cloudInfo; + MetaDataManager::GetInstance().LoadMeta(cloudInfo_.GetKey(), cloudInfo, true); + cloudInfo.apps[COM_EXAMPLE_TEST_CLOUD] = std::move(exampleAppInfo); + MetaDataManager::GetInstance().SaveMeta(cloudInfo_.GetKey(), cloudInfo, true); + CloudData::CloudServiceImpl::HapInfo info = { + .instIndex = 0, .bundleName = COM_EXAMPLE_TEST_CLOUD, .user = cloudInfo_.user + }; + auto ret = cloudServiceImpl_->UpdateSchemaFromHap(info); + EXPECT_EQ(ret, Status::SUCCESS); + SchemaMeta schemaMeta; + std::string schemaKey = CloudInfo::GetSchemaKey(info.user, info.bundleName, info.instIndex); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)); + EXPECT_EQ(schemaMeta.version, SCHEMA_VERSION); +} + +/** +* @tc.name: UpdateClearWaterMark001 +* @tc.desc: Test UpdateClearWaterMark001 the database.version not found. +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark001, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE_1; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark002 +* @tc.desc: Test UpdateClearWaterMark002 the same database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark002, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 1; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); +} + +/** +* @tc.name: UpdateClearWaterMark003 +* @tc.desc: Test UpdateClearWaterMark003 the different database.version +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, UpdateClearWaterMark003, TestSize.Level0) +{ + ASSERT_NE(cloudServiceImpl_, nullptr); + CloudData::CloudServiceImpl::HapInfo hapInfo = { + .instIndex = 0, .bundleName = TEST_CLOUD_BUNDLE, .user = cloudInfo_.user + }; + SchemaMeta::Database database; + database.name = TEST_CLOUD_STORE; + database.version = 1; + SchemaMeta schemaMeta; + schemaMeta.version = 1; + schemaMeta.databases.push_back(database); + + SchemaMeta::Database database1; + database1.name = TEST_CLOUD_STORE; + database1.version = 2; + SchemaMeta newSchemaMeta; + newSchemaMeta.version = 0; + newSchemaMeta.databases.push_back(database1); + cloudServiceImpl_->UpdateClearWaterMark(hapInfo, newSchemaMeta, schemaMeta); + + CloudMark metaData; + metaData.bundleName = hapInfo.bundleName; + metaData.userId = hapInfo.user; + metaData.index = hapInfo.instIndex; + metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; + metaData.storeId = database1.name; + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData.GetKey(), metaData, true)); + EXPECT_TRUE(metaData.isClearWaterMark); + MetaDataManager::GetInstance().DelMeta(metaData.GetKey(), true); +} + +/** +* @tc.name: GetPrepareTraceId +* @tc.desc: Test GetPrepareTraceId && GetUser +* @tc.type: FUNC +* @tc.require: +*/ +HWTEST_F(CloudDataTest, GetPrepareTraceId, TestSize.Level0) +{ + SyncParam syncParam; + syncParam.prepareTraceId = TEST_TRACE_ID; + syncParam.user = EVT_USER; + auto async = [](const GenDetails &details) {}; + SyncEvent::EventInfo eventInfo(syncParam, true, nullptr, async); + StoreInfo storeInfo; + SyncEvent evt(storeInfo, std::move(eventInfo)); + EXPECT_EQ(evt.GetUser(), EVT_USER); + EXPECT_EQ(evt.GetPrepareTraceId(), TEST_TRACE_ID); +} + +/** +* @tc.name: TryUpdateDeviceId001 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId001, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId002 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId002, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId003 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId003, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = true; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: TryUpdateDeviceId004 +* @tc.desc: TryUpdateDeviceId test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, TryUpdateDeviceId004, TestSize.Level1) +{ + DistributedRdb::RdbServiceImpl rdbServiceImpl; + DistributedRdb::RdbSyncerParam param{ .bundleName_ = TEST_CLOUD_BUNDLE, .storeName_ = TEST_CLOUD_STORE }; + StoreMetaData oldMeta; + oldMeta.deviceId = "oldUuidtest"; + oldMeta.user = "100"; + oldMeta.bundleName = "test_appid_001"; + oldMeta.storeId = "test_storeid_001"; + oldMeta.isNeedUpdateDeviceId = false; + oldMeta.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_END; + bool isSuccess = MetaDataManager::GetInstance().SaveMeta(oldMeta.GetKeyWithoutPath(), oldMeta); + EXPECT_EQ(isSuccess, true); + StoreMetaData meta1 = oldMeta; + auto ret = rdbServiceImpl.TryUpdateDeviceId(param, oldMeta, meta1); + EXPECT_EQ(ret, true); + MetaDataManager::GetInstance().DelMeta(oldMeta.GetKeyWithoutPath()); +} + +/** +* @tc.name: OnInitialize +* @tc.desc: OnInitialize test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, OnInitialize, TestSize.Level1) +{ + auto code = cloudServiceImpl_->OnInitialize(); + EXPECT_EQ(code, E_OK); +} + +/** +* @tc.name: CleanWaterVersion +* @tc.desc: CleanWaterVersion test +* @tc.type: FUNC +* @tc.require: +* @tc.author: +*/ +HWTEST_F(CloudDataTest, CleanWaterVersion, TestSize.Level1) +{ + auto ret = cloudServiceImpl_->CleanWaterVersion(200); + EXPECT_FALSE(ret); + ret = cloudServiceImpl_->CleanWaterVersion( + AccountDelegate::GetInstance()->GetUserByToken(IPCSkeleton::GetCallingTokenID())); + EXPECT_TRUE(ret); +} + +/** +* @tc.name: ConvertGenDetailsCode +* @tc.desc: Test ConvertGenDetailsCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, ConvertGenDetailsCode, TestSize.Level0) +{ + DistributedData::GenDetails result; + GenProgressDetail detail; + detail.progress = GenProgress::SYNC_IN_PROGRESS; + detail.code = 100; + result.insert(std::make_pair("test", detail)); + auto details = CloudData::SyncManager::ConvertGenDetailsCode(result); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result1; + GenProgressDetail detail1; + detail1.progress = GenProgress::SYNC_IN_PROGRESS; + detail1.code = E_ERROR; + result1.insert(std::make_pair("test", detail1)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result1); + EXPECT_TRUE(details["test"].code == E_ERROR); + + DistributedData::GenDetails result2; + GenProgressDetail detail2; + detail2.progress = GenProgress::SYNC_IN_PROGRESS; + detail2.code = E_OK; + result2.insert(std::make_pair("test", detail2)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result2); + EXPECT_TRUE(details["test"].code == E_OK); + + DistributedData::GenDetails result3; + GenProgressDetail detail3; + detail3.progress = GenProgress::SYNC_IN_PROGRESS; + detail3.code = E_BLOCKED_BY_NETWORK_STRATEGY; + result3.insert(std::make_pair("test", detail3)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result3); + EXPECT_TRUE(details["test"].code == E_BLOCKED_BY_NETWORK_STRATEGY); + + DistributedData::GenDetails result4; + GenProgressDetail detail4; + detail4.progress = GenProgress::SYNC_IN_PROGRESS; + detail4.code = E_BUSY; + result4.insert(std::make_pair("test", detail4)); + details = CloudData::SyncManager::ConvertGenDetailsCode(result4); + EXPECT_TRUE(details["test"].code == E_ERROR); +} + +/** +* @tc.name: ConvertValidGeneralCode +* @tc.desc: Test ConvertValidGeneralCode function. +* @tc.type: FUNC +* @tc.require: + */ +HWTEST_F(CloudDataTest, GetValidGeneralCode, TestSize.Level0) +{ + auto ret = CloudData::SyncManager::ConvertValidGeneralCode(E_OK); + EXPECT_TRUE(ret == E_OK); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_ERROR); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NETWORK_ERROR); + EXPECT_TRUE(ret == E_NETWORK_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_CLOUD_DISABLED); + EXPECT_TRUE(ret == E_CLOUD_DISABLED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_LOCKED_BY_OTHERS); + EXPECT_TRUE(ret == E_LOCKED_BY_OTHERS); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_RECODE_LIMIT_EXCEEDED); + EXPECT_TRUE(ret == E_RECODE_LIMIT_EXCEEDED); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_NO_SPACE_FOR_ASSET); + EXPECT_TRUE(ret == E_NO_SPACE_FOR_ASSET); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BLOCKED_BY_NETWORK_STRATEGY); + EXPECT_TRUE(ret == E_BLOCKED_BY_NETWORK_STRATEGY); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_BUSY); + EXPECT_TRUE(ret == E_ERROR); + ret = CloudData::SyncManager::ConvertValidGeneralCode(E_SYNC_TASK_MERGED); + EXPECT_TRUE(ret == E_ERROR); +} } // namespace DistributedDataTest } // namespace OHOS::Test \ No newline at end of file -- Gitee From bc6fd158cefe7b4b3f7b293c677b6b5a3c4ca38b Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 15:24:49 +0800 Subject: [PATCH 19/24] code fix Signed-off-by: z30053452 --- .../test/kvdb_service_stub_unittest.cpp | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index ff38778db..1abf636d9 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -35,7 +35,12 @@ using AppId = OHOS::DistributedKv::AppId; using Options = OHOS::DistributedKv::Options; const std::u16string INTERFACE_TOKEN = u"OHOS.DistributedKv.IKvStoreDataService"; static OHOS::DistributedKv::StoreId storeId = { "kvdb_test_storeid" }; -static OHOS::DistributedKv::AppId appId = { "ohos.test.kvdb" }; +static AppId appId = { "kvdb_test_appid" }; +static std::string hapName = "testHap"; +static std::string invalidHapName = "./testHap"; +static OHOS::DistributedKv::StoreId invalidStoreId = { "./kvdb_test_storeid" }; +static AppId invalidAppId = { "\\kvdb_test_appid" }; + namespace OHOS::Test { namespace DistributedDataTest { class KVDBServiceStubTest : public testing::Test { @@ -159,10 +164,8 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = "testHap"; + options.hapName = hapName; ITypesUtil::Marshal(data, options); - AppId appId = {"testApp"}; - StoreId storeId = {"testStoreId"}; auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -178,11 +181,9 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = "testHap"; + options.hapName = hapName; ITypesUtil::Marshal(data, options); - AppId appId = {"test/App"}; - StoreId storeId = {"test\\StoreId"}; - auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnBeforeCreate(invalidAppId, invalidStoreId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -197,10 +198,8 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate003, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = "./testHap"; + options.hapName = invalidHapName; ITypesUtil::Marshal(data, options); - AppId appId = {"testApp"}; - StoreId storeId = {"testStoreId"}; auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -217,10 +216,8 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate001, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = "testHap"; + options.hapName = hapName; ITypesUtil::Marshal(data, options); - AppId appId = {"testApp"}; - StoreId storeId = {"testStore"}; auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -237,11 +234,9 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = "testHap"; + options.hapName = hapName; ITypesUtil::Marshal(data, options); - AppId appId = {"../testApp"}; - StoreId storeId = {"\\testStore"}; - auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnAfterCreate(invalidAppId, invalidStoreId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -257,10 +252,8 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate003, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = "./testHap"; + options.hapName = invalidHapName; ITypesUtil::Marshal(data, options); - AppId appId = {"testApp"}; - StoreId storeId = {"testStoreId"}; auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } -- Gitee From c77fe0dde2184244a80d6083ea7e11e23b25bac6 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 16:06:02 +0800 Subject: [PATCH 20/24] code fix Signed-off-by: z30053452 --- .../service/test/kvdb_service_stub_unittest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index 1abf636d9..e1e435043 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -34,11 +34,11 @@ using StoreId = OHOS::DistributedKv::StoreId; using AppId = OHOS::DistributedKv::AppId; using Options = OHOS::DistributedKv::Options; const std::u16string INTERFACE_TOKEN = u"OHOS.DistributedKv.IKvStoreDataService"; -static OHOS::DistributedKv::StoreId storeId = { "kvdb_test_storeid" }; +static StoreId storeId = { "kvdb_test_storeid" }; static AppId appId = { "kvdb_test_appid" }; static std::string hapName = "testHap"; static std::string invalidHapName = "./testHap"; -static OHOS::DistributedKv::StoreId invalidStoreId = { "./kvdb_test_storeid" }; +static StoreId invalidStoreId = { "./kvdb_test_storeid" }; static AppId invalidAppId = { "\\kvdb_test_appid" }; namespace OHOS::Test { -- Gitee From 61419859c05bebb680aaef1141d2d9ee28c57e39 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 16:19:25 +0800 Subject: [PATCH 21/24] code fix Signed-off-by: z30053452 --- .../test/kvdb_service_stub_unittest.cpp | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index e1e435043..de1630c9c 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -34,12 +34,12 @@ using StoreId = OHOS::DistributedKv::StoreId; using AppId = OHOS::DistributedKv::AppId; using Options = OHOS::DistributedKv::Options; const std::u16string INTERFACE_TOKEN = u"OHOS.DistributedKv.IKvStoreDataService"; -static StoreId storeId = { "kvdb_test_storeid" }; -static AppId appId = { "kvdb_test_appid" }; -static std::string hapName = "testHap"; -static std::string invalidHapName = "./testHap"; -static StoreId invalidStoreId = { "./kvdb_test_storeid" }; -static AppId invalidAppId = { "\\kvdb_test_appid" }; +static const StoreId STOREID = { "kvdb_test_storeid" }; +static const AppId APPID = { "kvdb_test_appid" }; +static const std::string HAPNAME = "testHap"; +static const std::string INVALID_HapName = "./testHap"; +static const StoreId INVALID_STOREID = { "./kvdb_test_storeid" }; +static const AppId INVALID_APPID = { "\\kvdb_test_appid" }; namespace OHOS::Test { namespace DistributedDataTest { @@ -164,9 +164,9 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = hapName; + options.hapName = HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnBeforeCreate(APPID, STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -181,9 +181,9 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = hapName; + options.hapName = HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnBeforeCreate(invalidAppId, invalidStoreId, data, reply); + auto status = kvdbServiceStub->OnBeforeCreate(INVALID_APPID, INVALID_STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -198,9 +198,9 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate003, TestSize.Level1) MessageParcel data; MessageParcel reply; Options options; - options.hapName = invalidHapName; + options.hapName = INVALID_HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnBeforeCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnBeforeCreate(APPID, STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -216,9 +216,9 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate001, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = hapName; + options.hapName = HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnAfterCreate(APPID, STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -234,9 +234,9 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = hapName; + options.hapName = HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnAfterCreate(invalidAppId, invalidStoreId, data, reply); + auto status = kvdbServiceStub->OnAfterCreate(INVALID_APPID, INVALID_STORE, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } @@ -252,9 +252,9 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate003, TestSize.Level1) data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; - options.hapName = invalidHapName; + options.hapName = INVALID_HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnAfterCreate(appId, storeId, data, reply); + auto status = kvdbServiceStub->OnAfterCreate(APPID, STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } -- Gitee From 6f1ec7fd13cc39a9bcc074dba4ce8dc3f81b4635 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 16:33:17 +0800 Subject: [PATCH 22/24] code fix Signed-off-by: z30053452 --- .../service/test/kvdb_service_stub_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index de1630c9c..f5b444089 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -37,7 +37,7 @@ const std::u16string INTERFACE_TOKEN = u"OHOS.DistributedKv.IKvStoreDataService" static const StoreId STOREID = { "kvdb_test_storeid" }; static const AppId APPID = { "kvdb_test_appid" }; static const std::string HAPNAME = "testHap"; -static const std::string INVALID_HapName = "./testHap"; +static const std::string INVALID_HAPNAME = "./testHap"; static const StoreId INVALID_STOREID = { "./kvdb_test_storeid" }; static const AppId INVALID_APPID = { "\\kvdb_test_appid" }; -- Gitee From 0877707e161d4770cd5f1c5a08bf2290a799da19 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Thu, 24 Jul 2025 17:06:15 +0800 Subject: [PATCH 23/24] code fix Signed-off-by: z30053452 --- .../service/test/kvdb_service_stub_unittest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index f5b444089..e12cada6e 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -236,7 +236,7 @@ HWTEST_F(KVDBServiceStubTest, OnAfterCreate002, TestSize.Level1) Options options; options.hapName = HAPNAME; ITypesUtil::Marshal(data, options); - auto status = kvdbServiceStub->OnAfterCreate(INVALID_APPID, INVALID_STORE, data, reply); + auto status = kvdbServiceStub->OnAfterCreate(INVALID_APPID, INVALID_STOREID, data, reply); EXPECT_EQ(status, IPC_STUB_INVALID_DATA_ERR); } -- Gitee From 0f542db01d6d9ef554a94b8a1bb4b5a5df13e050 Mon Sep 17 00:00:00 2001 From: z30053452 Date: Fri, 25 Jul 2025 14:52:09 +0800 Subject: [PATCH 24/24] code fix Signed-off-by: z30053452 --- .../service/test/kvdb_service_stub_unittest.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp index e12cada6e..59a0a826e 100644 --- a/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp +++ b/services/distributeddataservice/service/test/kvdb_service_stub_unittest.cpp @@ -162,6 +162,7 @@ HWTEST_F(KVDBServiceStubTest, CheckPermission001, TestSize.Level1) HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) { MessageParcel data; + data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; options.hapName = HAPNAME; @@ -179,6 +180,7 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate001, TestSize.Level1) HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) { MessageParcel data; + data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; options.hapName = HAPNAME; @@ -196,6 +198,7 @@ HWTEST_F(KVDBServiceStubTest, OnBeforeCreate002, TestSize.Level1) HWTEST_F(KVDBServiceStubTest, OnBeforeCreate003, TestSize.Level1) { MessageParcel data; + data.WriteInterfaceToken(INTERFACE_TOKEN); MessageParcel reply; Options options; options.hapName = INVALID_HAPNAME; -- Gitee