From 55e96316c93f20f4bdaaafccb90e097b32acca60 Mon Sep 17 00:00:00 2001 From: chennian Date: Mon, 26 Sep 2022 08:46:05 +0800 Subject: [PATCH] =?UTF-8?q?fixed=204180ac6=20from=20https://gitee.com/nian?= =?UTF-8?q?Code/security=5Faccess=5Ftoken/pulls/655=20=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E5=89=8D=E5=90=8E=E5=8F=B0=E7=9B=91=E5=90=AC=E7=9A=84tdd?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=20Signed-off-by:chennian?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chennian --- .../permission_state_change_callback.h | 0 .../permission_state_change_callback_stub.h | 0 services/accesstokenmanager/test/BUILD.gn | 2 + .../cpp/src/accesstoken_info_manager_test.cpp | 47 +++++++++++- .../active/active_status_callback_manager.cpp | 2 +- .../privacymanager/test/unittest/BUILD.gn | 6 ++ .../unittest/privacy_manager_service_test.cpp | 73 ++++++++++++++++++- .../sensitive_resource_manger_test.cpp | 4 +- 8 files changed, 129 insertions(+), 5 deletions(-) rename interfaces/innerkits/accesstoken/{src => include}/permission_state_change_callback.h (100%) rename interfaces/innerkits/accesstoken/{src => include}/permission_state_change_callback_stub.h (100%) 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 ec5cf786b..fc7f91069 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 5068e87c1..c96d47d27 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 6dc2f0daf..66a4318cf 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 5e8da1cdc..bbee3e077 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 d1ae46bf5..e51f8e855 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 5d8257792..47d75d1b4 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); -- Gitee