From 948671e7f2c0d200886e35d8d013106f8d31375f Mon Sep 17 00:00:00 2001 From: bigtea Date: Mon, 23 Jun 2025 19:12:40 +0800 Subject: [PATCH] UpdateHapTokenTest004 Signed-off-by: bigtea --- .../accesstoken_manager_service_test.cpp | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp b/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp index a60d0dd3f..1228a1ab0 100644 --- a/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp +++ b/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp @@ -73,6 +73,24 @@ static PermissionStatus g_state6 = { // system core .grantFlag = static_cast(PermissionFlag::PERMISSION_DEFAULT_FLAG) }; +static PermissionStatus g_state7 = { // system grant permission and granted + .permissionName = "ohos.permission.REFRESH_USER_ACTION", + .grantStatus = static_cast(PermissionState::PERMISSION_GRANTED), + .grantFlag = static_cast(PermissionFlag::PERMISSION_SYSTEM_FIXED) +}; + +static PermissionStatus g_state8 = { // system core and granted + .permissionName = "ohos.permission.POWER_MANAGER", + .grantStatus = static_cast(PermissionState::PERMISSION_GRANTED), + .grantFlag = static_cast(PermissionFlag::PERMISSION_SYSTEM_FIXED) +}; + +static PermissionStatus g_state9 = { // user grant permission + .permissionName = "ohos.permission.WRITE_MEDIA", + .grantStatus = static_cast(PermissionState::PERMISSION_DENIED), + .grantFlag = static_cast(PermissionFlag::PERMISSION_DEFAULT_FLAG) +}; + static HapInfoParams g_info = { .userID = USER_ID, .bundleName = "accesstoken_manager_service_test", @@ -83,6 +101,16 @@ static HapInfoParams g_info = { .appIDDesc = "accesstoken_manager_service_test", }; +static HapInfoParams g_info2 = { // system app + .userID = USER_ID, + .bundleName = "accesstoken_manager_service_test2", + .instIndex = INST_INDEX, + .dlpType = static_cast(HapDlpType::DLP_COMMON), + .apiVersion = API_VERSION_9, + .isSystemApp = true, + .appIDDesc = "accesstoken_manager_service_test", +}; + static HapPolicy g_policy = { .apl = ATokenAplEnum::APL_SYSTEM_BASIC, .domain = "test.domain", @@ -90,6 +118,12 @@ static HapPolicy g_policy = { .aclRequestedList = { "ohos.permission.INVALIDA" }, // kernel permission with value no need acl .aclExtendedMap = { std::make_pair("ohos.permission.KERNEL_ATM_SELF_USE", "test") }, }; + +static HapPolicy g_policy2 = { + .apl = ATokenAplEnum::APL_SYSTEM_CORE, + .domain = "test.domain", + .permStateList = {g_state1, g_state9}, +}; } void AccessTokenManagerServiceTest::SetUpTestCase() @@ -399,6 +433,69 @@ HWTEST_F(AccessTokenManagerServiceTest, UpdateHapTokenTest003, TestSize.Level0) ASSERT_EQ(0, atManagerService_->DeleteToken(tokenId)); } +/** + * @tc.name: UpdateHapTokenTest004 + * @tc.desc: test consistency between cache & DB after add or update hap + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(AccessTokenManagerServiceTest, UpdateHapTokenTest004, TestSize.Level0) +{ + HapInfoParcel infoParCel; + infoParCel.hapInfoParameter = g_info2; + HapPolicyParcel policyParcel; + policyParcel.hapPolicy = g_policy2; + AccessTokenID tokenId; + std::map tokenIdAplMap; + CreateHapToken(infoParCel, policyParcel, tokenId, tokenIdAplMap); + + // compare after add + GenericValues conditionValue; + conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); + std::vector results; + EXPECT_EQ(0, AccessTokenDb::GetInstance().Find( + AtmDataType::ACCESSTOKEN_PERMISSION_STATE, conditionValue, results)); + EXPECT_EQ(policyParcel.hapPolicy.permStateList.size(), results.size()); // size is 2 + for (auto &val : results) { + std::string perm = val.GetString(TokenFiledConst::FIELD_PERMISSION_NAME); + auto it = std::find_if(policyParcel.hapPolicy.permStateList.begin(), policyParcel.hapPolicy.permStateList.end(), + [&perm](const PermissionStatus &status) { return status.permissionName == perm; }); + EXPECT_TRUE(it != policyParcel.hapPolicy.permStateList.end()); + EXPECT_EQ(atManagerService_->VerifyAccessToken(tokenId, perm), val.GetInt(TokenFiledConst::FIELD_GRANT_STATE)); + } + + // update hap + uint64_t fullTokenId; + AccessTokenIDEx tokenIDEx; + tokenIDEx.tokenIdExStruct.tokenID = tokenId; + fullTokenId = tokenIDEx.tokenIDEx; + policyParcel.hapPolicy.permStateList = {g_state1, g_state7, g_state8}; + UpdateHapInfoParamsIdl infoIdl; + infoIdl.appIDDesc = g_info2.appIDDesc; + infoIdl.apiVersion = g_info2.apiVersion; + infoIdl.isSystemApp = g_info2.isSystemApp; + infoIdl.appDistributionType = g_info2.appDistributionType; + infoIdl.isAtomicService = g_info2.isAtomicService; + infoIdl.dataRefresh = true; + HapInfoCheckResultIdl resultInfoIdl; + EXPECT_EQ(0, atManagerService_->UpdateHapToken(fullTokenId, infoIdl, policyParcel, resultInfoIdl)); + + // compare after update + std::vector results2; + EXPECT_EQ(0, AccessTokenDb::GetInstance().Find( + AtmDataType::ACCESSTOKEN_PERMISSION_STATE, conditionValue, results2)); + EXPECT_EQ(policyParcel.hapPolicy.permStateList.size(), results2.size()); // size is 3 + for (auto &val : results2) { + std::string perm = val.GetString(TokenFiledConst::FIELD_PERMISSION_NAME); + auto it = std::find_if(policyParcel.hapPolicy.permStateList.begin(), policyParcel.hapPolicy.permStateList.end(), + [&perm](const PermissionStatus &status) { return status.permissionName == perm; }); + EXPECT_TRUE(it != policyParcel.hapPolicy.permStateList.end()); + EXPECT_EQ(atManagerService_->VerifyAccessToken(tokenId, perm), val.GetInt(TokenFiledConst::FIELD_GRANT_STATE)); + } + + EXPECT_EQ(0, atManagerService_->DeleteToken(tokenId)); +} + /** * @tc.name: OTATest001 * @tc.desc: test after ota invalid tokenId remain -- Gitee