diff --git a/services/dataobsmgr/include/dataobs_mgr_service.h b/services/dataobsmgr/include/dataobs_mgr_service.h index 951882d60b20b7fc771efc6fa7f1f3f2de88a5c1..63817d65450bab2d62287e4caea41e56b91526f2 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" @@ -103,11 +104,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 fbfa44a2ae347b9ea4fec35b3e5a5d8d0c5b0d7c..f2199dbfcdfb9359fba0d44b6a3a1fd18accfa98 100644 --- a/services/dataobsmgr/src/dataobs_mgr_service.cpp +++ b/services/dataobsmgr/src/dataobs_mgr_service.cpp @@ -62,6 +62,7 @@ DataObsMgrService::DataObsMgrService() dataObsMgrInner_ = std::make_shared(); dataObsMgrInnerExt_ = std::make_shared(); dataObsMgrInnerPref_ = std::make_shared(); + permission_ = std::make_shared(); } DataObsMgrService::~DataObsMgrService() @@ -91,9 +92,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"); @@ -280,7 +295,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 391992e7494e5cc1fbc9fff1be630782392cba95..118b9f105555ba9b3dd497d0bff9b744456e5836 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 e50f62636606dcfc8e4374b065c1d27790906a9d..587c07c2a80e41a415551aaa7cd72dba9fa76fea 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 32e9ad7b63d64e8ea31065daca1ec2081319e870..fee268465416dbf6f0d87fc3c2b5cfd226dfd1ed 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 619c0066005bf6484845432e0c5f897d2031f3f2..dfb4fceee9f6cccd74b5571fa7935f8e32b53c4f 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" @@ -787,5 +789,41 @@ 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"); +} + } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/dataobs_mgr_service_third_test/BUILD.gn b/test/unittest/dataobs_mgr_service_third_test/BUILD.gn index 171a8cffaa3e225283a9406d0fc20387f3b582fb..7e68171e4611f9a8b653527e7f83c80c943f2861 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", ] }