1 /*
2  * Copyright (c) 2021 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 #include <gtest/gtest.h>
16 
17 #include "init_param.h"
18 #include "param_base.h"
19 #include "param_message.h"
20 #include "param_stub.h"
21 #include "param_init.h"
22 #include "trigger_manager.h"
23 #include "param_utils.h"
24 #include "param_osadp.h"
25 #include "param_manager.h"
26 #include "sys_param.h"
27 
28 using namespace testing::ext;
29 using namespace std;
30 
31 extern "C" {
32 void ParamWorBaseLog(InitLogLevel logLevel, uint32_t domain, const char *tag, const char *fmt, ...);
OnClose(const TaskHandle taskHandle)33 static void OnClose(const TaskHandle taskHandle)
34 {
35 }
36 }
37 
CheckServerParamValue(const char *name, const char *expectValue)38 static int CheckServerParamValue(const char *name, const char *expectValue)
39 {
40     char tmp[PARAM_BUFFER_SIZE] = {0};
41     u_int32_t len = sizeof(tmp);
42     SystemReadParam(name, tmp, &len);
43     printf("CheckParamValue name %s value: \'%s\' expectValue:\'%s\' \n", name, tmp, expectValue);
44     EXPECT_GE((int)strlen(tmp), 0);
45     if (expectValue != nullptr) {
46         EXPECT_EQ(strcmp(tmp, expectValue), 0);
47     }
48     return 0;
49 }
50 
51 namespace init_ut {
52 class ParamUnitTest : public ::testing::Test {
53 public:
ParamUnitTest()54     ParamUnitTest() {}
~ParamUnitTest()55     virtual ~ParamUnitTest() {}
56 
SetUpTestCase(void)57     static void SetUpTestCase(void) {}
SetUp()58     void SetUp() {}
TearDown()59     void TearDown() {}
TestBody()60     void TestBody() {}
61 
TestSetParams(const char *params[][1 + 1], int num)62     int TestSetParams(const char *params[][1 + 1], int num)
63     {
64         for (int i = 0; i < num; i++) {
65             SystemWriteParam(params[i][0], params[i][1]);
66         }
67 
68         // check
69         for (int i = 0; i < num; i++) {
70             CheckServerParamValue(params[i][0], params[i][1]);
71         }
72 
73         for (int i = num - 1; i >= 0; i--) {
74             CheckServerParamValue(params[i][0], params[i][1]);
75         }
76         return 0;
77     }
78 
TestAddSecurityLabel1()79     int TestAddSecurityLabel1()
80     {
81         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
82         const char *name = "label1.test.aaa.bbb.ccc.dddd.eee";
83         const char *value = "2001";
84         uint32_t labelIndex = 0;
85         SystemWriteParam(name, value);
86         // get root
87         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
88         (void)FindTrieNode(workspace, name, strlen(name), &labelIndex);
89         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
90         if (node == nullptr) {
91             EXPECT_EQ(1, 0);
92             return 0;
93         }
94         EXPECT_EQ(node->gid, DAC_DEFAULT_GROUP);
95         return 0;
96     }
97 
98     // 添加一个label,最长匹配到这个节点
TestAddSecurityLabel2()99     int TestAddSecurityLabel2()
100     {
101         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
102         const char *name = "label2.test.aaa.bbb.ccc.dddd.eee";
103         const char *value = "2001";
104         ParamAuditData auditData = {};
105         auditData.name = "label2.test.aaa";
106         auditData.dacData.gid = 202;  // 202 test dac gid
107         auditData.dacData.uid = geteuid();
108         auditData.dacData.mode = 0666;  // 0666 test mode
109         SystemWriteParam(name, value);
110         uint32_t labelIndex = 0;
111         AddSecurityLabel(&auditData);
112         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
113         (void)FindTrieNode(workspace, name, strlen(name), &labelIndex);
114         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
115         if (node == nullptr) {
116             EXPECT_EQ(1, 0);
117             return 0;
118         }
119         EXPECT_EQ(node->gid, auditData.dacData.gid);
120         return 0;
121     }
122 
123     // 添加一个label,最长匹配到最后一个相同节点
TestAddSecurityLabel3()124     int TestAddSecurityLabel3()
125     {
126         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
127         const char *name = "label3.test.aaa.bbb.ccc.dddd.eee";
128         const char *value = "2001";
129         ParamAuditData auditData = {};
130         auditData.name = "label3.test.aaa";
131         auditData.dacData.gid = 203;  // 203 test gid
132         auditData.dacData.uid = geteuid();
133         auditData.dacData.mode = 0666;  // 0666 test mode
134         SystemWriteParam(name, value);
135         AddSecurityLabel(&auditData);
136 
137         auditData.name = "label3.test.aaa.bbb.ccc.dddd.eee.dddd";
138         auditData.dacData.gid = 202;  // 202 test dac gid
139         auditData.dacData.uid = geteuid();
140         auditData.dacData.mode = 0666;  // 0666 test mode
141         SystemWriteParam(name, value);
142         AddSecurityLabel(&auditData);
143 
144         uint32_t labelIndex = 0;
145         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
146         ParamTrieNode *paramNode = FindTrieNode(workspace, name, strlen(name), &labelIndex);
147         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
148         if (paramNode == nullptr || node == nullptr) {
149             EXPECT_EQ(1, 0);
150             return 0;
151         }
152         EXPECT_EQ((int)node->gid, 203);  // 203 test gid
153         return 0;
154     }
155 
156     // 添加一个label,完全匹配
TestAddSecurityLabel4()157     int TestAddSecurityLabel4()
158     {
159 #if !(defined __LITEOS_A__ || defined __LITEOS_M__)
160         ResetParamSecurityLabel();
161 #endif
162         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
163         const char *name = "label4.test.aaa.bbb.ccc.dddd.eee";
164         const char *value = "2001";
165         ParamAuditData auditData = {};
166         auditData.name = "label4.test.aaa.bbb.ccc.dddd.eee";
167         auditData.dacData.gid = 203;  // 203 test gid
168         auditData.dacData.uid = geteuid();
169         auditData.dacData.mode = 0666;  // 0666 test mode
170         SystemWriteParam(name, value);
171         uint32_t labelIndex = 0;
172         AddSecurityLabel(&auditData);
173         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
174         ParamTrieNode *paramNode = FindTrieNode(workspace, name, strlen(name), &labelIndex);
175         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
176         if (paramNode == nullptr || node == nullptr) {
177             EXPECT_EQ(1, 0);
178             return 0;
179         }
180         EXPECT_EQ(node->gid, auditData.dacData.gid);
181         return 0;
182     }
183 
TestBufferValue(char *buffer, uint32_t len)184     void TestBufferValue(char *buffer, uint32_t len)
185     {
186         const int printBase = 10;
187         for (uint32_t index = 0; index <= len; index++) {
188             buffer[index] = '0' + index % printBase;
189             if (index != 0 && index % printBase == 0) {
190                 buffer[index] = '.';
191             }
192         }
193         buffer[len] = '\0';
194     }
195 
TestNameIsValid()196     int TestNameIsValid()
197     {
198         char buffer[PARAM_BUFFER_SIZE];
199         // set name length = 127
200         TestBufferValue(buffer, PARAM_NAME_LEN_MAX - 1);
201         int ret = SystemWriteParam(buffer, "1111");
202         EXPECT_EQ(ret, 0);
203         TestBufferValue(buffer, PARAM_NAME_LEN_MAX);
204         ret = SystemWriteParam(buffer, "1111");
205         EXPECT_NE(ret, 0);
206         TestBufferValue(buffer, PARAM_NAME_LEN_MAX + 1);
207         ret = SystemWriteParam(buffer, "1111");
208         EXPECT_NE(ret, 0);
209 
210         // 保存一个只读的属性,大于最大值
211         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
212         ret = SystemWriteParam("const.test_readonly.dddddddddddddddddd.fffffffffffffffffff", buffer);
213         EXPECT_EQ(ret, 0);
214 
215         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
216         ret = SystemWriteParam("const.test_readonly.aaaaaaaaaaaaaaaaaa.fffffffffffffffffff", buffer);
217         EXPECT_EQ(ret, 0);
218 
219         // 更新只读项目
220         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
221         ret = SystemWriteParam("const.test_readonly.dddddddddddddddddd.fffffffffffffffffff", buffer);
222         EXPECT_NE(ret, 0);
223 
224         // 写普通属性
225         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
226         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
227         EXPECT_EQ(ret, 0);
228         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
229         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
230         EXPECT_NE(ret, 0);
231 
232         // invalid name
233         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
234         ret = SystemWriteParam("test.invalidname..fffffffffffffffffff", buffer);
235         EXPECT_NE(ret, 0);
236         ret = SystemWriteParam("test.invalidname.%fffffffffffffffffff", buffer);
237         EXPECT_NE(ret, 0);
238         ret = SystemWriteParam("test.invalidname.$fffffffffffffffffff", buffer);
239         EXPECT_NE(ret, 0);
240         return 0;
241     }
242 
TestParamTraversal()243     int TestParamTraversal()
244     {
245         char value[PARAM_BUFFER_SIZE + PARAM_BUFFER_SIZE] = {0};
246         SystemTraversalParameter(
247             "",
248             [](ParamHandle handle, void *cookie) {
249                 SystemGetParameterName(handle, (char *)cookie, PARAM_BUFFER_SIZE);
250                 u_int32_t len = PARAM_BUFFER_SIZE;
251                 SystemGetParameterValue(handle, ((char *)cookie) + PARAM_BUFFER_SIZE, &len);
252                 printf("$$$$$$$$Param %s=%s \n", (char *)cookie, ((char *)cookie) + PARAM_BUFFER_SIZE);
253             },
254             (void *)value);
255         return 0;
256     }
257 
TestUpdateParam(const char *name, const char *value)258     int TestUpdateParam(const char *name, const char *value)
259     {
260         SystemWriteParam(name, value);
261         SystemWriteParam(name, value);
262         SystemWriteParam(name, value);
263         SystemWriteParam(name, value);
264         CheckServerParamValue(name, value);
265         return 0;
266     }
267 
TestPersistParam()268     int TestPersistParam()
269     {
270         ParamAuditData auditData = {};
271         auditData.name = "persist.";
272         auditData.dacData.gid = 0;
273         auditData.dacData.uid = 0;
274         auditData.dacData.mode = 0777;  // 0777 test mode
275         AddSecurityLabel(&auditData);
276 
277         LoadPersistParams();
278         SystemWriteParam("persist.111.ffff.bbbb.cccc.dddd.eeee", "1101");
279         SystemWriteParam("persist.111.aaaa.bbbb.cccc.dddd.eeee", "1102");
280         SystemWriteParam("persist.111.bbbb.cccc.dddd.eeee", "1103");
281         CheckServerParamValue("persist.111.bbbb.cccc.dddd.eeee", "1103");
282 
283         SystemWriteParam("persist.111.cccc.bbbb.cccc.dddd.eeee", "1104");
284         SystemWriteParam("persist.111.eeee.bbbb.cccc.dddd.eeee", "1105");
285         CheckServerParamValue("persist.111.ffff.bbbb.cccc.dddd.eeee", "1101");
286         SystemWriteParam("persist.111.ffff.bbbb.cccc.dddd.eeee", "1106");
287         CheckServerParamValue("persist.111.ffff.bbbb.cccc.dddd.eeee", "1106");
288         sleep(1);
289         SystemWriteParam("persist.111.bbbb.cccc.dddd.1107", "1107");
290         SystemWriteParam("persist.111.bbbb.cccc.dddd.1108", "1108");
291         SystemWriteParam("persist.111.bbbb.cccc.dddd.1109", "1108");
292         sleep(1);
293         SystemWriteParam("persist.111.bbbb.cccc.dddd.1110", "1108");
294         SystemWriteParam("persist.111.bbbb.cccc.dddd.1111", "1108");
295         TimerCallbackForSave(nullptr, nullptr);
296         LoadPersistParams();
297         return 0;
298     }
299 
TestPrivatePersistParam()300     int TestPrivatePersistParam()
301     {
302         LoadPrivatePersistParams();
303         SystemWriteParam("persist.test.111.aaa.bbb.ccc", "111");
304         SystemWriteParam("persist.test.222.aaa.bbb.ccc", "222");
305         SystemWriteParam("persist.test.333.aaa.bbb.ccc", "333");
306         CheckServerParamValue("persist.test.333.aaa.bbb.ccc", "333");
307         sleep(1);
308         TimerCallbackForSave(nullptr, nullptr);
309         LoadPrivatePersistParams();
310         return 0;
311     }
312 
TestDumpParamMemory()313     int TestDumpParamMemory()
314     {
315         SystemDumpParameters(1, -1, nullptr);
316         return 0;
317     }
318 
GetWorkSpaceIndex(const char *name)319     uint32_t GetWorkSpaceIndex(const char *name)
320     {
321 #ifdef PARAM_SUPPORT_SELINUX
322         ParamWorkSpace *paramSpace = GetParamWorkSpace();
323         PARAM_CHECK(paramSpace != nullptr, return (uint32_t)-1, "Invalid paramSpace");
324         return (paramSpace->selinuxSpace.getParamLabelIndex != nullptr) ?
325             paramSpace->selinuxSpace.getParamLabelIndex(name) + WORKSPACE_INDEX_BASE : (uint32_t)-1;
326 #else
327         return 0;
328 #endif
329     }
330 };
331 
HWTEST_F(ParamUnitTest, Init_TestPersistParam_001, TestSize.Level0)332 HWTEST_F(ParamUnitTest, Init_TestPersistParam_001, TestSize.Level0)
333 {
334     ParamUnitTest test;
335     test.TestPersistParam();
336 }
337 
HWTEST_F(ParamUnitTest, Init_TestPersistParam_002, TestSize.Level0)338 HWTEST_F(ParamUnitTest, Init_TestPersistParam_002, TestSize.Level0)
339 {
340     ParamUnitTest test;
341     test.TestPrivatePersistParam();
342 }
343 
HWTEST_F(ParamUnitTest, Init_TestSetParam_001, TestSize.Level0)344 HWTEST_F(ParamUnitTest, Init_TestSetParam_001, TestSize.Level0)
345 {
346     ParamUnitTest test;
347     const char *params[][2] = {{"111.2222", "1"},
348                                {"111.2222.3333", "2"},
349                                {"111.2222.3333.4444", "3"},
350                                {"111.2222.3333.4444.666", "4"},
351                                {"111.2222.3333.4444.666.777", "5"}};
352     test.TestSetParams(params, 5);
353 }
354 
HWTEST_F(ParamUnitTest, Init_TestSetParam_002, TestSize.Level0)355 HWTEST_F(ParamUnitTest, Init_TestSetParam_002, TestSize.Level0)
356 {
357     ParamUnitTest test;
358     const char *params[][2] = {{"111.2222.xxxx.xxx.xxx", "1_1"},
359                                {"111.2222.3333.xxx", "1_2"},
360                                {"111.2222.xxxx.3333.4444", "1_3"},
361                                {"111.2222.3333.xxxx.4444.666", "1_4"},
362                                {"111.2222.3333.4444.666.xxxxx.777", "1_5"}};
363     test.TestSetParams(params, 5);
364 
365     const char *ctrlParams[][2] = {{"ctl.start.111.2222.xxxx.xxx.xxx", "2_1"},
366                                    {"ctl.start.111.2222.3333.xxx", "2_2"},
367                                    {"ctl.start.111.2222.xxxx.3333.4444", "2_3"},
368                                    {"ctl.start.111.2222.3333.xxxx.4444.666", "2_4"},
369                                    {"ctl.start.111.2222.3333.4444.666.xxxxx.777", "2_5"}};
370     test.TestSetParams(ctrlParams, 5);
371 
372     const char *sysParams[][2] = {{"ohos.startup.powerctrl.111.2222.xxxx.xxx.xxx", "3_1"},
373                                   {"ohos.startup.powerctrl.111.2222.3333.xxx", "3_2"},
374                                   {"ohos.startup.powerctrl.111.2222.xxxx.3333.4444", "3_3"},
375                                   {"ohos.startup.powerctrl.111.2222.3333.xxxx.4444.666", "3_4"},
376                                   {"ohos.startup.powerctrl.111.2222.3333.4444.666.xxxxx.777", "3_5"}};
377     test.TestSetParams(sysParams, 5);
378 }
379 
HWTEST_F(ParamUnitTest, Init_TestNameIsValid_001, TestSize.Level0)380 HWTEST_F(ParamUnitTest, Init_TestNameIsValid_001, TestSize.Level0)
381 {
382     ParamUnitTest test;
383     test.TestNameIsValid();
384 }
385 
HWTEST_F(ParamUnitTest, Init_TestParamValue_001, TestSize.Level0)386 HWTEST_F(ParamUnitTest, Init_TestParamValue_001, TestSize.Level0)
387 {
388     // support empty string
389     const char *name = "test_readonly.dddddddddddddddddd.fffffffffffffffffff";
390     int ret = SystemWriteParam(name, "");
391     EXPECT_EQ(ret, 0);
392     CheckServerParamValue(name, "");
393     ret = SystemWriteParam(name, "111111111");
394     EXPECT_EQ(ret, 0);
395     CheckServerParamValue(name, "111111111");
396     ret = SystemWriteParam(name, "");
397     EXPECT_EQ(ret, 0);
398     CheckServerParamValue(name, "");
399 }
400 
HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_001, TestSize.Level0)401 HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_001, TestSize.Level0)
402 {
403     ParamUnitTest test;
404     test.TestAddSecurityLabel1();
405 }
406 
HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_002, TestSize.Level0)407 HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_002, TestSize.Level0)
408 {
409     ParamUnitTest test;
410     test.TestAddSecurityLabel2();
411 }
412 
HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_003, TestSize.Level0)413 HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_003, TestSize.Level0)
414 {
415     ParamUnitTest test;
416     test.TestAddSecurityLabel3();
417 }
418 
HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_004, TestSize.Level0)419 HWTEST_F(ParamUnitTest, Init_TestAddSecurityLabel_004, TestSize.Level0)
420 {
421     ParamUnitTest test;
422     test.TestAddSecurityLabel4();
423 }
424 
HWTEST_F(ParamUnitTest, Init_TestUpdateParam_001, TestSize.Level0)425 HWTEST_F(ParamUnitTest, Init_TestUpdateParam_001, TestSize.Level0)
426 {
427     ParamUnitTest test;
428     test.TestUpdateParam("test.aaa.bbb.ccc.ddd", "100");
429     test.TestUpdateParam("test.aaa.bbb.ccc.ddd", "101");
430     test.TestUpdateParam("test.aaa.bbb.ccc.ddd", "102");
431     test.TestUpdateParam("test.aaa.bbb.ccc.ddd", "103");
432     test.TestUpdateParam("net.tcp.default_init_rwnd", "60");
433 }
434 
HWTEST_F(ParamUnitTest, Init_TestParamTraversal_001, TestSize.Level0)435 HWTEST_F(ParamUnitTest, Init_TestParamTraversal_001, TestSize.Level0)
436 {
437     ParamUnitTest test;
438     test.TestParamTraversal();
439 }
440 
HWTEST_F(ParamUnitTest, Init_TestDumpParamMemory_001, TestSize.Level0)441 HWTEST_F(ParamUnitTest, Init_TestDumpParamMemory_001, TestSize.Level0)
442 {
443     ParamUnitTest test;
444     test.TestDumpParamMemory();
445 }
446 
HWTEST_F(ParamUnitTest, Init_TestLinuxRWLock_001, TestSize.Level0)447 HWTEST_F(ParamUnitTest, Init_TestLinuxRWLock_001, TestSize.Level0)
448 {
449     ParamRWMutexCreate(nullptr);
450     ParamRWMutexWRLock(nullptr);
451     ParamRWMutexRDLock(nullptr);
452     ParamRWMutexUnlock(nullptr);
453     ParamRWMutexDelete(nullptr);
454     ParamMutexDelete(nullptr);
455 }
456 
HWTEST_F(ParamUnitTest, Init_TestWorkSpace_001, TestSize.Level0)457 HWTEST_F(ParamUnitTest, Init_TestWorkSpace_001, TestSize.Level0)
458 {
459     int ret = AddWorkSpace("test.workspace.1", GetWorkSpaceIndex("test.workspace.1"), 0, PARAM_WORKSPACE_DEF);
460     EXPECT_EQ(ret, 0);
461     ret = AddWorkSpace("test.workspace.2", GetWorkSpaceIndex("test.workspace.2"), 0, PARAM_WORKSPACE_DEF);
462     EXPECT_EQ(ret, 0);
463     ret = AddWorkSpace("test.workspace.3", GetWorkSpaceIndex("test.workspace.3"), 0, PARAM_WORKSPACE_DEF);
464     EXPECT_EQ(ret, 0);
465     WorkSpace *space = GetWorkSpace(GetWorkSpaceIndex("test.workspace.1"));
466     EXPECT_NE(space, nullptr);
467     CloseWorkSpace(nullptr);
468 }
469 
HWTEST_F(ParamUnitTest, Init_TestWorkSpace_002, TestSize.Level0)470 HWTEST_F(ParamUnitTest, Init_TestWorkSpace_002, TestSize.Level0)
471 {
472     const char *spaceName = "test.workspace2";
473     const size_t size = strlen(spaceName) + 1;
474     WorkSpace *workSpace = (WorkSpace *)malloc(sizeof(WorkSpace) + size);
475     if (workSpace == nullptr) {
476         EXPECT_NE(workSpace, nullptr);
477         return;
478     }
479     workSpace->flags = 0;
480     workSpace->area = nullptr;
481     int ret = PARAM_STRCPY(workSpace->fileName, size, spaceName);
482     EXPECT_EQ(ret, 0);
483     CloseWorkSpace(workSpace);
484     free(workSpace);
485 }
486 
487 #if !(defined __LITEOS_A__ || defined __LITEOS_M__) // can not support parameter type
HWTEST_F(ParamUnitTest, Init_TestParamValueType_001, TestSize.Level0)488 HWTEST_F(ParamUnitTest, Init_TestParamValueType_001, TestSize.Level0)
489 {
490     int ret = SystemWriteParam("test.type.int.1000", "10000");
491     EXPECT_EQ(ret, 0);
492 
493     ret = SystemWriteParam("test.type.int.1001", "-1111111144444444444441111111666666661");
494     EXPECT_EQ(ret, PARAM_CODE_INVALID_VALUE);
495     ret = SystemWriteParam("test.type.int.1001", "1111111111444444444444411111166666666");
496     EXPECT_EQ(ret, PARAM_CODE_INVALID_VALUE);
497 }
498 
HWTEST_F(ParamUnitTest, Init_TestParamValueType_002, TestSize.Level0)499 HWTEST_F(ParamUnitTest, Init_TestParamValueType_002, TestSize.Level0)
500 {
501     int ret = SystemWriteParam("test.type.bool.1000", "10000");
502     EXPECT_EQ(ret, PARAM_CODE_INVALID_VALUE);
503 
504     ret = SystemWriteParam("test.type.bool.1001", "-1111111111111111");
505     EXPECT_EQ(ret, PARAM_CODE_INVALID_VALUE);
506     ret = SystemWriteParam("test.type.bool.1001", "1111111111111111");
507     EXPECT_EQ(ret, PARAM_CODE_INVALID_VALUE);
508     ret = SystemWriteParam("test.type.bool.1001", "true");
509     EXPECT_EQ(ret, 0);
510     ret = SystemWriteParam("test.type.bool.1001", "false");
511     EXPECT_EQ(ret, 0);
512     ret = SystemWriteParam("test.type.bool.1001", "1");
513     EXPECT_EQ(ret, 0);
514     ret = SystemWriteParam("test.type.bool.1001", "0");
515     EXPECT_EQ(ret, 0);
516     ret = SystemWriteParam("test.type.bool.1001", "on");
517     EXPECT_EQ(ret, 0);
518     ret = SystemWriteParam("test.type.bool.1001", "off");
519     EXPECT_EQ(ret, 0);
520     ret = SystemWriteParam("test.type.bool.1001", "yes");
521     EXPECT_EQ(ret, 0);
522     ret = SystemWriteParam("test.type.bool.1001", "no");
523     EXPECT_EQ(ret, 0);
524     ret = SystemWriteParam("test.type.bool.1001", "y");
525     EXPECT_EQ(ret, 0);
526     ret = SystemWriteParam("test.type.bool.1001", "n");
527     EXPECT_EQ(ret, 0);
528 }
529 #endif
530 
HWTEST_F(ParamUnitTest, Init_TestGetServiceCtlName_001, TestSize.Level0)531 HWTEST_F(ParamUnitTest, Init_TestGetServiceCtlName_001, TestSize.Level0)
532 {
533     ServiceCtrlInfo *serviceInfo = nullptr;
534     GetServiceCtrlInfo("ohos.startup.powerctrl", "reboot,updater", &serviceInfo);
535     if (serviceInfo != nullptr) {
536         EXPECT_STREQ(serviceInfo->realKey, "ohos.servicectrl.reboot.updater.reboot,updater");
537         free(serviceInfo);
538     }
539     GetServiceCtrlInfo("ohos.ctl.stop", "test", &serviceInfo);
540     if (serviceInfo != nullptr) {
541         EXPECT_STREQ(serviceInfo->realKey, "ohos.servicectrl.stop.test");
542         free(serviceInfo);
543     }
544     GetServiceCtrlInfo("ohos.servicectrl.stop", "test", &serviceInfo);
545     if (serviceInfo != nullptr) {
546         EXPECT_STREQ(serviceInfo->realKey, "ohos.servicectrl.stop.test");
547         free(serviceInfo);
548     }
549     ParamWorBaseLog(INIT_DEBUG, PARAN_DOMAIN, "PARAM", "%s", "ParamWorBaseLog");
550 }
551 
HWTEST_F(ParamUnitTest, Init_TestFindTrieNode_001, TestSize.Level0)552 HWTEST_F(ParamUnitTest, Init_TestFindTrieNode_001, TestSize.Level0)
553 {
554     int ret = AddWorkSpace("test.workspace.1", GetWorkSpaceIndex("test.workspace.1"), 0, PARAM_WORKSPACE_DEF);
555     EXPECT_EQ(ret, 0);
556     WorkSpace *space = GetWorkSpaceByName("test.workspace.1");
557     ASSERT_NE(space, nullptr);
558     ParamTrieNode *node = FindTrieNode(nullptr, nullptr, 0, nullptr);
559     ASSERT_EQ(node, nullptr);
560     node = FindTrieNode(space, nullptr, 0, nullptr);
561     ASSERT_EQ(node, nullptr);
562     node = FindTrieNode(space, "111111", 0, nullptr);
563     ASSERT_EQ(node, nullptr);
564     node = FindTrieNode(space, "find.test.111111", strlen("find.test.111111"), nullptr);
565     ASSERT_EQ(node, nullptr);
566 }
567 
568 #ifndef OHOS_LITE
HWTEST_F(ParamUnitTest, Init_TestConnectServer_001, TestSize.Level0)569 HWTEST_F(ParamUnitTest, Init_TestConnectServer_001, TestSize.Level0)
570 {
571     int ret = ConnectServer(-1, CLIENT_PIPE_NAME);
572     EXPECT_NE(ret, 0);
573     int fd = socket(PF_UNIX, SOCK_STREAM, 0);
574     ret = ConnectServer(fd, "");
575     EXPECT_NE(ret, 0);
576     ret = ConnectServer(fd, CLIENT_PIPE_NAME);
577     EXPECT_EQ(ret, 0);
578     close(fd);
579 }
580 
HWTEST_F(ParamUnitTest, Init_TestRequestMessage_001, TestSize.Level0)581 HWTEST_F(ParamUnitTest, Init_TestRequestMessage_001, TestSize.Level0)
582 {
583     const int maxSize = 1024 * 64 + 10;
584     const int msgSize = sizeof(ParamMessage) + 128; // 128 TEST
585     ParamMessage *msg = CreateParamMessage(0, nullptr, msgSize);
586     EXPECT_EQ(msg, nullptr);
587     msg = CreateParamMessage(0, "nullptr", maxSize);
588     EXPECT_EQ(msg, nullptr);
589     msg = CreateParamMessage(0, "22222222222222222222222222222222222222222"
590         "333333333333333333333333333333333333333333333333333333333333333333333"
591         "555555555555555555555555555555555555555555555555555555555555555555555", msgSize);
592     EXPECT_EQ(msg, nullptr);
593 
594     // success
595     msg = CreateParamMessage(0, "22222222222222222222222222222222222222222", msgSize);
596     EXPECT_NE(msg, nullptr);
597     uint32_t start = 0;
598     int ret = FillParamMsgContent(nullptr, &start, 0, nullptr, 0);
599     EXPECT_NE(ret, 0);
600     ret = FillParamMsgContent(msg, nullptr, 0, nullptr, 0);
601     EXPECT_NE(ret, 0);
602     ret = FillParamMsgContent(msg, &start, 0, nullptr, 0);
603     EXPECT_NE(ret, 0);
604     ret = FillParamMsgContent(msg, &start, 0, "22222", 0);
605     EXPECT_EQ(ret, 0);
606     ret = FillParamMsgContent(msg, &start, 0, "22222", msgSize);
607     EXPECT_NE(ret, 0);
608     // fill success
609     ret = FillParamMsgContent(msg, &start, 0, "22222", strlen("22222"));
610     EXPECT_EQ(ret, 0);
611     msg->msgSize = start + sizeof(ParamMessage);
612 
613     uint32_t offset = 0;
614     ParamMsgContent *content = GetNextContent(nullptr, &offset);
615     EXPECT_EQ(content, nullptr);
616     content = GetNextContent(msg, nullptr);
617     EXPECT_EQ(content, nullptr);
618     offset = 0;
619     content = GetNextContent(msg, &offset);
620     EXPECT_NE(content, nullptr);
621     content = GetNextContent(msg, &offset);
622     EXPECT_NE(content, nullptr);
623     free(msg);
624 }
625 
HWTEST_F(ParamUnitTest, Init_TestServerTaskFail_001, TestSize.Level0)626 HWTEST_F(ParamUnitTest, Init_TestServerTaskFail_001, TestSize.Level0)
627 {
628     ParamTaskPtr serverTask = nullptr;
629     ParamStreamInfo info = {};
630     info.server = const_cast<char *>(PIPE_NAME);
631     info.close = nullptr;
632     info.recvMessage = nullptr;
633     info.incomingConnect = nullptr;
634     int ret = ParamServerCreate(nullptr, &info);
635     EXPECT_NE(ret, 0);
636     ret = ParamServerCreate(&serverTask, nullptr);
637     EXPECT_NE(ret, 0);
638     ret = ParamServerCreate(&serverTask, &info);
639     EXPECT_NE(ret, 0);
640 }
641 
HWTEST_F(ParamUnitTest, Init_TestStreamTaskFail_001, TestSize.Level0)642 HWTEST_F(ParamUnitTest, Init_TestStreamTaskFail_001, TestSize.Level0)
643 {
644     ParamTaskPtr client = nullptr;
645     ParamStreamInfo info = {};
646     info.flags = PARAM_TEST_FLAGS;
647     info.server = nullptr;
648     info.close = OnClose;
649     info.recvMessage = ProcessMessage;
650     info.incomingConnect = nullptr;
651 
652     int ret = ParamStreamCreate(&client, nullptr, &info, sizeof(ParamWatcher));
653     EXPECT_NE(ret, 0);
654     ret = ParamStreamCreate(&client, GetParamService()->serverTask, nullptr, sizeof(ParamWatcher));
655     EXPECT_NE(ret, 0);
656     info.close = nullptr;
657     ret = ParamStreamCreate(&client, GetParamService()->serverTask, &info, sizeof(ParamWatcher));
658     EXPECT_NE(ret, 0);
659     info.close = OnClose;
660     info.recvMessage = nullptr;
661     ret = ParamStreamCreate(&client, GetParamService()->serverTask, &info, sizeof(ParamWatcher));
662     EXPECT_NE(ret, 0);
663     ret = ParamStreamCreate(&client, nullptr, nullptr, sizeof(ParamWatcher));
664     EXPECT_NE(ret, 0);
665 
666     void *data = ParamGetTaskUserData(client);
667     EXPECT_EQ(data, nullptr);
668 
669     ret = ParamTaskSendMsg(nullptr, nullptr);
670     EXPECT_NE(ret, 0);
671     ret = ParamTaskSendMsg(GetParamService()->serverTask, nullptr);
672     EXPECT_NE(ret, 0);
673 }
674 
HWTEST_F(ParamUnitTest, Init_TestParamCache_001, TestSize.Level0)675 HWTEST_F(ParamUnitTest, Init_TestParamCache_001, TestSize.Level0)
676 {
677     const char *value = CachedParameterGet(nullptr);
678     EXPECT_EQ(value, nullptr);
679     const char *name = "test.write.1111111.222222";
680     CachedHandle cacheHandle = CachedParameterCreate(name, "true");
681     EXPECT_NE(cacheHandle, nullptr);
682     value = CachedParameterGet(cacheHandle);
683     EXPECT_EQ(strcmp(value, "true"), 0);
684     uint32_t dataIndex = 0;
685     int ret = WriteParam(name, "false", &dataIndex, 0);
686     EXPECT_EQ(ret, 0);
687     value = CachedParameterGet(cacheHandle);
688     EXPECT_EQ(strcmp(value, "false"), 0);
689     CachedParameterDestroy(cacheHandle);
690 
691     // cache 2, for parameter exist
692     CachedHandle cacheHandle3 = CachedParameterCreate(name, "true");
693     EXPECT_NE(cacheHandle3, nullptr);
694     value = CachedParameterGet(cacheHandle3);
695     EXPECT_EQ(strcmp(value, "false"), 0);
696     ret = WriteParam(name, "2222222", &dataIndex, 0);
697     EXPECT_EQ(ret, 0);
698     int valueChange = 0;
699     value = CachedParameterGetChanged(cacheHandle3, &valueChange);
700     EXPECT_EQ(strcmp(value, "2222222"), 0);
701     EXPECT_EQ(valueChange, 1);
702     CachedParameterGetChanged(cacheHandle3, nullptr);
703     CachedParameterDestroy(cacheHandle3);
704 }
705 #endif
706 }
707