From ccce369f1603a6963b43444bdeb88e5073a96829 Mon Sep 17 00:00:00 2001 From: zhouyan Date: Tue, 23 Aug 2022 11:47:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A8=A1=E7=B3=8A=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E6=9D=83=E9=99=90=E4=B8=8E=E7=B2=BE=E5=87=86=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E6=9D=83=E9=99=90UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: Ic2cbf8e86bb4e11af73cd076d2e40d32d0c4651b --- .../unittest/src/accesstoken_kit_test.cpp | 741 ++++++++++++++++-- .../test/unittest/src/accesstoken_kit_test.h | 6 + 2 files changed, 682 insertions(+), 65 deletions(-) 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 c908ebd0b..444af3027 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp @@ -23,10 +23,13 @@ #include "softbus_bus_center.h" using namespace testing::ext; -using namespace OHOS::Security::AccessToken; +namespace OHOS { +namespace Security { +namespace AccessToken { namespace { static constexpr int32_t DEFAULT_API_VERSION = 8; +static constexpr int32_t VAGUE_LOCATION_API_VERSION = 9; static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, SECURITY_DOMAIN_ACCESSTOKEN, "AccessTokenKitTest"}; PermissionStateFull g_grantPermissionReq = { @@ -48,43 +51,43 @@ PermissionDef g_infoManagerTestPermDef1 = { .permissionName = "ohos.permission.test1", .bundleName = "accesstoken_test", .grantMode = 1, + .availableLevel = APL_NORMAL, .label = "label", .labelId = 1, .description = "open the door", - .descriptionId = 1, - .availableLevel = APL_NORMAL + .descriptionId = 1 }; PermissionDef g_infoManagerTestPermDef2 = { .permissionName = "ohos.permission.test2", .bundleName = "accesstoken_test", .grantMode = 1, + .availableLevel = APL_NORMAL, .label = "label", .labelId = 1, .description = "break the door", - .descriptionId = 1, - .availableLevel = APL_NORMAL + .descriptionId = 1 }; PermissionStateFull g_infoManagerTestState1 = { - .grantFlags = {1}, - .grantStatus = {PermissionState::PERMISSION_GRANTED}, - .isGeneral = true, .permissionName = "ohos.permission.test1", - .resDeviceID = {"local"} + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} }; PermissionStateFull g_infoManagerTestState2 = { .permissionName = "ohos.permission.test2", .isGeneral = false, - .grantFlags = {1, 2}, + .resDeviceID = {"device 1", "device 2"}, .grantStatus = {PermissionState::PERMISSION_GRANTED, PermissionState::PERMISSION_GRANTED}, - .resDeviceID = {"device 1", "device 2"} + .grantFlags = {1, 2} }; HapInfoParams g_infoManagerTestInfoParms = { - .bundleName = "accesstoken_test", .userID = 1, + .bundleName = "accesstoken_test", .instIndex = 0, .appIDDesc = "testtesttesttest", .apiVersion = DEFAULT_API_VERSION @@ -98,8 +101,8 @@ HapPolicyParams g_infoManagerTestPolicyPrams = { }; HapInfoParams g_infoManagerTestInfoParmsBak = { - .bundleName = "accesstoken_test", .userID = 1, + .bundleName = "accesstoken_test", .instIndex = 0, .appIDDesc = "testtesttesttest", .apiVersion = DEFAULT_API_VERSION @@ -111,6 +114,113 @@ HapPolicyParams g_infoManagerTestPolicyPramsBak = { .permList = {g_infoManagerTestPermDef1, g_infoManagerTestPermDef2}, .permStateList = {g_infoManagerTestState1, g_infoManagerTestState2} }; + +HapInfoParams g_locationTestInfo = { + .userID = TEST_USER_ID, + .bundleName = "accesstoken_location_test", + .instIndex = 0, + .appIDDesc = "testtesttesttest" +}; + +PermissionDef g_locationTestDefVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .bundleName = "accesstoken_location_test", + .grantMode = GrantMode::USER_GRANT, + .availableLevel = APL_NORMAL, + .provisionEnable = false, + .distributedSceneEnable = true +}; + +PermissionDef g_locationTestDefAccurate = { + .permissionName = "ohos.permission.LOCATION", + .bundleName = "accesstoken_location_test", + .grantMode = GrantMode::USER_GRANT, + .availableLevel = APL_NORMAL, + .provisionEnable = true, + .distributedSceneEnable = true +}; + +PermissionDef g_locationTestDefSystemGrant = { + .permissionName = "ohos.permission.locationtest1", + .bundleName = "accesstoken_location_test", + .grantMode = GrantMode::SYSTEM_GRANT, + .availableLevel = APL_NORMAL, + .provisionEnable = false, + .distributedSceneEnable = false +}; + +PermissionDef g_locationTestDefUserGrant = { + .permissionName = "ohos.permission.locationtest2", + .bundleName = "accesstoken_location_test", + .grantMode = GrantMode::USER_GRANT, + .availableLevel = APL_NORMAL, + .provisionEnable = false, + .distributedSceneEnable = false +}; + +PermissionStateFull g_locationTestStateSystemGrant = { + .permissionName = "ohos.permission.locationtest1", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {PermissionFlag::PERMISSION_SYSTEM_FIXED} +}; + +PermissionStateFull g_locationTestStateUserGrant = { + .permissionName = "ohos.permission.locationtest2", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} +}; + +PermissionStateFull g_locationTestStateVague02 = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {PermissionFlag::PERMISSION_USER_FIXED} +}; + +PermissionStateFull g_locationTestStateVague10 = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} +}; + +PermissionStateFull g_locationTestStateVague12 = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_USER_FIXED} +}; + +PermissionStateFull g_locationTestStateAccurate02 = { + .permissionName = "ohos.permission.LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {PermissionFlag::PERMISSION_USER_FIXED} +}; + +PermissionStateFull g_locationTestStateAccurate10 = { + .permissionName = "ohos.permission.LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG} +}; + +PermissionStateFull g_locationTestStateAccurate12 = { + .permissionName = "ohos.permission.LOCATION", + .isGeneral = true, + .resDeviceID = {"device"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {PermissionFlag::PERMISSION_USER_FIXED} +}; } void AccessTokenKitTest::SetUpTestCase() @@ -220,35 +330,35 @@ void AccessTokenKitTest::SetUp() .grantFlags = {PermissionFlag::PERMISSION_SYSTEM_FIXED} }; PermissionStateFull permTestState1 = { - .grantFlags = {0}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .isGeneral = true, .permissionName = "ohos.permission.testPermDef1", - .resDeviceID = {"local"} + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {0}, }; PermissionStateFull permTestState2 = { - .grantFlags = {1}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .isGeneral = true, .permissionName = "ohos.permission.testPermDef2", - .resDeviceID = {"local"} + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {1} }; PermissionStateFull permTestState3 = { - .grantFlags = {2}, - .grantStatus = {PermissionState::PERMISSION_DENIED}, - .isGeneral = true, .permissionName = "ohos.permission.testPermDef3", - .resDeviceID = {"local"} + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .grantFlags = {2} }; PermissionStateFull permTestState4 = { - .grantFlags = {1}, - .grantStatus = {PermissionState::PERMISSION_GRANTED}, - .isGeneral = true, .permissionName = "ohos.permission.testPermDef4", - .resDeviceID = {"local"} + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} }; policy.permStateList.emplace_back(permStatAlpha); @@ -277,6 +387,31 @@ void AccessTokenKitTest::TearDown() SetSelfTokenID(selfTokenId_); } +void AccessTokenKitTest::AllocHapToken(std::vector& permmissionDefs, + std::vector& permissionStateFulls, int32_t apiVersion) +{ + AccessTokenID tokenID = AccessTokenKit::GetHapTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + AccessTokenKit::DeleteToken(tokenID); + + HapInfoParams info = g_locationTestInfo; + info.apiVersion = apiVersion; + + HapPolicyParams policy = { + .apl = APL_NORMAL, + .domain = "domain" + }; + + for (auto& permmissionDef:permmissionDefs) { + policy.permList.emplace_back(permmissionDef); + } + + for (auto& permissionStateFull:permissionStateFulls) { + policy.permStateList.emplace_back(permissionStateFull); + } + + AccessTokenKit::AllocHapToken(info, policy); +} + unsigned int AccessTokenKitTest::GetAccessTokenID(int userID, std::string bundleName, int instIndex) { return AccessTokenKit::GetHapTokenID(userID, bundleName, instIndex); @@ -1683,24 +1818,24 @@ HWTEST_F(AccessTokenKitTest, AllocHapToken018, TestSize.Level1) .permStateList = {} }; HapInfoParams infoManagerTestInfoParms1 = { - .bundleName = "dlp_test1", .userID = 1, + .bundleName = "dlp_test1", .instIndex = 0, .dlpType = DLP_COMMON, .appIDDesc = "testtesttesttest", .apiVersion = DEFAULT_API_VERSION }; HapInfoParams infoManagerTestInfoParms2 = { - .bundleName = "dlp_test2", .userID = 1, + .bundleName = "dlp_test2", .instIndex = 1, .dlpType = DLP_READ, .appIDDesc = "testtesttesttest", .apiVersion = DEFAULT_API_VERSION }; HapInfoParams infoManagerTestInfoParms3 = { - .bundleName = "dlp_test3", .userID = 1, + .bundleName = "dlp_test3", .instIndex = 2, .dlpType = DLP_FULL_CONTROL, .appIDDesc = "testtesttesttest", @@ -1772,8 +1907,8 @@ HWTEST_F(AccessTokenKitTest, AllocHapToken019, TestSize.Level1) .permStateList = {} }; HapInfoParams infoManagerTestInfoParms1 = { - .bundleName = "accesstoken_test", .userID = 1, + .bundleName = "accesstoken_test", .instIndex = 4, .dlpType = INVALID_DLP_TYPE, .appIDDesc = "testtesttesttest", @@ -2116,17 +2251,19 @@ HWTEST_F(AccessTokenKitTest, UpdateHapToken009, TestSize.Level1) const std::string appIDDesc = g_infoManagerTestInfoParms.appIDDesc; PermissionDef infoManagerTestPermDef = g_infoManagerTestPermDef1; PermissionStateFull infoManagerTestState = { - .grantFlags = {PermissionState::PERMISSION_DENIED}, - .grantStatus = {3}, - .isGeneral = true, .permissionName = "ohos.permission.test1", - .resDeviceID = {"local"}}; + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {3}, + .grantFlags = {PermissionState::PERMISSION_DENIED} + }; HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_NORMAL, .domain = "test.domain", .permList = {infoManagerTestPermDef}, - .permStateList = {infoManagerTestState}}; + .permStateList = {infoManagerTestState} + }; DeleteTestToken(); AccessTokenIDEx tokenIdEx = {0}; @@ -2434,6 +2571,477 @@ HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState001, TestSize.Level1) ASSERT_EQ(PASS_OPER, ret); } +/** + * @tc.name: GetSelfPermissionsState002 + * @tc.desc: only vague location permission + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState002, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(1, permsList.size()); + ASSERT_EQ(DYNAMIC_OPER, permsList[0].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState003 + * @tc.desc: only vague location permission after refuse + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState003, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague12); // {-1,2} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(PASS_OPER, ret); + ASSERT_EQ(1, permsList.size()); + ASSERT_EQ(SETTING_OPER, permsList[0].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState004 + * @tc.desc: only vague location permission after accept + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState004, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague02); // {0,2} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(PASS_OPER, ret); + ASSERT_EQ(1, permsList.size()); + ASSERT_EQ(PASS_OPER, permsList[0].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState005 + * @tc.desc: only accurate location permission + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState005, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(INVALID_OPER, ret); + ASSERT_EQ(1, permsList.size()); + ASSERT_EQ(INVALID_OPER, permsList[0].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState006 + * @tc.desc: all location permissions + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState006, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague10); // {-1,0} + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(2, permsList.size()); + ASSERT_EQ(DYNAMIC_OPER, permsList[0].state); + ASSERT_EQ(DYNAMIC_OPER, permsList[1].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState007 + * @tc.desc: all location permissions after accept vague location permission + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState007, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague02); // {0,2} + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(2, permsList.size()); + ASSERT_EQ(PASS_OPER, permsList[0].state); + ASSERT_EQ(DYNAMIC_OPER, permsList[1].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState008 + * @tc.desc: all location permissions after refuse vague location permission + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState008, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague12); // {-1,2} + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(PASS_OPER, ret); + ASSERT_EQ(2, permsList.size()); + ASSERT_EQ(SETTING_OPER, permsList[0].state); + ASSERT_EQ(SETTING_OPER, permsList[1].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState009 + * @tc.desc: all location permissions after accept all location permissions + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState009, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague02); // {0,2} + permissionStateFulls.emplace_back(g_locationTestStateAccurate02); // {0,2} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(PASS_OPER, ret); + ASSERT_EQ(2, permsList.size()); + ASSERT_EQ(PASS_OPER, permsList[0].state); + ASSERT_EQ(PASS_OPER, permsList[1].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState010 + * @tc.desc: all location permissions whith other permissions + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState010, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + permmissionDefs.emplace_back(g_locationTestDefSystemGrant); + permmissionDefs.emplace_back(g_locationTestDefUserGrant); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague10); // {-1,0} + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + permissionStateFulls.emplace_back(g_locationTestStateSystemGrant); // {0,4} + permissionStateFulls.emplace_back(g_locationTestStateUserGrant); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, VAGUE_LOCATION_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + PermissionListState permSystem = { + .permissionName = "ohos.permission.locationtest1", + .state = -1, + }; + PermissionListState permUser = { + .permissionName = "ohos.permission.locationtest2", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + permsList.emplace_back(permSystem); + permsList.emplace_back(permUser); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(4, permsList.size()); + ASSERT_EQ(DYNAMIC_OPER, permsList[0].state); + ASSERT_EQ(DYNAMIC_OPER, permsList[1].state); + ASSERT_EQ(PASS_OPER, permsList[2].state); + ASSERT_EQ(DYNAMIC_OPER, permsList[3].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState011 + * @tc.desc: only accurate location permission whith api8 + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState011, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, DEFAULT_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(1, permsList.size()); + ASSERT_EQ(DYNAMIC_OPER, permsList[0].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + +/** + * @tc.name: GetSelfPermissionsState012 + * @tc.desc: all location permissions with api8 + * @tc.type: FUNC + * @tc.require: issue I5NOQI + */ +HWTEST_F(AccessTokenKitTest, GetSelfPermissionsState012, TestSize.Level1) +{ + std::vector permmissionDefs; + permmissionDefs.emplace_back(g_locationTestDefVague); + permmissionDefs.emplace_back(g_locationTestDefAccurate); + + std::vector permissionStateFulls; + permissionStateFulls.emplace_back(g_locationTestStateVague10); // {-1,0} + permissionStateFulls.emplace_back(g_locationTestStateAccurate10); // {-1,0} + + AllocHapToken(permmissionDefs, permissionStateFulls, DEFAULT_API_VERSION); + + AccessTokenID tokenID = GetAccessTokenID(TEST_USER_ID, "accesstoken_location_test", 0); + ASSERT_NE(0, tokenID); + ASSERT_EQ(0, SetSelfTokenID(tokenID)); + + PermissionListState permVague = { + .permissionName = "ohos.permission.APPROXIMATELY_LOCATION", + .state = -1, + }; + PermissionListState permAccurate = { + .permissionName = "ohos.permission.LOCATION", + .state = -1, + }; + + std::vector permsList; + permsList.emplace_back(permVague); + permsList.emplace_back(permAccurate); + + PermissionOper ret = AccessTokenKit::GetSelfPermissionsState(permsList); + ASSERT_EQ(DYNAMIC_OPER, ret); + ASSERT_EQ(2, permsList.size()); + ASSERT_EQ(INVALID_OPER, permsList[0].state); + ASSERT_EQ(DYNAMIC_OPER, permsList[1].state); + + AccessTokenKit::DeleteToken(tokenID); + SetSelfTokenID(selfTokenId_); +} + /** * @tc.name: GetTokenTypeFlag003 * @tc.desc: Get token type with hap tokenID. @@ -2554,10 +3162,10 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback001, TestSize.Level1 static PermissionStateFull infoManagerTestStateA = { .permissionName = "ohos.permission.CAMERA", - .grantFlags = {1}, - .grantStatus = {PERMISSION_DENIED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_DENIED}, + .grantFlags = {1} }; static HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_NORMAL, @@ -2633,17 +3241,17 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback002, TestSize.Level1 static PermissionStateFull infoManagerTestStateA = { .permissionName = "ohos.permission.GET_BUNDLE_INFO", - .grantFlags = {1}, - .grantStatus = {PERMISSION_GRANTED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_GRANTED}, + .grantFlags = {1} }; static PermissionStateFull infoManagerTestStateB = { .permissionName = "ohos.permission.CAMERA", - .grantFlags = {1}, - .grantStatus = {PERMISSION_GRANTED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_GRANTED}, + .grantFlags = {1} }; static HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_SYSTEM_BASIC, @@ -2690,17 +3298,17 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback003, TestSize.Level1 static PermissionStateFull infoManagerTestStateA = { .permissionName = "ohos.permission.GET_BUNDLE_INFO", - .grantFlags = {1}, - .grantStatus = {PERMISSION_DENIED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_DENIED}, + .grantFlags = {1} }; static PermissionStateFull infoManagerTestStateB = { .permissionName = "ohos.permission.CAMERA", - .grantFlags = {1}, - .grantStatus = {PERMISSION_DENIED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_DENIED}, + .grantFlags = {1} }; static HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_SYSTEM_CORE, @@ -2756,17 +3364,17 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback004, TestSize.Level1 static PermissionStateFull infoManagerTestStateA = { .permissionName = "ohos.permission.GET_BUNDLE_INFO", - .grantFlags = {1}, - .grantStatus = {PERMISSION_GRANTED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_GRANTED}, + .grantFlags = {1}, }; static PermissionStateFull infoManagerTestStateB = { .permissionName = "ohos.permission.CAMERA", - .grantFlags = {1}, - .grantStatus = {PERMISSION_GRANTED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_GRANTED}, + .grantFlags = {1} }; static HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_NORMAL, @@ -2814,17 +3422,17 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback005, TestSize.Level1 { static PermissionStateFull infoManagerTestStateA = { .permissionName = "ohos.permission.CAMERA", - .grantFlags = {1}, - .grantStatus = {PERMISSION_DENIED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_DENIED}, + .grantFlags = {1} }; static PermissionStateFull infoManagerTestStateB = { .permissionName = "ohos.permission.GET_BUNDLE_INFO", - .grantFlags = {1}, - .grantStatus = {PERMISSION_GRANTED}, .isGeneral = true, - .resDeviceID = {"local"} + .resDeviceID = {"local"}, + .grantStatus = {PERMISSION_GRANTED}, + .grantFlags = {1} }; static HapPolicyParams infoManagerTestPolicyPrams = { .apl = APL_NORMAL, @@ -2867,3 +3475,6 @@ HWTEST_F(AccessTokenKitTest, RegisterPermStateChangeCallback005, TestSize.Level1 res = AccessTokenKit::UnRegisterPermStateChangeCallback(callbackPtr); ASSERT_EQ(RET_SUCCESS, res); } +} // namespace AccessToken +} // namespace Security +} // namespace OHOS diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.h b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.h index 2328ec147..46b4fe8c3 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.h +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.h @@ -18,6 +18,10 @@ #include +#include "access_token.h" +#include "permission_def.h" +#include "permission_state_full.h" + namespace OHOS { namespace Security { namespace AccessToken { @@ -48,6 +52,8 @@ public: void TearDown(); unsigned int GetAccessTokenID(int userID, std::string bundleName, int instIndex); + void AllocHapToken(std::vector& permmissionDefs, + std::vector& permissionStateFulls, int32_t apiVersion); void DeleteTestToken() const; void AllocTestToken() const; uint64_t selfTokenId_; -- Gitee