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 "nativetoken_oper_test.h"
17 #include <fstream>
18 #include <fcntl.h>
19 #include <poll.h>
20 #include <pthread.h>
21 #include "securec.h"
22 #include "nativetoken.h"
23 #include "nativetoken_json_oper.h"
24 #include "nativetoken_kit.h"
25 #include "cJSON.h"
26
27 using namespace testing::ext;
28 using namespace OHOS::Security;
29
SetUpTestCase()30 void TokenOperTest::SetUpTestCase()
31 {
32 GetHandle();
33 }
34
TearDownTestCase()35 void TokenOperTest::TearDownTestCase()
36 {}
37
SetUp()38 void TokenOperTest::SetUp()
39 {}
40
TearDown()41 void TokenOperTest::TearDown()
42 {}
43 static const int32_t VALID_TIME = 100;
44 static const int32_t DEFAULT_TIME = -1;
45 static const char *TOKEN_ID_CFG_FILE_COPY_PATH = "/data/service/el0/access_token/nativetoken_copy.json";
46 extern int g_getArrayItemTime;
47 extern int g_getObjectItem;
48 extern int g_strcpyTime;
49 extern NativeTokenList *g_tokenListHead;
50
SetTimes(void)51 static void SetTimes(void)
52 {
53 g_getArrayItemTime = VALID_TIME;
54 g_getObjectItem = VALID_TIME;
55 g_isStringTime = VALID_TIME;
56 g_replaceItemInObjectTime = VALID_TIME;
57 g_createNumberTime = VALID_TIME;
58 g_createArrayTime = VALID_TIME;
59 g_createStringTime = VALID_TIME;
60 g_addItemToArray = VALID_TIME;
61 g_addItemToObject = VALID_TIME;
62 g_createObject = VALID_TIME;
63 g_parse = VALID_TIME;
64 g_getArraySize = VALID_TIME;
65 g_printUnformatted = VALID_TIME;
66 g_strcpyTime = VALID_TIME;
67 }
68
IsFileEmpty(const std::string & fileName)69 static bool IsFileEmpty(const std::string& fileName)
70 {
71 FILE *file = fopen(fileName.c_str(), "r");
72 if (file == nullptr) {
73 std::cout << "fopen failed " << fileName << std::endl;
74 return false;
75 }
76 (void)fseek(file, 0, SEEK_END);
77 bool flag = false;
78 if (ftell(file) == 0) {
79 flag = true;
80 }
81 (void)fclose(file);
82 return flag;
83 }
84
ClearFile(const char * fileName)85 static int32_t ClearFile(const char* fileName)
86 {
87 int32_t fd = open(fileName, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP);
88 if (fd < 0) {
89 return -1;
90 }
91
92 close(fd);
93 return 0;
94 }
95
CopyNativeTokenJson(const std::string & sourceFileName,const std::string & destFileName)96 static void CopyNativeTokenJson(const std::string& sourceFileName, const std::string& destFileName)
97 {
98 // if dest file exists, clear it;
99 if (access(destFileName.c_str(), F_OK) == 0) {
100 if (ClearFile(destFileName.c_str()) != 0) {
101 std::cout << "dest file exists, failed to remove dest file" << std::endl;
102 return;
103 }
104 }
105
106 std::ifstream sourceFile(sourceFileName, std::ios::binary);
107 std::ofstream destFile(destFileName, std::ios::binary);
108 if (!sourceFile.is_open()) {
109 std::cout << "open source file " << sourceFileName << "failed" << std::endl;
110 return;
111 }
112
113 destFile << sourceFile.rdbuf();
114
115 sourceFile.close();
116 destFile.close();
117 }
118
119 /**
120 * @tc.name: UpdateGoalItemFromRecord001
121 * @tc.desc: UpdateGoalItemFromRecord abnormal.
122 * @tc.type: FUNC
123 * @tc.require:
124 */
125 HWTEST_F(TokenOperTest, UpdateGoalItemFromRecord001, TestSize.Level0)
126 {
127 SetTimes();
128 NativeTokenList tokenNode;
129 std::string stringJson1 = R"()"\
130 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
131 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]})";
132
133 cJSON* jsonRoot = cJSON_Parse(stringJson1.c_str());
134 g_getArrayItemTime = DEFAULT_TIME;
135 g_getObjectItem = DEFAULT_TIME;
136
137 // cJSON_GetArrayItem failed
138 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
139
140 // processNameJson == NULL
141 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
142
143 cJSON_Delete(jsonRoot);
144 }
145
146 /**
147 * @tc.name: UpdateItemcontent001
148 * @tc.desc: UpdateItemcontent abnormal.
149 * @tc.type: FUNC
150 * @tc.require:
151 */
152 HWTEST_F(TokenOperTest, UpdateItemcontent001, TestSize.Level0)
153 {
154 SetTimes();
155 g_createNumberTime = DEFAULT_TIME;
156 g_replaceItemInObjectTime = DEFAULT_TIME;
157 NativeTokenList tokenNode;
158 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
159
160 std::string stringJson1 = R"([)"\
161 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
162 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]}])";
163
164 cJSON* jsonRoot = cJSON_Parse(stringJson1.c_str());
165
166 // cJSON_CreateNumber failed 248 line
167 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
168
169 // cJSON_ReplaceItemInObject failed 251 line
170 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
171
172 cJSON_Delete(jsonRoot);
173 }
174
175 /**
176 * @tc.name: UpdateItemcontent002
177 * @tc.desc: UpdateItemcontent abnormal in UpdateStrArrayType.
178 * @tc.type: FUNC
179 * @tc.require:
180 */
181 HWTEST_F(TokenOperTest, UpdateItemcontent002, TestSize.Level0)
182 {
183 SetTimes();
184 NativeTokenList tokenNode;
185 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
186 tokenNode.apl = 1;
187 tokenNode.dcapsNum = 1;
188 tokenNode.aclsNum = 0;
189 tokenNode.permsNum = 0;
190 tokenNode.dcaps = static_cast<char **>(malloc(tokenNode.dcapsNum * sizeof(char *)));
191 EXPECT_NE(tokenNode.dcaps, nullptr);
192 tokenNode.perms = static_cast<char **>(malloc(tokenNode.permsNum * sizeof(char *)));
193 EXPECT_NE(tokenNode.perms, nullptr);
194 tokenNode.acls = static_cast<char **>(malloc(tokenNode.aclsNum * sizeof(char *)));
195 EXPECT_NE(tokenNode.acls, nullptr);
196
197 std::string stringJson1 = R"([)"\
198 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
199 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]}])";
200
201 cJSON* jsonRoot = cJSON_Parse(stringJson1.c_str());
202
203 g_createArrayTime = DEFAULT_TIME;
204 // cJSON_CreateArray failed 209 line
205 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
206
207 // cJSON_CreateString failed 215 line
208 g_createStringTime = DEFAULT_TIME;
209 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
210 cJSON_Delete(jsonRoot);
211 }
212
213 /**
214 * @tc.name: UpdateItemcontent003
215 * @tc.desc: UpdateItemcontent abnormal in UpdateStrArrayType.
216 * @tc.type: FUNC
217 * @tc.require:
218 */
219 HWTEST_F(TokenOperTest, UpdateItemcontent003, TestSize.Level0)
220 {
221 SetTimes();
222 NativeTokenList tokenNode;
223 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
224 int32_t newDcapsNum = 2;
225 tokenNode.apl = 1;
226 tokenNode.dcapsNum = 1;
227 tokenNode.dcaps = static_cast<char **>(malloc(sizeof(char *) * newDcapsNum));
228 EXPECT_NE(tokenNode.dcaps, nullptr);
229 for (int32_t i = 0; i < newDcapsNum; ++i) {
230 tokenNode.dcaps[i] = static_cast<char *>(malloc(sizeof(char) * MAX_DCAP_LEN));
231 EXPECT_NE(tokenNode.dcaps[i], nullptr);
232 }
233 (void)strcpy_s(tokenNode.dcaps[0], MAX_DCAP_LEN, "x");
234 tokenNode.aclsNum = 0;
235 tokenNode.permsNum = 0;
236
237 std::string stringJson1 = R"([)"\
238 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
239 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]}])";
240
241 cJSON* jsonRoot = cJSON_Parse(stringJson1.c_str());
242
243 // cJSON_AddItemToArray failed 221
244 g_addItemToArray = DEFAULT_TIME;
245 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
246
247 // cJSON_GetObjectItem failed 228
248 g_getObjectItem = 8; // 8 times
249 EXPECT_EQ(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
250
251 // cJSON_AddItemToObject failed
252 g_getObjectItem = 8; // 8 times
253 g_addItemToObject = DEFAULT_TIME;
254 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
255
256 // cJSON_AddItemToObject failed 229 line
257 g_replaceItemInObjectTime = 8; // 8 times
258 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
259
260 cJSON_Delete(jsonRoot);
261 FreeStrArray(&tokenNode.dcaps, newDcapsNum - 1);
262 }
263
264 /**
265 * @tc.name: UpdateItemcontent003
266 * @tc.desc: UpdateItemcontent abnormal in UpdateStrArrayType.
267 * @tc.type: FUNC
268 * @tc.require:
269 */
270 HWTEST_F(TokenOperTest, UpdateItemcontent004, TestSize.Level0)
271 {
272 SetTimes();
273 NativeTokenList tokenNode;
274 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
275 int32_t newDcapsNum = 2;
276 tokenNode.apl = 1;
277 tokenNode.dcapsNum = 1;
278 tokenNode.dcaps = static_cast<char **>(malloc(sizeof(char *) * newDcapsNum));
279 EXPECT_NE(tokenNode.dcaps, nullptr);
280 for (int32_t i = 0; i < newDcapsNum; ++i) {
281 tokenNode.dcaps[i] = static_cast<char *>(malloc(sizeof(char) * MAX_DCAP_LEN));
282 EXPECT_NE(tokenNode.dcaps[i], nullptr);
283 }
284 (void)strcpy_s(tokenNode.dcaps[0], MAX_DCAP_LEN, "x");
285 tokenNode.aclsNum = 0;
286 tokenNode.permsNum = 0;
287
288 std::string stringJson1 = R"([)"\
289 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
290 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]}])";
291
292 cJSON* json = cJSON_Parse(stringJson1.c_str());
293 EXPECT_EQ(UpdateGoalItemFromRecord(&tokenNode, json), 0);
294
295 // perms update failed
296 tokenNode.permsNum = 1;
297 tokenNode.perms = static_cast<char **>(malloc(sizeof(char *) * tokenNode.permsNum));
298 EXPECT_NE(tokenNode.perms, nullptr);
299 tokenNode.perms[0] = nullptr;
300 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, json), 0);
301
302 // acls update failed
303 tokenNode.perms[0] = static_cast<char *>(malloc(sizeof(char) * MAX_PERM_LEN));
304 (void)strcpy_s(tokenNode.perms[0], MAX_PERM_LEN, "x");
305 tokenNode.aclsNum = 1;
306 tokenNode.acls = static_cast<char **>(malloc(sizeof(char *) * tokenNode.aclsNum));
307 EXPECT_NE(tokenNode.acls, nullptr);
308 tokenNode.acls[0] = nullptr;
309 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, json), 0);
310
311 tokenNode.acls[0] = static_cast<char *>(malloc(sizeof(char) * MAX_PERM_LEN));
312 EXPECT_NE(tokenNode.acls[0], nullptr);
313 (void)strcpy_s(tokenNode.acls[0], MAX_PERM_LEN, "x");
314 EXPECT_EQ(UpdateGoalItemFromRecord(&tokenNode, json), 0);
315
316 cJSON_Delete(json);
317 FreeStrArray(&tokenNode.dcaps, newDcapsNum - 1);
318 FreeStrArray(&tokenNode.perms, tokenNode.permsNum - 1);
319 FreeStrArray(&tokenNode.acls, tokenNode.aclsNum - 1);
320 }
321
322 /**
323 * @tc.name: CreateNativeTokenJsonObject001
324 * @tc.desc: CreateNativeTokenJsonObject ABNORMAL.
325 * @tc.type: FUNC
326 * @tc.require:
327 */
328 HWTEST_F(TokenOperTest, CreateNativeTokenJsonObject001, TestSize.Level0)
329 {
330 SetTimes();
331 NativeTokenList tokenNode;
332
333 // cJSON_CreateObject failed 194 line
334 g_createObject = DEFAULT_TIME;
335 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
336
337 // cJSON_CreateString failed 143 line
338 g_createStringTime = DEFAULT_TIME;
339 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
340
341 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
342 tokenNode.apl = 1;
343 tokenNode.dcapsNum = 1;
344 tokenNode.dcaps = static_cast<char **>(malloc(sizeof(char *) * tokenNode.dcapsNum));
345 EXPECT_NE(tokenNode.dcaps, nullptr);
346 tokenNode.dcaps[0] = static_cast<char *>(malloc(sizeof(char) * MAX_DCAP_LEN));
347 EXPECT_NE(tokenNode.dcaps[0], nullptr);
348 (void)strcpy_s(tokenNode.dcaps[0], MAX_DCAP_LEN, "x");
349 tokenNode.aclsNum = 0;
350 tokenNode.permsNum = 0;
351
352 // cJSON_AddItemToObject failed 144 line
353 g_addItemToObject = DEFAULT_TIME;
354 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
355
356 // cJSON_CreateNumber failed 150
357 g_createNumberTime = DEFAULT_TIME;
358 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
359
360 // cJSON_AddItemToObject failed 151
361 g_addItemToObject = 8; // 8 times
362 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
363
364 // cJSON_CreateNumber failed 157
365 g_createNumberTime = 8; // 8 times
366 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
367
368 // cJSON_AddItemToObject failed 158
369 g_addItemToObject = 17; // 17 times
370 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
371
372 // cJSON_CreateNumber failed 164
373 g_createNumberTime = 17; // 17 times
374 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
375
376 // cJSON_AddItemToObject failed 165
377 g_addItemToObject = 26; // 26 times
378 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
379
380 // cJSON_CreateNumber failed 171
381 g_createNumberTime = 26; // 26 times
382 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
383
384 // cJSON_AddItemToObject failed 172
385 g_addItemToObject = 35; // 35 times
386 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
387
388 FreeStrArray(&tokenNode.dcaps, tokenNode.dcapsNum - 1);
389 }
390
391 /**
392 * @tc.name: CreateNativeTokenJsonObject002
393 * @tc.desc: CreateNativeTokenJsonObject abnormal for AddStrArrayInfo.
394 * @tc.type: FUNC
395 * @tc.require:
396 */
397 HWTEST_F(TokenOperTest, CreateNativeTokenJsonObject002, TestSize.Level0)
398 {
399 SetTimes();
400 NativeTokenList tokenNode;
401
402 (void)strcpy_s(tokenNode.processName, MAX_PROCESS_NAME_LEN + 1, "process5");
403 tokenNode.apl = 1;
404 tokenNode.dcapsNum = 1;
405 tokenNode.dcaps = static_cast<char **>(malloc(sizeof(char *) * tokenNode.dcapsNum));
406 EXPECT_NE(tokenNode.dcaps, nullptr);
407 tokenNode.dcaps[0] = static_cast<char *>(malloc(sizeof(char) * MAX_DCAP_LEN));
408 EXPECT_NE(tokenNode.dcaps[0], nullptr);
409 (void)strcpy_s(tokenNode.dcaps[0], MAX_DCAP_LEN, "y");
410 tokenNode.aclsNum = 0;
411 tokenNode.permsNum = 0;
412
413 // AddStrArrayInfo cJSON_CreateArray failed 119
414 g_createArrayTime = DEFAULT_TIME;
415 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
416
417 // AddStrArrayInfo cJSON_CreateString failed 125
418 g_createStringTime = 8; // 8 times
419 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
420
421 // AddStrArrayInfo cJSON_AddItemToArray failed 126
422 g_addItemToArray = DEFAULT_TIME;
423 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
424
425 // cJSON_AddItemToObject failed 172
426 g_addItemToObject = 44; // 44 times
427 EXPECT_EQ(CreateNativeTokenJsonObject(&tokenNode), nullptr);
428 FreeStrArray(&tokenNode.dcaps, tokenNode.dcapsNum - 1);
429 }
430
431 /**
432 * @tc.name: GetNativeTokenFromJson001
433 * @tc.desc: GetNativeTokenFromJson successfully.
434 * @tc.type: FUNC
435 * @tc.require:
436 */
437 HWTEST_F(TokenOperTest, GetNativeTokenFromJson001, TestSize.Level0)
438 {
439 SetTimes();
440 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), false);
441
442 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH);
443 g_parse = DEFAULT_TIME;
444 (void)AtlibInit();
445 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true);
446 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
447
448 g_getArrayItemTime = DEFAULT_TIME;
449 (void)AtlibInit();
450 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true);
451 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
452
453 g_getArraySize = DEFAULT_TIME;
454 (void)AtlibInit();
455 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true);
456 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
457
458 g_getArraySize = 8; // 8 times
459 (void)AtlibInit();
460 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true);
461 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
462
463 g_getArraySize = 17; // 17 times
464 (void)AtlibInit();
465 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), true);
466 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
467
468 std::remove(TOKEN_ID_CFG_FILE_COPY_PATH);
469 }
470
Start(const char * processName,bool isChange=false)471 static int32_t Start(const char *processName, bool isChange = false)
472 {
473 const char **dcapList = new (std::nothrow) const char *[2];
474 if (dcapList == nullptr) {
475 return 0;
476 }
477 dcapList[0] = "AT_CAP";
478 dcapList[1] = "ST_CAP";
479 uint64_t tokenId;
480 const char **permList = new (std::nothrow) const char *[2];
481 if (permList == nullptr) {
482 return 0;
483 }
484 permList[0] = "ohos.permission.test1";
485 permList[1] = "ohos.permission.test2";
486 if (isChange) {
487 permList[1] = "ohos.permission.test3";
488 }
489 const char **acls = new (std::nothrow) const char *[1];
490 if (acls == nullptr) {
491 return 0;
492 }
493 acls[0] = "ohos.permission.test1";
494 NativeTokenInfoParams infoInstance = {
495 .dcapsNum = 2,
496 .permsNum = 2,
497 .aclsNum = 1,
498 .dcaps = dcapList,
499 .perms = permList,
500 .acls = acls,
501 .processName = processName,
502 .aplStr = "system_basic",
503 };
504 tokenId = GetAccessTokenId(&infoInstance);
505 delete[] dcapList;
506 delete[] permList;
507 delete[] acls;
508 return tokenId;
509 }
510
511 /**
512 * @tc.name: GetInfoArrFromJson001
513 * @tc.desc: GetInfoArrFromJson successfully.
514 * @tc.type: FUNC
515 * @tc.require:
516 */
517 HWTEST_F(TokenOperTest, GetInfoArrFromJson001, TestSize.Level0)
518 {
519 SetTimes();
520 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH);
521
522 NativeTokenInfoParams tokenInfo;
523 g_parse = DEFAULT_TIME;
524 EXPECT_EQ(GetAccessTokenId(&tokenInfo), 0);
525 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
526 g_parse = VALID_TIME;
527 (void)AtlibInit();
528 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), false);
529
530 // UpdateInfoInCfgFile failed for SaveTokenIdToCfg
531 // tokenNode->dcapsNum != dcapNumIn branch
532 g_parse = 9; // 9 times
533 EXPECT_EQ(Start("foundation"), 0);
534 EXPECT_EQ(IsFileEmpty(TOKEN_ID_CFG_FILE_PATH), false);
535
536 g_printUnformatted = DEFAULT_TIME;
537 EXPECT_EQ(Start("process1"), 0);
538
539 // CreateNativeTokenJsonObject failed 385 line
540 EXPECT_EQ(Start("processUnique"), 0);
541
542 EXPECT_NE(Start("processUnique1"), 0);
543 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
544 std::remove(TOKEN_ID_CFG_FILE_COPY_PATH);
545 }
546
547 /**
548 * @tc.name: RemoveNodeFromList001
549 * @tc.desc: remove foundation node of token list.
550 * @tc.type: FUNC
551 * @tc.require:
552 */
553 HWTEST_F(TokenOperTest, RemoveNodeFromList001, TestSize.Level0)
554 {
555 SetTimes();
556 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH);
557 (void)AtlibInit();
558 EXPECT_NE(g_tokenListHead, nullptr);
559 g_strcpyTime = 0;
560 EXPECT_EQ(Start("foundation"), 0);
561
562 // check the node whether exsits in the list
563 NativeTokenList *node = g_tokenListHead->next;
564 while (node != nullptr) {
565 if (strcmp(node->processName, "foundation") == 0) {
566 break;
567 }
568 node = node->next;
569 }
570 EXPECT_EQ(node, nullptr);
571
572 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
573 std::remove(TOKEN_ID_CFG_FILE_COPY_PATH);
574 }
575
576 /**
577 * @tc.name: RemoveNodeFromList002
578 * @tc.desc: rmeove the second node of token list.
579 * @tc.type: FUNC
580 * @tc.require:
581 */
582 HWTEST_F(TokenOperTest, RemoveNodeFromList002, TestSize.Level0)
583 {
584 SetTimes();
585 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_PATH, TOKEN_ID_CFG_FILE_COPY_PATH);
586 (void)AtlibInit();
587 EXPECT_NE(g_tokenListHead, nullptr);
588 // add the node
589 EXPECT_NE(Start("process3"), 0);
590 g_strcpyTime = 0;
591
592 // remove the node
593 EXPECT_EQ(Start("process3", true), 0);
594
595 // check the node whether exsits in the list
596 NativeTokenList *node = g_tokenListHead->next;
597 while (node != nullptr) {
598 if (strcmp(node->processName, "process3") == 0) {
599 break;
600 }
601 node = node->next;
602 }
603 EXPECT_EQ(node, nullptr);
604
605 CopyNativeTokenJson(TOKEN_ID_CFG_FILE_COPY_PATH, TOKEN_ID_CFG_FILE_PATH);
606 std::remove(TOKEN_ID_CFG_FILE_COPY_PATH);
607 }
608