1 /*
2  * Copyright (c) 2021-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 "accesstoken_info_manager_test.h"
17 
18 #include <gmock/gmock.h>
19 
20 #include "accesstoken_id_manager.h"
21 #include "access_token_error.h"
22 #define private public
23 #include "accesstoken_callback_stubs.h"
24 #include "accesstoken_info_manager.h"
25 #include "accesstoken_remote_token_manager.h"
26 #include "libraryloader.h"
27 #include "token_field_const.h"
28 #ifdef TOKEN_SYNC_ENABLE
29 #include "token_sync_kit_loader.h"
30 #endif
31 #include "permission_definition_cache.h"
32 #include "permission_manager.h"
33 #include "token_modify_notifier.h"
34 #undef private
35 #include "permission_validator.h"
36 #include "string_ex.h"
37 #include "token_setproc.h"
38 
39 using namespace testing::ext;
40 using namespace OHOS;
41 
42 namespace OHOS {
43 namespace Security {
44 namespace AccessToken {
45 namespace {
46 static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {
47     LOG_CORE, SECURITY_DOMAIN_ACCESSTOKEN, "AccessTokenInfoManagerTest"
48 };
49 static constexpr int32_t DEFAULT_API_VERSION = 8;
50 static constexpr int USER_ID = 100;
51 static constexpr int INST_INDEX = 0;
52 static PermissionDef g_infoManagerTestPermDef1 = {
53     .permissionName = "open the door",
54     .bundleName = "accesstoken_test",
55     .grantMode = 1,
56     .availableLevel = APL_NORMAL,
57     .provisionEnable = false,
58     .distributedSceneEnable = false,
59     .label = "label",
60     .labelId = 1,
61     .description = "open the door",
62     .descriptionId = 1
63 };
64 
65 static PermissionDef g_infoManagerTestPermDef2 = {
66     .permissionName = "break the door",
67     .bundleName = "accesstoken_test",
68     .grantMode = 1,
69     .availableLevel = APL_NORMAL,
70     .provisionEnable = false,
71     .distributedSceneEnable = false,
72     .label = "label",
73     .labelId = 1,
74     .description = "break the door",
75     .descriptionId = 1
76 };
77 
78 static PermissionStateFull g_infoManagerTestState1 = {
79     .permissionName = "open the door",
80     .isGeneral = true,
81     .resDeviceID = {"local"},
82     .grantStatus = {1},
83     .grantFlags = {1}
84 };
85 
86 static PermissionStateFull g_infoManagerTestState2 = {
87     .permissionName = "break the door",
88     .isGeneral = false,
89     .resDeviceID = {"device 1", "device 2"},
90     .grantStatus = {1, 3},
91     .grantFlags = {1, 2}
92 };
93 
94 static HapInfoParams g_infoManagerTestInfoParms = {
95     .userID = 1,
96     .bundleName = "accesstoken_test",
97     .instIndex = 0,
98     .appIDDesc = "testtesttesttest"
99 };
100 
101 static HapPolicyParams g_infoManagerTestPolicyPrams1 = {
102     .apl = APL_NORMAL,
103     .domain = "test.domain",
104     .permList = {g_infoManagerTestPermDef1, g_infoManagerTestPermDef2},
105     .permStateList = {g_infoManagerTestState1, g_infoManagerTestState2}
106 };
107 
108 static PermissionStateFull g_permState = {
109     .permissionName = "ohos.permission.CAMERA",
110     .isGeneral = false,
111     .resDeviceID = {"dev-001", "dev-001"},
112     .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
113     .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
114 };
115 
116 #ifdef TOKEN_SYNC_ENABLE
117 static const int32_t FAKE_SYNC_RET = 0xabcdef;
118 class TokenSyncCallbackMock : public TokenSyncCallbackStub {
119 public:
120     TokenSyncCallbackMock() = default;
121     virtual ~TokenSyncCallbackMock() = default;
122 
123     MOCK_METHOD(int32_t, GetRemoteHapTokenInfo, (const std::string&, AccessTokenID), (override));
124     MOCK_METHOD(int32_t, DeleteRemoteHapTokenInfo, (AccessTokenID), (override));
125     MOCK_METHOD(int32_t, UpdateRemoteHapTokenInfo, (const HapTokenInfoForSync&), (override));
126 };
127 #endif
128 }
129 
SetUpTestCase()130 void AccessTokenInfoManagerTest::SetUpTestCase()
131 {
132     AccessTokenInfoManager::GetInstance().Init();
133 }
134 
TearDownTestCase()135 void AccessTokenInfoManagerTest::TearDownTestCase()
136 {
137     sleep(3); // delay 3 minutes
138 }
139 
SetUp()140 void AccessTokenInfoManagerTest::SetUp()
141 {
142     atManagerService_ = DelayedSingleton<AccessTokenManagerService>::GetInstance();
143     EXPECT_NE(nullptr, atManagerService_);
144     PermissionDef infoManagerPermDefA = {
145         .permissionName = "ohos.permission.CAMERA",
146         .bundleName = "accesstoken_test",
147         .grantMode = USER_GRANT,
148         .availableLevel = APL_NORMAL,
149         .provisionEnable = false,
150         .distributedSceneEnable = false,
151     };
152     PermissionDefinitionCache::GetInstance().Insert(infoManagerPermDefA, 1);
153     PermissionDef infoManagerPermDefB = {
154         .permissionName = "ohos.permission.LOCATION",
155         .bundleName = "accesstoken_test",
156         .grantMode = USER_GRANT,
157         .availableLevel = APL_NORMAL,
158         .provisionEnable = false,
159         .distributedSceneEnable = false,
160     };
161     PermissionDefinitionCache::GetInstance().Insert(infoManagerPermDefB, 1);
162 }
163 
TearDown()164 void AccessTokenInfoManagerTest::TearDown()
165 {
166     atManagerService_ = nullptr;
167 }
168 
169 /**
170  * @tc.name: HapTokenInfoInner001
171  * @tc.desc: HapTokenInfoInner::HapTokenInfoInner.
172  * @tc.type: FUNC
173  * @tc.require:
174  */
175 HWTEST_F(AccessTokenInfoManagerTest, HapTokenInfoInner001, TestSize.Level1)
176 {
177     AccessTokenID id = 0x20240112;
178     HapTokenInfo info = {
179         .apl = APL_NORMAL,
180         .ver = 1,
181         .userID = 1,
182         .bundleName = "com.ohos.access_token",
183         .instIndex = 1,
184         .appID = "testtesttesttest",
185         .deviceID = "deviceId",
186         .tokenID = id,
187         .tokenAttr = 0
188     };
189     std::vector<PermissionStateFull> permStateList;
190     std::shared_ptr<HapTokenInfoInner> hap = std::make_shared<HapTokenInfoInner>(id, info, permStateList);
191     ASSERT_EQ(hap->IsRemote(), false);
192     hap->SetRemote(true);
193     std::vector<GenericValues> valueList;
194     hap->StoreHapInfo(valueList);
195 
196     hap->StorePermissionPolicy(valueList);
197     ASSERT_EQ(hap->IsRemote(), true);
198     hap->SetRemote(false);
199     int32_t version = hap->GetApiVersion(5608);
200     ASSERT_EQ(static_cast<int32_t>(608), version);
201 }
202 
203 /**
204  * @tc.name: CreateHapTokenInfo001
205  * @tc.desc: Verify the CreateHapTokenInfo add one hap token function.
206  * @tc.type: FUNC
207  * @tc.require:
208  */
209 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo001, TestSize.Level1)
210 {
211     AccessTokenIDEx tokenIdEx = {0};
212     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
213         g_infoManagerTestPolicyPrams1, tokenIdEx);
214     ASSERT_EQ(RET_SUCCESS, ret);
215     GTEST_LOG_(INFO) << "add a hap token";
216 
217     std::shared_ptr<HapTokenInfoInner> tokenInfo;
218     tokenInfo = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenIdEx.tokenIdExStruct.tokenID);
219     ASSERT_NE(nullptr, tokenInfo);
220     std::string infoDes;
221     tokenInfo->ToString(infoDes);
222     GTEST_LOG_(INFO) << "get hap token info:" << infoDes.c_str();
223 
224     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
225     ASSERT_EQ(RET_SUCCESS, ret);
226     GTEST_LOG_(INFO) << "remove the token info";
227 
228     tokenInfo = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenIdEx.tokenIdExStruct.tokenID);
229     ASSERT_EQ(nullptr, tokenInfo);
230 }
231 
232 /**
233  * @tc.name: CreateHapTokenInfo002
234  * @tc.desc: Verify the CreateHapTokenInfo add one hap token twice function.
235  * @tc.type: FUNC
236  * @tc.require:
237  */
238 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo002, TestSize.Level1)
239 {
240     ACCESSTOKEN_LOG_INFO(LABEL, "AddHapToken001 fill data");
241 
242     AccessTokenIDEx tokenIdEx = {0};
243     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
244         g_infoManagerTestPolicyPrams1, tokenIdEx);
245     ASSERT_EQ(RET_SUCCESS, ret);
246     GTEST_LOG_(INFO) << "add a hap token";
247 
248     AccessTokenIDEx tokenIdEx1 = {0};
249     ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
250         g_infoManagerTestPolicyPrams1, tokenIdEx1);
251     ASSERT_EQ(RET_SUCCESS, ret);
252     ASSERT_NE(tokenIdEx.tokenIdExStruct.tokenID, tokenIdEx1.tokenIdExStruct.tokenID);
253     GTEST_LOG_(INFO) << "add same hap token";
254     PermissionDef permDef;
255     ASSERT_EQ(RET_SUCCESS,
256         PermissionManager::GetInstance().GetDefPermission(g_infoManagerTestPermDef1.permissionName, permDef));
257     ASSERT_EQ(permDef.permissionName, g_infoManagerTestPermDef1.permissionName);
258 
259     std::shared_ptr<HapTokenInfoInner> tokenInfo;
260     tokenInfo = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenIdEx1.tokenIdExStruct.tokenID);
261     ASSERT_NE(nullptr, tokenInfo);
262 
263     std::string infoDes;
264     tokenInfo->ToString(infoDes);
265     GTEST_LOG_(INFO) << "get hap token info:" << infoDes.c_str();
266 
267     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx1.tokenIdExStruct.tokenID);
268     ASSERT_EQ(RET_SUCCESS, ret);
269     GTEST_LOG_(INFO) << "remove the token info";
270 }
271 
272 /**
273  * @tc.name: CreateHapTokenInfo003
274  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test userID invalid
275  * @tc.type: FUNC
276  * @tc.require:
277  */
278 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo003, TestSize.Level1)
279 {
280     HapInfoParams info = {
281         .userID = -1
282     };
283     HapPolicyParams policy;
284     AccessTokenIDEx tokenIdEx;
285 
286     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
287 }
288 
289 /**
290  * @tc.name: CreateHapTokenInfo004
291  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test bundleName invalid
292  * @tc.type: FUNC
293  * @tc.require:
294  */
295 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo004, TestSize.Level1)
296 {
297     HapInfoParams info = {
298         .userID = USER_ID,
299         .bundleName = ""
300     };
301     HapPolicyParams policy;
302     AccessTokenIDEx tokenIdEx;
303 
304     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
305 }
306 
307 /**
308  * @tc.name: CreateHapTokenInfo005
309  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test appIDDesc invalid
310  * @tc.type: FUNC
311  * @tc.require:
312  */
313 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo005, TestSize.Level1)
314 {
315     HapInfoParams info = {
316         .userID = USER_ID,
317         .bundleName = "ohos.com.testtesttest",
318         .appIDDesc = ""
319     };
320     HapPolicyParams policy;
321     AccessTokenIDEx tokenIdEx;
322 
323     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
324 }
325 
326 /**
327  * @tc.name: CreateHapTokenInfo006
328  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test domain invalid
329  * @tc.type: FUNC
330  * @tc.require:
331  */
332 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo006, TestSize.Level1)
333 {
334     HapInfoParams info = {
335         .userID = USER_ID,
336         .bundleName = "ohos.com.testtesttest",
337         .appIDDesc = "who cares"
338     };
339     HapPolicyParams policy = {
340         .domain = ""
341     };
342     AccessTokenIDEx tokenIdEx;
343 
344     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
345 }
346 
347 /**
348  * @tc.name: CreateHapTokenInfo007
349  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test dlpType invalid
350  * @tc.type: FUNC
351  * @tc.require:
352  */
353 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo007, TestSize.Level1)
354 {
355     HapInfoParams info = {
356         .userID = USER_ID,
357         .bundleName = "ohos.com.testtesttest",
358         .dlpType = -1,
359         .appIDDesc = "who cares"
360     };
361     HapPolicyParams policy = {
362         .domain = "who cares"
363     };
364     AccessTokenIDEx tokenIdEx;
365 
366     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
367 }
368 
369 /**
370  * @tc.name: CreateHapTokenInfo008
371  * @tc.desc: AccessTokenInfoManager::CreateHapTokenInfo function test grant mode invalid
372  * @tc.type: FUNC
373  * @tc.require:
374  */
375 HWTEST_F(AccessTokenInfoManagerTest, CreateHapTokenInfo008, TestSize.Level1)
376 {
377     static PermissionDef permDef = {
378         .permissionName = "ohos.permission.test",
379         .bundleName = "accesstoken_test",
380         .grantMode = -1,    // -1:invalid grant mode
381         .availableLevel = APL_NORMAL,
382         .provisionEnable = false,
383         .distributedSceneEnable = false,
384         .label = "label",
385         .labelId = 1,
386         .description = "open the door",
387         .descriptionId = 1
388     };
389     HapInfoParams info = {
390         .userID = USER_ID,
391         .bundleName = "ohos.com.testtesttest",
392         .appIDDesc = ""
393     };
394     HapPolicyParams policy = {
395         .apl = APL_NORMAL,
396         .domain = "test.domain",
397         .permList = {permDef}
398     };
399     AccessTokenIDEx tokenIdEx;
400     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
401 }
402 
403 /**
404  * @tc.name: InitHapToken001
405  * @tc.desc: InitHapToken function test with invalid userID
406  * @tc.type: FUNC
407  * @tc.require:
408  */
409 HWTEST_F(AccessTokenInfoManagerTest, InitHapToken001, TestSize.Level1)
410 {
411     HapInfoParcel hapinfoParcel;
412     hapinfoParcel.hapInfoParameter = {
413         .userID = -1,
414         .bundleName = "accesstoken_test",
415         .instIndex = 0,
416         .dlpType = DLP_COMMON,
417         .appIDDesc = "testtesttesttest",
418         .apiVersion = DEFAULT_API_VERSION,
419         .isSystemApp = false,
420     };
421     HapPolicyParcel hapPolicyParcel;
422     hapPolicyParcel.hapPolicyParameter.apl = ATokenAplEnum::APL_NORMAL;
423     hapPolicyParcel.hapPolicyParameter.domain = "test.domain";
424     AccessTokenIDEx tokenIdEx;
425     ASSERT_EQ(ERR_PARAM_INVALID, atManagerService_->InitHapToken(hapinfoParcel, hapPolicyParcel, tokenIdEx));
426 }
427 
428 /**
429  * @tc.name: InitHapToken002
430  * @tc.desc: InitHapToken function test with invalid userID
431  * @tc.type: FUNC
432  * @tc.require:
433  */
434 HWTEST_F(AccessTokenInfoManagerTest, InitHapToken002, TestSize.Level1)
435 {
436     HapInfoParcel hapinfoParcel;
437     hapinfoParcel.hapInfoParameter = {
438         .userID = -1,
439         .bundleName = "accesstoken_test",
440         .instIndex = 0,
441         .dlpType = DLP_READ,
442         .appIDDesc = "testtesttesttest",
443         .apiVersion = DEFAULT_API_VERSION,
444         .isSystemApp = false,
445     };
446     HapPolicyParcel hapPolicyParcel;
447     hapPolicyParcel.hapPolicyParameter.apl = ATokenAplEnum::APL_NORMAL;
448     hapPolicyParcel.hapPolicyParameter.domain = "test.domain";
449     AccessTokenIDEx tokenIdEx;
450     ASSERT_EQ(ERR_PERM_REQUEST_CFG_FAILED, atManagerService_->InitHapToken(hapinfoParcel, hapPolicyParcel, tokenIdEx));
451 }
452 
453 /**
454  * @tc.name: InitHapToken003
455  * @tc.desc: InitHapToken function test with invalid apl permission
456  * @tc.type: FUNC
457  * @tc.require:
458  */
459 HWTEST_F(AccessTokenInfoManagerTest, InitHapToken003, TestSize.Level1)
460 {
461     HapInfoParcel info;
462     info.hapInfoParameter = {
463         .userID = 0,
464         .bundleName = "accesstoken_test",
465         .instIndex = 0,
466         .dlpType = DLP_COMMON,
467         .appIDDesc = "testtesttesttest",
468         .apiVersion = DEFAULT_API_VERSION,
469         .isSystemApp = false,
470     };
471     HapPolicyParcel policy;
472     PermissionStateFull permissionStateA = {
473         .permissionName = "ohos.permission.GET_ALL_APP_ACCOUNTS",
474         .isGeneral = true,
475         .resDeviceID = {"local"},
476         .grantStatus = {1},
477         .grantFlags = {1}
478     };
479     PermissionStateFull permissionStateB = {
480         .permissionName = "ohos.permission.PRELOAD_APPLICATION",
481         .isGeneral = true,
482         .resDeviceID = {"local"},
483         .grantStatus = {1},
484         .grantFlags = {1}
485     };
486     PermissionStateFull permissionStateC = {
487         .permissionName = "ohos.permission.test",
488         .isGeneral = true,
489         .resDeviceID = {"local"},
490         .grantStatus = {1},
491         .grantFlags = {1}
492     };
493     policy.hapPolicyParameter = {
494         .apl = APL_NORMAL,
495         .domain = "test",
496         .permList = {},
497         .permStateList = { permissionStateA }
498     };
499     AccessTokenIDEx fullTokenId = {0};
500     ASSERT_EQ(ERR_PERM_REQUEST_CFG_FAILED, atManagerService_->InitHapToken(info, policy, fullTokenId));
501 
502     policy.hapPolicyParameter.permStateList = { permissionStateB, permissionStateC };
503     policy.hapPolicyParameter.aclRequestedList = { "ohos.permission.PRELOAD_APPLICATION" };
504     ASSERT_EQ(RET_SUCCESS, atManagerService_->InitHapToken(info, policy, fullTokenId));
505 }
506 
507 /**
508  * @tc.name: IsTokenIdExist001
509  * @tc.desc: Verify the IsTokenIdExist exist accesstokenid.
510  * @tc.type: FUNC
511  * @tc.require:
512  */
513 HWTEST_F(AccessTokenInfoManagerTest, IsTokenIdExist001, TestSize.Level1)
514 {
515     AccessTokenID testId = 1;
516     ASSERT_EQ(AccessTokenInfoManager::GetInstance().IsTokenIdExist(testId), false);
517 }
518 
519 /**
520  * @tc.name: GetHapTokenInfo001
521  * @tc.desc: Verify the GetHapTokenInfo abnormal and normal branch.
522  * @tc.type: FUNC
523  * @tc.require:
524  */
525 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenInfo001, TestSize.Level1)
526 {
527     AccessTokenIDEx tokenIdEx = {0};
528     int result;
529     HapTokenInfo hapInfo;
530     result = AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID, hapInfo);
531     ASSERT_EQ(result, ERR_TOKENID_NOT_EXIST);
532 
533     result = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
534         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
535     ASSERT_EQ(RET_SUCCESS, result);
536     GTEST_LOG_(INFO) << "add a hap token";
537     result = AccessTokenInfoManager::GetInstance().GetHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID, hapInfo);
538     ASSERT_EQ(result, RET_SUCCESS);
539     result = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
540     ASSERT_EQ(RET_SUCCESS, result);
541     GTEST_LOG_(INFO) << "remove the token info";
542 }
543 
544 /**
545  * @tc.name: GetHapPermissionPolicySet001
546  * @tc.desc: Verify the GetHapPermissionPolicySet abnormal and normal branch.
547  * @tc.type: FUNC
548  * @tc.require:
549  */
550 HWTEST_F(AccessTokenInfoManagerTest, GetHapPermissionPolicySet001, TestSize.Level1)
551 {
552     AccessTokenIDEx tokenIdEx = {0};
553     std::shared_ptr<PermissionPolicySet> permPolicySet =
554         AccessTokenInfoManager::GetInstance().GetHapPermissionPolicySet(tokenIdEx.tokenIdExStruct.tokenID);
555     ASSERT_EQ(permPolicySet, nullptr);
556 
557     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
558         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
559     ASSERT_EQ(RET_SUCCESS, ret);
560     GTEST_LOG_(INFO) << "add a hap token";
561     permPolicySet = AccessTokenInfoManager::GetInstance().GetHapPermissionPolicySet(tokenIdEx.tokenIdExStruct.tokenID);
562     ASSERT_EQ(permPolicySet != nullptr, true);
563     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
564     ASSERT_EQ(RET_SUCCESS, ret);
565     GTEST_LOG_(INFO) << "remove the token info";
566 }
567 
568 /**
569  * @tc.name: GetNativePermissionPolicySet001
570  * @tc.desc: Verify the GetNativePermissionPolicySet abnormal branch tokenID is invalid.
571  * @tc.type: FUNC
572  * @tc.require:
573  */
574 HWTEST_F(AccessTokenInfoManagerTest, GetNativePermissionPolicySet001, TestSize.Level1)
575 {
576     AccessTokenIDEx tokenIdEx = {0};
577     std::shared_ptr<PermissionPolicySet> permPolicySet =
578         AccessTokenInfoManager::GetInstance().GetNativePermissionPolicySet(tokenIdEx.tokenIdExStruct.tokenID);
579     ASSERT_EQ(permPolicySet, nullptr);
580 }
581 
582 /**
583  * @tc.name: RemoveHapTokenInfo001
584  * @tc.desc: Verify the RemoveHapTokenInfo abnormal branch tokenID type is not true.
585  * @tc.type: FUNC
586  * @tc.require:
587  */
588 HWTEST_F(AccessTokenInfoManagerTest, RemoveHapTokenInfo001, TestSize.Level1)
589 {
590     AccessTokenIDEx tokenIdEx = {0};
591     // type != TOKEN_HAP
592     ASSERT_EQ(
593         ERR_PARAM_INVALID, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID));
594 
595     AccessTokenID tokenId = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
596     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_HAP));
597     // hapTokenInfoMap_.count(id) == 0
598     ASSERT_EQ(ERR_TOKENID_NOT_EXIST, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
599 
600     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_HAP));
601     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = nullptr;
602     ASSERT_EQ(ERR_TOKEN_INVALID, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId)); // info == nullptr
603     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(tokenId);
604 
605     std::shared_ptr<HapTokenInfoInner> info = std::make_shared<HapTokenInfoInner>();
606     info->tokenInfoBasic_.userID = USER_ID;
607     info->tokenInfoBasic_.bundleName = "com.ohos.TEST";
608     info->tokenInfoBasic_.instIndex = INST_INDEX;
609     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = info;
610     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_HAP));
611     // count(HapUniqueKey) == 0
612     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
613 
614     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_HAP)); // removed above
615     AccessTokenID tokenId2 = 537919486; // 537919486: 001 00 0 000000 11111111111111111110
616     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = info;
617     std::string hapUniqueKey = "com.ohos.TEST&" + std::to_string(USER_ID) + "&" + std::to_string(INST_INDEX);
618     AccessTokenInfoManager::GetInstance().hapTokenIdMap_[hapUniqueKey] = tokenId2;
619     // hapTokenIdMap_[HapUniqueKey] != id
620     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
621     AccessTokenInfoManager::GetInstance().hapTokenIdMap_.erase(hapUniqueKey);
622 }
623 
624 /**
625  * @tc.name: GetHapTokenID001
626  * @tc.desc: Verify the GetHapTokenID by userID/bundleName/instIndex, function.
627  * @tc.type: FUNC
628  * @tc.require:
629  */
630 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenID001, TestSize.Level1)
631 {
632     AccessTokenIDEx tokenIdEx = {0};
633     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
634         g_infoManagerTestPolicyPrams1, tokenIdEx);
635     ASSERT_EQ(RET_SUCCESS, ret);
636     GTEST_LOG_(INFO) << "add a hap token";
637 
638     tokenIdEx = AccessTokenInfoManager::GetInstance().GetHapTokenID(g_infoManagerTestInfoParms.userID,
639         g_infoManagerTestInfoParms.bundleName, g_infoManagerTestInfoParms.instIndex);
640     AccessTokenID getTokenId = tokenIdEx.tokenIdExStruct.tokenID;
641     ASSERT_EQ(tokenIdEx.tokenIdExStruct.tokenID, getTokenId);
642     GTEST_LOG_(INFO) << "find hap info";
643 
644     std::shared_ptr<HapTokenInfoInner> tokenInfo;
645     tokenInfo = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenIdEx.tokenIdExStruct.tokenID);
646     ASSERT_NE(nullptr, tokenInfo);
647     GTEST_LOG_(INFO) << "remove the token info";
648 
649     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
650     ASSERT_EQ(RET_SUCCESS, ret);
651     GTEST_LOG_(INFO) << "remove the token info";
652 }
653 
654 /**
655  * @tc.name: UpdateHapToken001
656  * @tc.desc: Verify the UpdateHapToken token function.
657  * @tc.type: FUNC
658  * @tc.require:
659  */
660 HWTEST_F(AccessTokenInfoManagerTest, UpdateHapToken001, TestSize.Level1)
661 {
662     AccessTokenIDEx tokenIdEx = {0};
663     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
664         g_infoManagerTestPolicyPrams1, tokenIdEx);
665     ASSERT_EQ(RET_SUCCESS, ret);
666     GTEST_LOG_(INFO) << "add a hap token";
667 
668     HapPolicyParams policy = g_infoManagerTestPolicyPrams1;
669     policy.apl = APL_SYSTEM_BASIC;
670     UpdateHapInfoParams info;
671     info.appIDDesc = std::string("updateAppId");
672     info.apiVersion = DEFAULT_API_VERSION;
673     info.isSystemApp = false;
674     ret = AccessTokenInfoManager::GetInstance().UpdateHapToken(
675         tokenIdEx, info, policy.permStateList, policy.apl, policy.permList);
676     ASSERT_EQ(RET_SUCCESS, ret);
677     GTEST_LOG_(INFO) << "update the hap token";
678 
679     std::shared_ptr<HapTokenInfoInner> tokenInfo;
680     tokenInfo = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenIdEx.tokenIdExStruct.tokenID);
681     ASSERT_NE(nullptr, tokenInfo);
682     std::string infoDes;
683     tokenInfo->ToString(infoDes);
684     GTEST_LOG_(INFO) << "get hap token info:" << infoDes.c_str();
685 
686     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
687     ASSERT_EQ(RET_SUCCESS, ret);
688     GTEST_LOG_(INFO) << "remove the token info";
689 }
690 
691 /**
692  * @tc.name: UpdateHapToken002
693  * @tc.desc: Verify the UpdateHapToken token function abnormal branch.
694  * @tc.type: FUNC
695  * @tc.require:
696  */
697 HWTEST_F(AccessTokenInfoManagerTest, UpdateHapToken002, TestSize.Level1)
698 {
699     AccessTokenIDEx tokenIdEx = {0};
700     HapPolicyParams policy = g_infoManagerTestPolicyPrams1;
701     policy.apl = APL_SYSTEM_BASIC;
702     UpdateHapInfoParams info;
703     info.appIDDesc = std::string("");
704     info.apiVersion = DEFAULT_API_VERSION;
705     info.isSystemApp = false;
706     int ret = AccessTokenInfoManager::GetInstance().UpdateHapToken(
707         tokenIdEx, info, policy.permStateList, policy.apl, policy.permList);
708     ASSERT_EQ(ERR_PARAM_INVALID, ret);
709 
710     info.appIDDesc = std::string("updateAppId");
711     ret = AccessTokenInfoManager::GetInstance().UpdateHapToken(
712         tokenIdEx, info, policy.permStateList, policy.apl, policy.permList);
713     ASSERT_EQ(ERR_TOKENID_NOT_EXIST, ret);
714 }
715 
716 /**
717  * @tc.name: UpdateHapToken003
718  * @tc.desc: AccessTokenInfoManager::UpdateHapToken function test IsRemote_ true
719  * @tc.type: FUNC
720  * @tc.require:
721  */
722 HWTEST_F(AccessTokenInfoManagerTest, UpdateHapToken003, TestSize.Level1)
723 {
724     AccessTokenID tokenId = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
725     AccessTokenIDEx tokenIdEx = {0};
726     tokenIdEx.tokenIdExStruct.tokenID = tokenId;
727     std::shared_ptr<HapTokenInfoInner> info = std::make_shared<HapTokenInfoInner>();
728     info->isRemote_ = true;
729     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = info;
730     HapPolicyParams policy;
731     UpdateHapInfoParams hapInfoParams;
732     hapInfoParams.appIDDesc = "who cares";
733     hapInfoParams.apiVersion = DEFAULT_API_VERSION;
734     hapInfoParams.isSystemApp = false;
735     ASSERT_NE(0, AccessTokenInfoManager::GetInstance().UpdateHapToken(
736         tokenIdEx, hapInfoParams, policy.permStateList, policy.apl, policy.permList));
737     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(tokenId);
738 }
739 
740 #ifdef TOKEN_SYNC_ENABLE
741 /**
742  * @tc.name: GetHapTokenSync001
743  * @tc.desc: Verify the GetHapTokenSync token function and abnormal branch.
744  * @tc.type: FUNC
745  * @tc.require:
746  */
747 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenSync001, TestSize.Level1)
748 {
749     AccessTokenIDEx tokenIdEx = {0};
750     int result;
751     result = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
752         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
753     ASSERT_EQ(RET_SUCCESS, result);
754     GTEST_LOG_(INFO) << "add a hap token";
755 
756     HapTokenInfoForSync hapSync;
757     result = AccessTokenInfoManager::GetInstance().GetHapTokenSync(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
758     ASSERT_EQ(result, RET_SUCCESS);
759 
760     result = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
761     ASSERT_EQ(RET_SUCCESS, result);
762     GTEST_LOG_(INFO) << "remove the token info";
763 
764     result = AccessTokenInfoManager::GetInstance().GetHapTokenSync(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
765     ASSERT_NE(result, RET_SUCCESS);
766 }
767 
768 /**
769  * @tc.name: GetHapTokenSync002
770  * @tc.desc: AccessTokenInfoManager::GetHapTokenSync function test permSetPtr is null
771  * @tc.type: FUNC
772  * @tc.require:
773  */
774 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenSync002, TestSize.Level1)
775 {
776     AccessTokenID tokenId = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
777     std::shared_ptr<HapTokenInfoInner> info = std::make_shared<HapTokenInfoInner>();
778     info->permPolicySet_ = nullptr;
779     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = info;
780     HapTokenInfoForSync hapSync;
781     ASSERT_NE(0, AccessTokenInfoManager::GetInstance().GetHapTokenSync(tokenId, hapSync));
782     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(tokenId);
783 }
784 
785 /**
786  * @tc.name: GetHapTokenInfoFromRemote001
787  * @tc.desc: Verify the GetHapTokenInfoFromRemote token function .
788  * @tc.type: FUNC
789  * @tc.require:
790  */
791 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenInfoFromRemote001, TestSize.Level1)
792 {
793     AccessTokenIDEx tokenIdEx = {0};
794     int ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
795         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
796     ASSERT_EQ(RET_SUCCESS, ret);
797     GTEST_LOG_(INFO) << "add a hap token";
798 
799     HapTokenInfoForSync hapSync;
800     ret = AccessTokenInfoManager::GetInstance().GetHapTokenInfoFromRemote(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
801     ASSERT_EQ(ret, RET_SUCCESS);
802 
803     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
804     ASSERT_EQ(RET_SUCCESS, ret);
805     GTEST_LOG_(INFO) << "remove the token info";
806 }
807 
808 /**
809  * @tc.name: RemoteHapTest001001
810  * @tc.desc: Verify the RemoteHap token function .
811  * @tc.type: FUNC
812  * @tc.require: issueI5RJBB
813  */
814 HWTEST_F(AccessTokenInfoManagerTest, RemoteHapTest001, TestSize.Level1)
815 {
816     AccessTokenIDEx tokenIdEx = {0};
817     int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
818         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
819     ASSERT_EQ(RET_SUCCESS, ret);
820     GTEST_LOG_(INFO) << "add a hap token";
821 
822     std::string deviceId = "device_1";
823     std::string deviceId2 = "device_2";
824     AccessTokenID mapID =
825         AccessTokenInfoManager::GetInstance().AllocLocalTokenID(deviceId, tokenIdEx.tokenIdExStruct.tokenID);
826     ASSERT_EQ(mapID == 0, true);
827     HapTokenInfoForSync hapSync;
828     ret = AccessTokenInfoManager::GetInstance().GetHapTokenInfoFromRemote(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
829     ASSERT_EQ(RET_SUCCESS, ret);
830     ret = AccessTokenInfoManager::GetInstance().SetRemoteHapTokenInfo(deviceId, hapSync);
831     ASSERT_EQ(RET_SUCCESS, ret);
832     ret = AccessTokenInfoManager::GetInstance().DeleteRemoteDeviceTokens(deviceId);
833     ASSERT_EQ(RET_SUCCESS, ret);
834     ret = AccessTokenInfoManager::GetInstance().DeleteRemoteDeviceTokens(deviceId2);
835     ASSERT_EQ(ERR_DEVICE_NOT_EXIST, ret);
836 
837     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
838     ASSERT_EQ(RET_SUCCESS, ret);
839     GTEST_LOG_(INFO) << "remove the token info";
840 }
841 
842 /**
843  * @tc.name: DeleteRemoteToken001
844  * @tc.desc: Verify the DeleteRemoteToken normal and abnormal branch.
845  * @tc.type: FUNC
846  * @tc.require: issueI5RJBB
847  */
848 HWTEST_F(AccessTokenInfoManagerTest, DeleteRemoteToken001, TestSize.Level1)
849 {
850     AccessTokenIDEx tokenIdEx = {0};
851     int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
852         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
853     ASSERT_EQ(RET_SUCCESS, ret);
854     GTEST_LOG_(INFO) << "add a hap token";
855 
856     std::string deviceId = "device_1";
857     std::string deviceId2 = "device_2";
858     AccessTokenID mapId =
859         AccessTokenInfoManager::GetInstance().AllocLocalTokenID(deviceId, tokenIdEx.tokenIdExStruct.tokenID);
860     ASSERT_EQ(mapId == 0, true);
861     HapTokenInfoForSync hapSync;
862     ret = AccessTokenInfoManager::GetInstance().GetHapTokenInfoFromRemote(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
863     ASSERT_EQ(RET_SUCCESS, ret);
864     ret = AccessTokenInfoManager::GetInstance().SetRemoteHapTokenInfo(deviceId, hapSync);
865     ASSERT_EQ(RET_SUCCESS, ret);
866     ret = AccessTokenInfoManager::GetInstance().DeleteRemoteToken(deviceId, tokenIdEx.tokenIdExStruct.tokenID);
867     ASSERT_EQ(RET_SUCCESS, ret);
868     ret = AccessTokenInfoManager::GetInstance().DeleteRemoteToken(deviceId2, tokenIdEx.tokenIdExStruct.tokenID);
869     ASSERT_NE(RET_SUCCESS, ret);
870 
871     ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID);
872     ASSERT_EQ(RET_SUCCESS, ret);
873     GTEST_LOG_(INFO) << "remove the token info";
874 }
875 
SetRemoteHapTokenInfoTest(const std::string & deviceID,const HapTokenInfo & baseInfo)876 static bool SetRemoteHapTokenInfoTest(const std::string& deviceID, const HapTokenInfo& baseInfo)
877 {
878     std::vector<PermissionStateFull> permStateList;
879     permStateList.emplace_back(g_infoManagerTestState1);
880     HapTokenInfoForSync remoteTokenInfo = {
881         .baseInfo = baseInfo,
882         .permStateList = permStateList
883     };
884 
885     return RET_SUCCESS == AccessTokenInfoManager::GetInstance().SetRemoteHapTokenInfo(deviceID, remoteTokenInfo);
886 }
887 
888 /**
889  * @tc.name: SetRemoteHapTokenInfo001
890  * @tc.desc: set remote hap token info, token info is wrong
891  * @tc.type: FUNC
892  * @tc.require: issue5RJBB
893  */
894 HWTEST_F(AccessTokenInfoManagerTest, SetRemoteHapTokenInfo001, TestSize.Level1)
895 {
896     std::string deviceID = "deviceId";
897     HapTokenInfo rightBaseInfo = {
898         .apl = APL_NORMAL,
899         .ver = 1,
900         .userID = 1,
901         .bundleName = "com.ohos.access_token",
902         .instIndex = 1,
903         .appID = "testtesttesttest",
904         .deviceID = "deviceId",
905         .tokenID = 0x20100000,
906         .tokenAttr = 0
907     };
908     HapTokenInfo wrongBaseInfo = rightBaseInfo;
909     std::string wrongStr(10241, 'x');
910 
911     EXPECT_EQ(false, SetRemoteHapTokenInfoTest("", wrongBaseInfo));
912 
913     wrongBaseInfo.apl = (ATokenAplEnum)11; // wrong apl
914     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
915 
916     wrongBaseInfo = rightBaseInfo;
917     wrongBaseInfo.deviceID = wrongStr; // wrong deviceID
918     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
919 
920     wrongBaseInfo = rightBaseInfo;
921     wrongBaseInfo.userID = -1; // wrong userID
922     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
923 
924     wrongBaseInfo = rightBaseInfo;
925     wrongBaseInfo.bundleName = wrongStr; // wrong bundleName
926     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
927 
928     wrongBaseInfo = rightBaseInfo;
929     wrongBaseInfo.tokenID = 0; // wrong tokenID
930     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
931 
932     wrongBaseInfo = rightBaseInfo;
933     wrongBaseInfo.appID = wrongStr; // wrong appID
934     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
935 
936     wrongBaseInfo = rightBaseInfo;
937     wrongBaseInfo.dlpType = (HapDlpType)11;; // wrong dlpType
938     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
939 
940     wrongBaseInfo = rightBaseInfo;
941     wrongBaseInfo.ver = 2; // 2: wrong version
942     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
943 
944     wrongBaseInfo = rightBaseInfo;
945     wrongBaseInfo.tokenID = AccessTokenInfoManager::GetInstance().GetNativeTokenId("hdcd");
946     EXPECT_EQ(false, SetRemoteHapTokenInfoTest(deviceID, wrongBaseInfo));
947 }
948 
949 /**
950  * @tc.name: NotifyTokenSyncTask001
951  * @tc.desc: TokenModifyNotifier::NotifyTokenSyncTask function test
952  * @tc.type: FUNC
953  * @tc.require:
954  */
955 HWTEST_F(AccessTokenInfoManagerTest, NotifyTokenSyncTask001, TestSize.Level1)
956 {
957     std::vector<AccessTokenID> modifiedTokenList = TokenModifyNotifier::GetInstance().modifiedTokenList_; // backup
958     TokenModifyNotifier::GetInstance().modifiedTokenList_.clear();
959 
960     AccessTokenID tokenId = 123; // 123 is random input
961 
962     TokenModifyNotifier::GetInstance().modifiedTokenList_.emplace_back(tokenId);
963     ASSERT_EQ(true, TokenModifyNotifier::GetInstance().modifiedTokenList_.size() > 0);
964     TokenModifyNotifier::GetInstance().NotifyTokenSyncTask();
965 
966     TokenModifyNotifier::GetInstance().modifiedTokenList_ = modifiedTokenList; // recovery
967 }
968 
969 /**
970  * @tc.name: RegisterTokenSyncCallback001
971  * @tc.desc: TokenModifyNotifier::RegisterTokenSyncCallback function test
972  * @tc.type: FUNC
973  * @tc.require:
974  */
975 HWTEST_F(AccessTokenInfoManagerTest, RegisterTokenSyncCallback001, TestSize.Level1)
976 {
977     setuid(3020);
978     sptr<TokenSyncCallbackMock> callback = new (std::nothrow) TokenSyncCallbackMock();
979     ASSERT_NE(nullptr, callback);
980     EXPECT_EQ(RET_SUCCESS,
981         atManagerService_->RegisterTokenSyncCallback(callback->AsObject()));
982     EXPECT_NE(nullptr, TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_);
983     EXPECT_NE(nullptr, TokenModifyNotifier::GetInstance().tokenSyncCallbackDeathRecipient_);
984 
985     EXPECT_CALL(*callback, GetRemoteHapTokenInfo(testing::_, testing::_)).WillOnce(testing::Return(FAKE_SYNC_RET));
986     EXPECT_EQ(FAKE_SYNC_RET, TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_->GetRemoteHapTokenInfo("", 0));
987 
988     EXPECT_CALL(*callback, DeleteRemoteHapTokenInfo(testing::_)).WillOnce(testing::Return(FAKE_SYNC_RET));
989     EXPECT_EQ(FAKE_SYNC_RET, TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_->DeleteRemoteHapTokenInfo(0));
990 
991     HapTokenInfoForSync tokenInfo;
992     EXPECT_CALL(*callback, UpdateRemoteHapTokenInfo(testing::_)).WillOnce(testing::Return(FAKE_SYNC_RET));
993     EXPECT_EQ(FAKE_SYNC_RET,
994         TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_->UpdateRemoteHapTokenInfo(tokenInfo));
995     EXPECT_EQ(RET_SUCCESS,
996         atManagerService_->UnRegisterTokenSyncCallback());
997     EXPECT_EQ(nullptr, TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_);
998     EXPECT_EQ(nullptr, TokenModifyNotifier::GetInstance().tokenSyncCallbackDeathRecipient_);
999     setuid(0);
1000 }
1001 
1002 /**
1003  * @tc.name: RegisterTokenSyncCallback002
1004  * @tc.desc: TokenModifyNotifier::RegisterTokenSyncCallback function test
1005  * @tc.type: FUNC
1006  * @tc.require:
1007  */
1008 HWTEST_F(AccessTokenInfoManagerTest, RegisterTokenSyncCallback002, TestSize.Level1)
1009 {
1010     setuid(3020);
1011     sptr<TokenSyncCallbackMock> callback = new (std::nothrow) TokenSyncCallbackMock();
1012     ASSERT_NE(nullptr, callback);
1013     EXPECT_EQ(RET_SUCCESS,
1014         atManagerService_->RegisterTokenSyncCallback(callback->AsObject()));
1015     EXPECT_NE(nullptr, TokenModifyNotifier::GetInstance().tokenSyncCallbackObject_);
1016     EXPECT_CALL(*callback, GetRemoteHapTokenInfo(testing::_, testing::_))
1017         .WillOnce(testing::Return(FAKE_SYNC_RET));
1018     EXPECT_EQ(FAKE_SYNC_RET, TokenModifyNotifier::GetInstance().GetRemoteHapTokenInfo("", 0));
1019 
1020     std::vector<AccessTokenID> modifiedTokenList =
1021         TokenModifyNotifier::GetInstance().modifiedTokenList_; // backup
1022     std::vector<AccessTokenID> deleteTokenList = TokenModifyNotifier::GetInstance().deleteTokenList_;
1023     TokenModifyNotifier::GetInstance().modifiedTokenList_.clear();
1024     TokenModifyNotifier::GetInstance().deleteTokenList_.clear();
1025 
1026     // add a hap token
1027     AccessTokenIDEx tokenIdEx = {123};
1028     int32_t result = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
1029         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
1030     EXPECT_EQ(RET_SUCCESS, result);
1031 
1032     HapTokenInfoForSync hapSync;
1033     result = AccessTokenInfoManager::GetInstance().GetHapTokenSync(tokenIdEx.tokenIdExStruct.tokenID, hapSync);
1034     ASSERT_EQ(result, RET_SUCCESS);
1035     TokenModifyNotifier::GetInstance().modifiedTokenList_.emplace_back(tokenIdEx.tokenIdExStruct.tokenID);
1036     ASSERT_EQ(true, TokenModifyNotifier::GetInstance().modifiedTokenList_.size() > 0);
1037     TokenModifyNotifier::GetInstance().deleteTokenList_.clear();
1038 
1039     EXPECT_CALL(*callback, UpdateRemoteHapTokenInfo(testing::_)) // 0 is a test ret
1040         .WillOnce(testing::Return(0));
1041     TokenModifyNotifier::GetInstance().NotifyTokenSyncTask();
1042 
1043     TokenModifyNotifier::GetInstance().deleteTokenList_.emplace_back(tokenIdEx.tokenIdExStruct.tokenID);
1044     ASSERT_EQ(true, TokenModifyNotifier::GetInstance().deleteTokenList_.size() > 0);
1045     EXPECT_CALL(*callback, DeleteRemoteHapTokenInfo(testing::_)) // 0 is a test ret
1046         .WillOnce(testing::Return(0));
1047     TokenModifyNotifier::GetInstance().NotifyTokenSyncTask();
1048 
1049     TokenModifyNotifier::GetInstance().modifiedTokenList_ = modifiedTokenList; // recovery
1050     TokenModifyNotifier::GetInstance().deleteTokenList_ = deleteTokenList;
1051     EXPECT_EQ(RET_SUCCESS,
1052         atManagerService_->UnRegisterTokenSyncCallback());
1053     setuid(0);
1054 }
1055 
1056 /**
1057  * @tc.name: GetRemoteHapTokenInfo001
1058  * @tc.desc: TokenModifyNotifier::GetRemoteHapTokenInfo function test
1059  * @tc.type: FUNC
1060  * @tc.require:
1061  */
1062 HWTEST_F(AccessTokenInfoManagerTest, GetRemoteHapTokenInfo001, TestSize.Level1)
1063 {
1064     setuid(3020);
1065     sptr<TokenSyncCallbackMock> callback = new (std::nothrow) TokenSyncCallbackMock();
1066     ASSERT_NE(nullptr, callback);
1067     EXPECT_EQ(RET_SUCCESS, atManagerService_->RegisterTokenSyncCallback(callback->AsObject()));
1068     EXPECT_CALL(*callback, GetRemoteHapTokenInfo(testing::_, testing::_))
1069         .WillOnce(testing::Return(FAKE_SYNC_RET));
1070     EXPECT_EQ(FAKE_SYNC_RET, TokenModifyNotifier::GetInstance()
1071         .GetRemoteHapTokenInfo("invalid_id", 0)); // this is a test input
1072 
1073     EXPECT_CALL(*callback, GetRemoteHapTokenInfo(testing::_, testing::_))
1074         .WillOnce(testing::Return(TOKEN_SYNC_OPENSOURCE_DEVICE));
1075     EXPECT_EQ(TOKEN_SYNC_IPC_ERROR, TokenModifyNotifier::GetInstance()
1076         .GetRemoteHapTokenInfo("invalid_id", 0)); // this is a test input
1077     EXPECT_EQ(RET_SUCCESS,
1078         atManagerService_->UnRegisterTokenSyncCallback());
1079     setuid(0);
1080 }
1081 
1082 /**
1083  * @tc.name: UpdateRemoteHapTokenInfo001
1084  * @tc.desc: AccessTokenInfoManager::UpdateRemoteHapTokenInfo function test
1085  * @tc.type: FUNC
1086  * @tc.require:
1087  */
1088 HWTEST_F(AccessTokenInfoManagerTest, UpdateRemoteHapTokenInfo001, TestSize.Level1)
1089 {
1090     AccessTokenID mapID = 0;
1091     HapTokenInfoForSync hapSync;
1092 
1093     // infoPtr is null
1094     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().UpdateRemoteHapTokenInfo(mapID, hapSync));
1095 
1096     mapID = 123; // 123 is random input
1097     std::shared_ptr<HapTokenInfoInner> info = std::make_shared<HapTokenInfoInner>();
1098     info->SetRemote(true);
1099     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[mapID] = info;
1100 
1101     // remote is true
1102     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().UpdateRemoteHapTokenInfo(mapID, hapSync));
1103 
1104     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(mapID);
1105 }
1106 
1107 /**
1108  * @tc.name: CreateRemoteHapTokenInfo001
1109  * @tc.desc: AccessTokenInfoManager::CreateRemoteHapTokenInfo function test
1110  * @tc.type: FUNC
1111  * @tc.require:
1112  */
1113 HWTEST_F(AccessTokenInfoManagerTest, CreateRemoteHapTokenInfo001, TestSize.Level1)
1114 {
1115     AccessTokenID mapID = 123; // 123 is random input
1116     HapTokenInfoForSync hapSync;
1117 
1118     hapSync.baseInfo.tokenID = 123; // 123 is random input
1119     std::shared_ptr<HapTokenInfoInner> info = std::make_shared<HapTokenInfoInner>();
1120     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[123] = info;
1121 
1122     // count(id) exsit
1123     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateRemoteHapTokenInfo(mapID, hapSync));
1124 
1125     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(123);
1126 }
1127 
1128 /**
1129  * @tc.name: DeleteRemoteToken002
1130  * @tc.desc: AccessTokenInfoManager::DeleteRemoteToken function test
1131  * @tc.type: FUNC
1132  * @tc.require:
1133  */
1134 HWTEST_F(AccessTokenInfoManagerTest, DeleteRemoteToken002, TestSize.Level1)
1135 {
1136     std::string deviceID = "dev-001";
1137     AccessTokenID tokenID = 123; // 123 is random input
1138 
1139     ASSERT_EQ(AccessTokenError::ERR_PARAM_INVALID,
1140         AccessTokenInfoManager::GetInstance().DeleteRemoteToken("", tokenID));
1141 
1142     AccessTokenRemoteDevice device;
1143     device.DeviceID_ = deviceID;
1144     // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
1145     device.MappingTokenIDPairMap_.insert(std::pair<AccessTokenID, AccessTokenID>(tokenID, 537919487));
1146     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_[deviceID] = device;
1147 
1148     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(537919487, TOKEN_HAP));
1149     // hap mapID 537919487 is not exist
1150     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().DeleteRemoteToken(deviceID, tokenID));
1151     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_.erase(deviceID);
1152     AccessTokenIDManager::GetInstance().ReleaseTokenId(537919487);
1153 
1154     // 672137215 is max native tokenId: 001 01 0 000000 11111111111111111111
1155     device.MappingTokenIDPairMap_[tokenID] = 672137215;
1156     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_[deviceID] = device;
1157 
1158     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(672137215, TOKEN_NATIVE));
1159     // native mapID 672137215 is not exist
1160     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().DeleteRemoteToken(deviceID, tokenID));
1161     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_.erase(deviceID);
1162     AccessTokenIDManager::GetInstance().ReleaseTokenId(672137215);
1163 }
1164 
1165 /**
1166  * @tc.name: AllocLocalTokenID001
1167  * @tc.desc: AccessTokenInfoManager::AllocLocalTokenID function test
1168  * @tc.type: FUNC
1169  * @tc.require:
1170  */
1171 HWTEST_F(AccessTokenInfoManagerTest, AllocLocalTokenID001, TestSize.Level1)
1172 {
1173     std::string remoteDeviceID;
1174     AccessTokenID remoteTokenID = 0;
1175 
1176     ASSERT_EQ(static_cast<AccessTokenID>(0), AccessTokenInfoManager::GetInstance().AllocLocalTokenID(remoteDeviceID,
1177         remoteTokenID)); // remoteDeviceID invalid
1178 
1179     // deviceID invalid + tokenID == 0
1180     ASSERT_EQ(static_cast<AccessTokenID>(0),
1181         AccessTokenInfoManager::GetInstance().GetRemoteNativeTokenID(remoteDeviceID, remoteTokenID));
1182 
1183     // deviceID invalid
1184     ASSERT_EQ(ERR_PARAM_INVALID, AccessTokenInfoManager::GetInstance().DeleteRemoteDeviceTokens(remoteDeviceID));
1185 
1186     remoteDeviceID = "dev-001";
1187     ASSERT_EQ(static_cast<AccessTokenID>(0), AccessTokenInfoManager::GetInstance().AllocLocalTokenID(remoteDeviceID,
1188         remoteTokenID)); // remoteTokenID invalid
1189 
1190     // deviceID valid + tokenID == 0
1191     ASSERT_EQ(static_cast<AccessTokenID>(0),
1192         AccessTokenInfoManager::GetInstance().GetRemoteNativeTokenID(remoteDeviceID, remoteTokenID));
1193 
1194     remoteTokenID = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
1195     // deviceID valid + tokenID != 0 + type != native + type != shell
1196     ASSERT_EQ(static_cast<AccessTokenID>(0),
1197         AccessTokenInfoManager::GetInstance().GetRemoteNativeTokenID(remoteDeviceID, remoteTokenID));
1198 }
1199 #endif
1200 
1201 /**
1202  * @tc.name: Dump001
1203  * @tc.desc: Dump tokeninfo.
1204  * @tc.type: FUNC
1205  * @tc.require: issueI4V02P
1206  */
1207 HWTEST_F(AccessTokenInfoManagerTest, Dump001, TestSize.Level1)
1208 {
1209     int fd = -1;
1210     std::vector<std::u16string> args;
1211 
1212     // fd is 0
1213     ASSERT_NE(RET_SUCCESS, atManagerService_->Dump(fd, args));
1214 
1215     fd = 123; // 123:valid fd
1216 
1217     // hidumper
1218     ASSERT_EQ(RET_SUCCESS, atManagerService_->Dump(fd, args));
1219 
1220     // hidumper -h
1221     args.emplace_back(Str8ToStr16("-h"));
1222     ASSERT_EQ(RET_SUCCESS, atManagerService_->Dump(fd, args));
1223 
1224     args.clear();
1225     // hidumper -a
1226     args.emplace_back(Str8ToStr16("-a"));
1227     ASSERT_EQ(RET_SUCCESS, atManagerService_->Dump(fd, args));
1228 
1229     args.clear();
1230     // hidumper -t
1231     args.emplace_back(Str8ToStr16("-t"));
1232     ASSERT_NE(RET_SUCCESS, atManagerService_->Dump(fd, args));
1233 
1234     args.clear();
1235     // hidumper -t
1236     args.emplace_back(Str8ToStr16("-t"));
1237     args.emplace_back(Str8ToStr16("-1")); // illegal tokenId
1238     ASSERT_NE(RET_SUCCESS, atManagerService_->Dump(fd, args));
1239 
1240     args.clear();
1241     // hidumper -t
1242     args.emplace_back(Str8ToStr16("-t"));
1243     args.emplace_back(Str8ToStr16("123")); // invalid tokenId
1244     ASSERT_EQ(RET_SUCCESS, atManagerService_->Dump(fd, args));
1245 }
1246 
1247 /**
1248  * @tc.name: DumpTokenInfo001
1249  * @tc.desc: Test DumpTokenInfo with invalid tokenId.
1250  * @tc.type: FUNC
1251  * @tc.require: issueI4V02P
1252  */
1253 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo001, TestSize.Level1)
1254 {
1255     std::string dumpInfo;
1256     AtmToolsParamInfo info;
1257     info.tokenId = static_cast<AccessTokenID>(0);
1258     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1259     EXPECT_EQ(false, dumpInfo.empty());
1260 
1261     dumpInfo.clear();
1262     info.tokenId = static_cast<AccessTokenID>(123);
1263     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1264     EXPECT_EQ("invalid tokenId", dumpInfo);
1265 }
1266 
1267 /**
1268  * @tc.name: DumpTokenInfo002
1269  * @tc.desc: Test DumpTokenInfo with hap tokenId.
1270  * @tc.type: FUNC
1271  * @tc.require: issueI4V02P
1272  */
1273 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo002, TestSize.Level1)
1274 {
1275     AccessTokenIDEx tokenIdEx = {0};
1276     AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
1277         g_infoManagerTestPolicyPrams1, tokenIdEx);
1278 
1279     tokenIdEx = AccessTokenInfoManager::GetInstance().GetHapTokenID(g_infoManagerTestInfoParms.userID,
1280         g_infoManagerTestInfoParms.bundleName, g_infoManagerTestInfoParms.instIndex);
1281     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
1282     EXPECT_NE(0, static_cast<int>(tokenId));
1283     std::string dumpInfo;
1284     AtmToolsParamInfo info;
1285     info.tokenId = tokenId;
1286     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1287     EXPECT_EQ(false, dumpInfo.empty());
1288 
1289     int32_t ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(
1290         tokenIdEx.tokenIdExStruct.tokenID);
1291     ASSERT_EQ(RET_SUCCESS, ret);
1292     GTEST_LOG_(INFO) << "remove the token info";
1293 }
1294 
1295 /**
1296  * @tc.name: DumpTokenInfo003
1297  * @tc.desc: Test DumpTokenInfo with native tokenId.
1298  * @tc.type: FUNC
1299  * @tc.require: issueI4V02P
1300  */
1301 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo003, TestSize.Level1)
1302 {
1303     std::string dumpInfo;
1304     AtmToolsParamInfo info;
1305     info.tokenId = AccessTokenInfoManager::GetInstance().GetNativeTokenId("accesstoken_service");
1306     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1307     EXPECT_EQ(false, dumpInfo.empty());
1308 }
1309 
1310 /**
1311  * @tc.name: DumpTokenInfo004
1312  * @tc.desc: Test DumpTokenInfo with shell tokenId.
1313  * @tc.type: FUNC
1314  * @tc.require: issueI4V02P
1315  */
1316 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo004, TestSize.Level1)
1317 {
1318     std::string dumpInfo;
1319     AtmToolsParamInfo info;
1320     info.tokenId = AccessTokenInfoManager::GetInstance().GetNativeTokenId("hdcd");
1321     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1322     EXPECT_EQ(false, dumpInfo.empty());
1323 }
1324 
1325 /**
1326  * @tc.name: DumpTokenInfo006
1327  * @tc.desc: Test DumpTokenInfo with native processName.
1328  * @tc.type: FUNC
1329  * @tc.require: issueI4V02P
1330  */
1331 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo006, TestSize.Level1)
1332 {
1333     std::string dumpInfo;
1334     AtmToolsParamInfo info;
1335     info.processName = "hdcd";
1336     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1337     EXPECT_EQ(false, dumpInfo.empty());
1338 }
1339 
1340 /**
1341  * @tc.name: DumpTokenInfo007
1342  * @tc.desc: Test DumpTokenInfo with hap bundleName.
1343  * @tc.type: FUNC
1344  * @tc.require: issueI4V02P
1345  */
1346 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo007, TestSize.Level1)
1347 {
1348     AccessTokenIDEx tokenIdEx = {0};
1349     AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
1350         g_infoManagerTestPolicyPrams1, tokenIdEx);
1351 
1352     tokenIdEx = AccessTokenInfoManager::GetInstance().GetHapTokenID(g_infoManagerTestInfoParms.userID,
1353         g_infoManagerTestInfoParms.bundleName, g_infoManagerTestInfoParms.instIndex);
1354     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
1355     EXPECT_NE(0, static_cast<int>(tokenId));
1356 
1357     std::string dumpInfo;
1358     AtmToolsParamInfo info;
1359     info.bundleName = g_infoManagerTestInfoParms.bundleName;
1360     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo);
1361     EXPECT_EQ(false, dumpInfo.empty());
1362 
1363     int32_t ret = AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(
1364         tokenIdEx.tokenIdExStruct.tokenID);
1365     ASSERT_EQ(RET_SUCCESS, ret);
1366 }
1367 
1368 /**
1369  * @tc.name: AccessTokenInfoManager001
1370  * @tc.desc: AccessTokenInfoManager::~AccessTokenInfoManager+Init function test hasInited_ is false
1371  * @tc.type: FUNC
1372  * @tc.require:
1373  */
1374 HWTEST_F(AccessTokenInfoManagerTest, AccessTokenInfoManager001, TestSize.Level1)
1375 {
1376     AccessTokenInfoManager::GetInstance().hasInited_ = true;
1377     AccessTokenInfoManager::GetInstance().Init();
1378     AccessTokenInfoManager::GetInstance().hasInited_ = false;
1379     ASSERT_EQ(false, AccessTokenInfoManager::GetInstance().hasInited_);
1380 }
1381 
1382 /**
1383  * @tc.name: GetHapUniqueStr001
1384  * @tc.desc: AccessTokenInfoManager::GetHapUniqueStr function test info is null
1385  * @tc.type: FUNC
1386  * @tc.require:
1387  */
1388 HWTEST_F(AccessTokenInfoManagerTest, GetHapUniqueStr001, TestSize.Level1)
1389 {
1390     std::shared_ptr<HapTokenInfoInner> info = nullptr;
1391     ASSERT_EQ("", AccessTokenInfoManager::GetInstance().GetHapUniqueStr(info));
1392 }
1393 
1394 /**
1395  * @tc.name: AddHapTokenInfo001
1396  * @tc.desc: AccessTokenInfoManager::AddHapTokenInfo function test info is null
1397  * @tc.type: FUNC
1398  * @tc.require:
1399  */
1400 HWTEST_F(AccessTokenInfoManagerTest, AddHapTokenInfo001, TestSize.Level1)
1401 {
1402     std::shared_ptr<HapTokenInfoInner> info = nullptr;
1403     ASSERT_NE(0, AccessTokenInfoManager::GetInstance().AddHapTokenInfo(info));
1404 }
1405 
1406 /**
1407  * @tc.name: AddHapTokenInfo002
1408  * @tc.desc: AccessTokenInfoManager::AddHapTokenInfo function test count(id) > 0
1409  * @tc.type: FUNC
1410  * @tc.require:
1411  */
1412 HWTEST_F(AccessTokenInfoManagerTest, AddHapTokenInfo002, TestSize.Level1)
1413 {
1414     HapInfoParams info = {
1415         .userID = USER_ID,
1416         .bundleName = "accesstoken_info_manager_test",
1417         .instIndex = INST_INDEX,
1418         .appIDDesc = "accesstoken_info_manager_test"
1419     };
1420     HapPolicyParams policy = {
1421         .apl = APL_NORMAL,
1422         .domain = "domain"
1423     };
1424     AccessTokenIDEx tokenIdEx = {0};
1425     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(info, policy, tokenIdEx));
1426     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
1427     ASSERT_NE(static_cast<AccessTokenID>(0), tokenId);
1428 
1429     std::shared_ptr<HapTokenInfoInner> infoPtr = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenId);
1430     ASSERT_NE(0, AccessTokenInfoManager::GetInstance().AddHapTokenInfo(infoPtr));
1431 
1432     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
1433 }
1434 
1435 /**
1436  * @tc.name: GetHapTokenID002
1437  * @tc.desc: test GetHapTokenID function abnomal branch
1438  * @tc.type: FUNC
1439  * @tc.require: issueI60F1M
1440  */
1441 HWTEST_F(AccessTokenInfoManagerTest, GetHapTokenID002, TestSize.Level1)
1442 {
1443     AccessTokenIDEx tokenIdEx = AccessTokenInfoManager::GetInstance().GetHapTokenID(
1444         USER_ID, "com.ohos.test", INST_INDEX);
1445     ASSERT_EQ(static_cast<AccessTokenID>(0), tokenIdEx.tokenIDEx);
1446 }
1447 
1448 /**
1449  * @tc.name: AddNativeTokenInfo001
1450  * @tc.desc: AccessTokenInfoManager::AddNativeTokenInfo function test
1451  * @tc.type: FUNC
1452  * @tc.require: issueI62M6G
1453  */
1454 HWTEST_F(AccessTokenInfoManagerTest, AddNativeTokenInfo001, TestSize.Level1)
1455 {
1456     std::shared_ptr<NativeTokenInfoInner> info = nullptr;
1457     ASSERT_EQ(ERR_PARAM_INVALID, AccessTokenInfoManager::GetInstance().AddNativeTokenInfo(info)); // info is null
1458 
1459     AccessTokenID tokenId = AccessTokenInfoManager::GetInstance().GetNativeTokenId("accesstoken_service");
1460     info = std::make_shared<NativeTokenInfoInner>();
1461     info->tokenInfoBasic_.tokenID = tokenId;
1462     ASSERT_EQ(ERR_TOKENID_NOT_EXIST, AccessTokenInfoManager::GetInstance().AddNativeTokenInfo(info)); // count(id) > 0
1463 
1464     // 672137215 is max native tokenId: 001 01 0 000000 11111111111111111111
1465     info->tokenInfoBasic_.tokenID = 672137215;
1466     info->tokenInfoBasic_.processName = "accesstoken_service";
1467     // 672137214 is max-1 native tokenId: 001 01 0 000000 11111111111111111110
1468     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_[672137214] = info;
1469     // count(processName) > 0
1470     ASSERT_EQ(ERR_PROCESS_NOT_EXIST, AccessTokenInfoManager::GetInstance().AddNativeTokenInfo(info));
1471 
1472     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_.erase(672137214);
1473 }
1474 
1475 /**
1476  * @tc.name: RemoveNativeTokenInfo001
1477  * @tc.desc: AccessTokenInfoManager::RemoveNativeTokenInfo function test
1478  * @tc.type: FUNC
1479  * @tc.require: issueI62M6G
1480  */
1481 HWTEST_F(AccessTokenInfoManagerTest, RemoveNativeTokenInfo001, TestSize.Level1)
1482 {
1483     AccessTokenID tokenId = 672137215; // 672137215 is max native tokenId: 001 01 0 000000 11111111111111111111
1484     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveNativeTokenInfo(tokenId)); // count(id) == 0
1485 
1486     std::shared_ptr<NativeTokenInfoInner> info = std::make_shared<NativeTokenInfoInner>();
1487     info->isRemote_ = true;
1488     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_[tokenId] = info;
1489     ASSERT_NE(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveNativeTokenInfo(tokenId)); // remote is true
1490     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_.erase(tokenId);
1491 
1492     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_NATIVE));
1493     info->isRemote_ = false;
1494     info->tokenInfoBasic_.processName = "testtesttest";
1495     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_[tokenId] = info;
1496     // count(processName) == 0
1497     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveNativeTokenInfo(tokenId)); // erase in function
1498     AccessTokenIDManager::GetInstance().ReleaseTokenId(tokenId);
1499 }
1500 
1501 /**
1502  * @tc.name: TryUpdateExistNativeToken001
1503  * @tc.desc: AccessTokenInfoManager::TryUpdateExistNativeToken function test
1504  * @tc.type: FUNC
1505  * @tc.require:
1506  */
1507 HWTEST_F(AccessTokenInfoManagerTest, TryUpdateExistNativeToken001, TestSize.Level1)
1508 {
1509     std::shared_ptr<NativeTokenInfoInner> infoPtr = nullptr;
1510     ASSERT_EQ(false, AccessTokenInfoManager::GetInstance().TryUpdateExistNativeToken(infoPtr)); // infoPtr is null
1511 }
1512 
1513 /**
1514  * @tc.name: ProcessNativeTokenInfos001
1515  * @tc.desc: AccessTokenInfoManager::ProcessNativeTokenInfos function test AddNativeTokenInfo fail
1516  * @tc.type: FUNC
1517  * @tc.require:
1518  */
1519 HWTEST_F(AccessTokenInfoManagerTest, ProcessNativeTokenInfos001, TestSize.Level1)
1520 {
1521     AccessTokenID tokenId = 672137215; // 672137215 is max native tokenId: 001 01 0 000000 11111111111111111111
1522     AccessTokenID tokenId2 = 672137214; // 672137214: 001 01 0 000000 11111111111111111110
1523     std::vector<std::shared_ptr<NativeTokenInfoInner>> tokenInfos;
1524     std::shared_ptr<NativeTokenInfoInner> info = std::make_shared<NativeTokenInfoInner>();
1525     info->tokenInfoBasic_.tokenID = tokenId2;
1526     info->tokenInfoBasic_.processName = "testtesttest";
1527     ASSERT_NE("", info->tokenInfoBasic_.processName);
1528     tokenInfos.emplace_back(info);
1529     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_[tokenId] = info;
1530     AccessTokenInfoManager::GetInstance().nativeTokenIdMap_["testtesttest"] = tokenId;
1531     AccessTokenInfoManager::GetInstance().ProcessNativeTokenInfos(tokenInfos);
1532     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_.erase(tokenId);
1533     AccessTokenInfoManager::GetInstance().nativeTokenIdMap_.erase("testtesttest");
1534 }
1535 
1536 /**
1537  * @tc.name: Insert001
1538  * @tc.desc: PermissionDefinitionCache::Insert function test
1539  * @tc.type: FUNC
1540  * @tc.require:
1541  */
1542 HWTEST_F(AccessTokenInfoManagerTest, Insert001, TestSize.Level1)
1543 {
1544     PermissionDef info = {
1545         .permissionName = "ohos.permission.CAMERA",
1546         .bundleName = "com.ohos.test",
1547         .grantMode = 0,
1548         .availableLevel = ATokenAplEnum::APL_NORMAL,
1549         .provisionEnable = false,
1550         .distributedSceneEnable = false,
1551         .label = "buzhidao",
1552         .labelId = 100, // 100 is random input
1553         .description = "buzhidao",
1554         .descriptionId = 100 // 100 is random input
1555     };
1556     AccessTokenID tokenId = 123; // 123 is random input
1557 
1558     ASSERT_EQ(false, PermissionDefinitionCache::GetInstance().Insert(info, tokenId)); // permission has insert
1559 }
1560 
1561 /**
1562  * @tc.name: IsGrantedModeEqualInner001
1563  * @tc.desc: PermissionDefinitionCache::IsGrantedModeEqualInner function test
1564  * @tc.type: FUNC
1565  * @tc.require:
1566  */
1567 HWTEST_F(AccessTokenInfoManagerTest, IsGrantedModeEqualInner001, TestSize.Level1)
1568 {
1569     std::string permissionName = "ohos.permission.CAMERA";
1570     int grantMode = 0;
1571 
1572     // find permission not reach end
1573     ASSERT_EQ(true, PermissionDefinitionCache::GetInstance().IsGrantedModeEqualInner(permissionName, grantMode));
1574 
1575     permissionName = "ohos.permission.INVALID";
1576     // can't find permission
1577     ASSERT_EQ(false, PermissionDefinitionCache::GetInstance().IsGrantedModeEqualInner(permissionName, grantMode));
1578 }
1579 
1580 /**
1581  * @tc.name: RestorePermDefInfo001
1582  * @tc.desc: PermissionDefinitionCache::RestorePermDefInfo function test
1583  * @tc.type: FUNC
1584  * @tc.require:
1585  */
1586 HWTEST_F(AccessTokenInfoManagerTest, RestorePermDefInfo001, TestSize.Level1)
1587 {
1588     GenericValues value;
1589     value.Put(TokenFiledConst::FIELD_AVAILABLE_LEVEL, ATokenAplEnum::APL_INVALID);
1590 
1591     std::vector<GenericValues> values;
1592     values.emplace_back(value);
1593 
1594     // ret not RET_SUCCESS
1595     ASSERT_NE(RET_SUCCESS, PermissionDefinitionCache::GetInstance().RestorePermDefInfo(values));
1596 }
1597 
1598 /**
1599  * @tc.name: IsPermissionDefValid001
1600  * @tc.desc: PermissionValidator::IsPermissionDefValid function test
1601  * @tc.type: FUNC
1602  * @tc.require:
1603  */
1604 HWTEST_F(AccessTokenInfoManagerTest, IsPermissionDefValid001, TestSize.Level1)
1605 {
1606     PermissionDef permDef = {
1607         .permissionName = "ohos.permission.TEST",
1608         .bundleName = "com.ohos.test",
1609         .grantMode = static_cast<GrantMode>(2),
1610         .availableLevel = ATokenAplEnum::APL_NORMAL,
1611         .provisionEnable = false,
1612         .distributedSceneEnable = false,
1613         .label = "buzhidao",
1614         .labelId = 100, // 100 is random input
1615         .description = "buzhidao",
1616         .descriptionId = 100 // 100 is random input
1617     };
1618 
1619     // ret not RET_SUCCESS
1620     ASSERT_EQ(false, PermissionValidator::IsPermissionDefValid(permDef)); // grant mode invalid
1621 
1622     permDef.grantMode = GrantMode::USER_GRANT;
1623     permDef.availableType = ATokenAvailableTypeEnum::INVALID;
1624     ASSERT_EQ(false, PermissionValidator::IsPermissionDefValid(permDef)); // availableType invalid
1625 }
1626 
1627 /**
1628  * @tc.name: IsPermissionStateValid001
1629  * @tc.desc: PermissionValidator::IsPermissionStateValid function test
1630  * @tc.type: FUNC
1631  * @tc.require:
1632  */
1633 HWTEST_F(AccessTokenInfoManagerTest, IsPermissionStateValid001, TestSize.Level1)
1634 {
1635     std::string permissionName;
1636     std::string deviceID = "dev-001";
1637     int grantState = PermissionState::PERMISSION_DENIED;
1638     uint32_t grantFlag = PermissionFlag::PERMISSION_DEFAULT_FLAG;
1639 
1640     std::vector<std::string> resDeviceID;
1641     std::vector<int> grantStates;
1642     std::vector<uint32_t> grantFlags;
1643 
1644     resDeviceID.emplace_back(deviceID);
1645     grantStates.emplace_back(grantState);
1646     grantFlags.emplace_back(grantFlag);
1647 
1648     PermissionStateFull permState = {
1649         .permissionName = permissionName,
1650         .isGeneral = false,
1651         .resDeviceID = resDeviceID,
1652         .grantStatus = grantStates,
1653         .grantFlags = grantFlags
1654     };
1655 
1656     ASSERT_EQ(false, PermissionValidator::IsPermissionStateValid(permState)); // permissionName empty
1657 
1658     permState.permissionName = "com.ohos.TEST";
1659     permState.resDeviceID.emplace_back("dev-002");
1660     // deviceID nums not equal status nums or flag nums
1661     ASSERT_EQ(false, PermissionValidator::IsPermissionStateValid(permState));
1662 
1663     permState.grantStatus.emplace_back(PermissionState::PERMISSION_DENIED);
1664     // deviceID nums not equal flag nums
1665     ASSERT_EQ(false, PermissionValidator::IsPermissionStateValid(permState));
1666 
1667     permState.grantFlags.emplace_back(PermissionFlag::PERMISSION_DEFAULT_FLAG);
1668     ASSERT_EQ(true, PermissionValidator::IsPermissionStateValid(permState));
1669 }
1670 
1671 /**
1672  * @tc.name: FilterInvalidPermissionDef001
1673  * @tc.desc: PermissionValidator::FilterInvalidPermissionDef function test
1674  * @tc.type: FUNC
1675  * @tc.require:
1676  */
1677 HWTEST_F(AccessTokenInfoManagerTest, FilterInvalidPermissionDef001, TestSize.Level1)
1678 {
1679     PermissionDef permDef = {
1680         .permissionName = "ohos.permission.TEST",
1681         .bundleName = "com.ohos.test",
1682         .grantMode = GrantMode::SYSTEM_GRANT,
1683         .availableLevel = ATokenAplEnum::APL_NORMAL,
1684         .provisionEnable = false,
1685         .distributedSceneEnable = false,
1686         .label = "buzhidao",
1687         .labelId = 100, // 100 is random input
1688         .description = "buzhidao",
1689         .descriptionId = 100 // 100 is random input
1690     };
1691 
1692     std::vector<PermissionDef> permList;
1693     permList.emplace_back(permDef);
1694     permList.emplace_back(permDef);
1695 
1696     ASSERT_EQ(static_cast<uint32_t>(2), permList.size());
1697 
1698     std::vector<PermissionDef> result;
1699     PermissionValidator::FilterInvalidPermissionDef(permList, result); // permDefSet.count != 0
1700     ASSERT_EQ(static_cast<uint32_t>(1), result.size());
1701 }
1702 
1703 /**
1704  * @tc.name: DeduplicateResDevID001
1705  * @tc.desc: PermissionValidator::DeduplicateResDevID function test
1706  * @tc.type: FUNC
1707  * @tc.require:
1708  */
1709 HWTEST_F(AccessTokenInfoManagerTest, DeduplicateResDevID001, TestSize.Level1)
1710 {
1711     GTEST_LOG_(INFO) << "DeduplicateResDevID001";
1712     PermissionStateFull permState = {
1713         .permissionName = "ohos.permission.TEST",
1714         .isGeneral = false,
1715         .resDeviceID = {"dev-001", "dev-001"},
1716         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1717         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1718     };
1719     GTEST_LOG_(INFO) << "DeduplicateResDevID001_1";
1720     ASSERT_EQ(static_cast<uint32_t>(2), permState.resDeviceID.size());
1721 
1722     std::vector<PermissionStateFull> permList;
1723     permList.emplace_back(permState);
1724     std::vector<PermissionStateFull> result;
1725     GTEST_LOG_(INFO) << "DeduplicateResDevID001_2";
1726     PermissionValidator::FilterInvalidPermissionState(TOKEN_NATIVE, false, permList, result); // resDevId.count != 0
1727     GTEST_LOG_(INFO) << "DeduplicateResDevID001_3";
1728     ASSERT_EQ(static_cast<uint32_t>(1), result[0].resDeviceID.size());
1729 }
1730 
1731 /**
1732  * @tc.name: Update001
1733  * @tc.desc: PermissionPolicySet::Update function test
1734  * @tc.type: FUNC
1735  * @tc.require:
1736  */
1737 HWTEST_F(AccessTokenInfoManagerTest, Update001, TestSize.Level1)
1738 {
1739     PermissionStateFull perm1 = {
1740         .permissionName = "ohos.permission.TEST1",
1741         .isGeneral = false,
1742         .resDeviceID = {"dev-001", "dev-001"},
1743         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1744         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1745     };
1746     PermissionStateFull perm2 = {
1747         .permissionName = "ohos.permission.TEST2",
1748         .isGeneral = true,
1749         .resDeviceID = {"dev-001", "dev-001"},
1750         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1751         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1752     };
1753     PermissionStateFull perm3 = {
1754         .permissionName = "ohos.permission.TEST1",
1755         .isGeneral = true,
1756         .resDeviceID = {"dev-001", "dev-001"},
1757         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1758         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1759     };
1760     ASSERT_EQ(false, perm1.permissionName == perm2.permissionName);
1761     ASSERT_EQ(true, perm1.permissionName == perm3.permissionName);
1762     ASSERT_EQ(false, perm1.isGeneral == perm3.isGeneral);
1763 
1764     AccessTokenID tokenId = 123; // 123 is random input
1765     std::vector<PermissionStateFull> permStateList1;
1766     permStateList1.emplace_back(perm1);
1767     std::vector<PermissionStateFull> permStateList2;
1768     permStateList1.emplace_back(perm2);
1769     std::vector<PermissionStateFull> permStateList3;
1770     permStateList1.emplace_back(perm3);
1771 
1772     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1773         permStateList1);
1774 
1775     policySet->Update(permStateList2); // iter reach end
1776     policySet->Update(permStateList3); // permNew.isGeneral != permOld.isGeneral
1777 }
1778 
1779 /**
1780  * @tc.name: RestorePermissionPolicy001
1781  * @tc.desc: PermissionPolicySet::RestorePermissionPolicy function test
1782  * @tc.type: FUNC
1783  * @tc.require:
1784  */
1785 HWTEST_F(AccessTokenInfoManagerTest, RestorePermissionPolicy001, TestSize.Level1)
1786 {
1787     GenericValues value1;
1788     value1.Put(TokenFiledConst::FIELD_TOKEN_ID, 123); // 123 is random input
1789     value1.Put(TokenFiledConst::FIELD_GRANT_IS_GENERAL, true);
1790     value1.Put(TokenFiledConst::FIELD_PERMISSION_NAME, "ohos.permission.CAMERA");
1791     value1.Put(TokenFiledConst::FIELD_DEVICE_ID, "dev-001");
1792     value1.Put(TokenFiledConst::FIELD_GRANT_STATE, static_cast<PermissionState>(3));
1793     value1.Put(TokenFiledConst::FIELD_GRANT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG);
1794 
1795     AccessTokenID tokenId = 123; // 123 is random input
1796     std::vector<GenericValues> permStateRes1;
1797     permStateRes1.emplace_back(value1);
1798 
1799     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::RestorePermissionPolicy(tokenId,
1800         permStateRes1); // ret != RET_SUCCESS
1801 
1802     ASSERT_EQ(tokenId, policySet->tokenId_);
1803 
1804     GenericValues value2;
1805     value2.Put(TokenFiledConst::FIELD_TOKEN_ID, 123); // 123 is random input
1806     value2.Put(TokenFiledConst::FIELD_GRANT_IS_GENERAL, true);
1807     value2.Put(TokenFiledConst::FIELD_PERMISSION_NAME, "ohos.permission.CAMERA");
1808     value2.Put(TokenFiledConst::FIELD_DEVICE_ID, "dev-002");
1809     value2.Put(TokenFiledConst::FIELD_GRANT_STATE, PermissionState::PERMISSION_DENIED);
1810     value2.Put(TokenFiledConst::FIELD_GRANT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG);
1811     GenericValues value3;
1812     value3.Put(TokenFiledConst::FIELD_TOKEN_ID, 123); // 123 is random input
1813     value3.Put(TokenFiledConst::FIELD_GRANT_IS_GENERAL, true);
1814     value3.Put(TokenFiledConst::FIELD_PERMISSION_NAME, "ohos.permission.CAMERA");
1815     value3.Put(TokenFiledConst::FIELD_DEVICE_ID, "dev-003");
1816     value3.Put(TokenFiledConst::FIELD_GRANT_STATE, PermissionState::PERMISSION_DENIED);
1817     value3.Put(TokenFiledConst::FIELD_GRANT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG);
1818 
1819     std::vector<GenericValues> permStateRes2;
1820     permStateRes2.emplace_back(value2);
1821     permStateRes2.emplace_back(value3);
1822 
1823     std::shared_ptr<PermissionPolicySet> policySet2 = PermissionPolicySet::RestorePermissionPolicy(tokenId,
1824         permStateRes2); // state.permissionName == iter->permissionName
1825     ASSERT_EQ(static_cast<uint32_t>(2), policySet2->permStateList_[0].resDeviceID.size());
1826 }
1827 
1828 /**
1829  * @tc.name: VerifyPermissionStatus001
1830  * @tc.desc: PermissionPolicySet::VerifyPermissionStatus function test
1831  * @tc.type: FUNC
1832  * @tc.require:
1833  */
1834 HWTEST_F(AccessTokenInfoManagerTest, VerifyPermissionStatus001, TestSize.Level1)
1835 {
1836     PermissionStateFull perm = {
1837         .permissionName = "ohos.permission.TEST",
1838         .isGeneral = false,
1839         .resDeviceID = {"dev-001", "dev-001"},
1840         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1841         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1842     };
1843 
1844     AccessTokenID tokenId = 123; // 123 is random input
1845     std::vector<PermissionStateFull> permStateList;
1846     permStateList.emplace_back(perm);
1847 
1848     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1849         permStateList);
1850 
1851     // isGeneral is false
1852     ASSERT_EQ(PermissionState::PERMISSION_DENIED, policySet->VerifyPermissionStatus("ohos.permission.TEST"));
1853 }
1854 
1855 /**
1856  * @tc.name: QueryPermissionFlag001
1857  * @tc.desc: PermissionPolicySet::QueryPermissionFlag function test
1858  * @tc.type: FUNC
1859  * @tc.require:
1860  */
1861 HWTEST_F(AccessTokenInfoManagerTest, QueryPermissionFlag001, TestSize.Level1)
1862 {
1863     PermissionDef def = {
1864         .permissionName = "ohos.permission.TEST",
1865         .bundleName = "QueryPermissionFlag001",
1866         .grantMode = 1,
1867         .availableLevel = APL_NORMAL,
1868         .provisionEnable = false,
1869         .distributedSceneEnable = false,
1870         .label = "label",
1871         .labelId = 1,
1872         .description = "description",
1873         .descriptionId = 1
1874     };
1875     PermissionStateFull perm = {
1876         .permissionName = "ohos.permission.TEST",
1877         .isGeneral = false,
1878         .resDeviceID = {"dev-001", "dev-001"},
1879         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1880         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1881     };
1882 
1883     AccessTokenID tokenId = 0x280bc140; // 0x280bc140 is random native
1884     PermissionDefinitionCache::GetInstance().Insert(def, tokenId);
1885     std::vector<PermissionStateFull> permStateList;
1886     permStateList.emplace_back(perm);
1887 
1888     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1889         permStateList);
1890 
1891     // perm.permissionName != permissionName
1892     int flag = 0;
1893     ASSERT_EQ(ERR_PERMISSION_NOT_EXIST, policySet->QueryPermissionFlag("ohos.permission.TEST1", flag));
1894     // isGeneral is false
1895     ASSERT_EQ(ERR_PARAM_INVALID, policySet->QueryPermissionFlag("ohos.permission.TEST", flag));
1896 
1897     perm.isGeneral = true;
1898     std::shared_ptr<PermissionPolicySet> policySet1 = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1899         permStateList);
1900     // isGeneral is true
1901     ASSERT_EQ(ERR_PARAM_INVALID, policySet1->QueryPermissionFlag("ohos.permission.TEST", flag));
1902 }
1903 
1904 /**
1905  * @tc.name: UpdatePermissionStatus001
1906  * @tc.desc: PermissionPolicySet::UpdatePermissionStatus function test
1907  * @tc.type: FUNC
1908  * @tc.require:
1909  */
1910 HWTEST_F(AccessTokenInfoManagerTest, UpdatePermissionStatus001, TestSize.Level1)
1911 {
1912     PermissionStateFull perm = {
1913         .permissionName = "ohos.permission.TEST",
1914         .isGeneral = false,
1915         .resDeviceID = {"dev-001", "dev-001"},
1916         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1917         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1918     };
1919 
1920     AccessTokenID tokenId = 789; // 789 is random input
1921     std::vector<PermissionStateFull> permStateList;
1922     permStateList.emplace_back(perm);
1923 
1924     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1925         permStateList);
1926 
1927     // iter reach the end
1928     bool isGranted = false;
1929     uint32_t flag = PermissionFlag::PERMISSION_DEFAULT_FLAG;
1930     ASSERT_EQ(ERR_PARAM_INVALID, policySet->UpdatePermissionStatus("ohos.permission.TEST1",
1931         isGranted, flag));
1932 
1933     // isGeneral is false
1934     ASSERT_EQ(RET_SUCCESS, policySet->UpdatePermissionStatus("ohos.permission.TEST",
1935         isGranted, flag));
1936 }
1937 
1938 /**
1939  * @tc.name: ResetUserGrantPermissionStatus001
1940  * @tc.desc: PermissionPolicySet::ResetUserGrantPermissionStatus function test
1941  * @tc.type: FUNC
1942  * @tc.require:
1943  */
1944 HWTEST_F(AccessTokenInfoManagerTest, ResetUserGrantPermissionStatus001, TestSize.Level1)
1945 {
1946     PermissionStateFull perm = {
1947         .permissionName = "ohos.permission.TEST",
1948         .isGeneral = false,
1949         .resDeviceID = {"dev-001", "dev-001"},
1950         .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED},
1951         .grantFlags = {PermissionFlag::PERMISSION_DEFAULT_FLAG, PermissionFlag::PERMISSION_DEFAULT_FLAG}
1952     };
1953 
1954     AccessTokenID tokenId = 1011; // 1011 is random input
1955     std::vector<PermissionStateFull> permStateList;
1956     permStateList.emplace_back(perm);
1957 
1958     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1959         permStateList);
1960 
1961     ASSERT_EQ(tokenId, policySet->tokenId_);
1962 
1963     // isGeneral is false
1964     policySet->ResetUserGrantPermissionStatus();
1965 }
1966 
1967 /**
1968  * @tc.name: PermStateFullToString001
1969  * @tc.desc: PermissionPolicySet::PermStateFullToString function test
1970  * @tc.type: FUNC
1971  * @tc.require:
1972  */
1973 HWTEST_F(AccessTokenInfoManagerTest, PermStateFullToString001, TestSize.Level1)
1974 {
1975     AccessTokenID tokenId = 123; // 123 is random input
1976     std::vector<PermissionStateFull> permStateList;
1977     permStateList.emplace_back(g_permState);
1978 
1979     std::shared_ptr<PermissionPolicySet> policySet = PermissionPolicySet::BuildPermissionPolicySet(tokenId,
1980         permStateList);
1981 
1982     ASSERT_EQ(tokenId, policySet->tokenId_);
1983 
1984     std::string info;
1985     // iter != end - 1
1986     policySet->PermStateFullToString(g_permState, info);
1987 }
1988 
1989 #ifdef TOKEN_SYNC_ENABLE
1990 /**
1991  * @tc.name: MapRemoteDeviceTokenToLocal001
1992  * @tc.desc: AccessTokenRemoteTokenManager::MapRemoteDeviceTokenToLocal function test
1993  * @tc.type: FUNC
1994  * @tc.require:
1995  */
1996 HWTEST_F(AccessTokenInfoManagerTest, MapRemoteDeviceTokenToLocal001, TestSize.Level1)
1997 {
1998     std::map<std::string, AccessTokenRemoteDevice> remoteDeviceMap;
1999     remoteDeviceMap = AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_; // backup
2000     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_.clear();
2001 
2002     std::string deviceID;
2003     AccessTokenID remoteID = 0;
2004 
2005     // input invalid
2006     ASSERT_EQ(static_cast<AccessTokenID>(0),
2007         AccessTokenRemoteTokenManager::GetInstance().MapRemoteDeviceTokenToLocal(deviceID, remoteID));
2008 
2009     remoteID = 940572671; // 940572671 is max butt tokenId: 001 11 0 000000 11111111111111111111
2010     deviceID = "dev-001";
2011 
2012     // tokeType invalid
2013     ASSERT_EQ(static_cast<AccessTokenID>(0),
2014         AccessTokenRemoteTokenManager::GetInstance().MapRemoteDeviceTokenToLocal(deviceID, remoteID));
2015 
2016     remoteID = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111, no need to register
2017     std::map<AccessTokenID, AccessTokenID> MappingTokenIDPairMap;
2018     MappingTokenIDPairMap[537919487] = 456; // 456 is random input
2019     AccessTokenRemoteDevice device = {
2020         .DeviceID_ = "dev-001",
2021         .MappingTokenIDPairMap_ = MappingTokenIDPairMap
2022     };
2023     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_["dev-001"] = device;
2024 
2025     // count(remoteID) > 0
2026     ASSERT_EQ(static_cast<AccessTokenID>(456),
2027         AccessTokenRemoteTokenManager::GetInstance().MapRemoteDeviceTokenToLocal(deviceID, remoteID));
2028 
2029     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_ = remoteDeviceMap; // recovery
2030 }
2031 
2032 /**
2033  * @tc.name: GetDeviceAllRemoteTokenID001
2034  * @tc.desc: AccessTokenRemoteTokenManager::GetDeviceAllRemoteTokenID function test
2035  * @tc.type: FUNC
2036  * @tc.require:
2037  */
2038 HWTEST_F(AccessTokenInfoManagerTest, GetDeviceAllRemoteTokenID001, TestSize.Level1)
2039 {
2040     std::string deviceID;
2041     std::vector<AccessTokenID> remoteIDs;
2042 
2043     // deviceID invalid
2044     ASSERT_EQ(ERR_PARAM_INVALID,
2045         AccessTokenRemoteTokenManager::GetInstance().GetDeviceAllRemoteTokenID(deviceID, remoteIDs));
2046 }
2047 
2048 /**
2049  * @tc.name: RemoveDeviceMappingTokenID001
2050  * @tc.desc: AccessTokenRemoteTokenManager::RemoveDeviceMappingTokenID function test
2051  * @tc.type: FUNC
2052  * @tc.require:
2053  */
2054 HWTEST_F(AccessTokenInfoManagerTest, RemoveDeviceMappingTokenID001, TestSize.Level1)
2055 {
2056     std::map<std::string, AccessTokenRemoteDevice> remoteDeviceMap;
2057     remoteDeviceMap = AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_; // backup
2058     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_.clear();
2059 
2060     std::string deviceID;
2061     AccessTokenID remoteID = 0;
2062 
2063     // input invalid
2064     ASSERT_NE(RET_SUCCESS,
2065         AccessTokenRemoteTokenManager::GetInstance().RemoveDeviceMappingTokenID(deviceID, remoteID));
2066 
2067     deviceID = "dev-001";
2068     remoteID = 123; // 123 is random input
2069 
2070     // count < 1
2071     ASSERT_NE(RET_SUCCESS,
2072         AccessTokenRemoteTokenManager::GetInstance().RemoveDeviceMappingTokenID(deviceID, remoteID));
2073 
2074     AccessTokenRemoteTokenManager::GetInstance().remoteDeviceMap_ = remoteDeviceMap; // recovery
2075 }
2076 
2077 /**
2078  * @tc.name: AddHapTokenObservation001
2079  * @tc.desc: TokenModifyNotifier::AddHapTokenObservation function test
2080  * @tc.type: FUNC
2081  * @tc.require:
2082  */
2083 HWTEST_F(AccessTokenInfoManagerTest, AddHapTokenObservation001, TestSize.Level1)
2084 {
2085     std::set<AccessTokenID> observationSet = TokenModifyNotifier::GetInstance().observationSet_; // backup
2086     TokenModifyNotifier::GetInstance().observationSet_.clear();
2087 
2088     AccessTokenID tokenId = 123; // 123 is random input
2089 
2090     TokenModifyNotifier::GetInstance().observationSet_.insert(tokenId);
2091     ASSERT_EQ(true, TokenModifyNotifier::GetInstance().observationSet_.count(tokenId) > 0);
2092 
2093     // count > 0
2094     TokenModifyNotifier::GetInstance().AddHapTokenObservation(tokenId);
2095     TokenModifyNotifier::GetInstance().NotifyTokenModify(tokenId);
2096 
2097     TokenModifyNotifier::GetInstance().observationSet_ = observationSet; // recovery
2098 }
2099 #endif
2100 
2101 /**
2102  * @tc.name: RestoreNativeTokenInfo001
2103  * @tc.desc: NativeTokenInfoInner::RestoreNativeTokenInfo function test
2104  * @tc.type: FUNC
2105  * @tc.require:
2106  */
2107 HWTEST_F(AccessTokenInfoManagerTest, RestoreNativeTokenInfo001, TestSize.Level1)
2108 {
2109     std::shared_ptr<NativeTokenInfoInner> native = std::make_shared<NativeTokenInfoInner>();
2110     ASSERT_NE(nullptr, native);
2111 
2112     std::string info;
2113     native->ToString(info); // permPolicySet_ is null
2114 
2115     AccessTokenID tokenId = 0;
2116     std::string processName;
2117     int apl = static_cast<int>(ATokenAplEnum::APL_INVALID);
2118     int version = 10; // 10 is random input which only need not equal 1
2119     std::vector<std::string> dcap;
2120     std::vector<std::string> nativeAcls;
2121     std::vector<PermissionStateFull> permStateList;
2122     GenericValues inGenericValues;
2123     std::vector<GenericValues> permStateRes;
2124 
2125     // processName invalid
2126     TokenInfo tokenInfo = {
2127         .id = tokenId,
2128         .processName = processName,
2129         .apl = apl
2130     };
2131     ASSERT_NE(RET_SUCCESS, native->Init(tokenInfo, dcap, nativeAcls, permStateList));
2132 
2133     inGenericValues.Put(TokenFiledConst::FIELD_PROCESS_NAME, processName);
2134     // processName invalid
2135     ASSERT_NE(RET_SUCCESS, native->RestoreNativeTokenInfo(tokenId, inGenericValues, permStateRes));
2136     inGenericValues.Remove(TokenFiledConst::FIELD_PROCESS_NAME);
2137 
2138     tokenInfo.processName = "token_sync";
2139     // apl invalid
2140     ASSERT_NE(RET_SUCCESS, native->Init(tokenInfo, dcap, nativeAcls, permStateList));
2141 
2142     inGenericValues.Put(TokenFiledConst::FIELD_PROCESS_NAME, processName);
2143     inGenericValues.Put(TokenFiledConst::FIELD_APL, apl);
2144     // apl invalid
2145     ASSERT_NE(RET_SUCCESS, native->RestoreNativeTokenInfo(tokenId, inGenericValues, permStateRes));
2146     inGenericValues.Remove(TokenFiledConst::FIELD_APL);
2147 
2148     apl = static_cast<int>(ATokenAplEnum::APL_NORMAL);
2149     inGenericValues.Put(TokenFiledConst::FIELD_APL, apl);
2150     inGenericValues.Put(TokenFiledConst::FIELD_TOKEN_VERSION, version);
2151     // version invalid
2152     ASSERT_NE(RET_SUCCESS, native->RestoreNativeTokenInfo(tokenId, inGenericValues, permStateRes));
2153 }
2154 
2155 /**
2156  * @tc.name: Init001
2157  * @tc.desc: NativeTokenInfoInner::Init function test
2158  * @tc.type: FUNC
2159  * @tc.require:
2160  */
2161 HWTEST_F(AccessTokenInfoManagerTest, Init001, TestSize.Level1)
2162 {
2163     std::shared_ptr<NativeTokenInfoInner> native = std::make_shared<NativeTokenInfoInner>();
2164     ASSERT_NE(nullptr, native);
2165 
2166     AccessTokenID tokenId = 0;
2167     std::string processName = "tdd_0112";
2168     int apl = static_cast<int>(ATokenAplEnum::APL_NORMAL);
2169     std::vector<std::string> dcap;
2170     std::vector<std::string> nativeAcls;
2171     std::vector<PermissionStateFull> permStateList;
2172 
2173     // processName invalid
2174     TokenInfo tokenInfo = {
2175         .id = tokenId,
2176         .processName = processName,
2177         .apl = apl
2178     };
2179     ASSERT_EQ(RET_SUCCESS, native->Init(tokenInfo, dcap, nativeAcls, permStateList));
2180     native->GetNativeAcls();
2181     native->SetRemote(true);
2182     ASSERT_EQ(true, native->IsRemote());
2183 }
2184 
2185 /**
2186  * @tc.name: RestoreHapTokenInfo001
2187  * @tc.desc: HapTokenInfoInner::RestoreHapTokenInfo function test
2188  * @tc.type: FUNC
2189  * @tc.require:
2190  */
2191 HWTEST_F(AccessTokenInfoManagerTest, RestoreHapTokenInfo001, TestSize.Level1)
2192 {
2193     std::shared_ptr<HapTokenInfoInner> hap = std::make_shared<HapTokenInfoInner>();
2194     ASSERT_NE(nullptr, hap);
2195 
2196     AccessTokenID tokenId = 0;
2197     GenericValues tokenValue;
2198     std::vector<GenericValues> permStateRes;
2199     std::string bundleName;
2200     std::string appIDDesc;
2201     std::string deviceID;
2202     int aplNum = static_cast<int>(ATokenAplEnum::APL_INVALID);
2203     int version = 10; // 10 is random input which only need not equal 1
2204     HapPolicyParams policy;
2205     UpdateHapInfoParams hapInfo;
2206     hapInfo.apiVersion = DEFAULT_API_VERSION;
2207     hapInfo.isSystemApp = false;
2208     hap->Update(hapInfo, policy.permStateList, policy.apl); // permPolicySet_ is null
2209 
2210     std::string info;
2211     hap->ToString(info); // permPolicySet_ is null
2212 
2213     std::vector<GenericValues> hapInfoValues;
2214     std::vector<GenericValues> permStateValues;
2215     hap->StoreHapInfo(hapInfoValues);
2216     hap->StorePermissionPolicy(permStateValues); // permPolicySet_ is null
2217 
2218 
2219     tokenValue.Put(TokenFiledConst::FIELD_BUNDLE_NAME, bundleName);
2220     // bundleName invalid
2221     ASSERT_EQ(ERR_PARAM_INVALID, hap->RestoreHapTokenInfo(tokenId, tokenValue, permStateRes));
2222     tokenValue.Remove(TokenFiledConst::FIELD_BUNDLE_NAME);
2223 
2224     bundleName = "com.ohos.permissionmanger";
2225     tokenValue.Put(TokenFiledConst::FIELD_BUNDLE_NAME, bundleName);
2226     tokenValue.Put(TokenFiledConst::FIELD_APP_ID, appIDDesc);
2227     // appID invalid
2228     ASSERT_EQ(ERR_PARAM_INVALID, hap->RestoreHapTokenInfo(tokenId, tokenValue, permStateRes));
2229     tokenValue.Remove(TokenFiledConst::FIELD_APP_ID);
2230 
2231     appIDDesc = "what's this";
2232     tokenValue.Put(TokenFiledConst::FIELD_APP_ID, appIDDesc);
2233     tokenValue.Put(TokenFiledConst::FIELD_DEVICE_ID, deviceID);
2234     // deviceID invalid
2235     ASSERT_EQ(ERR_PARAM_INVALID, hap->RestoreHapTokenInfo(tokenId, tokenValue, permStateRes));
2236     tokenValue.Remove(TokenFiledConst::FIELD_DEVICE_ID);
2237 
2238     deviceID = "dev-001";
2239     tokenValue.Put(TokenFiledConst::FIELD_DEVICE_ID, deviceID);
2240     tokenValue.Put(TokenFiledConst::FIELD_APL, aplNum);
2241     // apl invalid
2242     ASSERT_EQ(ERR_PARAM_INVALID, hap->RestoreHapTokenInfo(tokenId, tokenValue, permStateRes));
2243 
2244     aplNum = static_cast<int>(ATokenAplEnum::APL_NORMAL);
2245     tokenValue.Put(TokenFiledConst::FIELD_APL, aplNum);
2246     tokenValue.Put(TokenFiledConst::FIELD_TOKEN_VERSION, version);
2247     // version invalid
2248     ASSERT_EQ(ERR_PARAM_INVALID, hap->RestoreHapTokenInfo(tokenId, tokenValue, permStateRes));
2249 }
2250 
2251 /**
2252  * @tc.name: RegisterTokenId001
2253  * @tc.desc: AccessTokenIDManager::RegisterTokenId function test
2254  * @tc.type: FUNC
2255  * @tc.require:
2256  */
2257 HWTEST_F(AccessTokenInfoManagerTest, RegisterTokenId001, TestSize.Level1)
2258 {
2259     // 1477443583 is max abnormal butt tokenId which version is 2: 010 11 0 000000 11111111111111111111
2260     AccessTokenID tokenId = 1477443583;
2261     ATokenTypeEnum type = ATokenTypeEnum::TOKEN_HAP;
2262 
2263     // version != 1 + type dismatch
2264     ASSERT_NE(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, type));
2265 
2266     AccessTokenIDEx tokenIdEx = {0};
2267     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(g_infoManagerTestInfoParms,
2268         g_infoManagerTestPolicyPrams1, tokenIdEx));
2269 
2270     // register repeat
2271     ASSERT_NE(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(
2272         tokenIdEx.tokenIdExStruct.tokenID, type));
2273     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenIdEx.tokenIdExStruct.tokenID));
2274 }
2275 
2276 /**
2277  * @tc.name: DumpTokenInfo005
2278  * @tc.desc: AccessTokenInfoManager::DumpTokenInfo function test
2279  * @tc.type: FUNC
2280  * @tc.require:
2281  */
2282 HWTEST_F(AccessTokenInfoManagerTest, DumpTokenInfo005, TestSize.Level1)
2283 {
2284     AccessTokenID tokenId = 537919487; // 537919487 is max hap tokenId: 001 00 0 000000 11111111111111111111
2285     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_HAP));
2286     std::string dumpInfo;
2287     AtmToolsParamInfo info;
2288     info.tokenId = tokenId;
2289     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo); // hap infoPtr is null
2290     ASSERT_EQ("", dumpInfo);
2291     AccessTokenIDManager::GetInstance().ReleaseTokenId(tokenId);
2292 
2293     tokenId = 672137215; // 672137215 is max native tokenId: 001 01 0 000000 11111111111111111111
2294     ASSERT_EQ(RET_SUCCESS, AccessTokenIDManager::GetInstance().RegisterTokenId(tokenId, TOKEN_NATIVE));
2295     info.tokenId = tokenId;
2296     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo); // native infoPtr is null
2297     ASSERT_EQ("", dumpInfo);
2298     AccessTokenIDManager::GetInstance().ReleaseTokenId(tokenId);
2299 
2300     std::shared_ptr<HapTokenInfoInner> hap = nullptr;
2301     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[537919487] = hap;
2302     info.tokenId = static_cast<AccessTokenID>(0);
2303     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo); // iter->second is null
2304     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(537919487);
2305 
2306     std::shared_ptr<NativeTokenInfoInner> native = nullptr;
2307     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_[672137215] = native;
2308     AccessTokenInfoManager::GetInstance().DumpTokenInfo(info, dumpInfo); // iter->second is null
2309     AccessTokenInfoManager::GetInstance().nativeTokenInfoMap_.erase(672137215);
2310 }
2311 
2312 /**
2313  * @tc.name: ClearAllSecCompGrantedPerm001
2314  * @tc.desc: ClearAllSecCompGrantedPerm function test
2315  * @tc.type: FUNC
2316  * @tc.require:
2317  */
2318 HWTEST_F(AccessTokenInfoManagerTest, ClearAllSecCompGrantedPerm001, TestSize.Level1)
2319 {
2320     AccessTokenIDEx tokenIdEx = {0};
2321     int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
2322         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
2323     ASSERT_EQ(RET_SUCCESS, ret);
2324     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
2325 
2326     ASSERT_EQ(
2327         PERMISSION_DENIED, PermissionManager::GetInstance().VerifyAccessToken(tokenId, "ohos.permission.LOCATION"));
2328     PermissionManager::GetInstance().GrantPermission(tokenId, "ohos.permission.LOCATION", PERMISSION_COMPONENT_SET);
2329     ASSERT_EQ(
2330         PERMISSION_GRANTED, PermissionManager::GetInstance().VerifyAccessToken(tokenId, "ohos.permission.LOCATION"));
2331 
2332     std::string deviceId;
2333     atManagerService_->OnRemoveSystemAbility(SECURITY_COMPONENT_SERVICE_ID, deviceId);
2334     ASSERT_EQ(
2335         PERMISSION_DENIED, PermissionManager::GetInstance().VerifyAccessToken(tokenId, "ohos.permission.LOCATION"));
2336 
2337     // delete test token
2338     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
2339 }
2340 
2341 /**
2342  * @tc.name: ClearAllSecCompGrantedPerm002
2343  * @tc.desc: PermissionManager::ClearAllSecCompGrantedPerm function test
2344  * @tc.type: FUNC
2345  * @tc.require:
2346  */
2347 HWTEST_F(AccessTokenInfoManagerTest, ClearAllSecCompGrantedPerm002, TestSize.Level1)
2348 {
2349     AccessTokenID tokenId = 123; // 123 is random input
2350     std::vector<AccessTokenID> idList;
2351     idList.emplace_back(tokenId);
2352     PermissionManager::GetInstance().ClearAllSecCompGrantedPerm(idList); // permPolicySet is null
2353     auto tokenInfoPtr = AccessTokenInfoManager::GetInstance().GetHapTokenInfoInner(tokenId);
2354     ASSERT_EQ(tokenInfoPtr, nullptr);
2355 }
2356 
2357 /**
2358  * @tc.name: SetPermDialogCap001
2359  * @tc.desc: SetPermDialogCap with HapUniqueKey not exist
2360  * @tc.type: FUNC
2361  * @tc.require:
2362  */
2363 HWTEST_F(AccessTokenInfoManagerTest, SetPermDialogCap001, TestSize.Level1)
2364 {
2365     AccessTokenID tokenId = 123; // 123: invalid tokenid
2366     ASSERT_EQ(ERR_TOKENID_NOT_EXIST, AccessTokenInfoManager::GetInstance().SetPermDialogCap(tokenId, true));
2367 }
2368 
2369 /**
2370  * @tc.name: SetPermDialogCap002
2371  * @tc.desc: SetPermDialogCap with abnormal branch
2372  * @tc.type: FUNC
2373  * @tc.require:
2374  */
2375 HWTEST_F(AccessTokenInfoManagerTest, SetPermDialogCap002, TestSize.Level1)
2376 {
2377     AccessTokenIDEx tokenIdEx = {0};
2378     int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
2379         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
2380     ASSERT_EQ(RET_SUCCESS, ret);
2381     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
2382 
2383     // SetPermDialogCap successfull
2384     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().SetPermDialogCap(tokenId, true));
2385     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(tokenId));
2386     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().SetPermDialogCap(tokenId, false));
2387     ASSERT_EQ(false, AccessTokenInfoManager::GetInstance().GetPermDialogCap(tokenId));
2388 
2389     std::shared_ptr<HapTokenInfoInner> back = AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId];
2390 
2391     // tokeninfo of hapTokenInfoMap_ is nullptr, return true(forbid)
2392     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = nullptr;
2393     ASSERT_EQ(ERR_TOKENID_NOT_EXIST,
2394         AccessTokenInfoManager::GetInstance().SetPermDialogCap(tokenId, true)); // info is null
2395     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(tokenId));
2396 
2397     // token is not found in hapTokenInfoMap_, return true(forbid)
2398     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_.erase(tokenId);
2399     ASSERT_EQ(ERR_TOKENID_NOT_EXIST,
2400         AccessTokenInfoManager::GetInstance().SetPermDialogCap(tokenId, true)); // info is null
2401     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(tokenId));
2402     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = back;
2403 
2404     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
2405 }
2406 
2407 /**
2408  * @tc.name: GetPermDialogCap001
2409  * @tc.desc: GetPermDialogCap with abnormal branch
2410  * @tc.type: FUNC
2411  * @tc.require:
2412  */
2413 HWTEST_F(AccessTokenInfoManagerTest, GetPermDialogCap001, TestSize.Level1)
2414 {
2415     // invalid token
2416     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(INVALID_TOKENID));
2417 
2418     // nonexist token
2419     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(123)); // 123: tokenid
2420 
2421     // tokeninfo is nullptr
2422     HapBaseInfo baseInfo = {
2423         .userID = g_infoManagerTestInfoParms.userID,
2424         .bundleName = g_infoManagerTestInfoParms.bundleName,
2425         .instIndex = g_infoManagerTestInfoParms.instIndex,
2426     };
2427     AccessTokenIDEx tokenIdEx = {0};
2428     int32_t ret = AccessTokenInfoManager::GetInstance().CreateHapTokenInfo(
2429         g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams1, tokenIdEx);
2430     ASSERT_EQ(RET_SUCCESS, ret);
2431     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
2432     std::shared_ptr<HapTokenInfoInner> back = AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId];
2433     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = nullptr;
2434     ASSERT_EQ(true, AccessTokenInfoManager::GetInstance().GetPermDialogCap(123)); // 123: tokenid
2435 
2436     AccessTokenInfoManager::GetInstance().hapTokenInfoMap_[tokenId] = back;
2437     ASSERT_EQ(RET_SUCCESS, AccessTokenInfoManager::GetInstance().RemoveHapTokenInfo(tokenId));
2438 }
2439 
2440 /**
2441  * @tc.name: AllocHapToken001
2442  * @tc.desc: alloc hap create haptokeninfo failed.
2443  * @tc.type: FUNC
2444  * @tc.require:
2445  */
2446 HWTEST_F(AccessTokenInfoManagerTest, AllocHapToken001, TestSize.Level1)
2447 {
2448     HapInfoParcel hapinfoParcel;
2449     hapinfoParcel.hapInfoParameter = {
2450         .userID = -1,
2451         .bundleName = "accesstoken_test",
2452         .instIndex = 0,
2453         .appIDDesc = "testtesttesttest",
2454         .apiVersion = DEFAULT_API_VERSION,
2455         .isSystemApp = false,
2456     };
2457     HapPolicyParcel hapPolicyParcel;
2458     hapPolicyParcel.hapPolicyParameter.apl = ATokenAplEnum::APL_NORMAL;
2459     hapPolicyParcel.hapPolicyParameter.domain = "test.domain";
2460 
2461     AccessTokenIDEx tokenIDEx = atManagerService_->AllocHapToken(hapinfoParcel, hapPolicyParcel);
2462     ASSERT_EQ(INVALID_TOKENID, tokenIDEx.tokenIDEx);
2463 }
2464 
2465 /**
2466  * @tc.name: OnStart001
2467  * @tc.desc: service is running.
2468  * @tc.type: FUNC
2469  * @tc.require:
2470  */
2471 HWTEST_F(AccessTokenInfoManagerTest, OnStart001, TestSize.Level1)
2472 {
2473     ServiceRunningState state = atManagerService_->state_;
2474     atManagerService_->state_ = ServiceRunningState::STATE_RUNNING;
2475     atManagerService_->OnStart();
2476     ASSERT_EQ(ServiceRunningState::STATE_RUNNING, atManagerService_->state_);
2477     atManagerService_->state_ = state;
2478 }
2479 
2480 /**
2481  * @tc.name: Dlopen001
2482  * @tc.desc: Open a not exist lib & not exist func
2483  * @tc.type: FUNC
2484  * @tc.require:
2485  */
2486 HWTEST_F(AccessTokenInfoManagerTest, Dlopen001, TestSize.Level1)
2487 {
2488     LibraryLoader loader1("libnotexist.z.so"); // is a not exist path
2489     EXPECT_EQ(nullptr, loader1.handle_);
2490 
2491     LibraryLoader loader2("libaccesstoken_manager_service.z.so"); // is a exist lib without create func
2492     EXPECT_EQ(nullptr, loader2.instance_);
2493     EXPECT_NE(nullptr, loader2.handle_);
2494 }
2495 
2496 #ifdef TOKEN_SYNC_ENABLE
2497 /**
2498  * @tc.name: Dlopen002
2499  * @tc.desc: Open a exist lib & exist func
2500  * @tc.type: FUNC
2501  * @tc.require:
2502  */
2503 HWTEST_F(AccessTokenInfoManagerTest, Dlopen002, TestSize.Level1)
2504 {
2505     LibraryLoader loader(TOKEN_SYNC_LIBPATH);
2506     TokenSyncKitInterface* tokenSyncKit = loader.GetObject<TokenSyncKitInterface>();
2507     EXPECT_NE(nullptr, loader.handle_);
2508     EXPECT_NE(nullptr, tokenSyncKit);
2509 }
2510 #endif
2511 
2512 /**
2513  * @tc.name: OnRemoteRequest001
2514  * @tc.desc: Test OnRemoteRequest
2515  * @tc.type: FUNC
2516  * @tc.require:
2517  */
2518 HWTEST_F(AccessTokenInfoManagerTest, OnRemoteRequest001, TestSize.Level1)
2519 {
2520     uint32_t code = 0;
2521     MessageParcel data;
2522     MessageParcel reply;
2523     MessageOption option;
2524     data.WriteInterfaceToken(u"this is a test interface");
2525     EXPECT_EQ(ERROR_IPC_REQUEST_FAIL, atManagerService_->OnRemoteRequest(code, data, reply, option));
2526 
2527     std::map<uint32_t, AccessTokenManagerStub::RequestFuncType> oldMap = atManagerService_->requestFuncMap_;
2528     atManagerService_->requestFuncMap_.clear();
2529     atManagerService_->requestFuncMap_[1] = nullptr;
2530 
2531     data.WriteInterfaceToken(IAccessTokenManager::GetDescriptor());
2532     EXPECT_NE(NO_ERROR, atManagerService_->OnRemoteRequest(code, data, reply, option));
2533 
2534     data.WriteInterfaceToken(IAccessTokenManager::GetDescriptor());
2535     EXPECT_NE(NO_ERROR, atManagerService_->OnRemoteRequest(1, data, reply, option));
2536 
2537     atManagerService_->requestFuncMap_ = oldMap;
2538 }
2539 } // namespace AccessToken
2540 } // namespace Security
2541 } // namespace OHOS
2542