1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include <memory>
18 
19 #include "accesstoken_kit.h"
20 #include "constant.h"
21 #include "on_permission_used_record_callback_stub.h"
22 #define private public
23 #include "permission_record_manager.h"
24 #undef private
25 #include "perm_active_status_change_callback_stub.h"
26 #include "perm_active_status_change_callback.h"
27 #include "privacy_error.h"
28 #include "privacy_field_const.h"
29 #include "privacy_manager_service.h"
30 #include "state_change_callback.h"
31 #include "string_ex.h"
32 #include "token_setproc.h"
33 
34 using namespace testing::ext;
35 
36 namespace OHOS {
37 namespace Security {
38 namespace AccessToken {
39 namespace {
40 static constexpr int32_t PERMISSION_USAGE_RECORDS_MAX_NUM = 10;
41 constexpr const char* CAMERA_PERMISSION_NAME = "ohos.permission.CAMERA";
42 constexpr const char* MICROPHONE_PERMISSION_NAME = "ohos.permission.MICROPHONE";
43 constexpr const char* LOCATION_PERMISSION_NAME = "ohos.permission.LOCATION";
44 static AccessTokenIDEx g_tokenID = {0};
45 static PermissionStateFull g_testState = {
46     .permissionName = "ohos.permission.CAMERA",
47     .isGeneral = true,
48     .resDeviceID = {"local"},
49     .grantStatus = {PermissionState::PERMISSION_GRANTED},
50     .grantFlags = {1}
51 };
52 
53 static HapPolicyParams g_PolicyPrams1 = {
54     .apl = APL_NORMAL,
55     .domain = "test.domain.A",
56     .permList = {},
57     .permStateList = {g_testState}
58 };
59 
60 static HapInfoParams g_InfoParms1 = {
61     .userID = 1,
62     .bundleName = "ohos.privacy_test.bundleA",
63     .instIndex = 0,
64     .appIDDesc = "privacy_test.bundleA",
65     .isSystemApp = true
66 };
67 
68 static HapPolicyParams g_PolicyPrams2 = {
69     .apl = APL_NORMAL,
70     .domain = "test.domain.B",
71     .permList = {},
72     .permStateList = {g_testState}
73 };
74 
75 static HapInfoParams g_InfoParms2 = {
76     .userID = 1,
77     .bundleName = "ohos.privacy_test.bundleB",
78     .instIndex = 0,
79     .appIDDesc = "privacy_test.bundleB"
80 };
81 }
82 
83 class PrivacyManagerServiceTest : public testing::Test {
84 public:
85     static void SetUpTestCase();
86 
87     static void TearDownTestCase();
88 
89     void SetUp();
90 
91     void TearDown();
92     std::shared_ptr<PrivacyManagerService> privacyManagerService_;
93     uint64_t selfTokenId_;
94 };
95 
SetUpTestCase()96 void PrivacyManagerServiceTest::SetUpTestCase()
97 {
98 }
99 
TearDownTestCase()100 void PrivacyManagerServiceTest::TearDownTestCase()
101 {
102 }
103 
SetUp()104 void PrivacyManagerServiceTest::SetUp()
105 {
106     privacyManagerService_ = DelayedSingleton<PrivacyManagerService>::GetInstance();
107     PermissionRecordManager::GetInstance().Register();
108     EXPECT_NE(nullptr, privacyManagerService_);
109     g_tokenID = AccessTokenKit::AllocHapToken(g_InfoParms1, g_PolicyPrams1);
110     AccessTokenKit::AllocHapToken(g_InfoParms2, g_PolicyPrams2);
111     selfTokenId_ = GetSelfTokenID();
112 }
113 
TearDown()114 void PrivacyManagerServiceTest::TearDown()
115 {
116     AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
117         g_InfoParms1.instIndex);
118     AccessTokenKit::DeleteToken(tokenId);
119     privacyManagerService_->RemovePermissionUsedRecords(tokenId, "");
120     tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms2.userID, g_InfoParms2.bundleName,
121         g_InfoParms2.instIndex);
122     AccessTokenKit::DeleteToken(tokenId);
123     privacyManagerService_->RemovePermissionUsedRecords(tokenId, "");
124     privacyManagerService_ = nullptr;
125     EXPECT_EQ(0, SetSelfTokenID(selfTokenId_));
126 }
127 
128 /**
129  * @tc.name: Dump001
130  * @tc.desc: Dump record info.
131  * @tc.type: FUNC
132  * @tc.require: issueI4V02P
133  */
134 HWTEST_F(PrivacyManagerServiceTest, Dump001, TestSize.Level1)
135 {
136     int32_t fd = -1;
137     std::vector<std::u16string> args;
138 
139     // fd is 0
140     ASSERT_NE(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
141 
142     fd = 1; // 1: std output
143 
144     // hidumper
145     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
146 
147     // hidumper -h
148     args.emplace_back(Str8ToStr16("-h"));
149     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
150 
151     args.clear();
152     // hidumper -t
153     args.emplace_back(Str8ToStr16("-t"));
154     ASSERT_NE(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
155 
156     args.clear();
157     // hidumper -t
158     args.emplace_back(Str8ToStr16("-t"));
159     args.emplace_back(Str8ToStr16("-1")); // illegal tokenId
160     ASSERT_NE(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
161 
162     args.clear();
163     // hidumper -t
164     args.emplace_back(Str8ToStr16("-s"));
165     ASSERT_NE(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
166 
167     args.clear();
168     // hidumper -t
169     args.emplace_back(Str8ToStr16("-t"));
170     args.emplace_back(Str8ToStr16("123")); // 123: invalid tokenId
171     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
172 }
173 
174 /**
175  * @tc.name: Dump002
176  * @tc.desc: Dump record info.
177  * @tc.type: FUNC
178  * @tc.require: issueI4V02P
179  */
180 HWTEST_F(PrivacyManagerServiceTest, Dump002, TestSize.Level1)
181 {
182     int32_t fd = 123; // 123: invalid fd
183     std::vector<std::u16string> args;
184     AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
185         g_InfoParms1.instIndex);
186     args.emplace_back(Str8ToStr16("-t"));
187     std::string tokenIdStr = std::to_string(tokenId);
188     args.emplace_back(Str8ToStr16(tokenIdStr));
189 
190     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
191 
192     AddPermParamInfoParcel infoParcel;
193     infoParcel.info.tokenId = tokenId;
194     infoParcel.info.permissionName = "ohos.permission.CAMERA";
195     infoParcel.info.successCount = 1;
196     infoParcel.info.failCount = 0;
197 
198     for (int32_t i = 0; i < PERMISSION_USAGE_RECORDS_MAX_NUM; i++) {
199         privacyManagerService_->AddPermissionUsedRecord(infoParcel);
200     }
201 
202     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
203 
204     privacyManagerService_->AddPermissionUsedRecord(infoParcel);
205     ASSERT_EQ(RET_SUCCESS, privacyManagerService_->Dump(fd, args));
206 }
207 
208 /*
209  * @tc.name: IsAllowedUsingPermission001
210  * @tc.desc: IsAllowedUsingPermission function test permissionName branch
211  * @tc.type: FUNC
212  * @tc.require: issueI5UPRK
213  */
214 HWTEST_F(PrivacyManagerServiceTest, IsAllowedUsingPermission001, TestSize.Level1)
215 {
216     AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("privacy_service");
217     ASSERT_NE(INVALID_TOKENID, tokenId);
218     EXPECT_EQ(0, SetSelfTokenID(tokenId));
219     tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
220         g_InfoParms1.instIndex);
221     ASSERT_NE(INVALID_TOKENID, tokenId);
222     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, MICROPHONE_PERMISSION_NAME));
223     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, LOCATION_PERMISSION_NAME));
224     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
225 #ifdef CAMERA_FLOAT_WINDOW_ENABLE
226     // not pip
227     PermissionRecordManager::GetInstance().NotifyCameraWindowChange(false, tokenId, false);
228     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
229 
230     PermissionRecordManager::GetInstance().NotifyCameraWindowChange(false, tokenId, false);
231     // pip
232     PermissionRecordManager::GetInstance().NotifyCameraWindowChange(true, tokenId, false);
233     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
234 #endif
235 }
236 
237 /*
238  * @tc.name: IsAllowedUsingPermission002
239  * @tc.desc: IsAllowedUsingPermission function test invalid tokenId and permission
240  * @tc.type: FUNC
241  * @tc.require: issueI5UPRK
242  */
243 HWTEST_F(PrivacyManagerServiceTest, IsAllowedUsingPermission002, TestSize.Level1)
244 {
245     AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("privacy_service");
246     // invalid tokenId
247     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(0, CAMERA_PERMISSION_NAME));
248 
249     // native tokenId
250     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
251 
252     // invalid permission
253     tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
254         g_InfoParms1.instIndex);
255     ASSERT_NE(INVALID_TOKENID, tokenId);
256     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, "test"));
257 }
258 
259 /*
260  * @tc.name: IsAllowedUsingPermission003
261  * @tc.desc: test camera with screen off
262  * @tc.type: FUNC
263  * @tc.require: issueI5UPRK
264  */
265 HWTEST_F(PrivacyManagerServiceTest, IsAllowedUsingPermission003, TestSize.Level1)
266 {
267     AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("privacy_service");
268 
269     tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
270         g_InfoParms1.instIndex);
271     ASSERT_NE(INVALID_TOKENID, tokenId);
272     ASSERT_EQ(false, privacyManagerService_->IsAllowedUsingPermission(tokenId, CAMERA_PERMISSION_NAME));
273 }
274 
275 class TestPrivacyManagerStub : public PrivacyManagerStub {
276 public:
277     TestPrivacyManagerStub() = default;
278     virtual ~TestPrivacyManagerStub() = default;
279 
AddPermissionUsedRecord(const AddPermParamInfoParcel & infoParcel,bool asyncMode=false)280     int32_t AddPermissionUsedRecord(const AddPermParamInfoParcel& infoParcel, bool asyncMode = false)
281     {
282         return RET_SUCCESS;
283     }
StartUsingPermission(AccessTokenID tokenID,int32_t pid,const std::string & permissionName)284     int32_t StartUsingPermission(AccessTokenID tokenID, int32_t pid, const std::string& permissionName)
285     {
286         return RET_SUCCESS;
287     }
StartUsingPermission(AccessTokenID tokenID,int32_t pid,const std::string & permissionName,const sptr<IRemoteObject> & callback)288     int32_t StartUsingPermission(AccessTokenID tokenID, int32_t pid,  const std::string& permissionName,
289         const sptr<IRemoteObject>& callback)
290     {
291         return RET_SUCCESS;
292     }
StopUsingPermission(AccessTokenID tokenID,int32_t pid,const std::string & permissionName)293     int32_t StopUsingPermission(AccessTokenID tokenID, int32_t pid,  const std::string& permissionName)
294     {
295         return RET_SUCCESS;
296     }
RemovePermissionUsedRecords(AccessTokenID tokenID,const std::string & deviceID)297     int32_t RemovePermissionUsedRecords(AccessTokenID tokenID, const std::string& deviceID)
298     {
299         return RET_SUCCESS;
300     }
GetPermissionUsedRecords(const PermissionUsedRequestParcel & request,PermissionUsedResultParcel & result)301     int32_t GetPermissionUsedRecords(
302         const PermissionUsedRequestParcel& request, PermissionUsedResultParcel& result)
303     {
304         return RET_SUCCESS;
305     }
GetPermissionUsedRecords(const PermissionUsedRequestParcel & request,const sptr<OnPermissionUsedRecordCallback> & callback)306     int32_t GetPermissionUsedRecords(
307         const PermissionUsedRequestParcel& request, const sptr<OnPermissionUsedRecordCallback>& callback)
308     {
309         return RET_SUCCESS;
310     }
RegisterPermActiveStatusCallback(std::vector<std::string> & permList,const sptr<IRemoteObject> & callback)311     int32_t RegisterPermActiveStatusCallback(
312         std::vector<std::string>& permList, const sptr<IRemoteObject>& callback)
313     {
314         return RET_SUCCESS;
315     }
UnRegisterPermActiveStatusCallback(const sptr<IRemoteObject> & callback)316     int32_t UnRegisterPermActiveStatusCallback(const sptr<IRemoteObject>& callback)
317     {
318         return RET_SUCCESS;
319     }
IsAllowedUsingPermission(AccessTokenID tokenID,const std::string & permissionName)320     bool IsAllowedUsingPermission(AccessTokenID tokenID, const std::string& permissionName)
321     {
322         return true;
323     }
GetPermissionUsedTypeInfos(const AccessTokenID tokenId,const std::string & permissionName,std::vector<PermissionUsedTypeInfoParcel> & resultsParcel)324     int32_t GetPermissionUsedTypeInfos(const AccessTokenID tokenId, const std::string& permissionName,
325         std::vector<PermissionUsedTypeInfoParcel>& resultsParcel)
326     {
327         return RET_SUCCESS;
328     }
SetMutePolicy(uint32_t policyType,uint32_t callerType,bool isMute)329     int32_t SetMutePolicy(uint32_t policyType, uint32_t callerType, bool isMute)
330     {
331         return RET_SUCCESS;
332     }
SetHapWithFGReminder(uint32_t tokenId,bool isAllowed)333     int32_t SetHapWithFGReminder(uint32_t tokenId, bool isAllowed)
334     {
335         return RET_SUCCESS;
336     }
337 #ifdef SECURITY_COMPONENT_ENHANCE_ENABLE
RegisterSecCompEnhance(const SecCompEnhanceDataParcel & enhanceParcel)338     int32_t RegisterSecCompEnhance(const SecCompEnhanceDataParcel& enhanceParcel)
339     {
340         return RET_SUCCESS;
341     }
DepositSecCompEnhance(const std::vector<SecCompEnhanceDataParcel> & enhanceParcelList)342     int32_t DepositSecCompEnhance(const std::vector<SecCompEnhanceDataParcel>& enhanceParcelList)
343     {
344         return RET_SUCCESS;
345     }
RecoverSecCompEnhance(std::vector<SecCompEnhanceDataParcel> & enhanceParcelList)346     int32_t RecoverSecCompEnhance(std::vector<SecCompEnhanceDataParcel>& enhanceParcelList)
347     {
348         return RET_SUCCESS;
349     }
350 #endif
351 };
352 
353 /**
354  * @tc.name: OnRemoteRequest001
355  * @tc.desc: OnRemoteRequest test.
356  * @tc.type: FUNC
357  * @tc.require:
358  */
359 HWTEST_F(PrivacyManagerServiceTest, OnRemoteRequest001, TestSize.Level1)
360 {
361     TestPrivacyManagerStub testSub;
362     MessageParcel data;
363     std::string descriptor = "I don't know";
364     data.WriteInterfaceToken(OHOS::Str8ToStr16(descriptor));
365 
366     MessageParcel reply;
367     MessageOption option(MessageOption::TF_SYNC);
368     // descriptor error
369     ASSERT_EQ(PrivacyError::ERROR_IPC_REQUEST_FAIL, testSub.OnRemoteRequest(
370         static_cast<uint32_t>(PrivacyInterfaceCode::ADD_PERMISSION_USED_RECORD), data, reply, option));
371 
372     uint32_t code = 99999999; // code not exsit
373     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
374     ASSERT_NE(RET_SUCCESS, testSub.OnRemoteRequest(code, data, reply, option)); // descriptor true + error msgCode
375 }
376 
377 /**
378  * @tc.name: AddPermissionUsedRecordInner001
379  * @tc.desc: AddPermissionUsedRecordInner test.
380  * @tc.type: FUNC
381  * @tc.require:
382  */
383 HWTEST_F(PrivacyManagerServiceTest, AddPermissionUsedRecordInner001, TestSize.Level1)
384 {
385     AccessTokenID tokenID = 123; // 123 is random input
386     std::string permissionName = "ohos.permission.test";
387     int32_t successCount = 1; // number 1
388     int32_t failCount = 1; // number 1
389 
390     TestPrivacyManagerStub testSub;
391     MessageParcel data;
392     MessageParcel reply;
393     MessageOption option(MessageOption::TF_SYNC);
394 
395     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
396     AddPermParamInfoParcel infoParcel;
397     infoParcel.info.tokenId = tokenID;
398     infoParcel.info.permissionName = permissionName;
399     infoParcel.info.successCount = successCount;
400     infoParcel.info.failCount = failCount;
401     ASSERT_EQ(true, data.WriteParcelable(&infoParcel));
402     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
403         static_cast<uint32_t>(PrivacyInterfaceCode::ADD_PERMISSION_USED_RECORD), data, reply, option));
404     // callingTokenID is native token hdcd with need permission, but input tokenID is not a real hap
405     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
406 }
407 
408 /**
409  * @tc.name: AddPermissionUsedRecordInner002
410  * @tc.desc: AddPermissionUsedRecordInner test.
411  * @tc.type: FUNC
412  * @tc.require:
413  */
414 HWTEST_F(PrivacyManagerServiceTest, AddPermissionUsedRecordInner002, TestSize.Level1)
415 {
416     AccessTokenID tokenID = 123; // 123 is random input
417     std::string permissionName = "ohos.permission.test";
418     int32_t successCount = 1; // number 1
419     int32_t failCount = 1; // number 1
420 
421     TestPrivacyManagerStub testSub;
422     MessageParcel data;
423     MessageParcel reply;
424     MessageOption option(MessageOption::TF_SYNC);
425 
426     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
427         g_InfoParms1.instIndex);
428     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
429     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
430 
431     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
432     AddPermParamInfoParcel infoParcel;
433     infoParcel.info.tokenId = tokenID;
434     infoParcel.info.permissionName = permissionName;
435     infoParcel.info.successCount = successCount;
436     infoParcel.info.failCount = failCount;
437     ASSERT_EQ(true, data.WriteParcelable(&infoParcel));
438     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
439         static_cast<uint32_t>(PrivacyInterfaceCode::ADD_PERMISSION_USED_RECORD), data, reply, option));
440     // callingTokenID is normal hap without need permission
441     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
442 }
443 
444 /**
445  * @tc.name: AddPermissionUsedRecordInner003
446  * @tc.desc: AddPermissionUsedRecordInner test.
447  * @tc.type: FUNC
448  * @tc.require:
449  */
450 HWTEST_F(PrivacyManagerServiceTest, AddPermissionUsedRecordInner003, TestSize.Level1)
451 {
452     AccessTokenID tokenID = 123; // 123 is random input
453     std::string permissionName = "ohos.permission.test";
454     int32_t successCount = 1; // number 1
455     int32_t failCount = 1; // number 1
456 
457     TestPrivacyManagerStub testSub;
458     MessageParcel data;
459     MessageParcel reply;
460     MessageOption option(MessageOption::TF_SYNC);
461 
462     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
463     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
464 
465     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
466     AddPermParamInfoParcel infoParcel;
467     infoParcel.info.tokenId = tokenID;
468     infoParcel.info.permissionName = permissionName;
469     infoParcel.info.successCount = successCount;
470     infoParcel.info.failCount = failCount;
471     ASSERT_EQ(true, data.WriteParcelable(&infoParcel));
472     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
473         static_cast<uint32_t>(PrivacyInterfaceCode::ADD_PERMISSION_USED_RECORD), data, reply, option));
474     // callingTokenID is system hap without need permission
475     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
476 }
477 
478 /**
479  * @tc.name: StartUsingPermissionInner001
480  * @tc.desc: StartUsingPermissionInner test.
481  * @tc.type: FUNC
482  * @tc.require:
483  */
484 HWTEST_F(PrivacyManagerServiceTest, StartUsingPermissionInner001, TestSize.Level1)
485 {
486     AccessTokenID tokenID = 123; // 123 is random input
487     std::string permissionName = "ohos.permission.test";
488 
489     TestPrivacyManagerStub testSub;
490     MessageParcel data;
491     MessageParcel reply;
492     MessageOption option(MessageOption::TF_SYNC);
493 
494     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
495     ASSERT_EQ(true, data.WriteUint32(tokenID));
496     ASSERT_EQ(true, data.WriteString(permissionName));
497     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
498         static_cast<uint32_t>(PrivacyInterfaceCode::START_USING_PERMISSION), data, reply, option));
499     // callingTokenID is native token hdcd with need permission, but input tokenID is not a real hap
500     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
501 }
502 
503 /**
504  * @tc.name: StartUsingPermissionInner002
505  * @tc.desc: StartUsingPermissionInner test.
506  * @tc.type: FUNC
507  * @tc.require:
508  */
509 HWTEST_F(PrivacyManagerServiceTest, StartUsingPermissionInner002, TestSize.Level1)
510 {
511     AccessTokenID tokenID = 123; // 123 is random input
512     std::string permissionName = "ohos.permission.test";
513 
514     TestPrivacyManagerStub testSub;
515     MessageParcel data;
516     MessageParcel reply;
517     MessageOption option(MessageOption::TF_SYNC);
518 
519     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
520         g_InfoParms1.instIndex);
521     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
522     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
523 
524     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
525     ASSERT_EQ(true, data.WriteUint32(tokenID));
526     ASSERT_EQ(true, data.WriteString(permissionName));
527     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
528         static_cast<uint32_t>(PrivacyInterfaceCode::START_USING_PERMISSION), data, reply, option));
529     // callingTokenID is normal hap without need permission
530     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
531 }
532 
533 /**
534  * @tc.name: StartUsingPermissionInner003
535  * @tc.desc: StartUsingPermissionInner test.
536  * @tc.type: FUNC
537  * @tc.require:
538  */
539 HWTEST_F(PrivacyManagerServiceTest, StartUsingPermissionInner003, TestSize.Level1)
540 {
541     AccessTokenID tokenID = 123; // 123 is random input
542     std::string permissionName = "ohos.permission.test";
543 
544     TestPrivacyManagerStub testSub;
545     MessageParcel data;
546     MessageParcel reply;
547     MessageOption option(MessageOption::TF_SYNC);
548 
549     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
550     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
551 
552     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
553     ASSERT_EQ(true, data.WriteUint32(tokenID));
554     ASSERT_EQ(true, data.WriteString(permissionName));
555     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
556         static_cast<uint32_t>(PrivacyInterfaceCode::START_USING_PERMISSION), data, reply, option));
557     // callingTokenID is system hap without need permission
558     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
559 }
560 
561 class PrivacyManagerServiceTestCb1 : public StateCustomizedCbk {
562 public:
PrivacyManagerServiceTestCb1()563     PrivacyManagerServiceTestCb1()
564     {}
565 
~PrivacyManagerServiceTestCb1()566     ~PrivacyManagerServiceTestCb1()
567     {}
568 
StateChangeNotify(AccessTokenID tokenId,bool isShow)569     virtual void StateChangeNotify(AccessTokenID tokenId, bool isShow)
570     {}
571 };
572 
573 /**
574  * @tc.name: StartUsingPermissionCallbackInner001
575  * @tc.desc: StartUsingPermissionCallbackInner test.
576  * @tc.type: FUNC
577  * @tc.require:
578  */
579 HWTEST_F(PrivacyManagerServiceTest, StartUsingPermissionCallbackInner001, TestSize.Level1)
580 {
581     AccessTokenID tokenID = 123; // 123 is random input
582     int32_t pid = 111;
583     std::string permissionName = "ohos.permission.test";
584     auto callbackPtr = std::make_shared<PrivacyManagerServiceTestCb1>();
585     ASSERT_NE(nullptr, callbackPtr);
586     auto callbackWrap = new (std::nothrow) StateChangeCallback(callbackPtr);
587     ASSERT_NE(nullptr, callbackWrap);
588 
589     TestPrivacyManagerStub testSub;
590     MessageParcel data;
591     MessageParcel reply;
592     MessageOption option(MessageOption::TF_SYNC);
593 
594     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
595     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
596 
597     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
598     ASSERT_EQ(true, data.WriteUint32(tokenID));
599     ASSERT_EQ(true, data.WriteInt32(pid));
600     ASSERT_EQ(true, data.WriteString(permissionName));
601     ASSERT_EQ(true, data.WriteRemoteObject(callbackWrap->AsObject()));
602     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
603         PrivacyInterfaceCode::START_USING_PERMISSION_CALLBACK), data, reply, option));
604     // callingTokenID has no request permission
605     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
606 }
607 
608 /**
609  * @tc.name: StartUsingPermissionCallbackInner002
610  * @tc.desc: StartUsingPermissionCallbackInner test.
611  * @tc.type: FUNC
612  * @tc.require:
613  */
614 HWTEST_F(PrivacyManagerServiceTest, StartUsingPermissionCallbackInner002, TestSize.Level1)
615 {
616     AccessTokenID tokenID = 123; // 123 is random input
617     int32_t pid = 11;
618     std::string permissionName = "ohos.permission.test";
619     auto callbackPtr = std::make_shared<PrivacyManagerServiceTestCb1>();
620     ASSERT_NE(nullptr, callbackPtr);
621     auto callbackWrap = new (std::nothrow) StateChangeCallback(callbackPtr);
622     ASSERT_NE(nullptr, callbackWrap);
623 
624     TestPrivacyManagerStub testSub;
625     MessageParcel data;
626     MessageParcel reply;
627     MessageOption option(MessageOption::TF_SYNC);
628 
629     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
630     ASSERT_EQ(true, data.WriteUint32(tokenID));
631     ASSERT_EQ(true, data.WriteInt32(pid));
632     ASSERT_EQ(true, data.WriteString(permissionName));
633     ASSERT_EQ(true, data.WriteRemoteObject(callbackWrap->AsObject()));
634     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
635         PrivacyInterfaceCode::START_USING_PERMISSION_CALLBACK), data, reply, option));
636     // callingTokenID is native token hdcd with request permission
637     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
638 }
639 
640 /**
641  * @tc.name: StopUsingPermissionInner001
642  * @tc.desc: StopUsingPermissionInner test.
643  * @tc.type: FUNC
644  * @tc.require:
645  */
646 HWTEST_F(PrivacyManagerServiceTest, StopUsingPermissionInner001, TestSize.Level1)
647 {
648     AccessTokenID tokenID = 123; // 123 is random input
649     int32_t pid = 11;
650     std::string permissionName = "ohos.permission.test";
651 
652     TestPrivacyManagerStub testSub;
653     MessageParcel data;
654     MessageParcel reply;
655     MessageOption option(MessageOption::TF_SYNC);
656 
657     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
658     ASSERT_EQ(true, data.WriteUint32(tokenID));
659     ASSERT_EQ(true, data.WriteInt32(pid));
660     ASSERT_EQ(true, data.WriteString(permissionName));
661     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
662         static_cast<uint32_t>(PrivacyInterfaceCode::STOP_USING_PERMISSION), data, reply, option));
663     // callingTokenID is native token hdcd with need permission, but input tokenID is not a real hap
664     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
665 }
666 
667 /**
668  * @tc.name: StopUsingPermissionInner002
669  * @tc.desc: StopUsingPermissionInner test.
670  * @tc.type: FUNC
671  * @tc.require:
672  */
673 HWTEST_F(PrivacyManagerServiceTest, StopUsingPermissionInner002, TestSize.Level1)
674 {
675     AccessTokenID tokenID = 123; // 123 is random input
676     std::string permissionName = "ohos.permission.test";
677 
678     TestPrivacyManagerStub testSub;
679     MessageParcel data;
680     MessageParcel reply;
681     MessageOption option(MessageOption::TF_SYNC);
682 
683     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
684         g_InfoParms1.instIndex);
685     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
686     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
687 
688     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
689     ASSERT_EQ(true, data.WriteUint32(tokenID));
690     ASSERT_EQ(true, data.WriteString(permissionName));
691     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
692         static_cast<uint32_t>(PrivacyInterfaceCode::STOP_USING_PERMISSION), data, reply, option));
693     // callingTokenID is normal hap without need permission
694     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
695 }
696 
697 /**
698  * @tc.name: StopUsingPermissionInner003
699  * @tc.desc: StopUsingPermissionInner test.
700  * @tc.type: FUNC
701  * @tc.require:
702  */
703 HWTEST_F(PrivacyManagerServiceTest, StopUsingPermissionInner003, TestSize.Level1)
704 {
705     AccessTokenID tokenID = 123; // 123 is random input
706     std::string permissionName = "ohos.permission.test";
707 
708     TestPrivacyManagerStub testSub;
709     MessageParcel data;
710     MessageParcel reply;
711     MessageOption option(MessageOption::TF_SYNC);
712 
713     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
714     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
715 
716     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
717     ASSERT_EQ(true, data.WriteUint32(tokenID));
718     ASSERT_EQ(true, data.WriteString(permissionName));
719     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(
720         static_cast<uint32_t>(PrivacyInterfaceCode::STOP_USING_PERMISSION), data, reply, option));
721     // callingTokenID is system hap without need permission
722     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
723 }
724 
725 /**
726  * @tc.name: RemovePermissionUsedRecordsInner001
727  * @tc.desc: RemovePermissionUsedRecordsInner test.
728  * @tc.type: FUNC
729  * @tc.require:
730  */
731 HWTEST_F(PrivacyManagerServiceTest, RemovePermissionUsedRecordsInner001, TestSize.Level1)
732 {
733     AccessTokenID tokenID = 123; // 123 is random input
734     std::string deviceID = "abc"; // abc is random input
735 
736     TestPrivacyManagerStub testSub;
737     MessageParcel data;
738     MessageParcel reply;
739     MessageOption option(MessageOption::TF_SYNC);
740 
741     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
742     ASSERT_EQ(true, data.WriteUint32(tokenID));
743     ASSERT_EQ(true, data.WriteString(deviceID));
744     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
745         PrivacyInterfaceCode::DELETE_PERMISSION_USED_RECORDS), data, reply, option));
746     // callingTokenID is native token hdcd with need permission, but input tokenID is not a real hap
747     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
748 }
749 
750 /**
751  * @tc.name: RemovePermissionUsedRecordsInner002
752  * @tc.desc: RemovePermissionUsedRecordsInner test.
753  * @tc.type: FUNC
754  * @tc.require:
755  */
756 HWTEST_F(PrivacyManagerServiceTest, RemovePermissionUsedRecordsInner002, TestSize.Level1)
757 {
758     AccessTokenID tokenID = 123; // 123 is random input
759     std::string deviceID = "abc"; // abc is random input
760 
761     TestPrivacyManagerStub testSub;
762     MessageParcel data;
763     MessageParcel reply;
764     MessageOption option(MessageOption::TF_SYNC);
765 
766     AccessTokenID nativeTokenID = AccessTokenKit::GetNativeTokenId("device_manager");
767     ASSERT_NE(nativeTokenID, static_cast<AccessTokenID>(0));
768     SetSelfTokenID(nativeTokenID); // set self tokenID to native device_manager
769 
770     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
771     ASSERT_EQ(true, data.WriteUint32(tokenID));
772     ASSERT_EQ(true, data.WriteString(deviceID));
773     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
774         PrivacyInterfaceCode::DELETE_PERMISSION_USED_RECORDS), data, reply, option));
775     // native token device_manager don't have request permission
776     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
777 }
778 
779 /**
780  * @tc.name: GetPermissionUsedRecordsInner001
781  * @tc.desc: GetPermissionUsedRecordsInner test.
782  * @tc.type: FUNC
783  * @tc.require:
784  */
785 HWTEST_F(PrivacyManagerServiceTest, GetPermissionUsedRecordsInner001, TestSize.Level1)
786 {
787     PermissionUsedRequestParcel request;
788     request.request.isRemote = true;
789 
790     TestPrivacyManagerStub testSub;
791     MessageParcel data;
792     MessageParcel reply;
793     MessageOption option(MessageOption::TF_SYNC);
794 
795     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
796     ASSERT_EQ(true, data.WriteParcelable(&request));
797     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
798         PrivacyInterfaceCode::GET_PERMISSION_USED_RECORDS), data, reply, option));
799     // callingTokenID is native token hdcd with need permission, remote is true return ERR_PARAM_INVALID
800     ASSERT_EQ(RET_SUCCESS, reply.ReadInt32());
801 }
802 
803 /**
804  * @tc.name: GetPermissionUsedRecordsInner002
805  * @tc.desc: GetPermissionUsedRecordsInner test.
806  * @tc.type: FUNC
807  * @tc.require:
808  */
809 HWTEST_F(PrivacyManagerServiceTest, GetPermissionUsedRecordsInner002, TestSize.Level1)
810 {
811     PermissionUsedRequestParcel request;
812     request.request.isRemote = true;
813 
814     TestPrivacyManagerStub testSub;
815     MessageParcel data;
816     MessageParcel reply;
817     MessageOption option(MessageOption::TF_SYNC);
818 
819     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
820         g_InfoParms1.instIndex);
821     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
822     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
823 
824     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
825     ASSERT_EQ(true, data.WriteParcelable(&request));
826     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
827         PrivacyInterfaceCode::GET_PERMISSION_USED_RECORDS), data, reply, option));
828     // callingTokenID is normal hap without need permission
829     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
830 }
831 
832 /**
833  * @tc.name: GetPermissionUsedRecordsInner003
834  * @tc.desc: GetPermissionUsedRecordsInner test.
835  * @tc.type: FUNC
836  * @tc.require:
837  */
838 HWTEST_F(PrivacyManagerServiceTest, GetPermissionUsedRecordsInner003, TestSize.Level1)
839 {
840     PermissionUsedRequestParcel request;
841     request.request.isRemote = true;
842 
843     TestPrivacyManagerStub testSub;
844     MessageParcel data;
845     MessageParcel reply;
846     MessageOption option(MessageOption::TF_SYNC);
847 
848     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
849     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
850 
851     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
852     ASSERT_EQ(true, data.WriteParcelable(&request));
853     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
854         PrivacyInterfaceCode::GET_PERMISSION_USED_RECORDS), data, reply, option));
855     // callingTokenID is system hap without need permission
856     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
857 }
858 
859 class TestCallBack : public OnPermissionUsedRecordCallbackStub {
860 public:
861     TestCallBack() = default;
862     virtual ~TestCallBack() = default;
863 
OnQueried(ErrCode code,PermissionUsedResult & result)864     void OnQueried(ErrCode code, PermissionUsedResult& result)
865     {
866         GTEST_LOG_(INFO) << "TestCallBack, code :" << code << ", bundleSize :" << result.bundleRecords.size();
867     }
868 };
869 
870 /**
871  * @tc.name: RegisterPermActiveStatusCallbackInner001
872  * @tc.desc: RegisterPermActiveStatusCallbackInner test.
873  * @tc.type: FUNC
874  * @tc.require:
875  */
876 HWTEST_F(PrivacyManagerServiceTest, RegisterPermActiveStatusCallbackInner001, TestSize.Level1)
877 {
878     std::vector<std::string> permList = {};
879 
880     TestPrivacyManagerStub testSub;
881     MessageParcel data;
882     MessageParcel reply;
883     MessageOption option(MessageOption::TF_SYNC);
884 
885     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
886     ASSERT_EQ(true, data.WriteUint32(permList.size()));
887     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
888         PrivacyInterfaceCode::REGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
889     // callingTokenID is native token hdcd with need permission
890     ASSERT_EQ(PrivacyError::ERR_READ_PARCEL_FAILED, reply.ReadInt32());
891 }
892 
893 /**
894  * @tc.name: RegisterPermActiveStatusCallbackInner002
895  * @tc.desc: RegisterPermActiveStatusCallbackInner test.
896  * @tc.type: FUNC
897  * @tc.require:
898  */
899 HWTEST_F(PrivacyManagerServiceTest, RegisterPermActiveStatusCallbackInner002, TestSize.Level1)
900 {
901     std::vector<std::string> permList = {};
902     TestPrivacyManagerStub testSub;
903     MessageParcel data;
904     MessageParcel reply;
905     MessageOption option(MessageOption::TF_SYNC);
906 
907     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
908         g_InfoParms1.instIndex);
909     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
910     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
911 
912     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
913     ASSERT_EQ(true, data.WriteUint32(permList.size()));
914     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
915         PrivacyInterfaceCode::REGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
916     // callingTokenID is normal hap without need permission
917     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
918 }
919 
920 /**
921  * @tc.name: RegisterPermActiveStatusCallbackInner003
922  * @tc.desc: RegisterPermActiveStatusCallbackInner test.
923  * @tc.type: FUNC
924  * @tc.require:
925  */
926 HWTEST_F(PrivacyManagerServiceTest, RegisterPermActiveStatusCallbackInner003, TestSize.Level1)
927 {
928     TestPrivacyManagerStub testSub;
929     MessageParcel data;
930     MessageParcel reply;
931     MessageOption option(MessageOption::TF_SYNC);
932 
933     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
934     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
935 
936     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
937     ASSERT_EQ(true, data.WriteUint32(0));
938     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
939         PrivacyInterfaceCode::REGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
940     // callingTokenID is system hap without need permission
941     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
942 }
943 
944 /**
945  * @tc.name: UnRegisterPermActiveStatusCallbackInner001
946  * @tc.desc: UnRegisterPermActiveStatusCallbackInner test.
947  * @tc.type: FUNC
948  * @tc.require:
949  */
950 HWTEST_F(PrivacyManagerServiceTest, UnRegisterPermActiveStatusCallbackInner001, TestSize.Level1)
951 {
952     TestPrivacyManagerStub testSub;
953     MessageParcel data;
954     MessageParcel reply;
955     MessageOption option(MessageOption::TF_SYNC);
956     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
957     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
958         PrivacyInterfaceCode::UNREGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
959     // callingTokenID is native token hdcd with need permission
960     ASSERT_EQ(PrivacyError::ERR_READ_PARCEL_FAILED, reply.ReadInt32());
961 }
962 
963 /**
964  * @tc.name: UnRegisterPermActiveStatusCallbackInner002
965  * @tc.desc: UnRegisterPermActiveStatusCallbackInner test.
966  * @tc.type: FUNC
967  * @tc.require:
968  */
969 HWTEST_F(PrivacyManagerServiceTest, UnRegisterPermActiveStatusCallbackInner002, TestSize.Level1)
970 {
971     TestPrivacyManagerStub testSub;
972     MessageParcel data;
973     MessageParcel reply;
974     MessageOption option(MessageOption::TF_SYNC);
975 
976     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
977         g_InfoParms1.instIndex);
978     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
979     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
980 
981     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
982     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
983         PrivacyInterfaceCode::UNREGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
984     // callingTokenID is normal hap without need permission
985     ASSERT_EQ(PrivacyError::ERR_NOT_SYSTEM_APP, reply.ReadInt32());
986 }
987 
988 /**
989  * @tc.name: UnRegisterPermActiveStatusCallbackInner003
990  * @tc.desc: UnRegisterPermActiveStatusCallbackInner test.
991  * @tc.type: FUNC
992  * @tc.require:
993  */
994 HWTEST_F(PrivacyManagerServiceTest, UnRegisterPermActiveStatusCallbackInner003, TestSize.Level1)
995 {
996     TestPrivacyManagerStub testSub;
997     MessageParcel data;
998     MessageParcel reply;
999     MessageOption option(MessageOption::TF_SYNC);
1000 
1001     ASSERT_NE(g_tokenID.tokenIDEx, static_cast<AccessTokenID>(0));
1002     SetSelfTokenID(g_tokenID.tokenIDEx); // set self tokenID to system app
1003 
1004     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
1005     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
1006         PrivacyInterfaceCode::UNREGISTER_PERM_ACTIVE_STATUS_CHANGE_CALLBACK), data, reply, option));
1007     // callingTokenID is system hap without need permission
1008     ASSERT_EQ(PrivacyError::ERR_PERMISSION_DENIED, reply.ReadInt32());
1009 }
1010 
1011 /**
1012  * @tc.name: IsAllowedUsingPermissionInner001
1013  * @tc.desc: IsAllowedUsingPermissionInner test.
1014  * @tc.type: FUNC
1015  * @tc.require:
1016  */
1017 HWTEST_F(PrivacyManagerServiceTest, IsAllowedUsingPermissionInner001, TestSize.Level1)
1018 {
1019     AccessTokenID tokenID = 123; // 123 is random input
1020     std::string permissionName = "ohos.permission.test";
1021 
1022     TestPrivacyManagerStub testSub;
1023     MessageParcel data;
1024     MessageParcel reply;
1025     MessageOption option(MessageOption::TF_SYNC);
1026 
1027     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
1028     ASSERT_EQ(true, data.WriteUint32(tokenID));
1029     ASSERT_EQ(true, data.WriteString(permissionName));
1030     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
1031         PrivacyInterfaceCode::IS_ALLOWED_USING_PERMISSION), data, reply, option));
1032     // callingTokenID is native token hdcd with need permission, remote is true return ERR_PARAM_INVALID
1033     ASSERT_EQ(true, reply.ReadBool());
1034 }
1035 
1036 /**
1037  * @tc.name: IsAllowedUsingPermissionInner002
1038  * @tc.desc: IsAllowedUsingPermissionInner test.
1039  * @tc.type: FUNC
1040  * @tc.require:
1041  */
1042 HWTEST_F(PrivacyManagerServiceTest, IsAllowedUsingPermissionInner002, TestSize.Level1)
1043 {
1044     AccessTokenID tokenID = 123; // 123 is random input
1045     std::string permissionName = "ohos.permission.test";
1046 
1047     TestPrivacyManagerStub testSub;
1048     MessageParcel data;
1049     MessageParcel reply;
1050     MessageOption option(MessageOption::TF_SYNC);
1051 
1052     AccessTokenID hapTokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID, g_InfoParms1.bundleName,
1053         g_InfoParms1.instIndex);
1054     ASSERT_NE(hapTokenID, static_cast<AccessTokenID>(0));
1055     SetSelfTokenID(hapTokenID); // set self tokenID to hapTokenID
1056 
1057     ASSERT_EQ(true, data.WriteInterfaceToken(IPrivacyManager::GetDescriptor()));
1058     ASSERT_EQ(true, data.WriteUint32(tokenID));
1059     ASSERT_EQ(true, data.WriteString(permissionName));
1060     ASSERT_EQ(RET_SUCCESS, testSub.OnRemoteRequest(static_cast<uint32_t>(
1061         PrivacyInterfaceCode::IS_ALLOWED_USING_PERMISSION), data, reply, option));
1062     // callingTokenID is normal hap without need permission
1063     ASSERT_EQ(false, reply.ReadBool());
1064 }
1065 } // namespace AccessToken
1066 } // namespace Security
1067 } // namespace OHOS
1068