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