From dd5ae118aaa38c04ead85dc6d052724a81553475 Mon Sep 17 00:00:00 2001 From: louzhihao Date: Thu, 28 Aug 2025 12:58:56 +0800 Subject: [PATCH 1/4] cache Signed-off-by: louzhihao Change-Id: Ifc7f785174a21f2d2e5b96ce8627c2a640b123ba --- .../dataobsmgr/include/dataobs_mgr_service.h | 3 ++ .../dataobsmgr/src/dataobs_mgr_service.cpp | 21 +++++++++- .../dataobs_mgr_service_dump_test/BUILD.gn | 3 ++ .../dataobs_mgr_service_second_test/BUILD.gn | 4 ++ .../dataobs_mgr_service_test/BUILD.gn | 16 ++++---- .../dataobs_mgr_service_test.cpp | 38 +++++++++++++++++++ .../dataobs_mgr_service_third_test/BUILD.gn | 3 ++ 7 files changed, 80 insertions(+), 8 deletions(-) diff --git a/services/dataobsmgr/include/dataobs_mgr_service.h b/services/dataobsmgr/include/dataobs_mgr_service.h index c5c02cff2c..ab6609fecf 100644 --- a/services/dataobsmgr/include/dataobs_mgr_service.h +++ b/services/dataobsmgr/include/dataobs_mgr_service.h @@ -22,6 +22,7 @@ #include #include "cpp/mutex.h" +#include "data_share_permission.h" #include "dataobs_mgr_inner.h" #include "dataobs_mgr_inner_common.h" #include "dataobs_mgr_inner_ext.h" @@ -102,11 +103,13 @@ private: int32_t VerifyDataSharePermissionInner(Uri &uri, bool isRead, ObserverInfo &info); int32_t NotifyChangeInner(Uri &uri, int32_t userId, DataObsOption opt, bool isExtension); + void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; private: static constexpr std::uint32_t TASK_COUNT_MAX = 50; ffrt::mutex taskCountMutex_; std::uint32_t taskCount_ = 0; std::shared_ptr handler_; + std::shared_ptr permission_; DataObsServiceRunningState state_; diff --git a/services/dataobsmgr/src/dataobs_mgr_service.cpp b/services/dataobsmgr/src/dataobs_mgr_service.cpp index c9ab158e12..55aa905a95 100644 --- a/services/dataobsmgr/src/dataobs_mgr_service.cpp +++ b/services/dataobsmgr/src/dataobs_mgr_service.cpp @@ -63,6 +63,7 @@ DataObsMgrService::DataObsMgrService() dataObsMgrInner_ = std::make_shared(); dataObsMgrInnerExt_ = std::make_shared(); dataObsMgrInnerPref_ = std::make_shared(); + permission_ = std::make_shared(); } DataObsMgrService::~DataObsMgrService() @@ -92,9 +93,23 @@ void DataObsMgrService::OnStart() bool DataObsMgrService::Init() { handler_ = TaskHandlerWrap::GetFfrtHandler(); + AddSystemAbilityListener(COMMON_EVENT_SERVICE_ID); return true; } +void DataObsMgrService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) +{ + LOG_INFO("add system abilityid:%{public}d", systemAbilityId); + (void)deviceId; + if (permission_ == nullptr) { + return; + } + if (systemAbilityId == COMMON_EVENT_SERVICE_ID) { + permission_->SubscribeCommonEvent(); + } + return; +} + void DataObsMgrService::OnStop() { TAG_LOGI(AAFwkTag::DBOBSMGR, "stop"); @@ -259,7 +274,11 @@ int32_t DataObsMgrService::VerifyDataSharePermissionInner(Uri &uri, bool isRead, uint64_t fullTokenId = info.fullTokenId; int ret; bool isExtension = info.isExtension; - std::tie(ret, info.permission) = DataShare::DataSharePermission::GetUriPermission(uri, + if (permission_ == nullptr) { + LOG_ERROR("permission_ nullptr"); + return COMMON_ERROR; + } + std::tie(ret, info.permission) = permission_->GetUriPermission(uri, info.userId, isRead, isExtension); if (ret != DataShare::E_OK) { info.errMsg.append(std::to_string(info.isExtension) + "_GetUriPermission"); diff --git a/test/unittest/dataobs_mgr_service_dump_test/BUILD.gn b/test/unittest/dataobs_mgr_service_dump_test/BUILD.gn index 391992e749..118b9f1055 100644 --- a/test/unittest/dataobs_mgr_service_dump_test/BUILD.gn +++ b/test/unittest/dataobs_mgr_service_dump_test/BUILD.gn @@ -45,12 +45,15 @@ ohos_unittest("dataobs_mgr_service_dump_test") { external_deps = [ "ability_base:want", "ability_runtime:app_manager", + "access_token:libaccesstoken_sdk", "access_token:libnativetoken", "access_token:libtoken_setproc", "appspawn:appspawn_client", "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", + "common_event_service:cesfwk_innerkits", "c_utils:utils", + "data_share:datashare_permission", "ffrt:libffrt", "googletest:gtest_main", "hilog:libhilog", diff --git a/test/unittest/dataobs_mgr_service_second_test/BUILD.gn b/test/unittest/dataobs_mgr_service_second_test/BUILD.gn index e50f626366..587c07c2a8 100644 --- a/test/unittest/dataobs_mgr_service_second_test/BUILD.gn +++ b/test/unittest/dataobs_mgr_service_second_test/BUILD.gn @@ -47,7 +47,10 @@ ohos_unittest("dataobs_mgr_service_second_test") { external_deps = [ "ability_base:want", "ability_base:zuri", + "access_token:libaccesstoken_sdk", + "common_event_service:cesfwk_innerkits", "c_utils:utils", + "data_share:datashare_permission", "ffrt:libffrt", "googletest:gmock_main", "googletest:gtest_main", @@ -55,6 +58,7 @@ ohos_unittest("dataobs_mgr_service_second_test") { "ipc:ipc_core", "safwk:api_cache_manager", "safwk:system_ability_fwk", + "samgr:samgr_proxy", ] } diff --git a/test/unittest/dataobs_mgr_service_test/BUILD.gn b/test/unittest/dataobs_mgr_service_test/BUILD.gn index 32e9ad7b63..fee2684654 100644 --- a/test/unittest/dataobs_mgr_service_test/BUILD.gn +++ b/test/unittest/dataobs_mgr_service_test/BUILD.gn @@ -31,11 +31,11 @@ ohos_unittest("dataobs_mgr_service_test") { sources = [ "dataobs_mgr_service_test.cpp" ] configs = [ "${ability_runtime_services_path}/dataobsmgr:dataobsms_config" ] - cflags = [ - "-fvisibility=hidden", - "-Dprivate=public", - "-Dprotected=public", - ] + cflags = [ + "-fvisibility=hidden", + "-Dprivate=public", + "-Dprotected=public", + ] if (target_cpu == "arm") { cflags += [ "-DBINDER_IPC_32BIT" ] } @@ -49,9 +49,10 @@ ohos_unittest("dataobs_mgr_service_test") { "ability_base:want", "ability_base:zuri", "access_token:libtoken_setproc", - "access_token:libaccesstoken_sdk", + "access_token:libaccesstoken_sdk", + "common_event_service:cesfwk_innerkits", "c_utils:utils", - "data_share:datashare_permission", + "data_share:datashare_permission", "ffrt:libffrt", "googletest:gmock_main", "googletest:gtest_main", @@ -59,6 +60,7 @@ ohos_unittest("dataobs_mgr_service_test") { "ipc:ipc_core", "safwk:api_cache_manager", "safwk:system_ability_fwk", + "samgr:samgr_proxy", ] } diff --git a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp index 9d7e155e39..c51f6d4fe1 100644 --- a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp +++ b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include #include "gtest/gtest.h" @@ -22,6 +23,7 @@ #include "dataobs_mgr_interface.h" #include "datashare_errno.h" #include "mock_data_ability_observer_stub.h" +#include "system_ability_definition.h" #include "token_setproc.h" #define private public #include "dataobs_mgr_service.h" @@ -757,6 +759,42 @@ HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_VerifyDataSharePermi TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermission_0100 end"); } +HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_Init_0100, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0100 start"); + auto dataObsMgrServer = std::make_shared(); + EXPECT_NE(dataObsMgrServer->permission_, nullptr); + EXPECT_EQ(dataObsMgrServer->permission_->subscriber_, nullptr); + dataObsMgrServer->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, ""); + EXPECT_NE(dataObsMgrServer->permission_->subscriber_, nullptr); + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0100 end"); +} + +HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_Init_0200, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0200 start"); + auto dataObsMgrServer = std::make_shared(); + dataObsMgrServer->permission_ = nullptr; + dataObsMgrServer->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, ""); + + dataObsMgrServer = std::make_shared(); + dataObsMgrServer->OnAddSystemAbility(0, ""); + EXPECT_EQ(dataObsMgrServer->permission_->subscriber_, nullptr); + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_Init_0200 end"); +} + +HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100 start"); + auto dataObsMgrServer = std::make_shared(); + dataObsMgrServer->permission_ = nullptr; + Uri uri(""); + ObserverInfo info; + int32_t ret = dataObsMgrServer->VerifyDataSharePermissionInner(uri, true, info); + EXPECT_EQ(ret, COMMON_ERROR); + TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_VerifyDataSharePermissionInner_0100 end"); +} + /* * Feature: DataObsMgrService * Function: test DATA_MANAGER_SERVICE_UID diff --git a/test/unittest/dataobs_mgr_service_third_test/BUILD.gn b/test/unittest/dataobs_mgr_service_third_test/BUILD.gn index 171a8cffaa..7e68171e46 100644 --- a/test/unittest/dataobs_mgr_service_third_test/BUILD.gn +++ b/test/unittest/dataobs_mgr_service_third_test/BUILD.gn @@ -55,7 +55,9 @@ ohos_unittest("dataobs_mgr_service_third_test") { "access_token:libnativetoken", "access_token:libtoken_setproc", "access_token:libtokenid_sdk", + "common_event_service:cesfwk_innerkits", "c_utils:utils", + "data_share:datashare_permission", "ffrt:libffrt", "googletest:gmock_main", "googletest:gtest_main", @@ -63,6 +65,7 @@ ohos_unittest("dataobs_mgr_service_third_test") { "ipc:ipc_core", "safwk:api_cache_manager", "safwk:system_ability_fwk", + "samgr:samgr_proxy", ] } From a8670c0ae348f5bb52eb7f74ab902ffdb633ab68 Mon Sep 17 00:00:00 2001 From: Cui-Ziyuan1128 Date: Tue, 23 Sep 2025 17:36:12 +0800 Subject: [PATCH 2/4] debug Signed-off-by: Cui-Ziyuan1128 --- .../dataobs_mgr_service_test.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp index c51f6d4fe1..1f3d0d17ca 100644 --- a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp +++ b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp @@ -703,15 +703,15 @@ HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_CheckSystemCallingPe DataObsOption opt; bool ret = 0; opt.isSystem = false; - ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); - EXPECT_EQ(ret, false); - ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); - EXPECT_EQ(ret, true); - ret = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); - EXPECT_EQ(ret, false); + auto ret1 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); + EXPECT_EQ(ret1, false); + auto ret2 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + EXPECT_EQ(ret2, true); + auto ret3 = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); + EXPECT_EQ(ret3, false); opt.isSystem = true; - ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); - EXPECT_EQ(ret, false); + auto ret4 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + EXPECT_EQ(ret4, false); SetSelfTokenID(originalToken); TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_CheckSystemCallingPermission_0200 end"); From 4078c6abb9e11ab34146bef56d45ce8fec65715e Mon Sep 17 00:00:00 2001 From: Cui-Ziyuan1128 Date: Tue, 23 Sep 2025 20:17:11 +0800 Subject: [PATCH 3/4] add return false back Signed-off-by: Cui-Ziyuan1128 --- services/dataobsmgr/src/dataobs_mgr_service.cpp | 1 + .../dataobs_mgr_service_test.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/services/dataobsmgr/src/dataobs_mgr_service.cpp b/services/dataobsmgr/src/dataobs_mgr_service.cpp index 55aa905a95..591de2f524 100644 --- a/services/dataobsmgr/src/dataobs_mgr_service.cpp +++ b/services/dataobsmgr/src/dataobs_mgr_service.cpp @@ -176,6 +176,7 @@ bool DataObsMgrService::IsDataMgrService(uint32_t tokenId, int32_t uid) if (uid != DATA_MANAGER_SERVICE_UID) { TAG_LOGE(AAFwkTag::DBOBSMGR, "request not from DataMgr, uid %{public}d, DataMgr %{public}d", uid, DATA_MANAGER_SERVICE_UID); + return false; } return true; } diff --git a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp index 1f3d0d17ca..40406dfffc 100644 --- a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp +++ b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp @@ -703,15 +703,15 @@ HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_CheckSystemCallingPe DataObsOption opt; bool ret = 0; opt.isSystem = false; - auto ret1 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); - EXPECT_EQ(ret1, false); - auto ret2 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); - EXPECT_EQ(ret2, true); - auto ret3 = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); - EXPECT_EQ(ret3, false); + auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); + EXPECT_EQ(ret, false); + auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + EXPECT_EQ(ret, true); + auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); + EXPECT_EQ(ret, false); opt.isSystem = true; - auto ret4 = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); - EXPECT_EQ(ret4, false); + auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + EXPECT_EQ(ret, false); SetSelfTokenID(originalToken); TAG_LOGI(AAFwkTag::DBOBSMGR, "AaFwk_DataObsMgrServiceTest_CheckSystemCallingPermission_0200 end"); From 6541895c2d48a14bcfdff6e59e2e3579089b18cc Mon Sep 17 00:00:00 2001 From: Cui-Ziyuan1128 Date: Wed, 24 Sep 2025 09:31:54 +0800 Subject: [PATCH 4/4] fix Signed-off-by: Cui-Ziyuan1128 --- .../dataobs_mgr_service_test/dataobs_mgr_service_test.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp index 40406dfffc..c51f6d4fe1 100644 --- a/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp +++ b/test/unittest/dataobs_mgr_service_test/dataobs_mgr_service_test.cpp @@ -703,14 +703,14 @@ HWTEST_F(DataObsMgrServiceTest, AaFwk_DataObsMgrServiceTest_CheckSystemCallingPe DataObsOption opt; bool ret = 0; opt.isSystem = false; - auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); + ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, -1); EXPECT_EQ(ret, false); - auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); EXPECT_EQ(ret, true); - auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); + ret = dataObsMgrServer->IsCallingPermissionValid(opt, 100, 101); EXPECT_EQ(ret, false); opt.isSystem = true; - auto ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); + ret = dataObsMgrServer->IsCallingPermissionValid(opt, IDataObsMgr::DATAOBS_DEFAULT_CURRENT_USER, 100); EXPECT_EQ(ret, false); SetSelfTokenID(originalToken);