diff --git a/interfaces/innerkits/accesstoken/test/BUILD.gn b/interfaces/innerkits/accesstoken/test/BUILD.gn index 6e337e6b96ab848d0f4f17fc9f86a211ba802cc3..f7b13fe0d7d15a48d59d79fc409c3aaac07fd57a 100644 --- a/interfaces/innerkits/accesstoken/test/BUILD.gn +++ b/interfaces/innerkits/accesstoken/test/BUILD.gn @@ -77,6 +77,7 @@ ohos_unittest("libaccesstoken_sdk_test") { "unittest/src/app_installation_optimized_test.cpp", "unittest/src/clone_app_permission_test.cpp", "unittest/src/edm_policy_set_test.cpp", + "unittest/src/get_self_permission_state_test.cpp", "unittest/src/remote_token_kit_test.cpp", "unittest/src/security_component_grant_test.cpp", ] diff --git a/interfaces/innerkits/accesstoken/test/unittest/accesstoken_mock_test/accesstoken_kit_test.h b/interfaces/innerkits/accesstoken/test/unittest/accesstoken_mock_test/accesstoken_kit_test.h index eb0f8b56301cf8ad9023be0a5956baca6dbcb4e4..d34dc9481b68d72a11c497efba18ca5a701635fa 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/accesstoken_mock_test/accesstoken_kit_test.h +++ b/interfaces/innerkits/accesstoken/test/unittest/accesstoken_mock_test/accesstoken_kit_test.h @@ -20,7 +20,6 @@ #include "access_token.h" #include "accesstoken_kit.h" -#include "accesstoken_log.h" #include "iservice_registry.h" namespace OHOS { diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_extension_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_extension_test.cpp index ec1dfb902f26918ab8e8dd5059bba130992146c4..1e1a13e7855d7aa5a0b4444b202cebd0732f2974 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_extension_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_extension_test.cpp @@ -37,7 +37,6 @@ namespace OHOS { namespace Security { namespace AccessToken { namespace { -static const int MAX_PERMISSION_SIZE = 1000; static constexpr int32_t DEFAULT_API_VERSION = 8; static constexpr int32_t TOKENID_NOT_EXIST = 123; static const std::string TEST_BUNDLE_NAME = "ohos"; @@ -545,184 +544,6 @@ unsigned int AccessTokenKitExtensionTest::GetAccessTokenID(int userID, std::stri return AccessTokenKit::GetHapTokenID(userID, bundleName, instIndex); } -void GetPermsList1(std::vector &permsList1) -{ - PermissionListState perm1 = { - .permissionName = "ohos.permission.testPermDef1", - .state = SETTING_OPER, - }; - PermissionListState perm2 = { - .permissionName = "ohos.permission.testPermDef2", - .state = SETTING_OPER, - }; - PermissionListState perm3 = { - .permissionName = "ohos.permission.testPermDef3", - .state = SETTING_OPER, - }; - PermissionListState perm4 = { - .permissionName = "ohos.permission.testPermDef4", - .state = SETTING_OPER, - }; - permsList1.emplace_back(perm1); - permsList1.emplace_back(perm2); - permsList1.emplace_back(perm3); - permsList1.emplace_back(perm4); -} - -void GetPermsList2(std::vector &permsList2) -{ - PermissionListState perm3 = { - .permissionName = "ohos.permission.testPermDef3", - .state = SETTING_OPER, - }; - PermissionListState perm4 = { - .permissionName = "ohos.permission.testPermDef4", - .state = SETTING_OPER, - }; - permsList2.emplace_back(perm3); - permsList2.emplace_back(perm4); -} -/** - * @tc.name: GetSelfPermissionsState001 - * @tc.desc: get permission list state - * @tc.type: FUNC - * @tc.require: Issue Number - */ -HWTEST_F(AccessTokenKitExtensionTest, GetSelfPermissionsState001, TestSize.Level1) -{ - AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); - ASSERT_NE(INVALID_TOKENID, tokenID); - ASSERT_EQ(0, SetSelfTokenID(tokenID)); - - std::vector permsList1; - GetPermsList1(permsList1); - PermissionGrantInfo info; - PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList1, info); - ASSERT_EQ(DYNAMIC_OPER, ret); - ASSERT_EQ(static_cast(4), permsList1.size()); - ASSERT_EQ(DYNAMIC_OPER, permsList1[0].state); - ASSERT_EQ(DYNAMIC_OPER, permsList1[1].state); - ASSERT_EQ(SETTING_OPER, permsList1[2].state); - ASSERT_EQ(PASS_OPER, permsList1[3].state); - ASSERT_EQ("ohos.permission.testPermDef1", permsList1[0].permissionName); - ASSERT_EQ("ohos.permission.testPermDef2", permsList1[1].permissionName); - ASSERT_EQ("ohos.permission.testPermDef3", permsList1[2].permissionName); - ASSERT_EQ("ohos.permission.testPermDef4", permsList1[3].permissionName); - - PermissionListState perm5 = { - .permissionName = "ohos.permission.testPermDef5", - .state = SETTING_OPER, - }; - permsList1.emplace_back(perm5); - ret = AccessTokenKit::GetSelfPermissionsState(permsList1, info); - ASSERT_EQ(INVALID_OPER, permsList1[4].state); - ASSERT_EQ(DYNAMIC_OPER, ret); - - std::vector permsList2; - GetPermsList2(permsList2); - ret = AccessTokenKit::GetSelfPermissionsState(permsList2, info); - ASSERT_EQ(SETTING_OPER, permsList2[0].state); - ASSERT_EQ(PASS_OPER, permsList2[1].state); - ASSERT_EQ(PASS_OPER, ret); - - permsList2.emplace_back(perm5); - ret = AccessTokenKit::GetSelfPermissionsState(permsList2, info); - ASSERT_EQ(SETTING_OPER, permsList2[0].state); - ASSERT_EQ(PASS_OPER, permsList2[1].state); - ASSERT_EQ(INVALID_OPER, permsList2[2].state); - ASSERT_EQ(PASS_OPER, ret); - - std::vector permsList3; - permsList3.emplace_back(perm5); - ret = AccessTokenKit::GetSelfPermissionsState(permsList3, info); - ASSERT_EQ(INVALID_OPER, permsList3[0].state); - ASSERT_EQ(PASS_OPER, ret); -} - -/** - * @tc.name: GetSelfPermissionsState002 - * @tc.desc: permission list is empty or oversize - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitExtensionTest, GetSelfPermissionsState002, TestSize.Level1) -{ - std::vector permsList; - PermissionGrantInfo info; - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - - for (uint32_t i = 0; i < MAX_PERMISSION_SIZE + 1; i++) { - PermissionListState tmp = { - .permissionName = "ohos.permission.CAMERA", - .state = PASS_OPER - }; - permsList.emplace_back(tmp); - } - ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); -} - -/** - * @tc.name: GetSelfPermissionsState003 - * @tc.desc: test token id is native - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitExtensionTest, GetSelfPermissionsState003, TestSize.Level1) -{ - AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("hdcd"); - EXPECT_EQ(0, SetSelfTokenID(tokenId)); - std::vector permsList3; - PermissionListState tmp = { - .permissionName = "ohos.permission.CAMERA", - .state = PASS_OPER - }; - permsList3.emplace_back(tmp); - PermissionGrantInfo info; - ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList3, info)); -} - -/** - * @tc.name: GetSelfPermissionsState004 - * @tc.desc: test noexist token id - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitExtensionTest, GetSelfPermissionsState004, TestSize.Level1) -{ - AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); - EXPECT_EQ(0, SetSelfTokenID(tokenId)); - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenId)); - std::vector permsList4; - PermissionListState tmp = { - .permissionName = "ohos.permission.CAMERA", - .state = PASS_OPER - }; - permsList4.emplace_back(tmp); - PermissionGrantInfo info; - ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList4, info)); -} - -/** - * @tc.name: GetSelfPermissionsState005 - * @tc.desc: test noexist token id - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitExtensionTest, GetSelfPermissionsState005, TestSize.Level1) -{ - AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); - EXPECT_EQ(0, SetSelfTokenID(tokenId)); - std::vector permsList4; - PermissionListState tmp = { - .permissionName = "ohos.permission.SHORT_TERM_WRITE_IMAGEVIDEO", - .state = PASS_OPER - }; - permsList4.emplace_back(tmp); - PermissionGrantInfo info; - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList4, info)); - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenId)); -} - /** * @tc.name: GetPermissionsStatus001 * @tc.desc: get different permissions status diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp index 824a8a98670b3b5892880b612671aaf2fd5144e9..24ca3dbac79343d8232e3f9b39ed466935a0f5c8 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp @@ -3291,251 +3291,6 @@ HWTEST_F(AccessTokenKitTest, SetPermDialogCap002, TestSize.Level1) ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); } -/** - * @tc.name: GetSelfPermissionsState001 - * @tc.desc: get self permissions state with wrong token type. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState001, TestSize.Level1) -{ - AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams); - HapBaseInfo hapBaseInfo = { - .userID = g_infoManagerTestInfoParms.userID, - .bundleName = g_infoManagerTestInfoParms.bundleName, - .instIndex = g_infoManagerTestInfoParms.instIndex, - }; - - std::vector permsList; - PermissionListState tmp = { - .permissionName = g_infoManagerTestPolicyPrams.permStateList[0].permissionName, - .state = BUTT_OPER - }; - permsList.emplace_back(tmp); - - // test dialog isn't forbiddedn - ASSERT_EQ(0, AccessTokenKit::SetPermDialogCap(hapBaseInfo, false)); - SetSelfTokenID(tokenID); - PermissionGrantInfo info; - ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); -} - -HapPolicyParams GetPolicyParam() -{ - //test REQ_SUCCESS - PermissionStateFull permState1 = { - .permissionName = "ohos.permission.READ_HEALTH_DATA", - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_GRANTED}, - .grantFlags = {PermissionFlag::PERMISSION_SYSTEM_FIXED} - }; - PermissionStateFull permState2 = { - .permissionName = "ohos.permission.DISTRIBUTED_DATASYNC", - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .grantFlags = {PermissionFlag::PERMISSION_USER_SET} - }; - //test UNABLE_POP_UP - PermissionStateFull permState3 = { - .permissionName = "ohos.permission.READ_MESSAGES", - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} - }; - //test CONDITIONS_NOT_MET - PermissionStateFull permState4 = { - .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} - }; - //test REQ_SUCCESS - PermissionStateFull permState5 = { - .permissionName = "ohos.permission.WRITE_MEDIA", - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} - }; - - HapPolicyParams policyParam = { - .apl = APL_NORMAL, - .domain = "test.domain3", - .permStateList = {permState1, permState2, permState3, permState4, permState5} - }; - return policyParam; -} - -/** - * @tc.name: GetSelfPermissionsState002 - * @tc.desc: The test function GetSelfPermissionsState returns the object property field errorReason. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState002, TestSize.Level1) -{ - HapPolicyParams policyParam = GetPolicyParam(); - AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, policyParam); - - PermissionListState permInvalid = { - .permissionName = "ohos.permission.WU_ERROR_REASON", - .state = FORBIDDEN_OPER - }; - PermissionListState permNotConfig = { - .permissionName = "ohos.permission.READ_MEDIA", - .state = FORBIDDEN_OPER - }; - std::vector permsList; - permsList.emplace_back(permInvalid); - permsList.emplace_back(permNotConfig); - for (auto& perm : policyParam.permStateList) { - PermissionListState tmp = { - .permissionName = perm.permissionName, - .state = FORBIDDEN_OPER - }; - permsList.emplace_back(tmp); - } - SetSelfTokenID(tokenID); - PermissionGrantInfo info; - ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - EXPECT_EQ(permsList[0].errorReason, PERM_INVALID); - EXPECT_EQ(permsList[1].errorReason, PERM_NOT_DECLEARED); - EXPECT_EQ(permsList[2].errorReason, REQ_SUCCESS); - EXPECT_EQ(permsList[3].errorReason, REQ_SUCCESS); - EXPECT_EQ(permsList[4].errorReason, UNABLE_POP_UP); - EXPECT_EQ(permsList[5].errorReason, CONDITIONS_NOT_MET); - EXPECT_EQ(permsList[6].errorReason, REQ_SUCCESS); - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); -} - -/** - * @tc.name: GetSelfPermissionsState003 - * @tc.desc: If the user does not agree to the privacy statement, the test function GetSelfPermissionsState returns - * the object attribute field errorReason. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState003, TestSize.Level1) -{ - HapPolicyParams policyParam = GetPolicyParam(); - AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, policyParam); - HapBaseInfo hapBaseInfo = { - .userID = g_infoManagerTestInfoParms.userID, - .bundleName = g_infoManagerTestInfoParms.bundleName, - .instIndex = g_infoManagerTestInfoParms.instIndex, - }; - std::vector permsList; - for (auto& perm : policyParam.permStateList) { - PermissionListState tmp = { - .permissionName = perm.permissionName, - .state = FORBIDDEN_OPER - }; - permsList.emplace_back(tmp); - } - ASSERT_EQ(0, AccessTokenKit::SetPermDialogCap(hapBaseInfo, true)); - SetSelfTokenID(tokenID); - PermissionGrantInfo info; - ASSERT_EQ(FORBIDDEN_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - EXPECT_EQ(permsList[0].errorReason, PRIVACY_STATEMENT_NOT_AGREED); - EXPECT_EQ(permsList[1].errorReason, PRIVACY_STATEMENT_NOT_AGREED); - EXPECT_EQ(permsList[2].errorReason, UNABLE_POP_UP); - EXPECT_EQ(permsList[3].errorReason, CONDITIONS_NOT_MET); - EXPECT_EQ(permsList[4].errorReason, PRIVACY_STATEMENT_NOT_AGREED); - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); -} - -HapPolicyParams getHapPolicyLocationParams(const std::vector& permissions) -{ - HapPolicyParams policyParam = { - .apl = APL_NORMAL, - .domain = "test.domain3", - .permStateList = {} - }; - for (auto& perm : permissions) { - PermissionStateFull location = { - .permissionName = perm, - .isGeneral = true, - .resDeviceID = {"local3"}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} - }; - policyParam.permStateList.emplace_back(location); - } - return policyParam; -} - -/** - * @tc.name: GetSelfPermissionsState004 - * @tc.desc: The test position-related permission function GetSelfPermissionsState returns the object property - * field errorReason. - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState004, TestSize.Level1) -{ - std::string location = "ohos.permission.LOCATION"; - std::string vague = "ohos.permission.APPROXIMATELY_LOCATION"; - std::string background = "ohos.permission.LOCATION_IN_BACKGROUND"; - std::vector permissions = {location, vague}; - HapPolicyParams policyParam = getHapPolicyLocationParams(permissions); - HapInfoParams hapInfo = g_infoManagerTestInfoParms; - hapInfo.apiVersion = 14; - AccessTokenID tokenID = AllocTestToken(hapInfo, policyParam); - std::vector permsList; - PermissionListState locationState = { - .permissionName = vague, - .state = FORBIDDEN_OPER - }; - permsList.emplace_back(locationState); - SetSelfTokenID(tokenID); - PermissionGrantInfo info; - - ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - EXPECT_EQ(permsList[0].errorReason, REQ_SUCCESS); - - locationState.permissionName = location; - permsList.emplace_back(locationState); - ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - EXPECT_EQ(permsList[0].errorReason, REQ_SUCCESS); - EXPECT_EQ(permsList[1].errorReason, REQ_SUCCESS); - - permsList[1].permissionName = background; - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); - EXPECT_EQ(permsList[0].errorReason, CONDITIONS_NOT_MET); - EXPECT_EQ(permsList[1].errorReason, CONDITIONS_NOT_MET); - - std::vector locationPermsList = {locationState}; - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); - EXPECT_EQ(locationPermsList[0].errorReason, CONDITIONS_NOT_MET); - - SetSelfTokenID(selfTokenId_); - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GrantPermission(tokenID, vague, PERMISSION_USER_FIXED)); - SetSelfTokenID(tokenID); - ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); - EXPECT_EQ(locationPermsList[0].errorReason, REQ_SUCCESS); - - locationState.permissionName = background; - std::vector backgroundPermsList = {locationState}; - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(backgroundPermsList, info)); - EXPECT_EQ(backgroundPermsList[0].errorReason, CONDITIONS_NOT_MET); - - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); - - std::vector vaguePermissions = {vague}; - policyParam = getHapPolicyLocationParams(vaguePermissions); - tokenID = AllocTestToken(hapInfo, policyParam); - SetSelfTokenID(tokenID); - - ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); - EXPECT_EQ(locationPermsList[0].errorReason, PERM_NOT_DECLEARED); - - ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); -} - /** * @tc.name: UserPolicyTest * @tc.desc: UserPolicyTest. diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a4de56311f2437b7a75225bb617495b35a376c18 --- /dev/null +++ b/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.cpp @@ -0,0 +1,535 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "get_self_permission_state_test.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" + +namespace OHOS { +namespace Security { +namespace AccessToken { +using namespace testing::ext; +namespace { +static const int MAX_PERMISSION_SIZE = 1000; +static const std::string TEST_BUNDLE_NAME = "ohos"; +static const int TEST_USER_ID = 0; +PermissionDef g_infoManagerTestPermDef1 = { + .permissionName = "ohos.permission.test1", + .bundleName = "accesstoken_test", + .grantMode = 1, + .availableLevel = APL_NORMAL, + .label = "label2", + .labelId = 1, + .description = "open the door", + .descriptionId = 1 +}; + +PermissionDef g_infoManagerTestPermDef2 = { + .permissionName = "ohos.permission.test2", + .bundleName = "accesstoken_test", + .grantMode = 1, + .availableLevel = APL_NORMAL, + .label = "label2", + .labelId = 1, + .description = "break the door", + .descriptionId = 1 +}; + +HapInfoParams g_infoManagerTestInfoParms = { + .userID = 1, + .bundleName = "accesstoken_test", + .instIndex = 0, + .appIDDesc = "test2", + .apiVersion = 8 // 8: api version +}; + +PermissionStateFull g_infoManagerTestState1 = { + .permissionName = "ohos.permission.test1", + .isGeneral = true, + .resDeviceID = {"local2"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} +}; + +PermissionStateFull g_infoManagerTestState2 = { + .permissionName = "ohos.permission.test2", + .isGeneral = false, + .resDeviceID = {"device 1", "device 2"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED, PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1, 2} +}; + +HapPolicyParams g_infoManagerTestPolicyPrams = { + .apl = APL_NORMAL, + .domain = "test.domain2", + .permList = {g_infoManagerTestPermDef1, g_infoManagerTestPermDef2}, + .permStateList = {g_infoManagerTestState1, g_infoManagerTestState2} +}; +} +void GetSelfPermissionStateTest::SetUpTestCase() +{ +} + +void GetSelfPermissionStateTest::TearDownTestCase() +{ +} + +void GetSelfPermissionStateTest::SetUp() +{ +} + +void GetSelfPermissionStateTest::TearDown() +{ +} + +unsigned int GetSelfPermissionStateTest::GetAccessTokenID(int userID, std::string bundleName, int instIndex) +{ + return AccessTokenKit::GetHapTokenID(userID, bundleName, instIndex); +} + +AccessTokenID GetSelfPermissionStateTest::AllocTestToken( + const HapInfoParams& hapInfo, const HapPolicyParams& hapPolicy) const +{ + AccessTokenIDEx tokenIdEx = {0}; + tokenIdEx = AccessTokenKit::AllocHapToken(hapInfo, hapPolicy); + return tokenIdEx.tokenIdExStruct.tokenID; +} + +void GetPermsList1(std::vector &permsList1) +{ + PermissionListState perm1 = { + .permissionName = "ohos.permission.testPermDef1", + .state = SETTING_OPER, + }; + PermissionListState perm2 = { + .permissionName = "ohos.permission.testPermDef2", + .state = SETTING_OPER, + }; + PermissionListState perm3 = { + .permissionName = "ohos.permission.testPermDef3", + .state = SETTING_OPER, + }; + PermissionListState perm4 = { + .permissionName = "ohos.permission.testPermDef4", + .state = SETTING_OPER, + }; + permsList1.emplace_back(perm1); + permsList1.emplace_back(perm2); + permsList1.emplace_back(perm3); + permsList1.emplace_back(perm4); +} + +void GetPermsList2(std::vector &permsList2) +{ + PermissionListState perm3 = { + .permissionName = "ohos.permission.testPermDef3", + .state = SETTING_OPER, + }; + PermissionListState perm4 = { + .permissionName = "ohos.permission.testPermDef4", + .state = SETTING_OPER, + }; + permsList2.emplace_back(perm3); + permsList2.emplace_back(perm4); +} + +/** + * @tc.name: GetSelfPermissionsState001 + * @tc.desc: get permission list state + * @tc.type: FUNC + * @tc.require: Issue Number + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState001, TestSize.Level1) +{ + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); + ASSERT_NE(INVALID_TOKENID, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + std::vector permsList1; + GetPermsList1(permsList1); + PermissionGrantInfo info; + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList1, info); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(static_cast(4), permsList1.size()); + ASSERT_EQ(DYNAMIC_OPER, permsList1[0].state); + ASSERT_EQ(DYNAMIC_OPER, permsList1[1].state); + ASSERT_EQ(SETTING_OPER, permsList1[2].state); + ASSERT_EQ(PASS_OPER, permsList1[3].state); + ASSERT_EQ("ohos.permission.testPermDef1", permsList1[0].permissionName); + ASSERT_EQ("ohos.permission.testPermDef2", permsList1[1].permissionName); + ASSERT_EQ("ohos.permission.testPermDef3", permsList1[2].permissionName); + ASSERT_EQ("ohos.permission.testPermDef4", permsList1[3].permissionName); + + PermissionListState perm5 = { + .permissionName = "ohos.permission.testPermDef5", + .state = SETTING_OPER, + }; + permsList1.emplace_back(perm5); + ret = AccessTokenKit::GetSelfPermissionsState(permsList1, info); + ASSERT_EQ(INVALID_OPER, permsList1[4].state); + ASSERT_EQ(DYNAMIC_OPER, ret); + + std::vector permsList2; + GetPermsList2(permsList2); + ret = AccessTokenKit::GetSelfPermissionsState(permsList2, info); + ASSERT_EQ(SETTING_OPER, permsList2[0].state); + ASSERT_EQ(PASS_OPER, permsList2[1].state); + ASSERT_EQ(PASS_OPER, ret); + + permsList2.emplace_back(perm5); + ret = AccessTokenKit::GetSelfPermissionsState(permsList2, info); + ASSERT_EQ(SETTING_OPER, permsList2[0].state); + ASSERT_EQ(PASS_OPER, permsList2[1].state); + ASSERT_EQ(INVALID_OPER, permsList2[2].state); + ASSERT_EQ(PASS_OPER, ret); + + std::vector permsList3; + permsList3.emplace_back(perm5); + ret = AccessTokenKit::GetSelfPermissionsState(permsList3, info); + ASSERT_EQ(INVALID_OPER, permsList3[0].state); + ASSERT_EQ(PASS_OPER, ret); +} + +/** + * @tc.name: GetSelfPermissionsState002 + * @tc.desc: permission list is empty or oversize + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState002, TestSize.Level1) +{ + std::vector permsList; + PermissionGrantInfo info; + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + + for (uint32_t i = 0; i < MAX_PERMISSION_SIZE + 1; i++) { + PermissionListState tmp = { + .permissionName = "ohos.permission.CAMERA", + .state = PASS_OPER + }; + permsList.emplace_back(tmp); + } + ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); +} + +/** + * @tc.name: GetSelfPermissionsState003 + * @tc.desc: test token id is native + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState003, TestSize.Level1) +{ + AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("hdcd"); + EXPECT_EQ(0, SetSelfTokenID(tokenId)); + std::vector permsList3; + PermissionListState tmp = { + .permissionName = "ohos.permission.CAMERA", + .state = PASS_OPER + }; + permsList3.emplace_back(tmp); + PermissionGrantInfo info; + ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList3, info)); +} + +/** + * @tc.name: GetSelfPermissionsState004 + * @tc.desc: test noexist token id + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState004, TestSize.Level1) +{ + AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); + EXPECT_EQ(0, SetSelfTokenID(tokenId)); + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenId)); + std::vector permsList4; + PermissionListState tmp = { + .permissionName = "ohos.permission.CAMERA", + .state = PASS_OPER + }; + permsList4.emplace_back(tmp); + PermissionGrantInfo info; + ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList4, info)); +} + +/** + * @tc.name: GetSelfPermissionsState005 + * @tc.desc: test noexist token id + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState005, TestSize.Level1) +{ + AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(TEST_USER_ID, TEST_BUNDLE_NAME, 0); + EXPECT_EQ(0, SetSelfTokenID(tokenId)); + std::vector permsList4; + PermissionListState tmp = { + .permissionName = "ohos.permission.SHORT_TERM_WRITE_IMAGEVIDEO", + .state = PASS_OPER + }; + permsList4.emplace_back(tmp); + PermissionGrantInfo info; + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList4, info)); + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenId)); +} + + +/** + * @tc.name: GetSelfPermissionsState006 + * @tc.desc: get self permissions state with wrong token type. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState006, TestSize.Level1) +{ + AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams); + HapBaseInfo hapBaseInfo = { + .userID = g_infoManagerTestInfoParms.userID, + .bundleName = g_infoManagerTestInfoParms.bundleName, + .instIndex = g_infoManagerTestInfoParms.instIndex, + }; + + std::vector permsList; + PermissionListState tmp = { + .permissionName = g_infoManagerTestPolicyPrams.permStateList[0].permissionName, + .state = BUTT_OPER + }; + permsList.emplace_back(tmp); + + // test dialog isn't forbiddedn + ASSERT_EQ(0, AccessTokenKit::SetPermDialogCap(hapBaseInfo, false)); + SetSelfTokenID(tokenID); + PermissionGrantInfo info; + ASSERT_EQ(INVALID_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); +} + +HapPolicyParams GetPolicyParam() +{ + //test REQ_SUCCESS + PermissionStateFull permState1 = { + .permissionName = "ohos.permission.READ_HEALTH_DATA", + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {PermissionFlag::PERMISSION_SYSTEM_FIXED} + }; + PermissionStateFull permState2 = { + .permissionName = "ohos.permission.DISTRIBUTED_DATASYNC", + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_USER_SET} + }; + //test UNABLE_POP_UP + PermissionStateFull permState3 = { + .permissionName = "ohos.permission.READ_MESSAGES", + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} + }; + //test CONDITIONS_NOT_MET + PermissionStateFull permState4 = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} + }; + //test REQ_SUCCESS + PermissionStateFull permState5 = { + .permissionName = "ohos.permission.WRITE_MEDIA", + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} + }; + + HapPolicyParams policyParam = { + .apl = APL_NORMAL, + .domain = "test.domain3", + .permStateList = {permState1, permState2, permState3, permState4, permState5} + }; + return policyParam; +} + +/** + * @tc.name: GetSelfPermissionsState007 + * @tc.desc: The test function GetSelfPermissionsState returns the object property field errorReason. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState007, TestSize.Level1) +{ + HapPolicyParams policyParam = GetPolicyParam(); + AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, policyParam); + + PermissionListState permInvalid = { + .permissionName = "ohos.permission.WU_ERROR_REASON", + .state = FORBIDDEN_OPER + }; + PermissionListState permNotConfig = { + .permissionName = "ohos.permission.READ_MEDIA", + .state = FORBIDDEN_OPER + }; + std::vector permsList; + permsList.emplace_back(permInvalid); + permsList.emplace_back(permNotConfig); + for (auto& perm : policyParam.permStateList) { + PermissionListState tmp = { + .permissionName = perm.permissionName, + .state = FORBIDDEN_OPER + }; + permsList.emplace_back(tmp); + } + SetSelfTokenID(tokenID); + PermissionGrantInfo info; + ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + EXPECT_EQ(permsList[0].errorReason, PERM_INVALID); + EXPECT_EQ(permsList[1].errorReason, PERM_NOT_DECLEARED); + EXPECT_EQ(permsList[2].errorReason, REQ_SUCCESS); + EXPECT_EQ(permsList[3].errorReason, REQ_SUCCESS); + EXPECT_EQ(permsList[4].errorReason, UNABLE_POP_UP); + EXPECT_EQ(permsList[5].errorReason, CONDITIONS_NOT_MET); + EXPECT_EQ(permsList[6].errorReason, REQ_SUCCESS); + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); +} + +/** + * @tc.name: GetSelfPermissionsState008 + * @tc.desc: If the user does not agree to the privacy statement, the test function GetSelfPermissionsState returns + * the object attribute field errorReason. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState008, TestSize.Level1) +{ + HapPolicyParams policyParam = GetPolicyParam(); + AccessTokenID tokenID = AllocTestToken(g_infoManagerTestInfoParms, policyParam); + HapBaseInfo hapBaseInfo = { + .userID = g_infoManagerTestInfoParms.userID, + .bundleName = g_infoManagerTestInfoParms.bundleName, + .instIndex = g_infoManagerTestInfoParms.instIndex, + }; + std::vector permsList; + for (auto& perm : policyParam.permStateList) { + PermissionListState tmp = { + .permissionName = perm.permissionName, + .state = FORBIDDEN_OPER + }; + permsList.emplace_back(tmp); + } + ASSERT_EQ(0, AccessTokenKit::SetPermDialogCap(hapBaseInfo, true)); + SetSelfTokenID(tokenID); + PermissionGrantInfo info; + ASSERT_EQ(FORBIDDEN_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + EXPECT_EQ(permsList[0].errorReason, PRIVACY_STATEMENT_NOT_AGREED); + EXPECT_EQ(permsList[1].errorReason, PRIVACY_STATEMENT_NOT_AGREED); + EXPECT_EQ(permsList[2].errorReason, UNABLE_POP_UP); + EXPECT_EQ(permsList[3].errorReason, CONDITIONS_NOT_MET); + EXPECT_EQ(permsList[4].errorReason, PRIVACY_STATEMENT_NOT_AGREED); + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); +} + +HapPolicyParams getHapPolicyLocationParams(const std::vector& permissions) +{ + HapPolicyParams policyParam = { + .apl = APL_NORMAL, + .domain = "test.domain3", + .permStateList = {} + }; + for (auto& perm : permissions) { + PermissionStateFull location = { + .permissionName = perm, + .isGeneral = true, + .resDeviceID = {"local3"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} + }; + policyParam.permStateList.emplace_back(location); + } + return policyParam; +} + +/** + * @tc.name: GetSelfPermissionsState009 + * @tc.desc: The test position-related permission function GetSelfPermissionsState returns the object property + * field errorReason. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(GetSelfPermissionStateTest, GetSelfPermissionsState009, TestSize.Level1) +{ + std::string location = "ohos.permission.LOCATION"; + std::string vague = "ohos.permission.APPROXIMATELY_LOCATION"; + std::string background = "ohos.permission.LOCATION_IN_BACKGROUND"; + std::vector permissions = {location, vague}; + HapPolicyParams policyParam = getHapPolicyLocationParams(permissions); + HapInfoParams hapInfo = g_infoManagerTestInfoParms; + hapInfo.apiVersion = 14; + AccessTokenID tokenID = AllocTestToken(hapInfo, policyParam); + std::vector permsList; + PermissionListState locationState = { + .permissionName = vague, + .state = FORBIDDEN_OPER + }; + permsList.emplace_back(locationState); + SetSelfTokenID(tokenID); + PermissionGrantInfo info; + + ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + EXPECT_EQ(permsList[0].errorReason, REQ_SUCCESS); + + locationState.permissionName = location; + permsList.emplace_back(locationState); + ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + EXPECT_EQ(permsList[0].errorReason, REQ_SUCCESS); + EXPECT_EQ(permsList[1].errorReason, REQ_SUCCESS); + + permsList[1].permissionName = background; + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(permsList, info)); + EXPECT_EQ(permsList[0].errorReason, CONDITIONS_NOT_MET); + EXPECT_EQ(permsList[1].errorReason, CONDITIONS_NOT_MET); + + std::vector locationPermsList = {locationState}; + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); + EXPECT_EQ(locationPermsList[0].errorReason, CONDITIONS_NOT_MET); + + SetSelfTokenID(selfTokenId_); + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::GrantPermission(tokenID, vague, PERMISSION_USER_FIXED)); + SetSelfTokenID(tokenID); + ASSERT_EQ(DYNAMIC_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); + EXPECT_EQ(locationPermsList[0].errorReason, REQ_SUCCESS); + + locationState.permissionName = background; + std::vector backgroundPermsList = {locationState}; + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(backgroundPermsList, info)); + EXPECT_EQ(backgroundPermsList[0].errorReason, CONDITIONS_NOT_MET); + + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); + + std::vector vaguePermissions = {vague}; + policyParam = getHapPolicyLocationParams(vaguePermissions); + tokenID = AllocTestToken(hapInfo, policyParam); + SetSelfTokenID(tokenID); + + ASSERT_EQ(PASS_OPER, AccessTokenKit::GetSelfPermissionsState(locationPermsList, info)); + EXPECT_EQ(locationPermsList[0].errorReason, PERM_NOT_DECLEARED); + + ASSERT_EQ(RET_SUCCESS, AccessTokenKit::DeleteToken(tokenID)); +} +} // namespace AccessToken +} // namespace Security +} // namespace OHOS \ No newline at end of file diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.h b/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.h new file mode 100644 index 0000000000000000000000000000000000000000..ade89dc093b8f40dd0708f2a4bb96aa889ee4d77 --- /dev/null +++ b/interfaces/innerkits/accesstoken/test/unittest/src/get_self_permission_state_test.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef GET_SELF_PERMISSION_STATE_TEST_H +#define GET_SELF_PERMISSION_STATE_TEST_H + +#include + +#include "access_token.h" +#include "accesstoken_kit.h" +#include "permission_def.h" +#include "permission_state_full.h" + +namespace OHOS { +namespace Security { +namespace AccessToken { +class GetSelfPermissionStateTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + unsigned int GetAccessTokenID(int userID, std::string bundleName, int instIndex); + AccessTokenID AllocTestToken(const HapInfoParams& hapInfo, const HapPolicyParams& hapPolicy) const; + + uint64_t selfTokenId_; +}; +} // namespace AccessToken +} // namespace Security +} // namespace OHOS +#endif // GET_SELF_PERMISSION_STATE_TEST_H