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_message.h"
19 #include "param_stub.h"
20 #include "param_init.h"
21 #include "trigger_manager.h"
22 #include "le_timer.h"
23 
24 using namespace testing::ext;
25 using namespace std;
26 
TestTriggerExecute(TriggerNode * trigger,const char * content,uint32_t size)27 static int TestTriggerExecute(TriggerNode *trigger, const char *content, uint32_t size)
28 {
29     return 0;
30 }
31 
CheckServerParamValue(const char * name,const char * expectValue)32 static int CheckServerParamValue(const char *name, const char *expectValue)
33 {
34     char tmp[PARAM_BUFFER_SIZE] = {0};
35     u_int32_t len = sizeof(tmp);
36     SystemReadParam(name, tmp, &len);
37     printf("CheckParamValue name %s value: \'%s\' expectValue:\'%s\' \n", name, tmp, expectValue);
38     EXPECT_NE((int)strlen(tmp), 0);
39     if (expectValue != nullptr) {
40         EXPECT_EQ(strcmp(tmp, expectValue), 0);
41     }
42     return 0;
43 }
44 
45 namespace init_ut {
46 static ParamTaskPtr g_worker = nullptr;
47 class ParamServiceUnitTest : public ::testing::Test {
48 public:
ParamServiceUnitTest()49     ParamServiceUnitTest() {}
~ParamServiceUnitTest()50     virtual ~ParamServiceUnitTest() {}
51 
SetUpTestCase(void)52     static void SetUpTestCase(void) {}
53 
SetUp()54     void SetUp()
55     {
56         if (GetParamSecurityLabel() != nullptr) {
57             GetParamSecurityLabel()->cred.uid = 1000;  // 1000 test uid
58             GetParamSecurityLabel()->cred.gid = 1000;  // 1000 test gid
59         }
60     }
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         // 获取到跟属性
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, 0);
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         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
162         const char *name = "label4.test.aaa.bbb.ccc.dddd.eee";
163         const char *value = "2001";
164         ParamAuditData auditData = {};
165         auditData.name = "label4.test.aaa.bbb.ccc.dddd.eee";
166         auditData.dacData.gid = 203;  // 203 test gid
167         auditData.dacData.uid = geteuid();
168         auditData.dacData.mode = 0666;  // 0666 test mode
169         SystemWriteParam(name, value);
170         uint32_t labelIndex = 0;
171         AddSecurityLabel(&auditData);
172         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
173         ParamTrieNode *paramNode = FindTrieNode(workspace, name, strlen(name), &labelIndex);
174         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
175         if (paramNode == nullptr || node == nullptr) {
176             EXPECT_EQ(1, 0);
177             return 0;
178         }
179         EXPECT_EQ(node->gid, auditData.dacData.gid);
180         return 0;
181     }
182 
TestBufferValue(char * buffer,uint32_t len)183     void TestBufferValue(char *buffer, uint32_t len)
184     {
185         const int printBase = 10;
186         for (uint32_t index = 0; index <= len; index++) {
187             buffer[index] = '0' + index % printBase;
188             if (index != 0 && index % printBase == 0) {
189                 buffer[index] = '.';
190             }
191         }
192         buffer[len] = '\0';
193     }
194 
TestNameIsValid()195     int TestNameIsValid()
196     {
197         char buffer[PARAM_BUFFER_SIZE];
198         // set name length = 127
199         TestBufferValue(buffer, PARAM_NAME_LEN_MAX - 1);
200         int ret = SystemWriteParam(buffer, "1111");
201         EXPECT_EQ(ret, 0);
202         TestBufferValue(buffer, PARAM_NAME_LEN_MAX);
203         ret = SystemWriteParam(buffer, "1111");
204         EXPECT_NE(ret, 0);
205         TestBufferValue(buffer, PARAM_NAME_LEN_MAX + 1);
206         ret = SystemWriteParam(buffer, "1111");
207         EXPECT_NE(ret, 0);
208 
209         ret = SystemWriteParam(" ", "1111");
210         EXPECT_NE(ret, 0);
211         ret = SystemWriteParam("__.__..", "1111");
212         EXPECT_NE(ret, 0);
213         ret = SystemWriteParam(".__..", "1111");
214         EXPECT_NE(ret, 0);
215         ret = SystemWriteParam("test.-@:_", "1111");
216         EXPECT_EQ(ret, 0);
217 
218         // 保存一个只读的属性,大于最大值
219         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
220         ret = SystemWriteParam("const.test_readonly.dddddddddddddddddd.fffffffffffffffffff", buffer);
221         EXPECT_EQ(ret, 0);
222 
223         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
224         ret = SystemWriteParam("const.test_readonly.aaaaaaaaaaaaaaaaaa.fffffffffffffffffff", buffer);
225         EXPECT_EQ(ret, 0);
226 
227         // 更新只读项目
228         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
229         ret = SystemWriteParam("const.test_readonly.dddddddddddddddddd.fffffffffffffffffff", buffer);
230         EXPECT_NE(ret, 0);
231 
232         // 写普通属性
233         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
234         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
235         EXPECT_EQ(ret, 0);
236         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
237         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
238         EXPECT_NE(ret, 0);
239 
240         // invalid name
241         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
242         ret = SystemWriteParam("test.invalidname..fffffffffffffffffff", buffer);
243         EXPECT_NE(ret, 0);
244         ret = SystemWriteParam("test.invalidname.%fffffffffffffffffff", buffer);
245         EXPECT_NE(ret, 0);
246         ret = SystemWriteParam("test.invalidname.$fffffffffffffffffff", buffer);
247         EXPECT_NE(ret, 0);
248         return 0;
249     }
250 
TestParamTraversal()251     int TestParamTraversal()
252     {
253         char value[PARAM_BUFFER_SIZE + PARAM_BUFFER_SIZE] = {0};
254         SystemTraversalParameter(
255             "",
256             [](ParamHandle handle, void *cookie) {
257                 SystemGetParameterName(handle, (char *)cookie, PARAM_BUFFER_SIZE);
258                 u_int32_t len = PARAM_BUFFER_SIZE;
259                 SystemGetParameterValue(handle, ((char *)cookie) + PARAM_BUFFER_SIZE, &len);
260                 printf("$$$$$$$$Param %s=%s \n", (char *)cookie, ((char *)cookie) + PARAM_BUFFER_SIZE);
261             },
262             (void *)value);
263         return 0;
264     }
265 
TestUpdateParam(const char * name,const char * value)266     int TestUpdateParam(const char *name, const char *value)
267     {
268         SystemWriteParam(name, value);
269         SystemWriteParam(name, value);
270         SystemWriteParam(name, value);
271         SystemWriteParam(name, value);
272         CheckServerParamValue(name, value);
273         return 0;
274     }
275 
TestPersistParam()276     int TestPersistParam()
277     {
278         RegisterPersistParamOps(nullptr);
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         SystemWriteParam("persist.111.cccc.bbbb.cccc.dddd.eeee", "1104");
285         SystemWriteParam("persist.111.eeee.bbbb.cccc.dddd.eeee", "1105");
286         CheckServerParamValue("persist.111.ffff.bbbb.cccc.dddd.eeee", "1101");
287         SystemWriteParam("persist.111.ffff.bbbb.cccc.dddd.eeee", "1106");
288         CheckServerParamValue("persist.111.ffff.bbbb.cccc.dddd.eeee", "1106");
289 
290         SystemWriteParam("persist.111.bbbb.cccc.dddd.1107", "1107");
291         SystemWriteParam("persist.111.bbbb.cccc.dddd.1108", "1108");
292         SystemWriteParam("persist.111.bbbb.cccc.dddd.1109", "1108");
293 
294         SystemWriteParam("persist.111.bbbb.cccc.dddd.1110", "1108");
295         SystemWriteParam("persist.111.bbbb.cccc.dddd.1111", "1108");
296         TimerCallbackForSave(nullptr, nullptr);
297         LoadPersistParams();
298         return 0;
299     }
300 
CreateAndGetStreamTask()301     ParamTaskPtr CreateAndGetStreamTask()
302     {
303         OnIncomingConnect(LE_GetDefaultLoop(), GetParamService()->serverTask);
304         EXPECT_NE(GetParamService()->watcherTask, nullptr);
305         return GetParamService()->watcherTask;
306     }
307 
TestServiceProcessMessage(const char * name,const char * value,int userLabel)308     int TestServiceProcessMessage(const char *name, const char *value, int userLabel)
309     {
310         if (g_worker == nullptr) {
311             g_worker = CreateAndGetStreamTask();
312         }
313         if (g_worker == nullptr) {
314             return 0;
315         }
316         ParamSecurityOps *paramSecurityOps = GetParamSecurityOps(0);
317         if (userLabel && paramSecurityOps != nullptr) {
318             paramSecurityOps->securityFreeLabel = TestFreeLocalSecurityLabel;
319             paramSecurityOps->securityCheckParamPermission = TestCheckParamPermission;
320         }
321         uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + PARAM_ALIGN(strlen(value) + 1);
322         ParamMessage *request = (ParamMessage *)CreateParamMessage(MSG_SET_PARAM, name, msgSize);
323         PARAM_CHECK(request != nullptr, return -1, "Failed to malloc for connect");
324         do {
325             request->type = MSG_SET_PARAM;
326             uint32_t offset = 0;
327             int ret = FillParamMsgContent(request, &offset, PARAM_VALUE, value, strlen(value));
328             PARAM_CHECK(ret == 0, break, "Failed to fill value");
329             ProcessMessage((const ParamTaskPtr)g_worker, (const ParamMessage *)request);
330         } while (0);
331         free(request);
332         RegisterSecurityOps(1);
333         return 0;
334     }
335 
AddWatch(int type,const char * name,const char * value)336     int AddWatch(int type, const char *name, const char *value)
337     {
338         if (g_worker == nullptr) {
339             g_worker = CreateAndGetStreamTask();
340         }
341         if (g_worker == nullptr) {
342             return 0;
343         }
344         uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + sizeof(ParamMsgContent)
345             + PARAM_ALIGN(strlen(value) + 1) + sizeof(uint32_t);
346         ParamMessage *request = (ParamMessage *)(ParamMessage *)CreateParamMessage(type, name, msgSize);
347         PARAM_CHECK(request != nullptr, return -1, "Failed to malloc for connect");
348         do {
349             uint32_t offset = 0;
350             int ret = FillParamMsgContent(request, &offset, PARAM_VALUE, value, strlen(value));
351             PARAM_CHECK(ret == 0, break, "Failed to fill value");
352 
353             ParamMsgContent *content = (ParamMsgContent *)(request->data + offset);
354             content->type = PARAM_WAIT_TIMEOUT;
355             content->contentSize = sizeof(uint32_t);
356             *((uint32_t *)(content->content)) = 100; // 100 is test value
357             offset += sizeof(ParamMsgContent) + sizeof(uint32_t);
358             request->msgSize = offset + sizeof(ParamMessage);
359 
360             ProcessMessage((const ParamTaskPtr)g_worker, (const ParamMessage *)request);
361         } while (0);
362         free(request);
363         return 0;
364     }
365 
366     // 无匹配
TestAddParamWait1()367     int TestAddParamWait1()
368     {
369         const char *name = "wait.aaa.bbb.ccc.111";
370         const char *value = "wait1";
371         AddWatch(MSG_WAIT_PARAM, name, value);
372         SystemWriteParam(name, value);
373         // execute trigger
374         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
375         return 0;
376     }
377 
378     // 模糊匹配
TestAddParamWait2()379     int TestAddParamWait2()
380     {
381         const char *name = "wait.aaa.bbb.ccc.222";
382         const char *value = "wait2";
383         AddWatch(MSG_WAIT_PARAM, name, "*");
384         SystemWriteParam(name, value);
385         // execute trigger
386         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
387         return 0;
388     }
389 
390     // 属性存在
TestAddParamWait3()391     int TestAddParamWait3()
392     {
393         const char *name = "wait.aaa.bbb.ccc.333";
394         const char *value = "wait3";
395         SystemWriteParam(name, value);
396         AddWatch(MSG_WAIT_PARAM, name, value);
397         // execute trigger
398         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
399         return 0;
400     }
401 
TestAddParamWatch1()402     int TestAddParamWatch1()
403     {
404         const char *name = "watch.aaa.bbb.ccc.111";
405         const char *value = "watch1";
406         AddWatch(MSG_ADD_WATCHER, name, value);
407         std::string newName = name;
408         newName += ".test.test.test";
409         SystemWriteParam(newName.c_str(), value);
410         // execute trigger
411         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
412         return 0;
413     }
414 
TestAddParamWatch2()415     int TestAddParamWatch2()
416     {
417         const char *name = "watch.aaa.bbb.ccc.222";
418         const char *value = "watch2";
419         AddWatch(MSG_ADD_WATCHER, name, "*");
420         SystemWriteParam(name, value);
421         // execute trigger
422         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
423         return 0;
424     }
425 
TestAddParamWatch3()426     int TestAddParamWatch3()
427     {
428         const char *name = "watch.aaa.bbb.ccc.333";
429         const char *value = "watch3";
430         std::string newName = name;
431         newName += ".test.test.test";
432         SystemWriteParam(newName.c_str(), value);
433         AddWatch(MSG_ADD_WATCHER, name, value);
434         char buffer[] = "testbuff";
435         CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM_WATCH, buffer, strlen(buffer), TestTriggerExecute);
436         AddWatch(MSG_DEL_WATCHER, name, value);
437         return 0;
438     }
439 
TestCloseTriggerWatch()440     int TestCloseTriggerWatch()
441     {
442 #ifdef PARAM_SUPPORT_TRIGGER
443         SystemDumpTriggers(1, nullptr);
444 #endif
445         ParamWatcher *watcher = (ParamWatcher *)ParamGetTaskUserData(g_worker);
446         ClearWatchTrigger(watcher, TRIGGER_PARAM_WAIT);
447         ParamTaskClose(g_worker);
448         g_worker = nullptr;
449         ParamTaskClose(g_worker);
450         SystemWriteParam("init.svc.param_watcher", "stopped");
451         return 0;
452     }
453 
TestServiceCtrl(const char * serviceName,uint16_t mode)454     int TestServiceCtrl(const char *serviceName, uint16_t mode)
455     {
456         // service forbid
457         TestSetParamCheckResult("ohos.servicectrl.", mode, 1);
458         return SystemWriteParam("ohos.ctl.start", serviceName);
459     }
460 
TestPowerCtrl(const char * reboot,uint16_t mode)461     int TestPowerCtrl(const char *reboot, uint16_t mode)
462     {
463         // service forbid
464         TestSetParamCheckResult("ohos.servicectrl.reboot", mode, 1);
465         return SystemWriteParam("ohos.startup.powerctrl", reboot);
466     }
467 };
468 
469 HWTEST_F(ParamServiceUnitTest, Init_TestPersistParam_001, TestSize.Level0)
470 {
471     ParamServiceUnitTest test;
472     test.TestPersistParam();
473 }
474 
475 HWTEST_F(ParamServiceUnitTest, Init_TestReadCmdline_001, TestSize.Level0)
476 {
477     const char *snData = "222222222222222222222";
478     CreateTestFile(STARTUP_INIT_UT_PATH "/system/etc/sn", snData);
479     // for cmdline
480     std::string cmdLineForSn = "bootgroup=device.charge.group earlycon=uart8250,mmio32,0xfe660000 "
481         "root=PARTUUID=614e0000-0000 rw rootwait rootfstype=ext4 console=ttyFIQ0 hardware=rk3568"
482         " BOOT_IMAGE=/kernel  init=/init";
483     std::string snWithPath = cmdLineForSn + "ohos.boot.sn=" + STARTUP_INIT_UT_PATH "/system/etc/sn";
484     CreateTestFile(BOOT_CMD_LINE, snWithPath.c_str());
485     LoadParamFromCmdLine();
486     std::string snWithSN = cmdLineForSn + "ohos.boot.sn=" + snData;
487     CreateTestFile(BOOT_CMD_LINE, snWithSN.c_str());
488     LoadParamFromCmdLine();
489     CreateTestFile(BOOT_CMD_LINE, cmdLineForSn.c_str());
490     LoadParamFromCmdLine();
491 }
492 
493 HWTEST_F(ParamServiceUnitTest, Init_TestServiceProcessMessage_001, TestSize.Level0)
494 {
495     ParamServiceUnitTest test;
496     test.TestServiceProcessMessage("wertt.qqqq.wwww.rrrr", "wwww.eeeee", 1);
497     test.TestServiceProcessMessage("wertt.2222.wwww.3333", "wwww.eeeee", 0);
498 }
499 
500 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWait_001, TestSize.Level0)
501 {
502     ParamServiceUnitTest test;
503     test.TestAddParamWait1();
504 }
505 
506 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWait_002, TestSize.Level0)
507 {
508     ParamServiceUnitTest test;
509     test.TestAddParamWait2();
510 }
511 
512 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWait_003, TestSize.Level0)
513 {
514     ParamServiceUnitTest test;
515     test.TestAddParamWait3();
516 }
517 
518 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWatch_001, TestSize.Level0)
519 {
520     ParamServiceUnitTest test;
521     test.TestAddParamWatch1();
522 }
523 
524 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWatch_002, TestSize.Level0)
525 {
526     ParamServiceUnitTest test;
527     test.TestAddParamWatch2();
528 }
529 
530 #ifndef OHOS_LITE
531 HWTEST_F(ParamServiceUnitTest, Init_TestAddParamWatch_003, TestSize.Level0)
532 {
533     ParamServiceUnitTest test;
534     test.TestAddParamWatch3();
535     int hashCode = CheckWatchTriggerTimeout();
536     EXPECT_EQ(hashCode, 0);
537 }
538 
539 HWTEST_F(ParamServiceUnitTest, Init_TestCloseTriggerWatch_001, TestSize.Level0)
540 {
541     ParamServiceUnitTest test;
542     test.TestCloseTriggerWatch();
543 }
544 
545 HWTEST_F(ParamServiceUnitTest, Init_TestServiceCtrl_001, TestSize.Level0)
546 {
547     ParamServiceUnitTest test;
548     int ret = test.TestServiceCtrl("server1", 0770);
549     EXPECT_NE(ret, 0);
550 #ifdef PARAM_SUPPORT_SELINUX
551     // selinux forbid
552     ret = test.TestServiceCtrl("server2", 0772);
553     EXPECT_NE(ret, 0);
554 #endif
555     ret = 0;
556 }
557 
558 HWTEST_F(ParamServiceUnitTest, Init_TestPowerCtrl_001, TestSize.Level0)
559 {
560     ParamServiceUnitTest test;
561     int ret = test.TestPowerCtrl("reboot,shutdown", 0770);
562     EXPECT_NE(ret, 0);
563     ret = test.TestPowerCtrl("reboot,shutdown", 0772);
564 #ifdef PARAM_SUPPORT_SELINUX
565     // selinux forbid
566     EXPECT_NE(ret, 0);
567 #endif
568     ret = test.TestPowerCtrl("reboot,updater", 0770);
569     EXPECT_NE(ret, 0);
570     ret = test.TestPowerCtrl("reboot,updater", 0772);
571 #ifdef PARAM_SUPPORT_SELINUX
572     // selinux forbid
573     EXPECT_NE(ret, 0);
574 #endif
575     ret = test.TestPowerCtrl("reboot,flashd", 0770);
576     EXPECT_NE(ret, 0);
577     ret = test.TestPowerCtrl("reboot,flashd", 0772);
578 #ifdef PARAM_SUPPORT_SELINUX
579     // selinux forbid
580     EXPECT_NE(ret, 0);
581 #endif
582 
583     ret = test.TestPowerCtrl("reboot", 0770);
584     EXPECT_NE(ret, 0);
585     ret = test.TestPowerCtrl("reboot", 0772);
586 #ifdef PARAM_SUPPORT_SELINUX
587     // selinux forbid
588     EXPECT_NE(ret, 0);
589 #endif
590 
591     ParamServiceStop();
592 }
593 #endif
594 }  // namespace init_ut
595