1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <cstdint>
17 #include <gtest/gtest.h>
18
19 #include "access_token.h"
20 #include "accesstoken_kit.h"
21 #include "accesstoken_log.h"
22 #include "audio_manager_privacy_client.h"
23 #include "camera_manager_privacy_client.h"
24 #include "constant.h"
25 #include "data_translator.h"
26 #include "permission_record.h"
27 #define private public
28 #include "active_status_callback_manager.h"
29 #include "permission_record_manager.h"
30 #include "permission_record_repository.h"
31 #include "permission_used_record_cache.h"
32 #include "permission_used_record_db.h"
33 #undef private
34 #include "perm_active_status_change_callback_stub.h"
35 #include "privacy_error.h"
36 #include "privacy_field_const.h"
37 #include "privacy_kit.h"
38 #include "state_change_callback.h"
39 #include "time_util.h"
40 #include "token_setproc.h"
41
42 using namespace testing;
43 using namespace testing::ext;
44 using namespace OHOS;
45
46 namespace OHOS {
47 namespace Security {
48 namespace AccessToken {
49 namespace {
50 static AccessTokenID g_selfTokenId = 0;
51 constexpr const char* CAMERA_PERMISSION_NAME = "ohos.permission.CAMERA";
52 constexpr const char* MICROPHONE_PERMISSION_NAME = "ohos.permission.MICROPHONE";
53 constexpr const char* LOCATION_PERMISSION_NAME = "ohos.permission.LOCATION";
54 static constexpr uint32_t MAX_CALLBACK_SIZE = 1024;
55 static constexpr int32_t MAX_DETAIL_NUM = 500;
56 static constexpr int32_t DEEP_COPY_NUM = 10;
57 static constexpr int64_t ONE_SECOND = 1000;
58 static constexpr int64_t TWO_SECOND = 2000;
59 static constexpr int64_t THREE_SECOND = 3000;
60 static PermissionStateFull g_testState1 = {
61 .permissionName = "ohos.permission.CAMERA",
62 .isGeneral = true,
63 .resDeviceID = {"local"},
64 .grantStatus = {PermissionState::PERMISSION_GRANTED},
65 .grantFlags = {1}
66 };
67
68 static PermissionStateFull g_testState2 = {
69 .permissionName = "ohos.permission.MANAGE_CAMERA_CONFIG",
70 .isGeneral = true,
71 .resDeviceID = {"local"},
72 .grantStatus = {PermissionState::PERMISSION_GRANTED},
73 .grantFlags = {1}
74 };
75
76 static HapPolicyParams g_PolicyPrams1 = {
77 .apl = APL_NORMAL,
78 .domain = "test.domain.A",
79 .permList = {},
80 .permStateList = {g_testState1, g_testState2}
81 };
82
83 static HapInfoParams g_InfoParms1 = {
84 .userID = 1,
85 .bundleName = "ohos.privacy_test.bundleA",
86 .instIndex = 0,
87 .appIDDesc = "privacy_test.bundleA"
88 };
89
90 static HapPolicyParams g_PolicyPrams2 = {
91 .apl = APL_NORMAL,
92 .domain = "test.domain.B",
93 .permList = {},
94 .permStateList = {g_testState1}
95 };
96
97 static HapInfoParams g_InfoParms2 = {
98 .userID = 1,
99 .bundleName = "ohos.privacy_test.bundleB",
100 .instIndex = 0,
101 .appIDDesc = "privacy_test.bundleB"
102 };
103
104 static PermissionRecord g_recordA1 = {
105 .opCode = Constant::OP_CAMERA,
106 .status = ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND,
107 .timestamp = 0L,
108 .accessDuration = 0L,
109 .accessCount = 1,
110 .rejectCount = 0,
111 .lockScreenStatus = LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED
112 };
113
114 static PermissionRecord g_recordA2 = {
115 .opCode = Constant::OP_MICROPHONE,
116 .status = ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND,
117 .timestamp = 0L,
118 .accessDuration = 0L,
119 .accessCount = 1,
120 .rejectCount = 0,
121 .lockScreenStatus = LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED
122 };
123
124 static PermissionRecord g_recordB1 = {
125 .opCode = Constant::OP_CAMERA,
126 .status = ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND,
127 .timestamp = 0L,
128 .accessDuration = 0L,
129 .accessCount = 1,
130 .rejectCount = 0,
131 .lockScreenStatus = LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED
132 };
133
134 static PermissionRecord g_recordB2 = {
135 .opCode = Constant::OP_MICROPHONE,
136 .status = ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND,
137 .timestamp = 0L,
138 .accessDuration = 0L,
139 .accessCount = 1,
140 .rejectCount = 0,
141 .lockScreenStatus = LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED
142 };
143
144 static PermissionRecord g_record = {
145 .tokenId = 123,
146 .opCode = static_cast<int32_t>(Constant::OpCode::OP_READ_CALENDAR),
147 .status = static_cast<int32_t>(ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND),
148 .lockScreenStatus = static_cast<int32_t>(LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED),
149 };
150 }
151 class PermissionRecordManagerTest : public testing::Test {
152 public:
153 static void SetUpTestCase();
154
155 static void TearDownTestCase();
156
157 void SetUp();
158
159 void TearDown();
160 };
161
SetUpTestCase()162 void PermissionRecordManagerTest::SetUpTestCase()
163 {
164 g_selfTokenId = GetSelfTokenID();
165 }
166
TearDownTestCase()167 void PermissionRecordManagerTest::TearDownTestCase() {}
168
SetUp()169 void PermissionRecordManagerTest::SetUp()
170 {
171 PermissionRecordManager::GetInstance().Register();
172
173 AccessTokenKit::AllocHapToken(g_InfoParms1, g_PolicyPrams1);
174 AccessTokenKit::AllocHapToken(g_InfoParms2, g_PolicyPrams2);
175 }
176
TearDown()177 void PermissionRecordManagerTest::TearDown()
178 {
179 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
180 g_InfoParms1.instIndex);
181 AccessTokenKit::DeleteToken(tokenId);
182 tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms2.userID, g_InfoParms2.bundleName,
183 g_InfoParms2.instIndex);
184 AccessTokenKit::DeleteToken(tokenId);
185 EXPECT_EQ(0, SetSelfTokenID(g_selfTokenId));
186 }
187
188 class CbCustomizeTest1 : public StateCustomizedCbk {
189 public:
CbCustomizeTest1()190 CbCustomizeTest1()
191 {}
192
~CbCustomizeTest1()193 ~CbCustomizeTest1()
194 {}
195
StateChangeNotify(AccessTokenID tokenId,bool isShow)196 virtual void StateChangeNotify(AccessTokenID tokenId, bool isShow)
197 {}
198
Stop()199 void Stop()
200 {}
201 };
202
203 class CbCustomizeTest2 : public IRemoteObject {
204 public:
CbCustomizeTest2()205 CbCustomizeTest2()
206 {}
207
~CbCustomizeTest2()208 ~CbCustomizeTest2()
209 {}
210 };
211
212
213 /**
214 * @tc.name: OnForegroundApplicationChanged001
215 * @tc.desc: RegisterPermActiveStatusCallback with invalid parameter.
216 * @tc.type: FUNC
217 * @tc.require: issueI5RWX8
218 */
219 HWTEST_F(PermissionRecordManagerTest, OnForegroundApplicationChanged001, TestSize.Level1)
220 {
221 PrivacyAppStateObserver observer;
222 AppStateData appStateData;
223 appStateData.state = static_cast<int32_t>(ApplicationState::APP_STATE_FOREGROUND);
224 observer.OnForegroundApplicationChanged(appStateData);
225 appStateData.state = static_cast<int32_t>(ApplicationState::APP_STATE_BACKGROUND);
226 observer.OnForegroundApplicationChanged(appStateData);
227 ASSERT_EQ(static_cast<int32_t>(ApplicationState::APP_STATE_BACKGROUND), appStateData.state);
228 }
229
230 /**
231 * @tc.name: RegisterPermActiveStatusCallback001
232 * @tc.desc: RegisterPermActiveStatusCallback with invalid parameter.
233 * @tc.type: FUNC
234 * @tc.require: issueI5RWX8
235 */
236 HWTEST_F(PermissionRecordManagerTest, RegisterPermActiveStatusCallback001, TestSize.Level1)
237 {
238 std::vector<std::string> permList = {"ohos.permission.CAMERA"};
239 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID,
240 PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, nullptr));
241 }
242
243
244 class PermActiveStatusChangeCallback : public PermActiveStatusChangeCallbackStub {
245 public:
246 PermActiveStatusChangeCallback() = default;
247 virtual ~PermActiveStatusChangeCallback() = default;
248
ActiveStatusChangeCallback(ActiveChangeResponse & result)249 void ActiveStatusChangeCallback(ActiveChangeResponse& result) {}
250 };
251
252 /**
253 * @tc.name: RegisterPermActiveStatusCallback002
254 * @tc.desc: RegisterPermActiveStatusCallback with exceed limitation.
255 * @tc.type: FUNC
256 * @tc.require: issueI5RWX8
257 */
258 HWTEST_F(PermissionRecordManagerTest, RegisterPermActiveStatusCallback002, TestSize.Level1)
259 {
260 std::vector<std::string> permList = {"ohos.permission.CAMERA"};
261 std::vector<sptr<PermActiveStatusChangeCallback>> callbacks;
262
263 for (size_t i = 0; i < MAX_CALLBACK_SIZE; ++i) {
264 sptr<PermActiveStatusChangeCallback> callback = new (std::nothrow) PermActiveStatusChangeCallback();
265 ASSERT_NE(nullptr, callback);
266 ASSERT_EQ(RET_SUCCESS,
267 PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, callback->AsObject()));
268 callbacks.emplace_back(callback);
269 }
270
271 sptr<PermActiveStatusChangeCallback> callback = new (std::nothrow) PermActiveStatusChangeCallback();
272 ASSERT_NE(nullptr, callback);
273 ASSERT_EQ(PrivacyError::ERR_CALLBACKS_EXCEED_LIMITATION,
274 PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, callback->AsObject()));
275
276 for (size_t i = 0; i < callbacks.size(); ++i) {
277 ASSERT_EQ(RET_SUCCESS,
278 PermissionRecordManager::GetInstance().UnRegisterPermActiveStatusCallback(callbacks[i]->AsObject()));
279 }
280 }
281
282 /**
283 * @tc.name: UnRegisterPermActiveStatusCallback001
284 * @tc.desc: UnRegisterPermActiveStatusCallback with invalid parameter.
285 * @tc.type: FUNC
286 * @tc.require: issueI5RWX8
287 */
288 HWTEST_F(PermissionRecordManagerTest, UnRegisterPermActiveStatusCallback001, TestSize.Level1)
289 {
290 std::vector<std::string> permList = {"ohos.permission.CAMERA"};
291 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID,
292 PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, nullptr));
293 }
294
295 /*
296 * @tc.name: AppStatusListener001
297 * @tc.desc: register and startusing permissions then use NotifyAppStateChange
298 * @tc.type: FUNC
299 * @tc.require: issueI5SZHG
300 */
301 HWTEST_F(PermissionRecordManagerTest, AppStatusListener001, TestSize.Level1)
302 {
303 AccessTokenID tokenId1 = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
304 g_InfoParms1.instIndex);
305 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId1);
306 AccessTokenID tokenId2 = AccessTokenKit::GetHapTokenID(g_InfoParms2.userID, g_InfoParms2.bundleName,
307 g_InfoParms2.instIndex);
308 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId2);
309
310 g_recordA1.tokenId = tokenId1;
311 g_recordA2.tokenId = tokenId1;
312 g_recordB1.tokenId = tokenId2;
313 g_recordB2.tokenId = tokenId2;
314 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(g_recordA1);
315 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(g_recordA2);
316 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(g_recordB1);
317 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(g_recordB2);
318
319 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId1, PERM_ACTIVE_IN_FOREGROUND);
320 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId2, PERM_ACTIVE_IN_FOREGROUND);
321 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId1, PERM_ACTIVE_IN_FOREGROUND);
322 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId2, PERM_ACTIVE_IN_FOREGROUND);
323 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId1, PERM_ACTIVE_IN_BACKGROUND);
324 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId2, PERM_ACTIVE_IN_BACKGROUND);
325 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId1, PERM_ACTIVE_IN_BACKGROUND);
326 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId2, PERM_ACTIVE_IN_BACKGROUND);
327 }
328
329 /*
330 * @tc.name: FindRecordsToUpdateAndExecutedTest001
331 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
332 * @tc.type: FUNC
333 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
334 */
335 HWTEST_F(PermissionRecordManagerTest, FindRecordsToUpdateAndExecutedTest001, TestSize.Level1)
336 {
337 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
338 g_InfoParms1.instIndex);
339 ASSERT_NE(INVALID_TOKENID, tokenId);
340
341 EXPECT_EQ(0, SetSelfTokenID(tokenId));
342
343 ActiveChangeType status = PERM_ACTIVE_IN_BACKGROUND;
344
345 PermissionRecord record1 = {
346 .tokenId = tokenId,
347 .opCode = Constant::OP_CAMERA,
348 };
349 CameraManagerPrivacyClient::GetInstance().MuteCamera(false);
350 PermissionRecordManager::GetInstance().AddRecordToStartList(record1);
351 #ifdef CAMERA_FLOAT_WINDOW_ENABLE
352 PermissionRecordManager::GetInstance().NotifyCameraFloatWindowChange(tokenId, false);
353 #endif
354 PermissionRecordManager::GetInstance().FindRecordsToUpdateAndExecuted(tokenId, status);
355 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId, status);
356
357 PermissionRecord record;
358 PermissionRecordManager::GetInstance().GetRecordFromStartList(record1.tokenId, record1.opCode, record);
359
360 ASSERT_EQ(record1.tokenId, tokenId);
361 }
362
363 /*
364 * @tc.name: FindRecordsToUpdateAndExecutedTest002
365 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
366 * @tc.type: FUNC
367 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
368 */
369 HWTEST_F(PermissionRecordManagerTest, FindRecordsToUpdateAndExecutedTest002, TestSize.Level1)
370 {
371 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
372 g_InfoParms1.instIndex);
373 ASSERT_NE(INVALID_TOKENID, tokenId);
374 ActiveChangeType status = PERM_ACTIVE_IN_BACKGROUND;
375
376 PermissionRecord record1 = {
377 .tokenId = tokenId,
378 .opCode = Constant::OP_MICROPHONE,
379 };
380 PermissionRecordManager::GetInstance().AddRecordToStartList(record1);
381 #ifdef CAMERA_FLOAT_WINDOW_ENABLE
382 PermissionRecordManager::GetInstance().NotifyCameraFloatWindowChange(tokenId, false);
383 #endif
384 PermissionRecordManager::GetInstance().FindRecordsToUpdateAndExecuted(tokenId, status);
385 PermissionRecordManager::GetInstance().NotifyAppStateChange(tokenId, status);
386
387 PermissionRecord record;
388 PermissionRecordManager::GetInstance().GetRecordFromStartList(record1.tokenId, record1.opCode, record);
389 ASSERT_EQ(record1.tokenId, tokenId);
390 }
391
392 /*
393 * @tc.name: FindRecordsToUpdateAndExecutedTest003
394 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
395 * @tc.type: FUNC
396 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
397 */
398 HWTEST_F(PermissionRecordManagerTest, FindRecordsToUpdateAndExecutedTest003, TestSize.Level1)
399 {
400 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
401 g_InfoParms1.instIndex);
402 ASSERT_NE(INVALID_TOKENID, tokenId);
403 ActiveChangeType status = PERM_ACTIVE_IN_FOREGROUND;
404
405 PermissionRecord record1 = {
406 .tokenId = tokenId,
407 .opCode = Constant::OP_CAMERA,
408 };
409 PermissionRecordManager::GetInstance().AddRecordToStartList(record1);
410 #ifdef CAMERA_FLOAT_WINDOW_ENABLE
411 PermissionRecordManager::GetInstance().NotifyCameraFloatWindowChange(tokenId, false);
412 #endif
413 PermissionRecordManager::GetInstance().FindRecordsToUpdateAndExecuted(tokenId, status);
414
415 PermissionRecord record;
416 PermissionRecordManager::GetInstance().GetRecordFromStartList(record1.tokenId, record1.opCode, record);
417
418 ASSERT_EQ(record1.tokenId, tokenId);
419 }
420
421 /*
422 * @tc.name: FindRecordsToUpdateAndExecutedTest004
423 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
424 * @tc.type: FUNC
425 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
426 */
427 HWTEST_F(PermissionRecordManagerTest, FindRecordsToUpdateAndExecutedTest004, TestSize.Level1)
428 {
429 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
430 g_InfoParms1.instIndex);
431 ASSERT_NE(INVALID_TOKENID, tokenId);
432 ActiveChangeType status = PERM_ACTIVE_IN_BACKGROUND;
433
434 PermissionRecord record1 = {
435 .tokenId = tokenId,
436 .opCode = Constant::OP_CAMERA,
437 };
438 PermissionRecordManager::GetInstance().AddRecordToStartList(record1);
439 #ifdef CAMERA_FLOAT_WINDOW_ENABLE
440 PermissionRecordManager::GetInstance().NotifyCameraFloatWindowChange(tokenId, true);
441 #endif
442 PermissionRecordManager::GetInstance().FindRecordsToUpdateAndExecuted(tokenId, status);
443
444 PermissionRecord record;
445 PermissionRecordManager::GetInstance().GetRecordFromStartList(record1.tokenId, record1.opCode, record);
446 ASSERT_EQ(record1.tokenId, tokenId);
447 }
448
449 /*
450 * @tc.name: FindRecordsToUpdateAndExecutedTest005
451 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
452 * @tc.type: FUNC
453 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
454 */
455 HWTEST_F(PermissionRecordManagerTest, FindRecordsToUpdateAndExecutedTest005, TestSize.Level1)
456 {
457 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
458 g_InfoParms1.instIndex);
459 ASSERT_NE(INVALID_TOKENID, tokenId);
460 ActiveChangeType status = PERM_ACTIVE_IN_BACKGROUND;
461
462 PermissionRecord record1 = {
463 .tokenId = tokenId,
464 .opCode = Constant::OP_MICROPHONE,
465 .status = PERM_ACTIVE_IN_FOREGROUND,
466 .timestamp = TimeUtil::GetCurrentTimestamp(),
467 .accessCount = 1,
468 .lockScreenStatus = PERM_ACTIVE_IN_LOCKED,
469 };
470 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record1);
471
472 PermissionRecordManager::GetInstance().FindRecordsToUpdateAndExecuted(tokenId, status);
473
474 std::string permissionName = MICROPHONE_PERMISSION_NAME;
475 std::vector<std::string> permissionList;
476 permissionList.emplace_back(permissionName);
477 PermissionUsedRequest request = {
478 .tokenId = tokenId,
479 .permissionList = permissionList,
480 .flag = FLAG_PERMISSION_USAGE_DETAIL
481 };
482
483 PermissionUsedResult queryResult;
484 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, queryResult);
485 ASSERT_NE(queryResult.bundleRecords.size(), static_cast<size_t>(0));
486 auto bundleRecordIter = std::find_if(queryResult.bundleRecords.begin(), queryResult.bundleRecords.end(),
__anon5b3ae2260202(const BundleUsedRecord& bur) 487 [tokenId](const BundleUsedRecord& bur) {
488 return tokenId == bur.tokenId;
489 });
490 ASSERT_NE(bundleRecordIter, queryResult.bundleRecords.end());
491
492 auto permissionRecordIter = std::find_if(bundleRecordIter->permissionRecords.begin(),
493 bundleRecordIter->permissionRecords.end(),
__anon5b3ae2260302(const PermissionUsedRecord& prs) 494 [permissionName](const PermissionUsedRecord& prs) {
495 return permissionName == prs.permissionName;
496 });
497 ASSERT_NE(permissionRecordIter, bundleRecordIter->permissionRecords.end());
498
499 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter->accessRecords.size());
500 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter->accessRecords[0].status);
501 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter->accessRecords[0].lockScreenStatus);
502 }
503
GenerateRequest(AccessTokenID tokenId,std::string permissionName)504 PermissionUsedRequest GenerateRequest(AccessTokenID tokenId, std::string permissionName)
505 {
506 std::vector<std::string> permissionList;
507 permissionList.emplace_back(permissionName);
508 PermissionUsedRequest request = {
509 .tokenId = tokenId,
510 .permissionList = permissionList,
511 .flag = FLAG_PERMISSION_USAGE_DETAIL
512 };
513 return request;
514 }
515
516 /*
517 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest001
518 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
519 * @tc.type: FUNC
520 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
521 */
522 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest001, TestSize.Level1)
523 {
524 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
525 g_InfoParms1.instIndex);
526 ASSERT_NE(INVALID_TOKENID, tokenId);
527 EXPECT_EQ(0, SetSelfTokenID(tokenId));
528
529 PermissionRecord record = {
530 .tokenId = tokenId,
531 .opCode = Constant::OP_MICROPHONE,
532 .status = PERM_ACTIVE_IN_FOREGROUND,
533 .timestamp = TimeUtil::GetCurrentTimestamp(),
534 .accessCount = 1,
535 .lockScreenStatus = PERM_ACTIVE_IN_UNLOCKED
536 };
537 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record);
538 LockScreenStatusChangeType screenLocked = PERM_ACTIVE_IN_LOCKED;
539 PermissionRecordManager::GetInstance().NotifyLockScreenStatusChange(screenLocked);
540
541 std::string permissionName = MICROPHONE_PERMISSION_NAME;
542 PermissionUsedRequest request = GenerateRequest(tokenId, permissionName);
543
544 PermissionUsedResult result;
545 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result);
546 auto bundleRecordIter = std::find_if(result.bundleRecords.begin(), result.bundleRecords.end(),
__anon5b3ae2260402(const BundleUsedRecord& bur) 547 [tokenId](const BundleUsedRecord& bur) {
548 return tokenId == bur.tokenId;
549 });
550 ASSERT_NE(bundleRecordIter, result.bundleRecords.end());
551
552 auto permissionRecordIter = std::find_if(bundleRecordIter->permissionRecords.begin(),
553 bundleRecordIter->permissionRecords.end(),
__anon5b3ae2260502(const PermissionUsedRecord& prs) 554 [permissionName](const PermissionUsedRecord& prs) {
555 return permissionName == prs.permissionName;
556 });
557 ASSERT_NE(permissionRecordIter, bundleRecordIter->permissionRecords.end());
558
559 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter->accessRecords.size());
560 ASSERT_EQ(PERM_ACTIVE_IN_FOREGROUND, permissionRecordIter->accessRecords[0].status);
561 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter->accessRecords[0].lockScreenStatus);
562 }
563
GenerateLockScreenPerUsedRecord(AccessTokenID tokenId1,AccessTokenID tokenId2)564 void GenerateLockScreenPerUsedRecord(AccessTokenID tokenId1, AccessTokenID tokenId2)
565 {
566 PermissionRecord record1 = {
567 .tokenId = tokenId1,
568 .opCode = Constant::OP_MICROPHONE,
569 .status = PERM_ACTIVE_IN_FOREGROUND,
570 .timestamp = TimeUtil::GetCurrentTimestamp(),
571 .accessCount = 1,
572 .lockScreenStatus = PERM_ACTIVE_IN_UNLOCKED
573 };
574
575 PermissionRecord record2 = {
576 .tokenId = tokenId2,
577 .opCode = Constant::OP_MICROPHONE,
578 .status = PERM_ACTIVE_IN_BACKGROUND,
579 .timestamp = TimeUtil::GetCurrentTimestamp(),
580 .accessCount = 1,
581 .lockScreenStatus = PERM_ACTIVE_IN_UNLOCKED
582 };
583 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record1);
584 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record2);
585 LockScreenStatusChangeType screenLocked = PERM_ACTIVE_IN_LOCKED;
586 PermissionRecordManager::GetInstance().GenerateRecordsWhenScreenStatusChanged(screenLocked);
587 }
588
589 /*
590 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest002
591 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
592 * @tc.type: FUNC
593 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
594 */
595 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest002, TestSize.Level1)
596 {
597 AccessTokenID tokenId1 = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
598 g_InfoParms1.instIndex);
599 ASSERT_NE(INVALID_TOKENID, tokenId1);
600 EXPECT_EQ(0, SetSelfTokenID(tokenId1));
601
602 AccessTokenID tokenId2 = AccessTokenKit::GetHapTokenID(g_InfoParms2.userID, g_InfoParms2.bundleName,
603 g_InfoParms2.instIndex);
604 ASSERT_NE(INVALID_TOKENID, tokenId2);
605 EXPECT_EQ(0, SetSelfTokenID(tokenId2));
606
607 GenerateLockScreenPerUsedRecord(tokenId1, tokenId2);
608
609 std::string permissionName = MICROPHONE_PERMISSION_NAME;
610 PermissionUsedRequest request1 = GenerateRequest(tokenId1, permissionName);
611 PermissionUsedResult result1;
612 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request1, result1);
613 auto bundleRecordIter1 = std::find_if(result1.bundleRecords.begin(), result1.bundleRecords.end(),
__anon5b3ae2260602(const BundleUsedRecord& bur) 614 [tokenId1](const BundleUsedRecord& bur) {
615 return tokenId1 == bur.tokenId;
616 });
617 ASSERT_NE(bundleRecordIter1, result1.bundleRecords.end());
618
619 auto permissionRecordIter1 = std::find_if(bundleRecordIter1->permissionRecords.begin(),
620 bundleRecordIter1->permissionRecords.end(),
__anon5b3ae2260702(const PermissionUsedRecord& prs) 621 [permissionName](const PermissionUsedRecord& prs) {
622 return permissionName == prs.permissionName;
623 });
624 ASSERT_NE(permissionRecordIter1, bundleRecordIter1->permissionRecords.end());
625
626 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter1->accessRecords.size());
627 ASSERT_EQ(PERM_ACTIVE_IN_FOREGROUND, permissionRecordIter1->accessRecords[0].status);
628 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter1->accessRecords[0].lockScreenStatus);
629
630 PermissionUsedRequest request2 = GenerateRequest(tokenId2, permissionName);
631 PermissionUsedResult result2;
632 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request2, result2);
633 auto bundleRecordIter2 = std::find_if(result2.bundleRecords.begin(), result2.bundleRecords.end(),
__anon5b3ae2260802(const BundleUsedRecord& bur) 634 [tokenId2](const BundleUsedRecord& bur) {
635 return tokenId2 == bur.tokenId;
636 });
637 ASSERT_NE(bundleRecordIter2, result2.bundleRecords.end());
638
639 auto permissionRecordIter2 = std::find_if(bundleRecordIter2->permissionRecords.begin(),
640 bundleRecordIter2->permissionRecords.end(),
__anon5b3ae2260902(const PermissionUsedRecord& prs) 641 [permissionName](const PermissionUsedRecord& prs) {
642 return permissionName == prs.permissionName;
643 });
644 ASSERT_NE(permissionRecordIter2, bundleRecordIter2->permissionRecords.end());
645
646 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter2->accessRecords.size());
647 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter2->accessRecords[0].status);
648 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter2->accessRecords[0].lockScreenStatus);
649 }
650
651 /*
652 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest003
653 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
654 * @tc.type: FUNC
655 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
656 */
657 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest003, TestSize.Level1)
658 {
659 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
660 g_InfoParms1.instIndex);
661 ASSERT_NE(INVALID_TOKENID, tokenId);
662 EXPECT_EQ(0, SetSelfTokenID(tokenId));
663
664 PermissionRecord record = {
665 .tokenId = tokenId,
666 .opCode = Constant::OP_MICROPHONE,
667 .status = PERM_ACTIVE_IN_BACKGROUND,
668 .timestamp = TimeUtil::GetCurrentTimestamp(),
669 .accessCount = 1,
670 .lockScreenStatus = PERM_ACTIVE_IN_UNLOCKED
671 };
672
673 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record);
674 LockScreenStatusChangeType screenLocked = PERM_ACTIVE_IN_LOCKED;
675 PermissionRecordManager::GetInstance().GenerateRecordsWhenScreenStatusChanged(screenLocked);
676
677 std::string permissionName = MICROPHONE_PERMISSION_NAME;
678 PermissionUsedRequest request = GenerateRequest(tokenId, permissionName);
679 PermissionUsedResult result;
680 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result);
681 auto bundleRecordIter = std::find_if(result.bundleRecords.begin(), result.bundleRecords.end(),
__anon5b3ae2260a02(const BundleUsedRecord& bur) 682 [tokenId](const BundleUsedRecord& bur) {
683 return tokenId == bur.tokenId;
684 });
685 ASSERT_NE(bundleRecordIter, result.bundleRecords.end());
686
687 auto permissionRecordIter = std::find_if(bundleRecordIter->permissionRecords.begin(),
688 bundleRecordIter->permissionRecords.end(),
__anon5b3ae2260b02(const PermissionUsedRecord& prs) 689 [permissionName](const PermissionUsedRecord& prs) {
690 return permissionName == prs.permissionName;
691 });
692 ASSERT_NE(permissionRecordIter, bundleRecordIter->permissionRecords.end());
693
694 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter->accessRecords.size());
695 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter->accessRecords[0].status);
696 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter->accessRecords[0].lockScreenStatus);
697 }
698
699 /*
700 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest004
701 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
702 * @tc.type: FUNC
703 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
704 */
705 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest004, TestSize.Level1)
706 {
707 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
708 g_InfoParms1.instIndex);
709 ASSERT_NE(INVALID_TOKENID, tokenId);
710 EXPECT_EQ(0, SetSelfTokenID(tokenId));
711
712 PermissionRecord record = {
713 .tokenId = tokenId,
714 .opCode = Constant::OP_MICROPHONE,
715 .status = PERM_ACTIVE_IN_FOREGROUND,
716 .timestamp = TimeUtil::GetCurrentTimestamp(),
717 .accessCount = 1,
718 .lockScreenStatus = PERM_ACTIVE_IN_LOCKED
719 };
720
721 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record);
722 LockScreenStatusChangeType screenUnLocked = PERM_ACTIVE_IN_UNLOCKED;
723 PermissionRecordManager::GetInstance().GenerateRecordsWhenScreenStatusChanged(screenUnLocked);
724
725 std::string permissionName = MICROPHONE_PERMISSION_NAME;
726 PermissionUsedRequest request = GenerateRequest(tokenId, permissionName);
727 PermissionUsedResult result;
728 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result);
729 auto bundleRecordIter = std::find_if(result.bundleRecords.begin(), result.bundleRecords.end(),
__anon5b3ae2260c02(const BundleUsedRecord& bur) 730 [tokenId](const BundleUsedRecord& bur) {
731 return tokenId == bur.tokenId;
732 });
733 ASSERT_NE(bundleRecordIter, result.bundleRecords.end());
734
735 auto permissionRecordIter = std::find_if(bundleRecordIter->permissionRecords.begin(),
736 bundleRecordIter->permissionRecords.end(),
__anon5b3ae2260d02(const PermissionUsedRecord& prs) 737 [permissionName](const PermissionUsedRecord& prs) {
738 return permissionName == prs.permissionName;
739 });
740 ASSERT_NE(permissionRecordIter, bundleRecordIter->permissionRecords.end());
741
742 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter->accessRecords.size());
743 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter->accessRecords[0].status);
744 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter->accessRecords[0].lockScreenStatus);
745 }
746
GenerateUnLockScreenPerUsedRecord(AccessTokenID tokenId1,AccessTokenID tokenId2)747 void GenerateUnLockScreenPerUsedRecord(AccessTokenID tokenId1, AccessTokenID tokenId2)
748 {
749 PermissionRecord record1 = {
750 .tokenId = tokenId1,
751 .opCode = Constant::OP_MICROPHONE,
752 .status = PERM_ACTIVE_IN_FOREGROUND,
753 .timestamp = TimeUtil::GetCurrentTimestamp(),
754 .accessCount = 1,
755 .lockScreenStatus = PERM_ACTIVE_IN_LOCKED
756 };
757
758 PermissionRecord record2 = {
759 .tokenId = tokenId2,
760 .opCode = Constant::OP_MICROPHONE,
761 .status = PERM_ACTIVE_IN_BACKGROUND,
762 .timestamp = TimeUtil::GetCurrentTimestamp(),
763 .accessCount = 1,
764 .lockScreenStatus = PERM_ACTIVE_IN_LOCKED
765 };
766 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record1);
767 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record2);
768 LockScreenStatusChangeType screenUnLocked = PERM_ACTIVE_IN_UNLOCKED;
769 PermissionRecordManager::GetInstance().GenerateRecordsWhenScreenStatusChanged(screenUnLocked);
770 }
771
772 /*
773 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest005
774 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
775 * @tc.type: FUNC
776 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
777 */
778 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest005, TestSize.Level1)
779 {
780 AccessTokenID tokenId1 = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
781 g_InfoParms1.instIndex);
782 ASSERT_NE(INVALID_TOKENID, tokenId1);
783 EXPECT_EQ(0, SetSelfTokenID(tokenId1));
784
785 AccessTokenID tokenId2 = AccessTokenKit::GetHapTokenID(g_InfoParms2.userID, g_InfoParms2.bundleName,
786 g_InfoParms2.instIndex);
787 ASSERT_NE(INVALID_TOKENID, tokenId2);
788 EXPECT_EQ(0, SetSelfTokenID(tokenId2));
789
790 GenerateUnLockScreenPerUsedRecord(tokenId1, tokenId2);
791 std::string permissionName = MICROPHONE_PERMISSION_NAME;
792 PermissionUsedRequest request1 = GenerateRequest(tokenId1, permissionName);
793 PermissionUsedResult result1;
794 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request1, result1);
795 auto bundleRecordIter1 = std::find_if(result1.bundleRecords.begin(), result1.bundleRecords.end(),
__anon5b3ae2260e02(const BundleUsedRecord& bur) 796 [tokenId1](const BundleUsedRecord& bur) {
797 return tokenId1 == bur.tokenId;
798 });
799 ASSERT_NE(bundleRecordIter1, result1.bundleRecords.end());
800
801 auto permissionRecordIter1 = std::find_if(bundleRecordIter1->permissionRecords.begin(),
802 bundleRecordIter1->permissionRecords.end(),
__anon5b3ae2260f02(const PermissionUsedRecord& prs) 803 [permissionName](const PermissionUsedRecord& prs) {
804 return permissionName == prs.permissionName;
805 });
806 ASSERT_NE(permissionRecordIter1, bundleRecordIter1->permissionRecords.end());
807
808 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter1->accessRecords.size());
809 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter1->accessRecords[0].status);
810 ASSERT_EQ(PERM_ACTIVE_IN_UNLOCKED, permissionRecordIter1->accessRecords[0].lockScreenStatus);
811
812 PermissionUsedRequest request2 = GenerateRequest(tokenId2, permissionName);
813 PermissionUsedResult result2;
814 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request2, result2);
815 auto bundleRecordIter2 = std::find_if(result2.bundleRecords.begin(), result2.bundleRecords.end(),
__anon5b3ae2261002(const BundleUsedRecord& bur) 816 [tokenId2](const BundleUsedRecord& bur) {
817 return tokenId2 == bur.tokenId;
818 });
819 ASSERT_NE(bundleRecordIter2, result2.bundleRecords.end());
820
821 auto permissionRecordIter2 = std::find_if(bundleRecordIter2->permissionRecords.begin(),
822 bundleRecordIter2->permissionRecords.end(),
__anon5b3ae2261102(const PermissionUsedRecord& prs) 823 [permissionName](const PermissionUsedRecord& prs) {
824 return permissionName == prs.permissionName;
825 });
826 ASSERT_NE(permissionRecordIter2, bundleRecordIter2->permissionRecords.end());
827
828 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter2->accessRecords.size());
829 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter2->accessRecords[0].status);
830 ASSERT_EQ(PERM_ACTIVE_IN_LOCKED, permissionRecordIter2->accessRecords[0].lockScreenStatus);
831 }
832
833 /*
834 * @tc.name: GenerateRecordsWhenScreenStatusChangedTest006
835 * @tc.desc: FindRecordsToUpdateAndExecuted function test with invaild tokenId or permissionName or callback.
836 * @tc.type: FUNC
837 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
838 */
839 HWTEST_F(PermissionRecordManagerTest, GenerateRecordsWhenScreenStatusChangedTest006, TestSize.Level1)
840 {
841 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
842 g_InfoParms1.instIndex);
843 ASSERT_NE(INVALID_TOKENID, tokenId);
844 EXPECT_EQ(0, SetSelfTokenID(tokenId));
845
846 PermissionRecord record = {
847 .tokenId = tokenId,
848 .opCode = Constant::OP_MICROPHONE,
849 .status = PERM_ACTIVE_IN_BACKGROUND,
850 .timestamp = TimeUtil::GetCurrentTimestamp(),
851 .accessCount = 1,
852 .lockScreenStatus = PERM_ACTIVE_IN_LOCKED
853 };
854 PermissionRecordManager::GetInstance().startRecordList_.emplace_back(record);
855 LockScreenStatusChangeType screenUnLocked = PERM_ACTIVE_IN_UNLOCKED;
856 PermissionRecordManager::GetInstance().GenerateRecordsWhenScreenStatusChanged(screenUnLocked);
857
858 std::string permissionName = MICROPHONE_PERMISSION_NAME;
859 PermissionUsedRequest request = GenerateRequest(tokenId, permissionName);
860 PermissionUsedResult result;
861 PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result);
862 auto bundleRecordIter = std::find_if(result.bundleRecords.begin(), result.bundleRecords.end(),
__anon5b3ae2261202(const BundleUsedRecord& bur) 863 [tokenId](const BundleUsedRecord& bur) {
864 return tokenId == bur.tokenId;
865 });
866 ASSERT_NE(bundleRecordIter, result.bundleRecords.end());
867
868 auto permissionRecordIter = std::find_if(bundleRecordIter->permissionRecords.begin(),
869 bundleRecordIter->permissionRecords.end(),
__anon5b3ae2261302(const PermissionUsedRecord& prs) 870 [permissionName](const PermissionUsedRecord& prs) {
871 return permissionName == prs.permissionName;
872 });
873 ASSERT_NE(permissionRecordIter, bundleRecordIter->permissionRecords.end());
874
875 ASSERT_EQ(static_cast<size_t>(1), permissionRecordIter->accessRecords.size());
876 ASSERT_EQ(PERM_ACTIVE_IN_BACKGROUND, permissionRecordIter->accessRecords[0].status);
877 ASSERT_EQ(PERM_ACTIVE_IN_LOCKED, permissionRecordIter->accessRecords[0].lockScreenStatus);
878 }
879
880 /*
881 * @tc.name: StartUsingPermissionTest001
882 * @tc.desc: StartUsingPermission function test with invaild tokenId.
883 * @tc.type: FUNC
884 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
885 */
886 HWTEST_F(PermissionRecordManagerTest, StartUsingPermissionTest001, TestSize.Level1)
887 {
888 std::string permissionName = "ohos.permission.CAMERA";
889 auto callbackPtr = std::make_shared<CbCustomizeTest1>();
890 auto callbackWrap = new (std::nothrow) StateChangeCallback(callbackPtr);
891 ASSERT_NE(nullptr, callbackPtr);
892 ASSERT_NE(nullptr, callbackWrap);
893 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
894 g_InfoParms1.instIndex);
895 ASSERT_NE(INVALID_TOKENID, tokenId);
896 ASSERT_EQ(ERR_TOKENID_NOT_EXIST,
897 PermissionRecordManager::GetInstance().StartUsingPermission(0, permissionName, callbackWrap->AsObject()));
898 }
899
900 /*
901 * @tc.name: StartUsingPermissionTest002
902 * @tc.desc: StartUsingPermission function test with invaild permissionName.
903 * @tc.type: FUNC
904 * @tc.require: issueI5RWXF
905 */
906 HWTEST_F(PermissionRecordManagerTest, StartUsingPermissionTest002, TestSize.Level1)
907 {
908 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
909 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
910 EXPECT_EQ(0, SetSelfTokenID(tokenID));
911
912 auto callbackPtr = std::make_shared<CbCustomizeTest1>();
913 auto callbackWrap = new (std::nothrow) StateChangeCallback(callbackPtr);
914 ASSERT_NE(nullptr, callbackPtr);
915 ASSERT_NE(nullptr, callbackWrap);
916 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
917 g_InfoParms1.instIndex);
918 ASSERT_NE(INVALID_TOKENID, tokenId);
919 ASSERT_EQ(ERR_PARAM_INVALID, PermissionRecordManager::GetInstance().StartUsingPermission(
920 tokenId, "ohos.permission.LOCATION", callbackWrap->AsObject()));
921
922 // tokenId invaild
923 ASSERT_EQ(PrivacyError::ERR_TOKENID_NOT_EXIST, PermissionRecordManager::GetInstance().StartUsingPermission(
924 static_cast<AccessTokenID>(123), "ohos.permission.CAMERA", nullptr));
925
926 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().StartUsingPermission(
927 tokenId, "ohos.permission.CAMERA", nullptr));
928 ASSERT_EQ(PrivacyError::ERR_PERMISSION_ALREADY_START_USING,
929 PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, "ohos.permission.CAMERA", nullptr));
930
931 ASSERT_EQ(Constant::SUCCESS,
932 PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, "ohos.permission.CAMERA"));
933 }
934
935 /*
936 * @tc.name: ExecuteCameraCallbackAsyncTest001
937 * @tc.desc: Verify the ExecuteCameraCallbackAsync abnormal branch function test with.
938 * @tc.type: FUNC
939 * @tc.require: issueI5RWX5 issueI5RWX3 issueI5RWXA
940 */
941 HWTEST_F(PermissionRecordManagerTest, ExecuteCameraCallbackAsyncTest001, TestSize.Level1)
942 {
943 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
944 g_InfoParms1.instIndex);
945 ASSERT_NE(INVALID_TOKENID, tokenId);
946
947 auto callbackPtr = std::make_shared<CbCustomizeTest1>();
948 auto callbackWrap = new (std::nothrow) StateChangeCallback(callbackPtr);
949 ASSERT_NE(nullptr, callbackPtr);
950 ASSERT_NE(nullptr, callbackWrap);
951 PermissionRecordManager::GetInstance().SetCameraCallback(nullptr);
952 PermissionRecordManager::GetInstance().ExecuteCameraCallbackAsync(tokenId);
953
954 PermissionRecordManager::GetInstance().SetCameraCallback(callbackWrap->AsObject());
955 PermissionRecordManager::GetInstance().ExecuteCameraCallbackAsync(tokenId);
956 }
957
958 /*
959 * @tc.name: GetGlobalSwitchStatus001
960 * @tc.desc: GetGlobalSwitchStatus function test
961 * @tc.type: FUNC
962 * @tc.require: issueI5RWXF
963 */
964 HWTEST_F(PermissionRecordManagerTest, GetGlobalSwitchStatus001, TestSize.Level1)
965 {
966 bool isMuteMic = AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute();
967 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(false); // false means open
968 ASSERT_EQ(false, AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute());
969 ASSERT_EQ(true, PermissionRecordManager::GetInstance().GetGlobalSwitchStatus(MICROPHONE_PERMISSION_NAME));
970 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(isMuteMic);
971
972 bool isMuteCam = CameraManagerPrivacyClient::GetInstance().IsCameraMuted();
973 CameraManagerPrivacyClient::GetInstance().MuteCamera(false);
974 ASSERT_EQ(false, CameraManagerPrivacyClient::GetInstance().IsCameraMuted());
975 ASSERT_EQ(true, PermissionRecordManager::GetInstance().GetGlobalSwitchStatus(CAMERA_PERMISSION_NAME));
976 CameraManagerPrivacyClient::GetInstance().MuteCamera(isMuteCam);
977
978 // microphone is not sure
979 ASSERT_EQ(true, PermissionRecordManager::GetInstance().GetGlobalSwitchStatus(LOCATION_PERMISSION_NAME));
980 }
981
982 /*
983 * @tc.name: ShowGlobalDialog001
984 * @tc.desc: ShowGlobalDialog function test
985 * @tc.type: FUNC
986 * @tc.require: issueI5RWXF
987 */
988 HWTEST_F(PermissionRecordManagerTest, ShowGlobalDialog001, TestSize.Level1)
989 {
990 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
991 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
992 EXPECT_EQ(0, SetSelfTokenID(tokenID));
993
994 ASSERT_EQ(true, PermissionRecordManager::GetInstance().ShowGlobalDialog(CAMERA_PERMISSION_NAME));
995 sleep(3); // wait for dialog disappear
996 ASSERT_EQ(true, PermissionRecordManager::GetInstance().ShowGlobalDialog(MICROPHONE_PERMISSION_NAME));
997 sleep(3); // wait for dialog disappear
998 ASSERT_EQ(true, PermissionRecordManager::GetInstance().ShowGlobalDialog(LOCATION_PERMISSION_NAME)); // no dialog
999 }
1000
1001 /*
1002 * @tc.name: MicSwitchChangeListener001
1003 * @tc.desc: NotifyMicChange function test mic global switch is open
1004 * @tc.type: FUNC
1005 * @tc.require: issueI5RWXF
1006 */
1007 HWTEST_F(PermissionRecordManagerTest, MicSwitchChangeListener001, TestSize.Level1)
1008 {
1009 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
1010 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
1011 EXPECT_EQ(0, SetSelfTokenID(tokenID));
1012
1013 bool isMuteMic = AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute();
1014 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(false); // false means open
1015 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1016 g_InfoParms1.instIndex);
1017 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
1018
1019 PermissionRecordManager::GetInstance().NotifyMicChange(true); // fill opCode not mic branch
1020 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
1021 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(isMuteMic);
1022 }
1023
1024 /*
1025 * @tc.name: MicSwitchChangeListener002
1026 * @tc.desc: NotifyMicChange function test mic global switch is open
1027 * @tc.type: FUNC
1028 * @tc.require: issueI5RWXF
1029 */
1030 HWTEST_F(PermissionRecordManagerTest, MicSwitchChangeListener002, TestSize.Level1)
1031 {
1032 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
1033 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
1034 EXPECT_EQ(0, SetSelfTokenID(tokenID));
1035
1036 bool isMuteMic = AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute();
1037 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(false); // false means open
1038 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1039 g_InfoParms1.instIndex);
1040 // status is background
1041 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1042 PermissionRecordManager::GetInstance().NotifyMicChange(true); // fill true status is not inactive branch
1043 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1044 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(isMuteMic);
1045 }
1046
1047 /*
1048 * @tc.name: MicSwitchChangeListener003
1049 * @tc.desc: NotifyMicChange function test mic global switch is close
1050 * @tc.type: FUNC
1051 * @tc.require: issueI5RWXF
1052 */
1053 HWTEST_F(PermissionRecordManagerTest, MicSwitchChangeListener003, TestSize.Level1)
1054 {
1055 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
1056 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
1057 EXPECT_EQ(0, SetSelfTokenID(tokenID));
1058
1059 bool isMuteMic = AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute();
1060 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(true); // true means close
1061 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1062 g_InfoParms1.instIndex);
1063 // status is inactive
1064 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1065 sleep(3); // wait for dialog disappear
1066 PermissionRecordManager::GetInstance().NotifyMicChange(true); // fill true status is inactive branch
1067 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1068 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(isMuteMic);
1069 }
1070
1071 /*
1072 * @tc.name: MicSwitchChangeListener005
1073 * @tc.desc: NotifyMicChange function test mic global switch is close
1074 * @tc.type: FUNC
1075 * @tc.require: issueI5RWXF
1076 */
1077 HWTEST_F(PermissionRecordManagerTest, MicSwitchChangeListener005, TestSize.Level1)
1078 {
1079 AccessTokenID tokenID = AccessTokenKit::GetNativeTokenId("privacy_service");
1080 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
1081 EXPECT_EQ(0, SetSelfTokenID(tokenID));
1082
1083 bool isMuteMic = AudioManagerPrivacyClient::GetInstance().IsMicrophoneMute();
1084 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(true); // true means close
1085 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1086 g_InfoParms1.instIndex);
1087 // status is inactive
1088 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1089 sleep(3); // wait for dialog disappear
1090 PermissionRecordManager::GetInstance().NotifyMicChange(false); // fill false status is inactive branch
1091 ASSERT_EQ(0, PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
1092 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMute(isMuteMic);
1093 }
1094
1095 /*
1096 * @tc.name: TransferOpcodeToPermission001
1097 * @tc.desc: Constant::TransferOpcodeToPermission function test return false
1098 * @tc.type: FUNC
1099 * @tc.require:
1100 */
1101 HWTEST_F(PermissionRecordManagerTest, TransferOpcodeToPermission001, TestSize.Level1)
1102 {
1103 int32_t opCode = static_cast<int32_t>(Constant::OpCode::OP_INVALID);
1104 std::string permissionName;
1105 ASSERT_EQ(false, Constant::TransferOpcodeToPermission(opCode, permissionName));
1106 }
1107
1108 class PermActiveStatusChangeCallbackTest : public PermActiveStatusChangeCallbackStub {
1109 public:
1110 PermActiveStatusChangeCallbackTest() = default;
1111 virtual ~PermActiveStatusChangeCallbackTest() = default;
1112
1113 void ActiveStatusChangeCallback(ActiveChangeResponse& result) override;
1114 };
1115
ActiveStatusChangeCallback(ActiveChangeResponse & result)1116 void PermActiveStatusChangeCallbackTest::ActiveStatusChangeCallback(ActiveChangeResponse& result)
1117 {
1118 }
1119
1120 /*
1121 * @tc.name: OnRemoteDied001
1122 * @tc.desc: PermActiveStatusCallbackDeathRecipient::OnRemoteDied function test
1123 * @tc.type: FUNC
1124 * @tc.require:
1125 */
1126 HWTEST_F(PermissionRecordManagerTest, OnRemoteDied001, TestSize.Level1)
1127 {
1128 auto recipient = std::make_shared<PermActiveStatusCallbackDeathRecipient>();
1129 ASSERT_NE(nullptr, recipient);
1130
1131 recipient->OnRemoteDied(nullptr); // remote is nullptr
1132
1133 // backup
1134 std::vector<CallbackData> callbackDataList = ActiveStatusCallbackManager::GetInstance().callbackDataList_;
1135 ActiveStatusCallbackManager::GetInstance().callbackDataList_.clear();
1136
1137 std::vector<std::string> permList;
1138 sptr<IRemoteObject> callback;
1139 permList.emplace_back("ohos.permission.CAMERA");
1140 wptr<IRemoteObject> remote = new (std::nothrow) PermActiveStatusChangeCallbackTest();
1141 callback = remote.promote();
1142 ActiveStatusCallbackManager::GetInstance().AddCallback(permList, callback);
1143 ASSERT_EQ(static_cast<uint32_t>(1), ActiveStatusCallbackManager::GetInstance().callbackDataList_.size());
1144 recipient->OnRemoteDied(remote); // remote is not nullptr
1145 ASSERT_EQ(static_cast<uint32_t>(0), ActiveStatusCallbackManager::GetInstance().callbackDataList_.size());
1146
1147 // recovery
1148 ActiveStatusCallbackManager::GetInstance().callbackDataList_ = callbackDataList;
1149 }
1150
1151 /*
1152 * @tc.name: RemoveCallback001
1153 * @tc.desc: ActiveStatusCallbackManager::RemoveCallback function test
1154 * @tc.type: FUNC
1155 * @tc.require:
1156 */
1157 HWTEST_F(PermissionRecordManagerTest, RemoveCallback001, TestSize.Level1)
1158 {
1159 std::vector<std::string> permList;
1160 sptr<IRemoteObject> callback;
1161
1162 // callback is null
1163 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID, ActiveStatusCallbackManager::GetInstance().RemoveCallback(nullptr));
1164
1165 // backup
1166 std::vector<CallbackData> callbackDataList = ActiveStatusCallbackManager::GetInstance().callbackDataList_;
1167 sptr<IRemoteObject::DeathRecipient> callbackDeathRecipient =
1168 ActiveStatusCallbackManager::GetInstance().callbackDeathRecipient_;
1169 ActiveStatusCallbackManager::GetInstance().callbackDataList_.clear();
1170 ActiveStatusCallbackManager::GetInstance().callbackDeathRecipient_ = nullptr;
1171
1172 sptr<PermActiveStatusChangeCallbackTest> callback1 = new (std::nothrow) PermActiveStatusChangeCallbackTest();
1173 ASSERT_NE(nullptr, callback1);
1174 sptr<PermActiveStatusChangeCallbackTest> callback2 = new (std::nothrow) PermActiveStatusChangeCallbackTest();
1175 ASSERT_NE(nullptr, callback2);
1176 permList.emplace_back("ohos.permission.CAMERA");
1177 callback = callback1->AsObject();
1178 CallbackData data;
1179 data.permList_ = permList;
1180 data.callbackObject_ = callback;
1181 ActiveStatusCallbackManager::GetInstance().callbackDataList_.emplace_back(data);
1182 // callback != callbackObject_
1183 ASSERT_EQ(RET_SUCCESS, ActiveStatusCallbackManager::GetInstance().RemoveCallback(callback2->AsObject()));
1184
1185 // callback == callbackObject_ + callbackDeathRecipient_ is null
1186 ASSERT_EQ(RET_SUCCESS, ActiveStatusCallbackManager::GetInstance().RemoveCallback(callback));
1187
1188 // recovery
1189 ActiveStatusCallbackManager::GetInstance().callbackDataList_ = callbackDataList;
1190 ActiveStatusCallbackManager::GetInstance().callbackDeathRecipient_ = callbackDeathRecipient;
1191 }
1192
1193 /*
1194 * @tc.name: AddPermissionUsedRecord001
1195 * @tc.desc: PermissionRecordManager::AddPermissionUsedRecord function test
1196 * @tc.type: FUNC
1197 * @tc.require:
1198 */
1199 HWTEST_F(PermissionRecordManagerTest, AddPermissionUsedRecord001, TestSize.Level1)
1200 {
1201 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1202 g_InfoParms1.instIndex);
1203 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1204
1205 std::string permissionName = "com.ohos.test";
1206 int32_t successCount = 1;
1207 int32_t failCount = 0;
1208
1209 ASSERT_EQ(PrivacyError::ERR_PERMISSION_NOT_EXIST, PermissionRecordManager::GetInstance().AddPermissionUsedRecord(
1210 tokenId, permissionName, successCount, failCount)); // invaild permission error
1211 }
1212
1213 /*
1214 * @tc.name: AddPermissionUsedRecord002
1215 * @tc.desc: PermissionRecordManager::AddPermissionUsedRecord function test
1216 * @tc.type: FUNC
1217 * @tc.require:
1218 */
1219 HWTEST_F(PermissionRecordManagerTest, AddPermissionUsedRecord002, TestSize.Level1)
1220 {
1221 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1222 g_InfoParms1.instIndex);
1223 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1224
1225 std::string permissionName = "ohos.permission.READ_MEDIA";
1226 int32_t successCount = 0;
1227 int32_t failCount = 0;
1228
1229 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID, PermissionRecordManager::GetInstance().AddPermissionUsedRecord(
1230 tokenId, permissionName, successCount, failCount));
1231 }
1232
1233 /*
1234 * @tc.name: RemovePermissionUsedRecords001
1235 * @tc.desc: PermissionRecordManager::RemovePermissionUsedRecords function test
1236 * @tc.type: FUNC
1237 * @tc.require:
1238 */
1239 HWTEST_F(PermissionRecordManagerTest, RemovePermissionUsedRecords001, TestSize.Level1)
1240 {
1241 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1242 g_InfoParms1.instIndex);
1243 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1244
1245 std::string deviceID;
1246 PermissionRecordManager::GetInstance().RemovePermissionUsedRecords(tokenId, deviceID); // deviceID is empty
1247
1248 deviceID = "what's is";
1249 // deviceID is not empty, but device which deps on tokenID is empty not equals deviceID
1250 PermissionRecordManager::GetInstance().RemovePermissionUsedRecords(static_cast<AccessTokenID>(123), deviceID);
1251
1252 deviceID = "0";
1253 // deviceID is not empty, device which deps on tokenID is not empty and equals deviceID
1254 PermissionRecordManager::GetInstance().RemovePermissionUsedRecords(tokenId, deviceID);
1255 }
1256
1257 /*
1258 * @tc.name: UpdateRecords001
1259 * @tc.desc: PermissionRecordManager::UpdateRecords function test
1260 * @tc.type: FUNC
1261 * @tc.require:
1262 */
1263 HWTEST_F(PermissionRecordManagerTest, UpdateRecords001, TestSize.Level1)
1264 {
1265 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1266 g_InfoParms1.instIndex);
1267 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1268
1269 int32_t flag = 0;
1270 PermissionUsedRecord inBundleRecord;
1271 PermissionUsedRecord outBundleRecord;
1272
1273 inBundleRecord.lastAccessTime = 1000;
1274 outBundleRecord.lastAccessTime = 900;
1275 // inBundleRecord.lastAccessTime > outBundleRecord.lastAccessTime && flag == 0
1276 PermissionRecordManager::GetInstance().UpdateRecords(flag, inBundleRecord, outBundleRecord);
1277
1278 UsedRecordDetail detail;
1279 detail.accessDuration = 10;
1280 detail.status = PERM_ACTIVE_IN_FOREGROUND;
1281 detail.timestamp = 10000;
1282 flag = 1;
1283 inBundleRecord.lastRejectTime = 1000;
1284 inBundleRecord.accessRecords.emplace_back(detail);
1285 inBundleRecord.rejectRecords.emplace_back(detail);
1286 // flag != 0 && inBundleRecord.lastRejectTime > 0 && outBundleRecord.accessRecords.size() < 10
1287 // && inBundleRecord.lastRejectTime > 0 && outBundleRecord.rejectRecords.size() < 10
1288 PermissionRecordManager::GetInstance().UpdateRecords(flag, inBundleRecord, outBundleRecord);
1289
1290 std::vector<UsedRecordDetail> accessRecords(11, detail);
1291 outBundleRecord.accessRecords = accessRecords;
1292 outBundleRecord.rejectRecords = accessRecords;
1293 // flag != 0 && inBundleRecord.lastRejectTime > 0 && outBundleRecord.accessRecords.size() >= 10
1294 // && inBundleRecord.lastRejectTime > 0 && outBundleRecord.rejectRecords.size() >= 10
1295 PermissionRecordManager::GetInstance().UpdateRecords(flag, inBundleRecord, outBundleRecord);
1296
1297 inBundleRecord.lastAccessTime = 0;
1298 inBundleRecord.lastRejectTime = 0;
1299 // flag != 0 && inBundleRecord.lastRejectTime <= 0 && outBundleRecord.accessRecords.size() >= 10
1300 // && inBundleRecord.lastRejectTime <= 0 && outBundleRecord.rejectRecords.size() >= 10
1301 PermissionRecordManager::GetInstance().UpdateRecords(flag, inBundleRecord, outBundleRecord);
1302 }
1303
1304 /*
1305 * @tc.name: RemoveRecordFromStartList001
1306 * @tc.desc: PermissionRecordManager::RemoveRecordFromStartList function test
1307 * @tc.type: FUNC
1308 * @tc.require:
1309 */
1310 HWTEST_F(PermissionRecordManagerTest, RemoveRecordFromStartList001, TestSize.Level1)
1311 {
1312 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1313 g_InfoParms1.instIndex);
1314 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1315
1316 ASSERT_EQ(Constant::SUCCESS,
1317 PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1318 PermissionRecord record;
1319 record.tokenId = tokenId;
1320 record.opCode = Constant::OP_READ_MEDIA;
1321 // it->opcode == record.opcode && it->tokenId == record.tokenId
1322 PermissionRecordManager::GetInstance().RemoveRecordFromStartList(record); // record in cache has delete
1323
1324 ASSERT_EQ(Constant::SUCCESS,
1325 PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1326 record.tokenId = 123; // 123 is random input
1327 // it->opcode == record.opcode && it->tokenId != record.tokenId
1328 PermissionRecordManager::GetInstance().RemoveRecordFromStartList(record);
1329
1330 record.opCode = Constant::OP_MICROPHONE;
1331 // it->opcode != record.opcode && it->tokenId != record.tokenId
1332 PermissionRecordManager::GetInstance().RemoveRecordFromStartList(record);
1333
1334 ASSERT_EQ(Constant::SUCCESS,
1335 PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1336 }
1337
1338 /*
1339 * @tc.name: StartUsingPermission001
1340 * @tc.desc: PermissionRecordManager::StartUsingPermission function test
1341 * @tc.type: FUNC
1342 * @tc.require:
1343 */
1344 HWTEST_F(PermissionRecordManagerTest, StartUsingPermission001, TestSize.Level1)
1345 {
1346 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1347 g_InfoParms1.instIndex);
1348 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1349
1350 // tokenId invaild
1351 ASSERT_EQ(PrivacyError::ERR_TOKENID_NOT_EXIST, PermissionRecordManager::GetInstance().StartUsingPermission(
1352 static_cast<AccessTokenID>(123), "ohos.permission.READ_MEDIA"));
1353
1354 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().StartUsingPermission(
1355 tokenId, "ohos.permission.READ_MEDIA"));
1356 ASSERT_EQ(PrivacyError::ERR_PERMISSION_ALREADY_START_USING,
1357 PermissionRecordManager::GetInstance().StartUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1358
1359 ASSERT_EQ(Constant::SUCCESS,
1360 PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1361 }
1362
1363 /*
1364 * @tc.name: StopUsingPermission001
1365 * @tc.desc: PermissionRecordManager::StopUsingPermission function test
1366 * @tc.type: FUNC
1367 * @tc.require:
1368 */
1369 HWTEST_F(PermissionRecordManagerTest, StopUsingPermission001, TestSize.Level1)
1370 {
1371 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1372 g_InfoParms1.instIndex);
1373 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1374
1375 // tokenId invaild
1376 ASSERT_EQ(PrivacyError::ERR_TOKENID_NOT_EXIST, PermissionRecordManager::GetInstance().StopUsingPermission(
1377 static_cast<AccessTokenID>(0), "ohos.permission.READ_MEDIA"));
1378
1379 // permission invaild
1380 ASSERT_EQ(PrivacyError::ERR_PERMISSION_NOT_EXIST, PermissionRecordManager::GetInstance().StopUsingPermission(
1381 tokenId, "ohos.permission.test"));
1382
1383 // not start using
1384 ASSERT_EQ(PrivacyError::ERR_PERMISSION_NOT_START_USING,
1385 PermissionRecordManager::GetInstance().StopUsingPermission(tokenId, "ohos.permission.READ_MEDIA"));
1386 }
1387
1388 /*
1389 * @tc.name: PermissionListFilter001
1390 * @tc.desc: PermissionRecordManager::PermissionListFilter function test
1391 * @tc.type: FUNC
1392 * @tc.require:
1393 */
1394 HWTEST_F(PermissionRecordManagerTest, PermissionListFilter001, TestSize.Level1)
1395 {
1396 std::vector<std::string> listSrc;
1397 std::vector<std::string> listRes;
1398
1399 listSrc.emplace_back("com.ohos.TEST");
1400 // GetDefPermission != Constant::SUCCESS && listRes is empty && listSrc is not empty
1401 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID,
1402 PermissionRecordManager::GetInstance().PermissionListFilter(listSrc, listRes));
1403
1404 listRes.emplace_back("com.ohos.TEST");
1405 // listRes is not empty
1406 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().PermissionListFilter(listSrc, listRes));
1407
1408 listSrc.clear();
1409 listRes.clear();
1410 // listRes is empty && listSrc is empty
1411 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().PermissionListFilter(listSrc, listRes));
1412 }
1413
1414 /*
1415 * @tc.name: RegisterPermActiveStatusCallback003
1416 * @tc.desc: PermissionRecordManager::RegisterPermActiveStatusCallback function test
1417 * @tc.type: FUNC
1418 * @tc.require:
1419 */
1420 HWTEST_F(PermissionRecordManagerTest, RegisterPermActiveStatusCallback003, TestSize.Level1)
1421 {
1422 std::vector<std::string> permList;
1423
1424 permList.emplace_back("com.ohos.TEST");
1425 // GetDefPermission != Constant::SUCCESS && listRes is empty && listSrc is not empty
1426 ASSERT_EQ(PrivacyError::ERR_PARAM_INVALID,
1427 PermissionRecordManager::GetInstance().RegisterPermActiveStatusCallback(permList, nullptr));
1428 }
1429
1430 /*
1431 * @tc.name: Unregister001
1432 * @tc.desc: PermissionRecordManager::Unregister function test
1433 * @tc.type: FUNC
1434 * @tc.require:
1435 */
1436 HWTEST_F(PermissionRecordManagerTest, Unregister001, TestSize.Level1)
1437 {
1438 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1439 g_InfoParms1.instIndex);
1440 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1441
1442 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().StartUsingPermission(
1443 tokenId, "ohos.permission.READ_MEDIA"));
1444
1445 PermissionRecordManager::GetInstance().Unregister();
1446 PermissionRecordManager::GetInstance().Unregister();
1447
1448 ASSERT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().StopUsingPermission(
1449 tokenId, "ohos.permission.READ_MEDIA"));
1450 }
1451
1452 /*
1453 * @tc.name: TranslationIntoPermissionRecord001
1454 * @tc.desc: PermissionRecord::TranslationIntoPermissionRecord function test
1455 * @tc.type: FUNC
1456 * @tc.require:
1457 */
1458 HWTEST_F(PermissionRecordManagerTest, TranslationIntoPermissionRecord001, TestSize.Level1)
1459 {
1460 GenericValues values;
1461 values.Put(PrivacyFiledConst::FIELD_TOKEN_ID, static_cast<int32_t>(10086));
1462 values.Put(PrivacyFiledConst::FIELD_OP_CODE, 0);
1463 values.Put(PrivacyFiledConst::FIELD_STATUS, 0);
1464 values.Put(PrivacyFiledConst::FIELD_TIMESTAMP, static_cast<int64_t>(20210109));
1465 values.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, static_cast<int64_t>(1));
1466 values.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 10);
1467 values.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 100);
1468 values.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED);
1469 PermissionRecord record;
1470 PermissionRecord::TranslationIntoPermissionRecord(values, record);
1471 ASSERT_EQ(static_cast<int32_t>(10086), record.tokenId);
1472 ASSERT_EQ(10, record.accessCount);
1473 ASSERT_EQ(100, record.rejectCount);
1474 ASSERT_EQ(static_cast<int64_t>(20210109), record.timestamp);
1475 ASSERT_EQ(static_cast<int64_t>(1), record.accessDuration);
1476 ASSERT_EQ(LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED, record.lockScreenStatus);
1477 }
1478
1479 /*
1480 * @tc.name: RecordMergeCheck001
1481 * @tc.desc: PermissionUsedRecordCache::RecordMergeCheck function test
1482 * @tc.type: FUNC
1483 * @tc.require:
1484 */
1485 HWTEST_F(PermissionRecordManagerTest, RecordMergeCheck001, TestSize.Level1)
1486 {
1487 AccessTokenID tokenID1 = 123; // random input
1488 AccessTokenID tokenID2 = 124; // random input
1489 int32_t opCode1 = static_cast<int32_t>(Constant::OpCode::OP_READ_CALENDAR);
1490 int32_t opCode2 = static_cast<int32_t>(Constant::OpCode::OP_WRITE_CALENDAR);
1491 int32_t status1 = static_cast<int32_t>(ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
1492 int32_t status2 = static_cast<int32_t>(ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND);
1493 int32_t lockScreenStatus1 = static_cast<int32_t>(LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED);
1494 int32_t lockScreenStatus2 = static_cast<int32_t>(LockScreenStatusChangeType::PERM_ACTIVE_IN_LOCKED);
1495
1496 int64_t timestamp1 = TimeUtil::GetCurrentTimestamp();
1497 PermissionRecord record1 = {
1498 .timestamp = timestamp1,
1499 };
1500 int64_t timestamp2 = timestamp1 + 61 * 1000; // more than 1 min
1501 PermissionRecord record2 = {
1502 .timestamp = timestamp2,
1503 };
1504
1505 // not in the same minute
1506 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1507
1508 record2.timestamp = timestamp1; // set the same timestamp to make sure the same minute
1509 record1.tokenId = tokenID1;
1510 record2.tokenId = tokenID2;
1511 // same minute + different tokenID
1512 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1513
1514 record2.tokenId = tokenID1;
1515 record1.opCode = opCode1;
1516 record2.opCode = opCode2;
1517 // same minute + same tokenID + different opcode
1518 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1519
1520 record2.opCode = opCode1;
1521 record1.status = status1;
1522 record2.status = status2;
1523 // same minute + same tokenID + same opcode + different status
1524 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1525
1526 record2.status = status1;
1527 record1.lockScreenStatus = lockScreenStatus1;
1528 record2.lockScreenStatus = lockScreenStatus2;
1529 // same minute + same tokenID + same opcode + same status + different lockScreenStatus
1530 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1531 }
1532
1533 /*
1534 * @tc.name: RecordMergeCheck002
1535 * @tc.desc: PermissionUsedRecordCache::RecordMergeCheck function test
1536 * @tc.type: FUNC
1537 * @tc.require:
1538 */
1539 HWTEST_F(PermissionRecordManagerTest, RecordMergeCheck002, TestSize.Level1)
1540 {
1541 int32_t accessCount1 = 10; // random input
1542 int32_t accessCount2 = 0;
1543 int32_t accessCount3 = 9; // random input, diff from accessCount1
1544 int32_t rejectCount1 = 11; // random input
1545 int32_t rejectCount2 = 0;
1546 int32_t rejectCount3 = 8; // random input, diff from accessCount1
1547
1548 int64_t timestamp = TimeUtil::GetCurrentTimestamp();
1549
1550 // same minute + same tokenID + same opcode + same status + same lockScreenStatus
1551 PermissionRecord record1 = g_record;
1552 record1.timestamp = timestamp;
1553 PermissionRecord record2 = g_record;
1554 record2.timestamp = timestamp + 1;
1555
1556 record1.accessCount = accessCount1;
1557 record2.accessCount = accessCount2;
1558 // different accessCount type
1559 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1560
1561 record1.accessCount = accessCount2;
1562 record2.accessCount = accessCount1;
1563 // different accessCount type
1564 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1565
1566 record2.accessCount = accessCount2;
1567 record1.rejectCount = rejectCount1;
1568 record2.rejectCount = rejectCount2;
1569 // different rejectCount type
1570 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1571
1572 record1.rejectCount = rejectCount2;
1573 record2.rejectCount = rejectCount1;
1574 // different rejectCount type
1575 ASSERT_EQ(false, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1576
1577 record2.rejectCount = rejectCount2;
1578 // same accessCount type + same rejectCount type
1579 ASSERT_EQ(true, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1580
1581 record1.accessCount = accessCount1;
1582 record2.accessCount = accessCount3;
1583 record1.rejectCount = rejectCount2;
1584 record2.rejectCount = rejectCount2;
1585 // same accessCount type + same rejectCount type
1586 ASSERT_EQ(true, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1587
1588 record1.accessCount = accessCount2;
1589 record2.accessCount = accessCount2;
1590 record1.rejectCount = rejectCount1;
1591 record2.rejectCount = rejectCount3;
1592 // same accessCount type + same rejectCount type
1593 ASSERT_EQ(true, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1594
1595 record1.accessCount = accessCount1;
1596 record2.accessCount = accessCount3;
1597 record1.rejectCount = rejectCount1;
1598 record2.rejectCount = rejectCount3;
1599 // same accessCount type + same rejectCount type
1600 ASSERT_EQ(true, PermissionUsedRecordCache::GetInstance().RecordMergeCheck(record1, record2));
1601 }
1602
1603 /*
1604 * @tc.name: GetRecords001
1605 * @tc.desc: PermissionUsedRecordCache::GetRecords function test
1606 * @tc.type: FUNC
1607 * @tc.require:
1608 */
1609 HWTEST_F(PermissionRecordManagerTest, GetRecords001, TestSize.Level1)
1610 {
1611 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1612 g_InfoParms1.instIndex);
1613 ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1614 g_record.tokenId = tokenId;
1615 PermissionUsedRecordCache::GetInstance().AddRecordToBuffer(g_record);
1616 std::vector<std::string> permissionList;
1617 GenericValues andConditionValues;
1618 std::vector<GenericValues> findRecordsValues;
1619 PermissionUsedRecordCache::GetInstance().GetRecords(permissionList, andConditionValues, findRecordsValues, 0);
1620 ASSERT_EQ(static_cast<size_t>(0), findRecordsValues.size());
1621 }
1622
AddRecord(int32_t num,std::vector<GenericValues> & values)1623 void AddRecord(int32_t num, std::vector<GenericValues>& values)
1624 {
1625 for (int32_t i = 0; i < num; i++) {
1626 GenericValues value;
1627 value.Put(PrivacyFiledConst::FIELD_TOKEN_ID, i);
1628 value.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_LOCATION);
1629 value.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND);
1630 value.Put(PrivacyFiledConst::FIELD_TIMESTAMP, i);
1631 value.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, i);
1632 value.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
1633 value.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
1634 value.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED);
1635 values.emplace_back(value);
1636 }
1637
1638 ASSERT_EQ(static_cast<size_t>(num), values.size());
1639 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
1640 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
1641 sleep(1); // wait record store in database
1642 }
1643
1644 /**
1645 * @tc.name: GetRecords003
1646 * @tc.desc: test query record return max count 500.
1647 * @tc.type: FUNC
1648 * @tc.require: issueI5P4IU
1649 */
1650 HWTEST_F(PermissionRecordManagerTest, GetRecords003, TestSize.Level1)
1651 {
1652 std::vector<GenericValues> values;
1653 int32_t num = MAX_DETAIL_NUM + 1;
1654 AddRecord(num, values);
1655
1656 PermissionUsedRequest request;
1657 request.isRemote = false;
1658 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_DETAIL;
1659
1660 GenericValues andConditionValues;
1661 std::vector<GenericValues> findRecordsValues;
1662 PermissionUsedRecordCache::GetInstance().GetRecords(request.permissionList, andConditionValues, findRecordsValues,
1663 MAX_DETAIL_NUM);
1664 EXPECT_EQ(static_cast<size_t>(MAX_DETAIL_NUM), findRecordsValues.size());
1665
1666 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
1667 for (const auto& value : values) {
1668 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Remove(type, value));
1669 }
1670 }
1671
GeneratePermissionRecord(AccessTokenID tokenID)1672 static void GeneratePermissionRecord(AccessTokenID tokenID)
1673 {
1674 int64_t timestamp = TimeUtil::GetCurrentTimestamp();
1675
1676 GenericValues value1;
1677 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, static_cast<int32_t>(tokenID));
1678 value1.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_LOCATION);
1679 value1.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND);
1680 value1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, timestamp - THREE_SECOND);
1681 value1.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 1);
1682 value1.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
1683 value1.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
1684 value1.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED);
1685 GenericValues value2;
1686 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, static_cast<int32_t>(tokenID));
1687 value2.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_LOCATION);
1688 value2.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
1689 value2.Put(PrivacyFiledConst::FIELD_TIMESTAMP, timestamp - TWO_SECOND);
1690 value2.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 1);
1691 value2.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
1692 value2.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
1693 value2.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_UNLOCKED);
1694 GenericValues value3;
1695 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, static_cast<int32_t>(tokenID));
1696 value3.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_LOCATION);
1697 value3.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_BACKGROUND);
1698 value3.Put(PrivacyFiledConst::FIELD_TIMESTAMP, timestamp - ONE_SECOND);
1699 value3.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 1);
1700 value3.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
1701 value3.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
1702 value3.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_LOCKED);
1703 GenericValues value4;
1704 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, static_cast<int32_t>(tokenID));
1705 value4.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_LOCATION);
1706 value4.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
1707 value4.Put(PrivacyFiledConst::FIELD_TIMESTAMP, timestamp);
1708 value4.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 1);
1709 value4.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
1710 value4.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
1711 value4.Put(PrivacyFiledConst::FIELD_LOCKSCREEN_STATUS, LockScreenStatusChangeType::PERM_ACTIVE_IN_LOCKED);
1712
1713 std::vector<GenericValues> values;
1714 values.emplace_back(value1);
1715 values.emplace_back(value2);
1716 values.emplace_back(value3);
1717 values.emplace_back(value4);
1718
1719 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
1720 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
1721 sleep(1); // wait record store in database
1722 }
1723
1724 /**
1725 * @tc.name: GetRecords004
1726 * @tc.desc: test query record flag 2 | 3 | 4 | 5
1727 * @tc.type: FUNC
1728 * @tc.require:
1729 */
1730 HWTEST_F(PermissionRecordManagerTest, GetRecords004, TestSize.Level1)
1731 {
1732 AccessTokenID tokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1733 g_InfoParms1.instIndex);
1734 ASSERT_NE(static_cast<AccessTokenID>(0), tokenID);
1735
1736 GeneratePermissionRecord(tokenID);
1737 PermissionRecordManager::GetInstance().SetDefaultConfigValue();
1738
1739 PermissionUsedRequest request;
1740 request.tokenId = tokenID;
1741 request.isRemote = false;
1742 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_SCREEN_LOCKED;
1743
1744 PermissionUsedResult result1;
1745 EXPECT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result1));
1746 EXPECT_EQ(static_cast<size_t>(1), result1.bundleRecords.size());
1747 EXPECT_EQ(static_cast<uint32_t>(tokenID), result1.bundleRecords[0].tokenId);
1748 EXPECT_EQ(static_cast<size_t>(1), result1.bundleRecords[0].permissionRecords.size());
1749 EXPECT_EQ(2, result1.bundleRecords[0].permissionRecords[0].accessCount);
1750
1751 PermissionUsedResult result2;
1752 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_SCREEN_UNLOCKED;
1753 EXPECT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result2));
1754 EXPECT_EQ(static_cast<size_t>(1), result2.bundleRecords.size());
1755 EXPECT_EQ(static_cast<uint32_t>(tokenID), result2.bundleRecords[0].tokenId);
1756 EXPECT_EQ(static_cast<size_t>(1), result2.bundleRecords[0].permissionRecords.size());
1757 EXPECT_EQ(2, result2.bundleRecords[0].permissionRecords[0].accessCount);
1758
1759 PermissionUsedResult result3;
1760 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_APP_FOREGROUND;
1761 EXPECT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result3));
1762 EXPECT_EQ(static_cast<size_t>(1), result3.bundleRecords.size());
1763 EXPECT_EQ(static_cast<uint32_t>(tokenID), result3.bundleRecords[0].tokenId);
1764 EXPECT_EQ(static_cast<size_t>(1), result3.bundleRecords[0].permissionRecords.size());
1765 EXPECT_EQ(2, result3.bundleRecords[0].permissionRecords[0].accessCount);
1766
1767 PermissionUsedResult result4;
1768 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_APP_BACKGROUND;
1769 EXPECT_EQ(Constant::SUCCESS, PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request, result4));
1770 EXPECT_EQ(static_cast<size_t>(1), result4.bundleRecords.size());
1771 EXPECT_EQ(static_cast<uint32_t>(tokenID), result4.bundleRecords[0].tokenId);
1772 EXPECT_EQ(static_cast<size_t>(1), result4.bundleRecords[0].permissionRecords.size());
1773 EXPECT_EQ(2, result4.bundleRecords[0].permissionRecords[0].accessCount);
1774 }
1775
1776 /*
1777 * @tc.name: GetFromPersistQueueAndDatabase001
1778 * @tc.desc: PermissionUsedRecordCache::GetFromPersistQueueAndDatabase function test
1779 * @tc.type: FUNC
1780 * @tc.require:
1781 */
1782 HWTEST_F(PermissionRecordManagerTest, GetFromPersistQueueAndDatabase001, TestSize.Level1)
1783 {
1784 const std::set<int32_t> opCodeList;
1785 const GenericValues andConditionValues;
1786 std::vector<GenericValues> findRecordsValues;
1787 PermissionUsedRecordCache::GetInstance().GetFromPersistQueueAndDatabase(
1788 opCodeList, andConditionValues, findRecordsValues, 0);
1789 ASSERT_EQ(static_cast<size_t>(0), findRecordsValues.size());
1790 }
1791
1792 /*
1793 * @tc.name: DeepCopyFromHead001
1794 * @tc.desc: PermissionUsedRecordCache::DeepCopyFromHead function test
1795 * @tc.type: FUNC
1796 * @tc.require:
1797 */
1798 HWTEST_F(PermissionRecordManagerTest, DeepCopyFromHead001, TestSize.Level1)
1799 {
1800 std::shared_ptr<PermissionUsedRecordNode> head = std::make_shared<PermissionUsedRecordNode>();
1801 std::shared_ptr<PermissionUsedRecordNode> node1 = std::make_shared<PermissionUsedRecordNode>();
1802 std::shared_ptr<PermissionUsedRecordNode> node2 = std::make_shared<PermissionUsedRecordNode>();
1803 std::shared_ptr<PermissionUsedRecordNode> node3 = std::make_shared<PermissionUsedRecordNode>();
1804 std::shared_ptr<PermissionUsedRecordNode> node4 = std::make_shared<PermissionUsedRecordNode>();
1805
1806 head->next = node1;
1807
1808 node1->pre.lock() = head;
1809 node1->next = node2;
1810 node1->record = g_recordA1;
1811
1812 node2->pre.lock() = node1;
1813 node2->next = node3;
1814 node2->record = g_recordA2;
1815
1816 node3->pre.lock() = node2;
1817 node3->next = node4;
1818 node3->record = g_recordB1;
1819
1820 node4->pre.lock() = node3;
1821 node4->next = nullptr;
1822 node4->record = g_recordB2;
1823
1824 ASSERT_EQ(head->next->record.opCode, g_recordA1.opCode);
1825 ASSERT_EQ(head->next->next->record.opCode, g_recordA2.opCode);
1826 ASSERT_EQ(head->next->next->next->record.opCode, g_recordB1.opCode);
1827 ASSERT_EQ(head->next->next->next->next->record.opCode, g_recordB2.opCode);
1828
1829 std::shared_ptr<PermissionUsedRecordNode> copyHead = std::make_shared<PermissionUsedRecordNode>();
1830 PermissionUsedRecordCache::GetInstance().DeepCopyFromHead(nullptr, copyHead, DEEP_COPY_NUM);
1831 ASSERT_EQ(copyHead->next, nullptr);
1832 PermissionUsedRecordCache::GetInstance().DeepCopyFromHead(head, copyHead, 0);
1833 ASSERT_EQ(copyHead->next, nullptr);
1834
1835 PermissionUsedRecordCache::GetInstance().DeepCopyFromHead(head, copyHead, DEEP_COPY_NUM);
1836
1837 ASSERT_EQ(copyHead->record.opCode, head->record.opCode);
1838 ASSERT_EQ(copyHead->next->record.opCode, g_recordA1.opCode);
1839 ASSERT_EQ(copyHead->next->next->record.opCode, g_recordA2.opCode);
1840 ASSERT_EQ(copyHead->next->next->next->record.opCode, g_recordB1.opCode);
1841 ASSERT_EQ(copyHead->next->next->next->next->record.opCode, g_recordB2.opCode);
1842 }
1843
1844 /*
1845 * @tc.name: RecordManagerTest001
1846 * @tc.desc: GetAllRecordValuesByKey normal case
1847 * @tc.type: FUNC
1848 * @tc.require:
1849 */
1850 HWTEST_F(PermissionRecordManagerTest, RecordManagerTest001, TestSize.Level1)
1851 {
1852 std::vector<GenericValues> resultValues;
1853 EXPECT_EQ(true, PermissionRecordRepository::GetInstance().GetAllRecordValuesByKey(
1854 PrivacyFiledConst::FIELD_TOKEN_ID, resultValues));
1855 }
1856
1857 /*
1858 * @tc.name: PermissionUsedRecordCacheTest001
1859 * @tc.desc: PermissionUsedRecordCache Func test
1860 * @tc.type: FUNC
1861 * @tc.require:
1862 */
1863 HWTEST_F(PermissionRecordManagerTest, PermissionUsedRecordCacheTest001, TestSize.Level1)
1864 {
1865 std::set<AccessTokenID> tokenIdList;
1866 PermissionUsedRecordCache::GetInstance().FindTokenIdList(tokenIdList);
1867 PermissionRecordManager::GetInstance().GetLocalRecordTokenIdList(tokenIdList);
1868 std::set<int32_t> opCodeList;
1869 GenericValues andConditionValues;
1870 std::vector<GenericValues> findRecordsValues;
1871 int32_t cache2QueryCount = 0; // 0 is a invalid input
1872 PermissionUsedRecordCache::GetInstance().GetFromPersistQueueAndDatabase(opCodeList,
1873 andConditionValues, findRecordsValues, cache2QueryCount);
1874
1875 opCodeList.insert(0); // 0 is a test opcode
1876 PermissionRecord record = {
1877 .tokenId = g_selfTokenId,
1878 .opCode = -1, // -1 is a test opcode
1879 };
1880 EXPECT_FALSE(PermissionUsedRecordCache::GetInstance().RecordCompare(g_selfTokenId,
1881 opCodeList, andConditionValues, record));
1882 }
1883
1884 /**
1885 * @tc.name: GetRecordsFromLocalDBTest001
1886 * @tc.desc: test GetRecordsFromLocalDB: token = 0
1887 * @tc.type: FUNC
1888 * @tc.require:
1889 */
1890 HWTEST_F(PermissionRecordManagerTest, GetRecordsFromLocalDBTest001, TestSize.Level1)
1891 {
1892 PermissionUsedRequest request;
1893 request.tokenId = g_selfTokenId;
1894 request.isRemote = false;
1895 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_SCREEN_LOCKED;
1896 PermissionUsedResult result;
1897 EXPECT_TRUE(PermissionRecordManager::GetInstance().GetRecordsFromLocalDB(request, result));
1898 }
1899
1900 /**
1901 * @tc.name: GetRecordsFromLocalDBTest002
1902 * @tc.desc: test GetRecordsFromLocalDB: beginTimeMillis = -1
1903 * @tc.type: FUNC
1904 * @tc.require:
1905 */
1906 HWTEST_F(PermissionRecordManagerTest, GetRecordsFromLocalDBTest002, TestSize.Level1)
1907 {
1908 PermissionUsedRequest request;
1909 request.tokenId = g_selfTokenId;
1910 request.isRemote = false;
1911 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_SCREEN_LOCKED;
1912 request.beginTimeMillis = -1; // -1 is a invalid input
1913 PermissionUsedResult result;
1914 EXPECT_EQ(false, PermissionRecordManager::GetInstance().GetRecordsFromLocalDB(request, result));
1915 }
1916
1917 /**
1918 * @tc.name: GetRecordsFromLocalDBTest003
1919 * @tc.desc: test GetRecords: not exist OpCode
1920 * @tc.type: FUNC
1921 * @tc.require:
1922 */
1923 HWTEST_F(PermissionRecordManagerTest, RecordConverage011, TestSize.Level1)
1924 {
1925 PermissionUsedRequest request;
1926 request.tokenId = g_selfTokenId;
1927 request.isRemote = false;
1928 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_SUMMARY_IN_SCREEN_LOCKED;
1929 request.beginTimeMillis = -1; // -1 is a invalid input
1930
1931 std::vector<GenericValues> recordValues;
1932 GenericValues tmp;
1933 int64_t val = 1; // 1 is a test value
1934 int32_t notExistOpCode = -2; // -2 is a not exist OpCode
1935 tmp.Put(PrivacyFiledConst::FIELD_TIMESTAMP, val);
1936 tmp.Put(PrivacyFiledConst::FIELD_OP_CODE, notExistOpCode);
1937 recordValues.emplace_back(tmp);
1938 int32_t flag = 1; // 1 is a test flag
1939 BundleUsedRecord bundleRecord;
1940 PermissionUsedResult result;
1941 PermissionRecordManager::GetInstance().GetRecords(flag, recordValues, bundleRecord, result);
1942 }
1943 } // namespace AccessToken
1944 } // namespace Security
1945 } // namespace OHOS
1946