From baeba53d5e6f9e78851d8c88b3bc9ad5903926e9 Mon Sep 17 00:00:00 2001 From: WDY Date: Tue, 9 Sep 2025 17:37:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: WDY --- .../src/data_sync/data_syncer_rdb_store.cpp | 21 +++ .../src/data_sync_manager.cpp | 5 + .../cloud_file_kit_inner/data_sync_const.h | 1 + .../cloud_file_kit_inner/data_sync_manager.h | 1 + .../data_syncer_rdb_store.h | 1 + services/5204.json | 10 ++ services/cloudsyncservice.para | 1 + services/cloudsyncservice.para.dac | 1 + .../src/sync_rule/package_status_listener.cpp | 5 + .../data_sync/data_syncer_rdb_store_test.cpp | 121 ++++++++++++++++++ 10 files changed, 167 insertions(+) diff --git a/frameworks/native/cloud_file_kit_inner/src/data_sync/data_syncer_rdb_store.cpp b/frameworks/native/cloud_file_kit_inner/src/data_sync/data_syncer_rdb_store.cpp index 0182ea66b..c78f7b2a6 100644 --- a/frameworks/native/cloud_file_kit_inner/src/data_sync/data_syncer_rdb_store.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/data_sync/data_syncer_rdb_store.cpp @@ -15,8 +15,10 @@ #include "data_syncer_rdb_store.h" +#include "data_sync_const.h" #include "data_syncer_rdb_col.h" #include "dfs_error.h" +#include "parameters.h" #include "rdb_helper.h" #include "rdb_sql_utils.h" #include "rdb_store_config.h" @@ -94,6 +96,25 @@ int32_t DataSyncerRdbStore::Insert(int32_t userId, const std::string &bundleName return E_OK; } +int32_t DataSyncerRdbStore::Erase(const std::string &bundleName, int32_t userId) +{ + if (rdb_ == nullptr) { + if (RdbInit() != E_OK) { + LOGE("Data Syncer init rdb failed"); + return E_RDB; + } + } + int32_t changeRows = -1; + string whereClause = USER_ID + " = ? AND " + BUNDLE_NAME + " = ?"; + vector whereArgs = { to_string(userId), bundleName }; + int32_t ret = rdb_->Delete(changeRows, DATA_SYNCER_TABLE, whereClause, whereArgs); + if (ret != E_OK) { + LOGE("Delete failed"); + return ret; + } + return E_OK; +} + static int64_t UTCTimeMilliSeconds() { struct timespec t; diff --git a/frameworks/native/cloud_file_kit_inner/src/data_sync_manager.cpp b/frameworks/native/cloud_file_kit_inner/src/data_sync_manager.cpp index 9b998bf01..6fb604d75 100644 --- a/frameworks/native/cloud_file_kit_inner/src/data_sync_manager.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/data_sync_manager.cpp @@ -105,6 +105,11 @@ int32_t DataSyncManager::CleanCloudFile(const int32_t userId, const std::string return E_OK; } +int32_t DataSyncManager::CleanRdbStore(const std::string &bundleName, const int32_t userId) +{ + return E_OK; +} + int32_t DataSyncManager::CleanRemainFile(const std::string &bundleName, const int32_t userId) { return E_OK; diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_const.h b/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_const.h index cb21e60ac..9810d4620 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_const.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_const.h @@ -103,6 +103,7 @@ static const std::string CLOUDSYNC_STATUS_SWITCHOFF = "5"; static const std::string CLOUDSYNC_STATUS_CLEANING = "6"; static const std::string CLOUDSYNC_SWITCH_STATUS = "persist.kernel.cloudsync.switch_status"; +static const std::string CLOUDSYNC_REMOVED_STATUS = "persist.kernel.cloudsync.removed_status"; static inline uint64_t GetCurrentTimeStamp() { diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_manager.h b/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_manager.h index aef152d43..4a1cee56c 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_manager.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/data_sync_manager.h @@ -61,6 +61,7 @@ public: bool needClean, int32_t timeout = -1); virtual int32_t CleanCloudFile(const int32_t userId, const std::string &bundleName, const int action); + virtual int32_t CleanRdbStore(const std::string &bundleName, const int32_t userId); virtual int32_t CleanRemainFile(const std::string &bundleName, const int32_t userId); virtual int32_t OptimizeStorage(const std::string &bundleName, const int32_t userId, const int32_t agingDays); virtual int32_t StartOptimizeStorage(const BundleNameUserInfo &bundleNameUserInfo, diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/data_syncer_rdb_store.h b/interfaces/inner_api/native/cloud_file_kit_inner/data_syncer_rdb_store.h index 21920b9d2..cff2f377c 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/data_syncer_rdb_store.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/data_syncer_rdb_store.h @@ -27,6 +27,7 @@ public: static DataSyncerRdbStore &GetInstance(); ~DataSyncerRdbStore() = default; + int32_t Erase(const std::string &bundleName, int32_t userId); int32_t Insert(int32_t userId, const std::string &bundleName); int32_t UpdateSyncState(int32_t userId, const std::string &bundleName, CloudSyncState cloudSyncState, ErrorType errorType); diff --git a/services/5204.json b/services/5204.json index b300af2a6..957bb01ca 100644 --- a/services/5204.json +++ b/services/5204.json @@ -86,6 +86,16 @@ }, { "name": "usual.event.USER_UNLOCKED" + }, + { + "name": "usual.event.PACKAGE_REMOVED", + "conditions": [ + { + "eventId": "param", + "name": "persist.kernel.cloudsync.removed_status", + "value": "true" + } + ] } ] } diff --git a/services/cloudsyncservice.para b/services/cloudsyncservice.para index c556c3e35..22bc3be06 100644 --- a/services/cloudsyncservice.para +++ b/services/cloudsyncservice.para @@ -21,3 +21,4 @@ persist.kernel.move.finish = false persist.kernel.cloudsync.screen_off_enable_download = true persist.kernel.clouddisk_version = 5.1.0.300 persist.kernel.cloudsync.switch_status = 0 +persist.kernel.cloudsync.removed_status = false diff --git a/services/cloudsyncservice.para.dac b/services/cloudsyncservice.para.dac index 4d6c82a87..35737f594 100644 --- a/services/cloudsyncservice.para.dac +++ b/services/cloudsyncservice.para.dac @@ -21,3 +21,4 @@ persist.kernel.move.finish = dfs:user_data_rw:0640 persist.kernel.cloudsync.screen_off_enable_download = dfs:samgr:0640 persist.kernel.clouddisk_version = dfs:user_data_rw:0644 persist.kernel.cloudsync.switch_status = dfs:user_data_rw:0660 +persist.kernel.cloudsync.removed_status = dfs:dfs:0660 diff --git a/services/cloudsyncservice/src/sync_rule/package_status_listener.cpp b/services/cloudsyncservice/src/sync_rule/package_status_listener.cpp index 47756db6a..080d63fa2 100644 --- a/services/cloudsyncservice/src/sync_rule/package_status_listener.cpp +++ b/services/cloudsyncservice/src/sync_rule/package_status_listener.cpp @@ -86,6 +86,11 @@ void PackageStatusListener::RemovedClean(const std::string &bundleName, const in LOGE("CleanCloudFile failed, ret: %{public}d", ret); return; } + ret = dataSyncManager_->CleanRdbStore(bundleName, userId); + if (ret != 0) { + LOGE("CleanRdbStore failed, ret: %{public}d", ret); + return; + } LOGI("RemovedClean Complete"); } diff --git a/test/unittests/cloud_file_kit_inner/data_sync/data_syncer_rdb_store_test.cpp b/test/unittests/cloud_file_kit_inner/data_sync/data_syncer_rdb_store_test.cpp index 9d848710c..b89043b92 100644 --- a/test/unittests/cloud_file_kit_inner/data_sync/data_syncer_rdb_store_test.cpp +++ b/test/unittests/cloud_file_kit_inner/data_sync/data_syncer_rdb_store_test.cpp @@ -14,6 +14,7 @@ */ #include "data_syncer_rdb_store.h" +#include "data_sync_const.h" #include #include #include "dfs_error.h" @@ -25,6 +26,7 @@ namespace OHOS::FileManagement::CloudSync::Test { using namespace testing; using namespace testing::ext; using namespace std; +using namespace NativeRdb; class MockDataSyncerRdbStore : public DataSyncerRdbStore { public: @@ -44,15 +46,20 @@ public: static void TearDownTestCase(void); void SetUp(); void TearDown(); + static inline shared_ptr insMock = nullptr; }; void DataSyncerRdbStoreTest::SetUpTestCase(void) { GTEST_LOG_(INFO) << "SetUpTestCase"; + insMock = make_shared(); + CloudDisk::Assistant::ins = insMock; } void DataSyncerRdbStoreTest::TearDownTestCase(void) { + CloudDisk::Assistant::ins = nullptr; + insMock = nullptr; GTEST_LOG_(INFO) << "TearDownTestCase"; } @@ -712,4 +719,118 @@ HWTEST_F(DataSyncerRdbStoreTest, UpdateSyncStateTest03, TestSize.Level1) } GTEST_LOG_(INFO) << "UpdateSyncStateTest03 End"; } + +/** + * @tc.name: EraseTest001 + * @tc.desc: Verify the Erase function + * @tc.type: FUNC + * @tc.require: issuesICT5XK + */ +HWTEST_F(DataSyncerRdbStoreTest, EraseTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "EraseTest001 Start"; + try { + int32_t userId = 1; + string bundleName = "bundleName"; + DataSyncerRdbStore dataSyncerRdbStore; + + dataSyncerRdbStore.rdb_ = nullptr; + EXPECT_CALL(*insMock, GetDefaultDatabasePath(_, _, _)) + .WillOnce(DoAll(SetArgReferee<2>(E_RDB), Return(""))); + auto ret = dataSyncerRdbStore.Erase(bundleName, userId); + EXPECT_EQ(ret, E_RDB); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "EraseTest001 ERROR"; + } + GTEST_LOG_(INFO) << "EraseTest001 End"; +} + +/** + * @tc.name: EraseTest002 + * @tc.desc: Verify the Erase function + * @tc.type: FUNC + * @tc.require: issuesICT5XK + */ +HWTEST_F(DataSyncerRdbStoreTest, EraseTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "EraseTest002 Start"; + try { + int32_t userId = 1; + string bundleName = "bundleName"; + DataSyncerRdbStore dataSyncerRdbStore; + auto rdb = make_shared(); + + dataSyncerRdbStore.rdb_ = nullptr; + EXPECT_CALL(*insMock, GetDefaultDatabasePath(_, _, _)) + .WillOnce(DoAll(SetArgReferee<2>(E_OK), Return(""))); + EXPECT_CALL(*insMock, GetRdbStore(_, _, _, _)) + .WillOnce(Return(rdb)); + EXPECT_CALL(*rdb, Delete(_, _, _, An &>())) + .WillOnce(Return(E_RDB)); + auto ret = dataSyncerRdbStore.Erase(bundleName, userId); + EXPECT_EQ(ret, E_RDB); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "EraseTest002 ERROR"; + } + GTEST_LOG_(INFO) << "EraseTest002 End"; +} + +/** + * @tc.name: EraseTest003 + * @tc.desc: Verify the Erase function + * @tc.type: FUNC + * @tc.require: issuesICT5XK + */ +HWTEST_F(DataSyncerRdbStoreTest, EraseTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "EraseTest003 Start"; + try { + int32_t userId = 1; + string bundleName = "bundleName"; + DataSyncerRdbStore dataSyncerRdbStore; + + auto rdb = make_shared(); + dataSyncerRdbStore.rdb_ = rdb; + EXPECT_CALL(*rdb, Delete(_, _, _, An &>())) + .WillOnce(Return(E_RDB)); + auto ret = dataSyncerRdbStore.Erase(bundleName, userId); + EXPECT_EQ(ret, E_RDB); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "EraseTest003 ERROR"; + } + GTEST_LOG_(INFO) << "EraseTest003 End"; +} + +/** + * @tc.name: EraseTest004 + * @tc.desc: Verify the Erase function + * @tc.type: FUNC + * @tc.require: issuesICT5XK + */ +HWTEST_F(DataSyncerRdbStoreTest, EraseTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "EraseTest004 Start"; + try { + int32_t userId = 1; + string bundleName = "bundleName"; + DataSyncerRdbStore dataSyncerRdbStore; + auto resultSet = make_shared(); + + auto rdb = make_shared(); + dataSyncerRdbStore.rdb_ = rdb; + EXPECT_CALL(*insMock, GetDefaultDatabasePath(_, _, _)) + .WillOnce(DoAll(SetArgReferee<2>(E_OK), Return(""))); + EXPECT_CALL(*rdb, Delete(_, _, _, An &>())) + .WillOnce(Return(E_OK)); + auto ret = dataSyncerRdbStore.Erase(bundleName, userId); + EXPECT_EQ(ret, E_OK); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "EraseTest004 ERROR"; + } + GTEST_LOG_(INFO) << "EraseTest004 End"; +} } \ No newline at end of file -- Gitee