From c74fa87dbf55e03e4504d7f7fef2e8b4a0300419 Mon Sep 17 00:00:00 2001 From: zhouyan Date: Thu, 28 Aug 2025 14:36:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E5=B9=B2=E4=BF=AE=E6=94=B9=E5=90=8C?= =?UTF-8?q?=E6=AD=A56.0release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: I28934cf3d4c649a09ca9767fd587831d03795e53 --- frameworks/ets/ani/common/src/ani_utils.cpp | 2 +- .../innerkits/privacy/src/privacy_kit.cpp | 9 +- .../test/unittest/src/privacy_kit_test.cpp | 89 +++++++++---------- ...ermission_record_manager_coverage_test.cpp | 29 ++++++ 4 files changed, 78 insertions(+), 51 deletions(-) diff --git a/frameworks/ets/ani/common/src/ani_utils.cpp b/frameworks/ets/ani/common/src/ani_utils.cpp index 499be6e8f..d2664afda 100644 --- a/frameworks/ets/ani/common/src/ani_utils.cpp +++ b/frameworks/ets/ani/common/src/ani_utils.cpp @@ -514,7 +514,7 @@ bool GetIntProperty(ani_env* env, const ani_object& object, const std::string& p return false; } if (AniIsRefUndefined(env, ref)) { - LOGI(ATM_DOMAIN, ATM_TAG, "Property(%{public}s) is undefned!", property.c_str()); + LOGI(ATM_DOMAIN, ATM_TAG, "Property(%{public}s) is undefined!", property.c_str()); return true; } diff --git a/interfaces/innerkits/privacy/src/privacy_kit.cpp b/interfaces/innerkits/privacy/src/privacy_kit.cpp index a1da62bc8..453764ab6 100644 --- a/interfaces/innerkits/privacy/src/privacy_kit.cpp +++ b/interfaces/innerkits/privacy/src/privacy_kit.cpp @@ -90,18 +90,17 @@ int32_t PrivacyKit::AddPermissionUsedRecord(const AddPermParamInfo& info, bool a return PrivacyError::ERR_PARAM_INVALID; } + int32_t res = RET_SUCCESS; if (!FindAndInsertRecord(info)) { - int32_t ret = PrivacyManagerClient::GetInstance().AddPermissionUsedRecord(info, asyncMode); - if (ret == PrivacyError::PRIVACY_TOGGELE_RESTRICTED) { + res = PrivacyManagerClient::GetInstance().AddPermissionUsedRecord(info, asyncMode); + if (res != RET_SUCCESS) { std::lock_guard lock(g_lockCache); std::string recordStr = GetRecordUniqueStr(info); g_recordMap.erase(recordStr); - return RET_SUCCESS; } - return ret; } - return RET_SUCCESS; + return (res == PrivacyError::PRIVACY_TOGGELE_RESTRICTED) ? RET_SUCCESS : res; } int32_t PrivacyKit::SetPermissionUsedRecordToggleStatus(int32_t userID, bool status) diff --git a/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp b/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp index 740c8a98d..603b1c6fd 100644 --- a/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp +++ b/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp @@ -556,38 +556,48 @@ HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord005, TestSize.Level0) /** * @tc.name: AddPermissionUsedRecord006 - * @tc.desc: AddPermissionUsedRecord permission combine records. + * @tc.desc: AddPermissionUsedRecord permission combine and not combine records. * @tc.type: FUNC * @tc.require: issueI5P4IU */ HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord006, TestSize.Level0) { - SleepUtilMinuteEnd(); AddPermParamInfo info; info.tokenId = g_tokenIdA; info.permissionName = "ohos.permission.READ_CONTACTS"; info.successCount = 1; info.failCount = 0; - - // <200ms, record is dropped - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); - usleep(200000); // 200000us = 200ms - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); - usleep(200000); // 200000us = 200ms - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record1 + SleepUtilMinuteEnd(); + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record2 not combine with record1 PermissionUsedRequest request; - PermissionUsedResult result; + PermissionUsedResult result1; std::vector permissionList; BuildQueryRequest(g_tokenIdA, g_infoParmsA.bundleName, permissionList, request); request.flag = FLAG_PERMISSION_USAGE_DETAIL; - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::GetPermissionUsedRecords(request, result)); + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::GetPermissionUsedRecords(request, result1)); + ASSERT_EQ(static_cast(1), result1.bundleRecords.size()); + ASSERT_EQ(static_cast(1), result1.bundleRecords[0].permissionRecords.size()); + // record cross minute not combine + ASSERT_EQ(static_cast(2), result1.bundleRecords[0].permissionRecords[0].accessRecords.size()); + CheckPermissionUsedResult(request, result1, 1, 2, 0); - ASSERT_EQ(static_cast(1), result.bundleRecords.size()); - ASSERT_EQ(static_cast(1), result.bundleRecords[0].permissionRecords.size()); - ASSERT_EQ(static_cast(1), result.bundleRecords[0].permissionRecords[0].accessRecords.size()); - CheckPermissionUsedResult(request, result, 1, 3, 0); // records in the same minute combine to one + // <200ms, record is dropped + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record3 drop + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record4 drop + usleep(200000); // 200000us = 200ms + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record5 combine with record2 + usleep(200000); // 200000us = 200ms + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); // record6 combine with record2 + + PermissionUsedResult result2; + ASSERT_EQ(RET_NO_ERROR, PrivacyKit::GetPermissionUsedRecords(request, result2)); + ASSERT_EQ(static_cast(1), result2.bundleRecords.size()); + ASSERT_EQ(static_cast(1), result2.bundleRecords[0].permissionRecords.size()); + // records in the same minute combine to one + ASSERT_EQ(static_cast(2), result2.bundleRecords[0].permissionRecords[0].accessRecords.size()); + CheckPermissionUsedResult(request, result2, 1, 4, 0); } /** @@ -668,35 +678,6 @@ HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord008, TestSize.Level0) } } -/** - * @tc.name: AddPermissionUsedRecord009 - * @tc.desc: test record cross minute not merge. - * @tc.type: FUNC - * @tc.require: issueI5P4IU - */ -HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord009, TestSize.Level0) -{ - AddPermParamInfo info; - info.tokenId = g_tokenIdA; - info.permissionName = "ohos.permission.READ_CONTACTS"; - info.successCount = 1; - info.failCount = 0; - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); - SleepUtilMinuteEnd(); - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::AddPermissionUsedRecord(info)); - - PermissionUsedRequest request; - PermissionUsedResult result; - std::vector permissionList; - BuildQueryRequest(g_tokenIdA, g_infoParmsA.bundleName, permissionList, request); - request.flag = FLAG_PERMISSION_USAGE_DETAIL; - ASSERT_EQ(RET_NO_ERROR, PrivacyKit::GetPermissionUsedRecords(request, result)); - - ASSERT_EQ(static_cast(1), result.bundleRecords.size()); - ASSERT_EQ(static_cast(1), result.bundleRecords[0].permissionRecords.size()); - ASSERT_EQ(static_cast(2), result.bundleRecords[0].permissionRecords[0].accessRecords.size()); -} - /** * @tc.name: RemovePermissionUsedRecords001 * @tc.desc: cannot RemovePermissionUsedRecords with illegal tokenId. @@ -2490,6 +2471,24 @@ HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord019, TestSize.Level0) EXPECT_EQ(PrivacyError::ERR_PARAM_INVALID, PrivacyKit::AddPermissionUsedRecord(info)); } +/** + * @tc.name: AddPermissionUsedRecord020 + * @tc.desc: Test AddPermissionUsedRecord failed twice in 200ms + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord020, TestSize.Level0) +{ + MockNativeToken mock("accesstoken_service"); // accesstoken_service without PERMISSION_USED_STATS + AddPermParamInfo info; + info.tokenId = g_nativeToken; + info.permissionName = "ohos.permission.CAMERA"; + info.successCount = 1; + info.failCount = 0; + EXPECT_EQ(PrivacyError::ERR_PERMISSION_DENIED, PrivacyKit::AddPermissionUsedRecord(info)); + EXPECT_EQ(PrivacyError::ERR_PERMISSION_DENIED, PrivacyKit::AddPermissionUsedRecord(info)); +} + /** * @tc.name: GetPermissionUsedTypeInfos001 * @tc.desc: Test GetPermissionUsedTypeInfos with default input diff --git a/services/privacymanager/test/coverage/permission_record_manager_coverage_test.cpp b/services/privacymanager/test/coverage/permission_record_manager_coverage_test.cpp index 4759e7d9e..2d7743081 100644 --- a/services/privacymanager/test/coverage/permission_record_manager_coverage_test.cpp +++ b/services/privacymanager/test/coverage/permission_record_manager_coverage_test.cpp @@ -1200,6 +1200,35 @@ HWTEST_F(PermissionRecordManagerTest, InsertPermissionUsedTypeColumn001, TestSiz ASSERT_EQ(Constant::FAILURE, PermissionUsedRecordDb::GetInstance().InsertPermissionUsedTypeColumn()); PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_ = dataTypeToSqlTable; // recovery } + +/* + * @tc.name: OnUpdate001 + * @tc.desc: PermissionUsedRecordDb::OnUpdate function test + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PermissionRecordManagerTest, OnUpdate001, TestSize.Level4) +{ + int32_t version = static_cast(PermissionUsedRecordDb::DataBaseVersion::VERISION_0); + PermissionUsedRecordDb::GetInstance().OnUpdate(version); + + version = static_cast(PermissionUsedRecordDb::DataBaseVersion::VERISION_1); + PermissionUsedRecordDb::GetInstance().OnUpdate(version); + + version = static_cast(PermissionUsedRecordDb::DataBaseVersion::VERISION_2); + PermissionUsedRecordDb::GetInstance().OnUpdate(version); + + version = static_cast(PermissionUsedRecordDb::DataBaseVersion::VERISION_3); + PermissionUsedRecordDb::GetInstance().OnUpdate(version); + + version = static_cast(PermissionUsedRecordDb::DataBaseVersion::VERISION_4); + PermissionUsedRecordDb::GetInstance().OnUpdate(version); + + auto it = PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_.find( + PermissionUsedRecordDb::DataType::PERMISSION_USED_RECORD_TOGGLE_STATUS); + ASSERT_NE(it, PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_.end()); + ASSERT_EQ(std::string(PermissionUsedRecordDb::PERMISSION_USED_RECORD_TOGGLE_STATUS_TABLE), it->second.tableName_); +} } // namespace AccessToken } // namespace Security } // namespace OHOS -- Gitee