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