diff --git a/interfaces/innerkits/accesstoken/include/accesstoken_kit.h b/interfaces/innerkits/accesstoken/include/accesstoken_kit.h index 6334ed496e0391832ef1147f2f786a1ff1f99275..fdc83a2b57542923f1ba768c0304149d0e6abb05 100644 --- a/interfaces/innerkits/accesstoken/include/accesstoken_kit.h +++ b/interfaces/innerkits/accesstoken/include/accesstoken_kit.h @@ -34,7 +34,10 @@ public: static AccessTokenID AllocLocalTokenID(const std::string& remoteDeviceID, AccessTokenID remoteTokenID); static int UpdateHapToken(AccessTokenID tokenID, const std::string& appIDDesc, const HapPolicyParams& policy); static int DeleteToken(AccessTokenID tokenID); + /* Get token type by ATM service */ static ATokenTypeEnum GetTokenType(AccessTokenID tokenID); + /* Get token type from flag in tokenId, which doesn't depend on ATM service */ + static ATokenTypeEnum GetTokenTypeFlag(AccessTokenID tokenID); static int CheckNativeDCap(AccessTokenID tokenID, const std::string& dcap); static AccessTokenID GetHapTokenID(int userID, const std::string& bundleName, int instIndex); static int GetHapTokenInfo(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes); diff --git a/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp b/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp index 2fa8408f3e17d6e8941be1c22db02affd4e76735..3022ec14f7972fdf54b48888ee036b7c73b671eb 100644 --- a/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp +++ b/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp @@ -82,6 +82,15 @@ ATokenTypeEnum AccessTokenKit::GetTokenType(AccessTokenID tokenID) return AccessTokenManagerClient::GetInstance().GetTokenType(tokenID); } +ATokenTypeEnum AccessTokenKit::GetTokenTypeFlag(AccessTokenID tokenID) +{ + if (tokenID == 0) { + return TOKEN_INVALID; + } + AccessTokenIDInner *idInner = (AccessTokenIDInner *)&tokenID; + return (ATokenTypeEnum)(idInner->type); +} + int AccessTokenKit::CheckNativeDCap(AccessTokenID tokenID, const std::string& dcap) { ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called", __func__); 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 84fd25bc9347ac500114da052872b2ad60d166ba..5ff41acf1aba1e8728baaec5537cb900eab22f5f 100755 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp @@ -2028,4 +2028,51 @@ HWTEST_F(AccessTokenKitTest, GetNativeTokenInfo001, TestSize.Level1) tokenID = 0xff; ret = AccessTokenKit::GetNativeTokenInfo(tokenID, findInfo); ASSERT_EQ(ret, RET_FAILED); -} \ No newline at end of file +} + +/** + * @tc.name: GetTokenTypeFlag001 + * @tc.desc: cannot get token type with tokenID. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetTokenTypeFlag001, TestSize.Level1) +{ + AccessTokenID tokenID = 0; + ATokenTypeEnum ret = AccessTokenKit::GetTokenTypeFlag(tokenID); + ASSERT_EQ(ret, TOKEN_INVALID); +} + +/** + * @tc.name: GetTokenTypeFlag002 + * @tc.desc: Get token type with native tokenID. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetTokenTypeFlag002, TestSize.Level1) +{ + uint64_t tokenId01 = GetAccessTokenId("GetTokenTypeFlag002", nullptr, 0, "system_core"); + + AccessTokenID tokenID = tokenId01 & 0xffffffff; + ATokenTypeEnum ret = AccessTokenKit::GetTokenTypeFlag(tokenID); + ASSERT_EQ(ret, TOKEN_NATIVE); +} + +/** + * @tc.name: GetTokenTypeFlag003 + * @tc.desc: Get token type with hap tokenID. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetTokenTypeFlag003, TestSize.Level1) +{ + AccessTokenIDEx tokenIdEx = {0}; + tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams); + ASSERT_NE(0, tokenIdEx.tokenIdExStruct.tokenID); + + ATokenTypeEnum ret = AccessTokenKit::GetTokenTypeFlag(tokenIdEx.tokenIdExStruct.tokenID); + ASSERT_EQ(ret, TOKEN_HAP); + + int res = AccessTokenKit::DeleteToken(tokenIdEx.tokenIdExStruct.tokenID); + ASSERT_EQ(RET_SUCCESS, res); +}