From 80e40d6ec891022bd59b3aa608bc72a4f0fc8bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E4=BD=B3=E5=85=B4?= Date: Mon, 4 Aug 2025 21:04:46 +0800 Subject: [PATCH] =?UTF-8?q?tdd=E8=A6=86=E7=9B=96=E7=8E=87=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 常佳兴 Change-Id: I6a02495363fbc501d147bb5d352028dab8f97341 --- .../service/test/BUILD.gn | 50 ++- .../service/test/rdb_asset_loader_test.cpp | 304 +++++++++++++++++- .../service/test/rdb_general_store_test.cpp | 18 ++ 3 files changed, 359 insertions(+), 13 deletions(-) diff --git a/services/distributeddataservice/service/test/BUILD.gn b/services/distributeddataservice/service/test/BUILD.gn index 791ef3b46..da148cd83 100644 --- a/services/distributeddataservice/service/test/BUILD.gn +++ b/services/distributeddataservice/service/test/BUILD.gn @@ -558,19 +558,14 @@ ohos_unittest("RdbResultSetImplTest") { } ohos_unittest("RdbServiceTest") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + blocklist = "${datamgr_service_path}/cfi_blocklist.txt" + } module_out_path = module_output_path sources = [ - "${data_service_path}/service/common/value_proxy.cpp", - "${data_service_path}/service/rdb/cache_cursor.cpp", - "${data_service_path}/service/rdb/rdb_asset_loader.cpp", - "${data_service_path}/service/rdb/rdb_cloud.cpp", - "${data_service_path}/service/rdb/rdb_cursor.cpp", - "${data_service_path}/service/rdb/rdb_general_store.cpp", - "${data_service_path}/service/rdb/rdb_notifier_proxy.cpp", - "${data_service_path}/service/rdb/rdb_query.cpp", - "${data_service_path}/service/rdb/rdb_result_set_impl.cpp", - "${data_service_path}/service/rdb/rdb_result_set_stub.cpp", - "${data_service_path}/service/rdb/rdb_watcher.cpp", "cache_cursor_test.cpp", "mock/general_watcher_mock.cpp", "mock/relational_store_manager_mock.cpp", @@ -607,10 +602,41 @@ ohos_unittest("RdbServiceTest") { ] deps = [ + "${data_service_path}/adapter/account:distributeddata_account", + "${data_service_path}/adapter/communicator:distributeddata_communicator", + "${data_service_path}/adapter/dfx:distributeddata_dfx", + "${data_service_path}/adapter/network:distributeddata_network", "${data_service_path}/adapter/utils:distributeddata_utils", "${data_service_path}/framework:distributeddatasvcfwk", - "${data_service_path}/service:distributeddatasvc", + "${data_service_path}/service/backup:distributeddata_backup", + "${data_service_path}/service/bootstrap:distributeddata_bootstrap", + "${data_service_path}/service/common:distributeddata_common", + "${data_service_path}/service/dumper:distributeddata_dumper", + "${data_service_path}/service/matrix:distributeddata_matrix", + "${data_service_path}/service/permission:distributeddata_permit", ] + + if (defined(global_parts_info) && + defined(global_parts_info.theme_screenlock_mgr)) { + deps += + [ "${data_service_path}/adapter/screenlock:distributeddata_screenlock" ] + } + + if (datamgr_service_cloud) { + deps += [ "${data_service_path}/service/cloud:distributeddata_cloud" ] + } + + if (datamgr_service_kvdb) { + deps += [ "${data_service_path}/service/kvdb:distributeddata_kvdb" ] + } + + if (datamgr_service_rdb) { + deps += [ "${data_service_path}/service/rdb:distributeddata_rdb" ] + } + + if (datamgr_service_object) { + deps += [ "${data_service_path}/service/object:distributeddata_object" ] + } } ohos_unittest("RdbServiceImplTest") { diff --git a/services/distributeddataservice/service/test/rdb_asset_loader_test.cpp b/services/distributeddataservice/service/test/rdb_asset_loader_test.cpp index e15201061..a24357120 100644 --- a/services/distributeddataservice/service/test/rdb_asset_loader_test.cpp +++ b/services/distributeddataservice/service/test/rdb_asset_loader_test.cpp @@ -16,13 +16,15 @@ #include "rdb_asset_loader.h" -#include "gtest/gtest.h" #include "log_print.h" +#include "object_snapshot.h" #include "rdb_notifier_proxy.h" #include "rdb_watcher.h" #include "store/cursor.h" #include "store/general_value.h" #include "store/general_watcher.h" +#include "gtest/gtest.h" + using namespace OHOS; using namespace testing; using namespace testing::ext; @@ -256,6 +258,306 @@ HWTEST_F(RdbAssetLoaderTest, PostEvent002, TestSize.Level0) EXPECT_EQ(deleteAssets.size(), 1); } +/** +@tc.name: PostEvent003 +@tc.desc: RdbAssetLoader PostEvent003 test +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent003, TestSize.Level0) { + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = nullptr; + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::DOWNLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(deleteAssets.size(), 0); + EXPECT_EQ(skipAssets.size(), 0); +} + +/** +@tc.name: PostEvent004 +@tc.desc: RdbAssetLoader PostEvent004 test,snapshots_ can find data with a value of null +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent004, TestSize.Level0) { + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent004", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + bindAssets->insert({"PostEvent004", nullptr}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::DOWNLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(deleteAssets.size(), 0); + EXPECT_EQ(skipAssets.size(), 0); +} + +/** +@tc.name: PostEvent005 +@tc.desc: RdbAssetLoader PostEvent005 test,snapshots_ can find data and the value is not null +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent005, TestSize.Level0) { + class ObjectSnapshotMock : public DistributedObject::ObjectSnapshot { + public: + int32_t Download(Asset &asset) override { + hasDownload = true; + return 0; + } + bool hasDownload = false; + }; + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent005", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + auto objectSnapshotMock = std::make_shared(); + bindAssets->insert({"PostEvent005", objectSnapshotMock}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::DOWNLOAD, assets, + skipAssets, deleteAssets); + EXPECT_EQ(objectSnapshotMock->hasDownload, true); +} + +/** +@tc.name: PostEvent006 +@tc.desc: RdbAssetLoader PostEvent006 test,snapshots_ not found +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent006, TestSize.Level0) { + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + bindAssets->insert({"PostEvent006", std::make_shared()}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::DOWNLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(deleteAssets.size(), 0); + EXPECT_EQ(skipAssets.size(), 0); +} + +/** +@tc.name: PostEvent007 +@tc.desc: RdbAssetLoader PostEvent007 test, Both deleteAssets and skipAssets can be found. +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent007, TestSize.Level0) { + class ObjectSnapshotMock : public DistributedObject::ObjectSnapshot { + public: + int32_t Downloaded(Asset &asset) override { + hasDownloaded = true; + return 0; + } + bool hasDownloaded = false; + }; + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent007", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + auto objectSnapshotMock = std::make_shared(); + bindAssets->insert({"PostEvent007", objectSnapshotMock}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + skipAssets.insert("PostEvent007"); + std::set deleteAssets; + deleteAssets.insert("PostEvent007"); + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::UPLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(objectSnapshotMock->hasDownloaded, false); +} + +/** +@tc.name: PostEvent008 +@tc.desc: RdbAssetLoader PostEvent008 test, Neither deleteAssets nor skipAssets can be found. +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent008, TestSize.Level0) { + class ObjectSnapshotMock : public DistributedObject::ObjectSnapshot { + public: + int32_t Downloaded(Asset &asset) override { + hasDownloaded = true; + return 0; + } + bool hasDownloaded = false; + }; + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent008", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + auto objectSnapshotMock = std::make_shared(); + bindAssets->insert({"PostEvent008", objectSnapshotMock}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::UPLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(objectSnapshotMock->hasDownloaded, true); +} +/** + +@tc.name: PostEvent009 +@tc.desc: RdbAssetLoader PostEvent009 test, deleteAssets can be found, skipAssets cannot be found. +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent009, TestSize.Level0) { + class ObjectSnapshotMock : public DistributedObject::ObjectSnapshot { + public: + int32_t Downloaded(Asset &asset) override { + hasDownloaded = true; + return 0; + } + bool hasDownloaded = false; + }; + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent009", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + auto objectSnapshotMock = std::make_shared(); + bindAssets->insert({"PostEvent009", objectSnapshotMock}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + std::set deleteAssets; + deleteAssets.insert("PostEvent009"); + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::UPLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(objectSnapshotMock->hasDownloaded, false); +} + +/** +@tc.name: PostEvent0010 +@tc.desc: RdbAssetLoader PostEvent0010 test, skipAssets can be found, deleteAssets cannot be found. +@tc.type: FUNC +@tc.require: +@tc.author: SQL +*/ +HWTEST_F(RdbAssetLoaderTest, PostEvent0010, TestSize.Level0) { + class ObjectSnapshotMock : public DistributedObject::ObjectSnapshot { + public: + int32_t Downloaded(Asset &asset) override { + hasDownloaded = true; + return 0; + } + bool hasDownloaded = false; + }; + DistributedData::Asset asset = { + .name = "", + .id = "", + .path = "", + .uri = "PostEvent0010", + .modifyTime = "", + .createTime = "", + .size = "", + .hash = "", + .status = DistributedData::Asset::STATUS_NORMAL, + }; + DistributedData::Assets assets; + assets.push_back(asset); + BindAssets bindAssets = std::make_shared>>(); + auto objectSnapshotMock = std::make_shared(); + bindAssets->insert({"PostEvent0010", objectSnapshotMock}); + std::shared_ptr assetLoader = std::make_shared(); + DistributedRdb::RdbAssetLoader rdbAssetLoader(assetLoader, bindAssets); + std::set skipAssets; + skipAssets.insert("PostEvent0010"); + std::set deleteAssets; + rdbAssetLoader.PostEvent(DistributedData::AssetEvent::UPLOAD, assets, skipAssets, deleteAssets); + EXPECT_EQ(objectSnapshotMock->hasDownloaded, false); +} + /** * @tc.name: ConvertStatus * @tc.desc: RdbAssetLoader ConvertStatus abnormal diff --git a/services/distributeddataservice/service/test/rdb_general_store_test.cpp b/services/distributeddataservice/service/test/rdb_general_store_test.cpp index 2d0857740..6a2dbf2a1 100644 --- a/services/distributeddataservice/service/test/rdb_general_store_test.cpp +++ b/services/distributeddataservice/service/test/rdb_general_store_test.cpp @@ -136,6 +136,24 @@ HWTEST_F(RdbGeneralStoreTest, BindSnapshots002, TestSize.Level1) EXPECT_EQ(result, GeneralError::E_OK); } +/** +@tc.name: BindSnapshots003 +@tc.desc: RdbGeneralStore BindSnapshots not nullptr test +@tc.type: FUNC +*/ +HWTEST_F(RdbGeneralStoreTest, BindSnapshots003, TestSize.Level1) +{ + DistributedData::StoreMetaData meta; + meta = metaData_; + meta.isEncrypt = true; + auto store = std::make_shared(meta); + ASSERT_NE(store, nullptr); + BindAssets bindAssets = std::make_shared>>(); + store->snapshots_ = bindAssets; + auto result = store->BindSnapshots(bindAssets); + EXPECT_EQ(result, GeneralError::E_OK); +} + /** * @tc.name: Bind001 * @tc.desc: RdbGeneralStore Bind bindInfo test -- Gitee