• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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