From 0f61212bf81e7fa721e26563a6c1fa315e185278 Mon Sep 17 00:00:00 2001 From: zhouyan Date: Wed, 27 Aug 2025 18:59:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E7=82=B9=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E5=A4=B1=E8=B4=A5200ms=E5=86=85=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E6=AC=A1=E7=BB=93=E6=9E=9C=E4=B8=A2=E5=BC=83=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98-0702=E6=8C=91=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: I0ee1d9432ee8f526329e7fa8561d0184a325de15 --- .../innerkits/privacy/src/privacy_kit.cpp | 9 +- .../test/unittest/src/privacy_kit_test.cpp | 89 +++++++++---------- 2 files changed, 48 insertions(+), 50 deletions(-) diff --git a/interfaces/innerkits/privacy/src/privacy_kit.cpp b/interfaces/innerkits/privacy/src/privacy_kit.cpp index 786a9812b..1ae50688a 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 f6ca7b1ce..18cdc6134 100644 --- a/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp +++ b/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp @@ -547,38 +547,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); } /** @@ -659,35 +669,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. @@ -2370,6 +2351,24 @@ HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord018, TestSize.Level0) ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID, PrivacyKit::AddPermissionUsedRecord(info)); // add invalid used type } +/** + * @tc.name: AddPermissionUsedRecord019 + * @tc.desc: Test AddPermissionUsedRecord failed twice in 200ms + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PrivacyKitTest, AddPermissionUsedRecord019, TestSize.Level0) +{ + MockNativeToken mock("accesstoken_service"); // accesstoken_service without PERMISSION_USED_STATS + AddPermParamInfo info; + info.tokenId = g_tokenIdA; + 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 -- Gitee