diff --git a/interfaces/innerkits/accesstoken/src/permission_state_change_callback.h b/interfaces/innerkits/accesstoken/include/permission_state_change_callback.h similarity index 100% rename from interfaces/innerkits/accesstoken/src/permission_state_change_callback.h rename to interfaces/innerkits/accesstoken/include/permission_state_change_callback.h diff --git a/interfaces/innerkits/accesstoken/src/permission_state_change_callback_stub.h b/interfaces/innerkits/accesstoken/include/permission_state_change_callback_stub.h similarity index 100% rename from interfaces/innerkits/accesstoken/src/permission_state_change_callback_stub.h rename to interfaces/innerkits/accesstoken/include/permission_state_change_callback_stub.h diff --git a/services/accesstokenmanager/test/BUILD.gn b/services/accesstokenmanager/test/BUILD.gn index ec5cf786bf5d5b0a0612df3548b1dcfbd14aea75..fc7f910694e1fd27f09d35c8c2b81b18b342edb8 100644 --- a/services/accesstokenmanager/test/BUILD.gn +++ b/services/accesstokenmanager/test/BUILD.gn @@ -51,6 +51,7 @@ ohos_unittest("libaccesstoken_manager_service_standard_test") { configs = [ "//base/security/access_token/config:coverage_flags" ] deps = [ + "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", "//base/security/access_token/interfaces/innerkits/nativetoken:libnativetoken", "//base/security/access_token/services/accesstokenmanager/:accesstoken_manager_service", "//base/security/access_token/services/common/database:accesstoken_database_cxx", @@ -60,6 +61,7 @@ ohos_unittest("libaccesstoken_manager_service_standard_test") { external_deps = [ "c_utils:utils", "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", "safwk:system_ability_fwk", ] } diff --git a/services/accesstokenmanager/test/unittest/cpp/src/accesstoken_info_manager_test.cpp b/services/accesstokenmanager/test/unittest/cpp/src/accesstoken_info_manager_test.cpp index 5068e87c11ea572362aca4daea678bf644732f3e..c96d47d27affed05326ad0f2e99da1f115f629d5 100644 --- a/services/accesstokenmanager/test/unittest/cpp/src/accesstoken_info_manager_test.cpp +++ b/services/accesstokenmanager/test/unittest/cpp/src/accesstoken_info_manager_test.cpp @@ -28,6 +28,7 @@ #define private public #include "permission_manager.h" #undef private +#include "permission_state_change_callback_stub.h" #include "string_ex.h" using namespace testing::ext; @@ -38,7 +39,7 @@ namespace { static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, SECURITY_DOMAIN_ACCESSTOKEN, "AccessTokenInfoManagerTest" }; - +static constexpr uint32_t MAX_CALLBACK_SIZE = 1024; static constexpr int32_t DEFAULT_API_VERSION = 8; static PermissionDef g_infoManagerTestPermDef1 = { .permissionName = "open the door", @@ -907,6 +908,50 @@ HWTEST_F(AccessTokenInfoManagerTest, AddPermStateChangeCallback001, TestSize.Lev EXPECT_EQ(RET_FAILED, PermissionManager::GetInstance().RemovePermStateChangeCallback(nullptr)); } +class PermChangeCallback : public PermissionStateChangeCallbackStub { +public: + PermChangeCallback() = default; + virtual ~PermChangeCallback() = default; + + void PermStateChangeCallback(PermStateChangeInfo& result) override; +}; + +void PermChangeCallback::PermStateChangeCallback(PermStateChangeInfo& result) +{ +} + +/** + * @tc.name: AddPermStateChangeCallback002 + * @tc.desc: Test AddPermStateChangeCallback with exceed limitation. + * @tc.type: FUNC + * @tc.require: issueI4V02P + */ +HWTEST_F(AccessTokenInfoManagerTest, AddPermStateChangeCallback002, TestSize.Level1) +{ + PermStateChangeScope inScopeInfo; + inScopeInfo.tokenIDs = {}; + inScopeInfo.permList = {"ohos.permission.CAMERA"}; + std::vector> callbacks; + + for (size_t i = 0; i < MAX_CALLBACK_SIZE; ++i) { + sptr callback = new (std::nothrow) PermChangeCallback(); + ASSERT_NE(nullptr, callback); + ASSERT_EQ(RET_SUCCESS, + PermissionManager::GetInstance().AddPermStateChangeCallback(inScopeInfo, callback->AsObject())); + callbacks.emplace_back(callback); + } + + sptr callback = new (std::nothrow) PermChangeCallback(); + ASSERT_NE(nullptr, callback); + ASSERT_NE(RET_SUCCESS, + PermissionManager::GetInstance().AddPermStateChangeCallback(inScopeInfo, callback->AsObject())); + + for (size_t i = 0; i < callbacks.size(); ++i) { + ASSERT_EQ(RET_SUCCESS, + PermissionManager::GetInstance().RemovePermStateChangeCallback(callbacks[i]->AsObject())); + } +} + /** * @tc.name: DumpTokenInfo001 * @tc.desc: Test DumpTokenInfo with invalid tokenId. diff --git a/services/privacymanager/src/active/active_status_callback_manager.cpp b/services/privacymanager/src/active/active_status_callback_manager.cpp index 6dc2f0daff2beff2c539ad1ab6b1566801aab5cf..66a4318cf336c43e8f48bbf2bf9329b378f90d7a 100644 --- a/services/privacymanager/src/active/active_status_callback_manager.cpp +++ b/services/privacymanager/src/active/active_status_callback_manager.cpp @@ -30,7 +30,7 @@ static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, SECURITY_DOMAIN_PRIVACY, "ActiveStatusCallbackManager" }; static const time_t MAX_TIMEOUT_SEC = 30; -static const time_t MAX_CALLBACK_SIZE = 200; +static const uint32_t MAX_CALLBACK_SIZE = 200; } ActiveStatusCallbackManager& ActiveStatusCallbackManager::GetInstance() diff --git a/services/privacymanager/test/unittest/BUILD.gn b/services/privacymanager/test/unittest/BUILD.gn index 5e8da1cdc48122ceb66870d99472be55b2689dfc..bbee3e077a0fe276724752788c483fde4a15eeaa 100644 --- a/services/privacymanager/test/unittest/BUILD.gn +++ b/services/privacymanager/test/unittest/BUILD.gn @@ -22,11 +22,14 @@ if (is_standard_system && ability_base_enable == true) { include_dirs = [ "//base/security/access_token/interfaces/innerkits/accesstoken/include", + "//base/security/access_token/frameworks/common/include", "//base/security/access_token/frameworks/privacy/include", "//base/security/access_token/interfaces/innerkits/privacy/include", + "//base/security/access_token/services/privacymanager/include/record", "//base/security/access_token/services/privacymanager/include/sensitive", "//base/security/access_token/services/privacymanager/include/service", "//third_party/googletest/include", + "//base/security/access_token/services/common/database/include", "//commonlibrary/c_utils/base/include", ] @@ -39,7 +42,9 @@ if (is_standard_system && ability_base_enable == true) { deps = [ "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", + "//base/security/access_token/interfaces/innerkits/privacy:libprivacy_sdk", "//base/security/access_token/interfaces/innerkits/token_setproc:libtoken_setproc", + "//base/security/access_token/services/common/database:accesstoken_database_cxx", "//base/security/access_token/services/privacymanager:privacy_manager_service", "//third_party/googletest:gtest_main", ] @@ -48,6 +53,7 @@ if (is_standard_system && ability_base_enable == true) { "ability_runtime:app_manager", "access_token:libaccesstoken_sdk", "c_utils:utils", + "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "multimedia_audio_framework:audio_client", "ipc:ipc_core", diff --git a/services/privacymanager/test/unittest/privacy_manager_service_test.cpp b/services/privacymanager/test/unittest/privacy_manager_service_test.cpp index d1ae46bf5257841cc3537ea8bddd6ccdfb1f39ee..e51f8e855640895f8a9d4e24b4bc44910bea20df 100644 --- a/services/privacymanager/test/unittest/privacy_manager_service_test.cpp +++ b/services/privacymanager/test/unittest/privacy_manager_service_test.cpp @@ -17,6 +17,8 @@ #include "accesstoken_kit.h" #include "string_ex.h" +#include "permission_record_manager.h" +#include "perm_active_status_change_callback_stub.h" #include "privacy_manager_service.h" using namespace testing::ext; @@ -25,7 +27,8 @@ namespace OHOS { namespace Security { namespace AccessToken { namespace { -constexpr int32_t PERMISSION_USAGE_RECORDS_MAX_NUM = 10; +static constexpr int32_t PERMISSION_USAGE_RECORDS_MAX_NUM = 10; +static constexpr uint32_t MAX_CALLBACK_SIZE = 200; static PermissionStateFull g_testState = { .permissionName = "ohos.permission.CAMERA", .isGeneral = true, @@ -160,6 +163,74 @@ HWTEST_F(PrivacyManagerServiceTest, Dump002, TestSize.Level1) privacyManagerService_->AddPermissionUsedRecord(tokenId, permission, 1, 0); ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args)); } + +class PermActiveStatusChangeCallback : public PermActiveStatusChangeCallbackStub { +public: + PermActiveStatusChangeCallback() = default; + virtual ~PermActiveStatusChangeCallback() = default; + + void ActiveStatusChangeCallback(ActiveChangeResponse& result) override; +}; + +void PermActiveStatusChangeCallback::ActiveStatusChangeCallback(ActiveChangeResponse& result) +{ +} + +/** + * @tc.name: RegisterPermActiveStatusCallback001 + * @tc.desc: RegisterPermActiveStatusCallback with invalid parameter. + * @tc.type: FUNC + * @tc.require: issueI5RWX8 + */ +HWTEST_F(PrivacyManagerServiceTest, RegisterPermActiveStatusCallback001, TestSize.Level1) +{ + std::vector permList = {"ohos.permission.CAMERA"}; + ASSERT_NE(RET_SUCCESS, + PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, nullptr)); +} + +/** + * @tc.name: RegisterPermActiveStatusCallback002 + * @tc.desc: RegisterPermActiveStatusCallback with exceed limitation. + * @tc.type: FUNC + * @tc.require: issueI5RWX8 + */ +HWTEST_F(PrivacyManagerServiceTest, RegisterPermActiveStatusCallback002, TestSize.Level1) +{ + std::vector permList = {"ohos.permission.CAMERA"}; + std::vector> callbacks; + + for (size_t i = 0; i < MAX_CALLBACK_SIZE; ++i) { + sptr callback = new (std::nothrow) PermActiveStatusChangeCallback(); + ASSERT_NE(nullptr, callback); + ASSERT_EQ(RET_SUCCESS, + PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, callback->AsObject())); + callbacks.emplace_back(callback); + } + + sptr callback = new (std::nothrow) PermActiveStatusChangeCallback(); + ASSERT_NE(nullptr, callback); + ASSERT_NE(RET_SUCCESS, + PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, callback->AsObject())); + + for (size_t i = 0; i < callbacks.size(); ++i) { + ASSERT_EQ(RET_SUCCESS, + PermissionRecordManager::GetInstance().UnRegisterPermActiveStatusCallback(callbacks[i]->AsObject())); + } +} + +/** + * @tc.name: UnRegisterPermActiveStatusCallback001 + * @tc.desc: UnRegisterPermActiveStatusCallback with invalid parameter. + * @tc.type: FUNC + * @tc.require: issueI5RWX8 + */ +HWTEST_F(PrivacyManagerServiceTest, UnRegisterPermActiveStatusCallback001, TestSize.Level1) +{ + std::vector permList = {"ohos.permission.CAMERA"}; + ASSERT_NE(RET_SUCCESS, + PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, nullptr)); +} } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/services/privacymanager/test/unittest/sensitive_resource_manger_test.cpp b/services/privacymanager/test/unittest/sensitive_resource_manger_test.cpp index 5d82577928dd5500d952dbca20c7452e9c9ad192..47d75d1b41a835a6c8a4367dd23f428c1787919e 100644 --- a/services/privacymanager/test/unittest/sensitive_resource_manger_test.cpp +++ b/services/privacymanager/test/unittest/sensitive_resource_manger_test.cpp @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #include #include @@ -106,7 +106,7 @@ HWTEST_F(SensitiveResourceManagerTest, RegisterAppStatusChangeCallback002, TestS SensitiveResourceManager::GetInstance().RegisterAppStatusChangeCallback(tokenId1, AppStatusChangeCallback1)); ASSERT_EQ(true, SensitiveResourceManager::GetInstance().RegisterAppStatusChangeCallback(tokenId2, AppStatusChangeCallback1)); - + SensitiveResourceManager::GetInstance().UnRegisterAppStatusChangeCallback(tokenId1, AppStatusChangeCallback); SensitiveResourceManager::GetInstance().UnRegisterAppStatusChangeCallback(tokenId2, AppStatusChangeCallback); SensitiveResourceManager::GetInstance().UnRegisterAppStatusChangeCallback(tokenId1, AppStatusChangeCallback1);