From 2137f87d67e30b18e5800b2f6113f0d920bd1ba1 Mon Sep 17 00:00:00 2001 From: lanhaoyu Date: Tue, 19 Aug 2025 19:38:04 +0800 Subject: [PATCH] test Signed-off-by: lanhaoyu --- 123.diff | 230 ++++++++++++++++++ .../app_control_manager_host_impl.cpp | 18 +- .../app_control/app_control_manager_rdb.cpp | 67 ++++- .../bms_bundle_mock_app_control.cpp | 28 +++ 4 files changed, 337 insertions(+), 6 deletions(-) create mode 100644 123.diff diff --git a/123.diff b/123.diff new file mode 100644 index 0000000000..565099724f --- /dev/null +++ b/123.diff @@ -0,0 +1,230 @@ +diff --git a/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp b/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp +index aca8dfaa5..a406e5044 100644 +--- a/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp ++++ b/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp +@@ -74,7 +74,14 @@ ErrCode AppControlManagerHostImpl::AddAppInstallControlRule(const std::vector modifyAppIds = appIds; ++ for (auto &appId : appIds) { ++ std::string transformAppId = dataMgr_->AppIdAndAppIdentifierTransform(appId); ++ if (!transformAppId.empty()) { ++ modifyAppIds.emplace_back(transformAppId); ++ } ++ } ++ UpdateAppControlledInfo(userId, modifyAppIds); + } + SendAppControlEvent(ControlActionType::INSTALL, ControlOperationType::ADD_RULE, + callingName, userId, Constants::MAIN_APP_INDEX, appIds, ruleType); +@@ -105,7 +112,14 @@ ErrCode AppControlManagerHostImpl::DeleteAppInstallControlRule(const AppInstallC + return ret; + } + if (ruleType == AppControlConstants::APP_DISALLOWED_UNINSTALL) { +- UpdateAppControlledInfo(userId, appIds); ++ std::vector modifyAppIds = appIds; ++ for (auto &appId : appIds) { ++ std::string transformAppId = dataMgr_->AppIdAndAppIdentifierTransform(appId); ++ if (!transformAppId.empty()) { ++ modifyAppIds.emplace_back(transformAppId); ++ } ++ } ++ UpdateAppControlledInfo(userId, modifyAppIds); + } + SendAppControlEvent(ControlActionType::INSTALL, ControlOperationType::REMOVE_RULE, + callingName, userId, Constants::MAIN_APP_INDEX, appIds, ruleType); +diff --git a/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp b/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp +index e9a5f12ad..9b7085f4c 100644 +--- a/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp ++++ b/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp +@@ -18,6 +18,7 @@ + #include "app_control_constants.h" + #include "app_log_tag_wrapper.h" + #include "bms_extension_client.h" ++#include "bundle_mgr_service.h" + #include "bundle_util.h" + #include "hitrace_meter.h" + #include "scope_guard.h" +@@ -81,6 +82,10 @@ ErrCode AppControlManagerRdb::AddAppInstallControlRule(const std::string &callin + int64_t timeStamp = BundleUtil::GetCurrentTime(); + std::vector valuesBuckets; + for (auto appId : appIds) { ++ if (appId.empty()) { ++ LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); ++ continue; ++ } + ErrCode result = DeleteOldControlRule(callingName, controlRuleType, appId, userId); + if (result != ERR_OK) { + LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule failed"); +@@ -110,12 +115,23 @@ ErrCode AppControlManagerRdb::AddAppInstallControlRule(const std::string &callin + ErrCode AppControlManagerRdb::DeleteAppInstallControlRule(const std::string &callingName, + const std::string &controlRuleType, const std::vector &appIds, int32_t userId) + { ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } + for (const auto &appId : appIds) { ++ if (appId.empty()) { ++ LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); ++ continue; ++ } ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); ++ std::vector appIdList { appId, transformedAppId }; + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(CALLING_NAME, callingName); + absRdbPredicates.EqualTo(APP_CONTROL_LIST, controlRuleType); + absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); +- absRdbPredicates.EqualTo(APP_ID, appId); ++ absRdbPredicates.In(APP_ID, appIdList); + bool ret = rdbDataManager_->DeleteData(absRdbPredicates); + if (!ret) { + LOG_E(BMS_TAG_DEFAULT, "Delete failed callingName:%{public}s appId:%{private}s userId:%{public}d", +@@ -171,6 +187,11 @@ ErrCode AppControlManagerRdb::GetAppInstallControlRule(const std::string &callin + LOG_E(BMS_TAG_DEFAULT, "GoToFirstRow failed, ret: %{public}d", ret); + return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; + } ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } + do { + std::string appId; + ret = absSharedResultSet->GetString(APP_ID_INDEX, appId); +@@ -178,7 +199,9 @@ ErrCode AppControlManagerRdb::GetAppInstallControlRule(const std::string &callin + LOG_E(BMS_TAG_DEFAULT, "GetString appId failed, ret: %{public}d", ret); + return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; + } ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); + appIds.push_back(appId); ++ appIds.push_back(transformedAppId); + } while (absSharedResultSet->GoToNextRow() == NativeRdb::E_OK); + return ERR_OK; + } +@@ -189,6 +212,10 @@ ErrCode AppControlManagerRdb::AddAppRunningControlRule(const std::string &callin + int64_t timeStamp = BundleUtil::GetCurrentTime(); + std::vector valuesBuckets; + for (auto &controlRule : controlRules) { ++ if (controlRule.appId.empty()) { ++ LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); ++ continue; ++ } + ErrCode result = DeleteOldControlRule(callingName, RUNNING_CONTROL, controlRule.appId, userId); + if (result != ERR_OK) { + LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule failed"); +@@ -220,12 +247,19 @@ ErrCode AppControlManagerRdb::AddAppRunningControlRule(const std::string &callin + ErrCode AppControlManagerRdb::DeleteAppRunningControlRule(const std::string &callingName, + const std::vector &controlRules, int32_t userId) + { ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } + for (auto &rule : controlRules) { ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(rule.appId); ++ std::vector appIdList { rule.appId, transformedAppId }; + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(CALLING_NAME, callingName); + absRdbPredicates.EqualTo(APP_CONTROL_LIST, RUNNING_CONTROL); + absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); +- absRdbPredicates.EqualTo(APP_ID, rule.appId); ++ absRdbPredicates.In(APP_ID, appIdList); + bool ret = rdbDataManager_->DeleteData(absRdbPredicates); + if (!ret) { + LOG_E(BMS_TAG_DEFAULT, "Delete failed callingName:%{public}s appid:%{private}s userId:%{public}d", +@@ -287,6 +321,15 @@ ErrCode AppControlManagerRdb::GetAppRunningControlRule(const std::string &callin + return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; + } + appIds.push_back(appId); ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); ++ if (!transformedAppId.empty()) { ++ appIds.push_back(transformedAppId); ++ } + } while (absSharedResultSet->GoToNextRow() == NativeRdb::E_OK); + return ERR_OK; + } +@@ -295,8 +338,15 @@ ErrCode AppControlManagerRdb::GetAppRunningControlRule(const std::string &appId, + int32_t userId, AppRunningControlRuleResult &controlRuleResult) + { + HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); ++ std::vector appIdList { appId, transformedAppId }; + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); +- absRdbPredicates.EqualTo(APP_ID, appId); ++ absRdbPredicates.In(APP_ID, appIdList); + absRdbPredicates.EqualTo(APP_CONTROL_LIST, RUNNING_CONTROL); + absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); + absRdbPredicates.OrderByAsc(PRIORITY); // ascending +@@ -446,11 +496,18 @@ ErrCode AppControlManagerRdb::GetDisposedStatus(const std::string &callingName, + ErrCode AppControlManagerRdb::DeleteOldControlRule(const std::string &callingName, const std::string &controlRuleType, + const std::string &appId, int32_t userId) + { ++ auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); ++ if (dataMgr == nullptr) { ++ LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); ++ return ERR_APPEXECFWK_NULL_PTR; ++ } ++ std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); ++ std::vector appIdList { appId, transformedAppId }; + NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); + absRdbPredicates.EqualTo(CALLING_NAME, callingName); + absRdbPredicates.EqualTo(APP_CONTROL_LIST, controlRuleType); + absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); +- absRdbPredicates.EqualTo(APP_ID, appId); ++ absRdbPredicates.In(APP_ID, appIdList); + bool ret = rdbDataManager_->DeleteData(absRdbPredicates); + if (!ret) { + LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule %{public}s, %{public}s, %{public}s, %{public}d failed", +diff --git a/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp b/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp +index 1d0039570..275758795 100644 +--- a/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp ++++ b/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp +@@ -343,6 +343,34 @@ HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0170, Function | Smal + EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); + } + ++/** ++ * @tc.number: AppControlManagerRdb_0180 ++ * @tc.name: Test AddAppInstallControlRule by AppControlManagerRdb ++ * @tc.desc: 1.AddAppInstallControlRule test ++ */ ++HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0180, Function | SmallTest | Level1) ++{ ++ AppControlManagerRdb rdb; ++ std::vector appIds = { "appId" , ""}; ++ std::string targetBundleName = "bundleName"; ++ auto res = rdb.AddAppInstallControlRule(targetBundleName, appIds, "", USERID); ++ EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); ++} ++ ++/** ++ * @tc.number: AppControlManagerRdb_0190 ++ * @tc.name: Test DeleteAppInstallControlRule by AppControlManagerRdb ++ * @tc.desc: 1.AddAppInstallControlRule test ++ */ ++HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0190, Function | SmallTest | Level1) ++{ ++ AppControlManagerRdb rdb; ++ std::vector appIds = { "appId" , ""}; ++ std::string targetBundleName = "bundleName"; ++ auto res = rdb.DeleteAppInstallControlRule(targetBundleName, "", appIds, USERID); ++ EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); ++} ++ + /** + * @tc.number: AppJumpInterceptorManagerRdb_0010 + * @tc.name: test DeleteRuleByTargetBundleName by AppJumpInterceptorManagerRdb diff --git a/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp b/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp index aca8dfaa5d..a406e5044e 100644 --- a/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp +++ b/services/bundlemgr/src/app_control/app_control_manager_host_impl.cpp @@ -74,7 +74,14 @@ ErrCode AppControlManagerHostImpl::AddAppInstallControlRule(const std::vector modifyAppIds = appIds; + for (auto &appId : appIds) { + std::string transformAppId = dataMgr_->AppIdAndAppIdentifierTransform(appId); + if (!transformAppId.empty()) { + modifyAppIds.emplace_back(transformAppId); + } + } + UpdateAppControlledInfo(userId, modifyAppIds); } SendAppControlEvent(ControlActionType::INSTALL, ControlOperationType::ADD_RULE, callingName, userId, Constants::MAIN_APP_INDEX, appIds, ruleType); @@ -105,7 +112,14 @@ ErrCode AppControlManagerHostImpl::DeleteAppInstallControlRule(const AppInstallC return ret; } if (ruleType == AppControlConstants::APP_DISALLOWED_UNINSTALL) { - UpdateAppControlledInfo(userId, appIds); + std::vector modifyAppIds = appIds; + for (auto &appId : appIds) { + std::string transformAppId = dataMgr_->AppIdAndAppIdentifierTransform(appId); + if (!transformAppId.empty()) { + modifyAppIds.emplace_back(transformAppId); + } + } + UpdateAppControlledInfo(userId, modifyAppIds); } SendAppControlEvent(ControlActionType::INSTALL, ControlOperationType::REMOVE_RULE, callingName, userId, Constants::MAIN_APP_INDEX, appIds, ruleType); diff --git a/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp b/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp index e9a5f12adb..57157c4f20 100644 --- a/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp +++ b/services/bundlemgr/src/app_control/app_control_manager_rdb.cpp @@ -18,6 +18,7 @@ #include "app_control_constants.h" #include "app_log_tag_wrapper.h" #include "bms_extension_client.h" +#include "bundle_mgr_service.h" #include "bundle_util.h" #include "hitrace_meter.h" #include "scope_guard.h" @@ -81,6 +82,10 @@ ErrCode AppControlManagerRdb::AddAppInstallControlRule(const std::string &callin int64_t timeStamp = BundleUtil::GetCurrentTime(); std::vector valuesBuckets; for (auto appId : appIds) { + if (appId.empty()) { + LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); + continue; + } ErrCode result = DeleteOldControlRule(callingName, controlRuleType, appId, userId); if (result != ERR_OK) { LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule failed"); @@ -110,12 +115,23 @@ ErrCode AppControlManagerRdb::AddAppInstallControlRule(const std::string &callin ErrCode AppControlManagerRdb::DeleteAppInstallControlRule(const std::string &callingName, const std::string &controlRuleType, const std::vector &appIds, int32_t userId) { + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } for (const auto &appId : appIds) { + if (appId.empty()) { + LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); + continue; + } + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); + std::vector appIdList { appId, transformedAppId }; NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); absRdbPredicates.EqualTo(CALLING_NAME, callingName); absRdbPredicates.EqualTo(APP_CONTROL_LIST, controlRuleType); absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); - absRdbPredicates.EqualTo(APP_ID, appId); + absRdbPredicates.In(APP_ID, appIdList); bool ret = rdbDataManager_->DeleteData(absRdbPredicates); if (!ret) { LOG_E(BMS_TAG_DEFAULT, "Delete failed callingName:%{public}s appId:%{private}s userId:%{public}d", @@ -171,6 +187,11 @@ ErrCode AppControlManagerRdb::GetAppInstallControlRule(const std::string &callin LOG_E(BMS_TAG_DEFAULT, "GoToFirstRow failed, ret: %{public}d", ret); return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; } + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } do { std::string appId; ret = absSharedResultSet->GetString(APP_ID_INDEX, appId); @@ -178,7 +199,9 @@ ErrCode AppControlManagerRdb::GetAppInstallControlRule(const std::string &callin LOG_E(BMS_TAG_DEFAULT, "GetString appId failed, ret: %{public}d", ret); return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; } + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); appIds.push_back(appId); + appIds.push_back(transformedAppId); } while (absSharedResultSet->GoToNextRow() == NativeRdb::E_OK); return ERR_OK; } @@ -189,6 +212,10 @@ ErrCode AppControlManagerRdb::AddAppRunningControlRule(const std::string &callin int64_t timeStamp = BundleUtil::GetCurrentTime(); std::vector valuesBuckets; for (auto &controlRule : controlRules) { + if (controlRule.appId.empty()) { + LOG_D(BMS_TAG_DEFAULT, "appId or appIdentifier is empty"); + continue; + } ErrCode result = DeleteOldControlRule(callingName, RUNNING_CONTROL, controlRule.appId, userId); if (result != ERR_OK) { LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule failed"); @@ -220,12 +247,19 @@ ErrCode AppControlManagerRdb::AddAppRunningControlRule(const std::string &callin ErrCode AppControlManagerRdb::DeleteAppRunningControlRule(const std::string &callingName, const std::vector &controlRules, int32_t userId) { + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } for (auto &rule : controlRules) { + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(rule.appId); + std::vector appIdList { rule.appId, transformedAppId }; NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); absRdbPredicates.EqualTo(CALLING_NAME, callingName); absRdbPredicates.EqualTo(APP_CONTROL_LIST, RUNNING_CONTROL); absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); - absRdbPredicates.EqualTo(APP_ID, rule.appId); + absRdbPredicates.In(APP_ID, appIdList); bool ret = rdbDataManager_->DeleteData(absRdbPredicates); if (!ret) { LOG_E(BMS_TAG_DEFAULT, "Delete failed callingName:%{public}s appid:%{private}s userId:%{public}d", @@ -287,6 +321,17 @@ ErrCode AppControlManagerRdb::GetAppRunningControlRule(const std::string &callin return ERR_APPEXECFWK_DB_RESULT_SET_OPT_ERROR; } appIds.push_back(appId); + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); + LOG_E(BMS_TAG_DEFAULT,"li-hy test 1"); + if (!transformedAppId.empty()) { + appIds.push_back(transformedAppId); + LOG_E(BMS_TAG_DEFAULT,"li-hy test 2"); + } } while (absSharedResultSet->GoToNextRow() == NativeRdb::E_OK); return ERR_OK; } @@ -295,8 +340,15 @@ ErrCode AppControlManagerRdb::GetAppRunningControlRule(const std::string &appId, int32_t userId, AppRunningControlRuleResult &controlRuleResult) { HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); + std::vector appIdList { appId, transformedAppId }; NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); - absRdbPredicates.EqualTo(APP_ID, appId); + absRdbPredicates.In(APP_ID, appIdList); absRdbPredicates.EqualTo(APP_CONTROL_LIST, RUNNING_CONTROL); absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); absRdbPredicates.OrderByAsc(PRIORITY); // ascending @@ -446,11 +498,18 @@ ErrCode AppControlManagerRdb::GetDisposedStatus(const std::string &callingName, ErrCode AppControlManagerRdb::DeleteOldControlRule(const std::string &callingName, const std::string &controlRuleType, const std::string &appId, int32_t userId) { + auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); + if (dataMgr == nullptr) { + LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); + return ERR_APPEXECFWK_NULL_PTR; + } + std::string transformedAppId = dataMgr->AppIdAndAppIdentifierTransform(appId); + std::vector appIdList { appId, transformedAppId }; NativeRdb::AbsRdbPredicates absRdbPredicates(APP_CONTROL_RDB_TABLE_NAME); absRdbPredicates.EqualTo(CALLING_NAME, callingName); absRdbPredicates.EqualTo(APP_CONTROL_LIST, controlRuleType); absRdbPredicates.EqualTo(USER_ID, std::to_string(userId)); - absRdbPredicates.EqualTo(APP_ID, appId); + absRdbPredicates.In(APP_ID, appIdList); bool ret = rdbDataManager_->DeleteData(absRdbPredicates); if (!ret) { LOG_E(BMS_TAG_DEFAULT, "DeleteOldControlRule %{public}s, %{public}s, %{public}s, %{public}d failed", diff --git a/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp b/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp index 1d00395708..275758795e 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_app_control_test/bms_bundle_mock_app_control.cpp @@ -343,6 +343,34 @@ HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0170, Function | Smal EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); } +/** + * @tc.number: AppControlManagerRdb_0180 + * @tc.name: Test AddAppInstallControlRule by AppControlManagerRdb + * @tc.desc: 1.AddAppInstallControlRule test + */ +HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0180, Function | SmallTest | Level1) +{ + AppControlManagerRdb rdb; + std::vector appIds = { "appId" , ""}; + std::string targetBundleName = "bundleName"; + auto res = rdb.AddAppInstallControlRule(targetBundleName, appIds, "", USERID); + EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); +} + +/** + * @tc.number: AppControlManagerRdb_0190 + * @tc.name: Test DeleteAppInstallControlRule by AppControlManagerRdb + * @tc.desc: 1.AddAppInstallControlRule test + */ +HWTEST_F(BmsBundleMockAppControlTest, AppControlManagerRdb_0190, Function | SmallTest | Level1) +{ + AppControlManagerRdb rdb; + std::vector appIds = { "appId" , ""}; + std::string targetBundleName = "bundleName"; + auto res = rdb.DeleteAppInstallControlRule(targetBundleName, "", appIds, USERID); + EXPECT_EQ(res, ERR_APPEXECFWK_DB_DELETE_ERROR); +} + /** * @tc.number: AppJumpInterceptorManagerRdb_0010 * @tc.name: test DeleteRuleByTargetBundleName by AppJumpInterceptorManagerRdb -- Gitee