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