diff --git a/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h b/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h index f366a9568de8ddfb56be8188c8fcafed5f13c361..b94a93d697d479521a51561f1b696bb9de88dac8 100644 --- a/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h +++ b/services/accesstokenmanager/main/cpp/include/service/accesstoken_manager_service.h @@ -26,6 +26,7 @@ #include "access_event_handler.h" #endif #include "access_token.h" +#include "access_token_db_util.h" #include "generic_values.h" #include "hap_token_info.h" #include "iremote_object.h" @@ -148,13 +149,18 @@ private: void ReportAddHap(const HapInfoParcel& info, const HapPolicyParcel& policy); void ReportAddHapFinish(AccessTokenIDEx fullTokenId, const HapInfoParcel& info, int64_t beginTime, int32_t errorCode); - int32_t UpdatePermDefVersion(const std::string& permDefVersion); bool IsPermissionValid(int32_t hapApl, const PermissionBriefDef& data, const std::string& value, bool isAcl); - int32_t UpdateUndefinedToDb(const std::vector& stateValues, - const std::vector& extendValues, const std::vector& validValueList); - int32_t UpdateUndefinedInfo(const std::vector& validValueList); - void HandleHapUndefinedInfo(std::map& tokenIdAplMap); - void HandlePermDefUpdate(std::map& tokenIdAplMap); + void FilterInvalidData(const std::vector& results, const std::map& tokenIdAplMap, + std::vector& validValueList); + void UpdateUndefinedInfoCache(const std::vector& validValueList, + std::vector& stateValues, std::vector& extendValues); + void HandleHapUndefinedInfo(const std::map& tokenIdAplMap, + std::vector& deleteDataTypes, std::vector& deleteValues, + std::vector& addDataTypes, std::vector>& addValues); + void UpdateDatabaseAsync(const std::vector& deleteDataTypes, + const std::vector& deleteValues, const std::vector& addDataTypes, + const std::vector>& addValues); + void HandlePermDefUpdate(const std::map& tokenIdAplMap); ServiceRunningState state_; std::string grantBundleName_; diff --git a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp index ff8b9519bf44f132cd8fe6f93c2ae60df7c134e9..36c4d4785de50f573170a1bfbc6fc6d5042b5143 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp @@ -1420,59 +1420,53 @@ int32_t AccessTokenManagerService::GetReqPermissionByName( tokenId, permissionName, value); } -int32_t AccessTokenManagerService::UpdatePermDefVersion(const std::string& permDefVersion) +void AccessTokenManagerService::FilterInvalidData(const std::vector& results, + const std::map& tokenIdAplMap, std::vector& validValueList) { - GenericValues delValue; - delValue.Put(TokenFiledConst::FIELD_NAME, PERM_DEF_VERSION); + int32_t tokenId = 0; + std::string permissionName; + std::string appDistributionType; + int32_t acl = 0; + std::string value; + PermissionBriefDef data; - GenericValues addValue; - addValue.Put(TokenFiledConst::FIELD_NAME, PERM_DEF_VERSION); - addValue.Put(TokenFiledConst::FIELD_VALUE, permDefVersion); - std::vector values; - values.emplace_back(addValue); + for (const auto& result : results) { + tokenId = result.GetInt(TokenFiledConst::FIELD_TOKEN_ID); + auto iter = tokenIdAplMap.find(tokenId); + if (iter == tokenIdAplMap.end()) { + continue; + } - std::vector deleteDataTypes; - deleteDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_SYSTEM_CONFIG); - std::vector deleteValues; - deleteValues.emplace_back(delValue); - std::vector addDataTypes; - addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_SYSTEM_CONFIG); - std::vector> addValues; - addValues.emplace_back(values); + permissionName = result.GetString(TokenFiledConst::FIELD_PERMISSION_NAME); + if (!GetPermissionBriefDef(permissionName, data)) { + LOGW(ATM_DOMAIN, ATM_TAG, "permission %{public}s is still invalid!", permissionName.c_str()); + continue; + } - return AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, addValues); -} + appDistributionType = result.GetString(TokenFiledConst::FIELD_APP_DISTRIBUTION_TYPE); + if (!PermissionManager::GetInstance().IsPermAvailableRangeSatisfied(data, appDistributionType)) { + continue; + } -int32_t AccessTokenManagerService::UpdateUndefinedToDb(const std::vector& stateValues, - const std::vector& extendValues, const std::vector& validValueList) -{ - std::vector deleteDataTypes; - std::vector deleteValues; + acl = result.GetInt(TokenFiledConst::FIELD_ACL); + value = result.GetString(TokenFiledConst::FIELD_VALUE); + if (!IsPermissionValid(iter->second, data, value, (acl == 1))) { + // hap apl less than perm apl without acl is invalid now, keep them in db, maybe valid someday + continue; + } - for (const auto& value : validValueList) { - deleteDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_HAP_UNDEFINE_INFO); - deleteValues.emplace_back(value); + validValueList.emplace_back(result); } - - std::vector addDataTypes; - addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_PERMISSION_STATE); - addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_PERMISSION_EXTEND_VALUE); - std::vector> addValues; - addValues.emplace_back(stateValues); - addValues.emplace_back(extendValues); - - return AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, addValues); } -int32_t AccessTokenManagerService::UpdateUndefinedInfo(const std::vector& validValueList) +void AccessTokenManagerService::UpdateUndefinedInfoCache(const std::vector& validValueList, + std::vector& stateValues, std::vector& extendValues) { std::string permissionName; PermissionState grantStatus; PermissionFlag grantFlag; AccessTokenID tokenId = 0; std::string value; - std::vector stateValues; - std::vector extendValues; for (const auto& validValue : validValueList) { permissionName = validValue.GetString(TokenFiledConst::FIELD_PERMISSION_NAME); @@ -1518,8 +1512,6 @@ int32_t AccessTokenManagerService::UpdateUndefinedInfo(const std::vector& tokenIdAplMap) +void AccessTokenManagerService::HandleHapUndefinedInfo(const std::map& tokenIdAplMap, + std::vector& deleteDataTypes, std::vector& deleteValues, + std::vector& addDataTypes, std::vector>& addValues) { GenericValues conditionValue; std::vector results; @@ -1555,46 +1549,39 @@ void AccessTokenManagerService::HandleHapUndefinedInfo(std::map validValueList; - // filter invalid data - for (const auto& result : results) { - tokenId = result.GetInt(TokenFiledConst::FIELD_TOKEN_ID); - if (tokenIdAplMap.count(tokenId) == 0) { - continue; - } - - permissionName = result.GetString(TokenFiledConst::FIELD_PERMISSION_NAME); - if (!GetPermissionBriefDef(permissionName, data)) { - LOGI(ATM_DOMAIN, ATM_TAG, "permission %{public}s is still invalid!", permissionName.c_str()); - continue; - } - - appDistributionType = result.GetString(TokenFiledConst::FIELD_APP_DISTRIBUTION_TYPE); - if (!PermissionManager::GetInstance().IsPermAvailableRangeSatisfied(data, appDistributionType)) { - continue; - } + std::vector validValueList; + FilterInvalidData(results, tokenIdAplMap, validValueList); - apl = result.GetInt(TokenFiledConst::FIELD_ACL); - value = result.GetString(TokenFiledConst::FIELD_VALUE); - if (!IsPermissionValid(tokenIdAplMap[tokenId], data, value, (apl == 1))) { - // hap apl less than perm apl without acl is invalid now, keep them in db, maybe valid someday - continue; - } + std::vector stateValues; + std::vector extendValues; + UpdateUndefinedInfoCache(validValueList, stateValues, extendValues); - validValueList.emplace_back(result); + for (const auto& value : validValueList) { + deleteDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_HAP_UNDEFINE_INFO); + deleteValues.emplace_back(value); } - UpdateUndefinedInfo(validValueList); + addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_PERMISSION_STATE); + addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_PERMISSION_EXTEND_VALUE); + addValues.emplace_back(stateValues); + addValues.emplace_back(extendValues); +} + +void AccessTokenManagerService::UpdateDatabaseAsync(const std::vector& deleteDataTypes, + const std::vector& deleteValues, const std::vector& addDataTypes, + const std::vector>& addValues) +{ + auto task = [deleteDataTypes, deleteValues, addDataTypes, addValues]() { + LOGI(ATM_DOMAIN, ATM_TAG, "Entry!"); + (void)AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, + addValues); + }; + std::thread updateDbThread(task); + updateDbThread.detach(); } -void AccessTokenManagerService::HandlePermDefUpdate(std::map& tokenIdAplMap) +void AccessTokenManagerService::HandlePermDefUpdate(const std::map& tokenIdAplMap) { std::string dbPermDefVersion; GenericValues conditionValue; @@ -1610,18 +1597,35 @@ void AccessTokenManagerService::HandlePermDefUpdate(std::map& } const char* curPermDefVersion = GetPermDefVersion(); - bool isUpdate = dbPermDefVersion != curPermDefVersion; + bool isUpdate = dbPermDefVersion != std::string(curPermDefVersion); if (isUpdate) { LOGI(ATM_DOMAIN, ATM_TAG, "Permission definition version from db %{public}s is not same with current version %{public}s.", dbPermDefVersion.c_str(), curPermDefVersion); - int32_t res = UpdatePermDefVersion(std::string(curPermDefVersion)); - if (res != 0) { - return; - } + + GenericValues delValue; + delValue.Put(TokenFiledConst::FIELD_NAME, PERM_DEF_VERSION); + GenericValues addValue; + addValue.Put(TokenFiledConst::FIELD_NAME, PERM_DEF_VERSION); + addValue.Put(TokenFiledConst::FIELD_VALUE, std::string(curPermDefVersion)); + std::vector values; + values.emplace_back(addValue); + + // update or insert permission define version to db + std::vector deleteDataTypes; + deleteDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_SYSTEM_CONFIG); + std::vector deleteValues; + deleteValues.emplace_back(delValue); + std::vector addDataTypes; + addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_SYSTEM_CONFIG); + std::vector> addValues; + addValues.emplace_back(values); + if (!dbPermDefVersion.empty()) { // dbPermDefVersion empty means undefine table is empty - HandleHapUndefinedInfo(tokenIdAplMap); + HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes, deleteValues, addDataTypes, addValues); } + + UpdateDatabaseAsync(deleteDataTypes, deleteValues, addDataTypes, addValues); } } diff --git a/services/accesstokenmanager/test/coverage/permission_manager_coverage_test.cpp b/services/accesstokenmanager/test/coverage/permission_manager_coverage_test.cpp index 4de0d9c27320041590f3a067ff88869ad0706ce9..eb9b583532a3fc58ecc16aed47ec608fc9fa7569 100644 --- a/services/accesstokenmanager/test/coverage/permission_manager_coverage_test.cpp +++ b/services/accesstokenmanager/test/coverage/permission_manager_coverage_test.cpp @@ -398,7 +398,11 @@ HWTEST_F(PermissionManagerCoverageTest, UpdateUndefinedInfo001, TestSize.Level4) DelayedSingleton::GetInstance(); ASSERT_NE(nullptr, atManagerService_); - ASSERT_EQ(RET_SUCCESS, atManagerService_->UpdateUndefinedInfo(validValueList)); + std::vector stateValues; + std::vector extendValues; + atManagerService_->UpdateUndefinedInfoCache(validValueList, stateValues, extendValues); + ASSERT_EQ(true, stateValues.empty()); + ASSERT_EQ(true, extendValues.empty()); ASSERT_EQ(RET_SUCCESS, atManagerService_->DeleteToken(tokenId)); atManagerService_ = nullptr; } @@ -431,7 +435,12 @@ HWTEST_F(PermissionManagerCoverageTest, HandleHapUndefinedInfo001, TestSize.Leve EXPECT_NE(nullptr, atManagerService_); std::map tokenIdAplMap; - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); addDataTypes.emplace_back(AtmDataType::ACCESSTOKEN_HAP_UNDEFINE_INFO); addValues.emplace_back(results); @@ -483,7 +492,12 @@ HWTEST_F(PermissionManagerCoverageTest, HandleHapUndefinedInfo002, TestSize.Leve EXPECT_NE(nullptr, atManagerService_); std::map tokenIdAplMap; - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); addValues.emplace_back(results); ASSERT_EQ(RET_SUCCESS, AccessTokenDb::GetInstance().DeleteAndInsertValues( diff --git a/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp b/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp index 40eb3645bb59caa622372de91c5026f4c67dde62..77010240f0806295e22020072477eb6d346e9a67 100644 --- a/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp +++ b/services/accesstokenmanager/test/unittest/accesstoken_manager_service_test.cpp @@ -432,7 +432,15 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest001, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, RANDOM_TOKENID); @@ -443,14 +451,14 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest001, TestSize.Level0) GenericValues delValue; // system grant delValue.Put(TokenFiledConst::FIELD_TOKEN_ID, RANDOM_TOKENID); - std::vector deleteDataTypes2; + std::vector deleteDataTypes3; deleteDataTypes2.emplace_back(AtmDataType::ACCESSTOKEN_HAP_UNDEFINE_INFO); - std::vector deleteValues2; + std::vector deleteValues3; deleteValues2.emplace_back(delValue); - std::vector addDataTypes2; - std::vector> addValues2; + std::vector addDataTypes3; + std::vector> addValues3; ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( - deleteDataTypes2, deleteValues2, addDataTypes2, addValues2)); + deleteDataTypes3, deleteValues3, addDataTypes3, addValues3)); ASSERT_EQ(0, atManagerService_->DeleteToken(tokenId)); } @@ -487,7 +495,15 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest002, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -511,6 +527,20 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest002, TestSize.Level0) ASSERT_EQ(0, atManagerService_->DeleteToken(tokenId)); } +void SetValues003(AccessTokenID tokenId, std::vector& values) +{ + GenericValues value1; // user grant + value1.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); + value1.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state4.permissionName); + value1.Put(TokenFiledConst::FIELD_ACL, 0); + GenericValues value2; // system grant + value2.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); + value2.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state5.permissionName); + value2.Put(TokenFiledConst::FIELD_ACL, 0); + values.emplace_back(value1); + values.emplace_back(value2); +} + /** * @tc.name: OTATest003 * @tc.desc: test after ota valid user grant and system grant permissions move from undefine to permission state @@ -528,17 +558,8 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest003, TestSize.Level0) std::map tokenIdAplMap; CreateHapToken(infoParCel, policyParcel, tokenId, tokenIdAplMap); - GenericValues value1; // user grant - value1.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); - value1.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state4.permissionName); - value1.Put(TokenFiledConst::FIELD_ACL, 0); - GenericValues value2; // system grant - value2.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); - value2.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state5.permissionName); - value2.Put(TokenFiledConst::FIELD_ACL, 0); std::vector values; - values.emplace_back(value1); - values.emplace_back(value2); + SetValues003(tokenId, values); std::vector deleteDataTypes; std::vector deleteValues; @@ -548,7 +569,15 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest003, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -607,7 +636,15 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest004, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -659,7 +696,12 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest005, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + addDataTypes.clear(); + addValues.clear(); + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes, deleteValues, addDataTypes, addValues); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, + addValues)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -683,6 +725,16 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest005, TestSize.Level0) ASSERT_EQ(0, atManagerService_->DeleteToken(tokenId)); } +void SetValues006(AccessTokenID tokenId, std::vector& values) +{ + GenericValues value; // system grant + value.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); + value.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state6.permissionName); + value.Put(TokenFiledConst::FIELD_ACL, 1); // system core permission with acl + value.Put(TokenFiledConst::FIELD_VALUE, "test"); // system core permission with acl + values.emplace_back(value); +} + /** * @tc.name: OTATest006 * @tc.desc: test after ota valid permission which hasValue is false @@ -702,13 +754,8 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest006, TestSize.Level0) std::map tokenIdAplMap; CreateHapToken(infoParCel, policyParcel, tokenId, tokenIdAplMap); - GenericValues value; // system grant - value.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); - value.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state6.permissionName); - value.Put(TokenFiledConst::FIELD_ACL, 1); // system core permission with acl - value.Put(TokenFiledConst::FIELD_VALUE, "test"); // system core permission with acl std::vector values; - values.emplace_back(value); + SetValues006(tokenId, values); std::vector deleteDataTypes; std::vector deleteValues; @@ -718,7 +765,12 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest006, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + addDataTypes.clear(); + addValues.clear(); + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes, deleteValues, addDataTypes, addValues); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, + addValues)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -747,6 +799,16 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest006, TestSize.Level0) ASSERT_EQ(0, atManagerService_->DeleteToken(tokenId)); } +void SetValues007(AccessTokenID tokenId, std::vector& values) +{ + GenericValues value; // system grant + value.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); + value.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state1.permissionName); + value.Put(TokenFiledConst::FIELD_ACL, 0); // system core permission without acl + value.Put(TokenFiledConst::FIELD_VALUE, "test"); // permission has value + values.emplace_back(value); +} + /** * @tc.name: OTATest007 * @tc.desc: test after ota valid permission which hasValue is true with value @@ -765,13 +827,8 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest007, TestSize.Level0) std::map tokenIdAplMap; CreateHapToken(infoParCel, policyParcel, tokenId, tokenIdAplMap); // KERNEL_ATM_SELF_USE, hasValue is true - GenericValues value; // system grant - value.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); - value.Put(TokenFiledConst::FIELD_PERMISSION_NAME, g_state1.permissionName); - value.Put(TokenFiledConst::FIELD_ACL, 0); // system core permission without acl - value.Put(TokenFiledConst::FIELD_VALUE, "test"); // permission has value std::vector values; - values.emplace_back(value); + SetValues007(tokenId, values); std::vector deleteDataTypes; std::vector deleteValues; @@ -781,7 +838,12 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest007, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + addDataTypes.clear(); + addValues.clear(); + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes, deleteValues, addDataTypes, addValues); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes, deleteValues, addDataTypes, + addValues)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId)); @@ -844,7 +906,15 @@ HWTEST_F(AccessTokenManagerServiceTest, OTATest008, TestSize.Level0) addValues.emplace_back(values); ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues( deleteDataTypes, deleteValues, addDataTypes, addValues)); - atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap); + + std::vector deleteDataTypes2; + std::vector deleteValues2; + std::vector addDataTypes2; + std::vector> addValues2; + atManagerService_->HandleHapUndefinedInfo(tokenIdAplMap, deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2); + ASSERT_EQ(0, AccessTokenDb::GetInstance().DeleteAndInsertValues(deleteDataTypes2, deleteValues2, addDataTypes2, + addValues2)); GenericValues conditionValue; conditionValue.Put(TokenFiledConst::FIELD_TOKEN_ID, static_cast(tokenId));