• 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_message.h"
19 #include "param_stub.h"
20 #include "trigger_manager.h"
21 #include "le_timer.h"
22 
23 using namespace testing::ext;
24 using namespace std;
25 
TestTriggerExecute(TriggerNode * trigger,const char * content,uint32_t size)26 static int TestTriggerExecute(TriggerNode *trigger, const char *content, uint32_t size)
27 {
28     return 0;
29 }
30 
CheckServerParamValue(const char * name,const char * expectValue)31 static int CheckServerParamValue(const char *name, const char *expectValue)
32 {
33     char tmp[PARAM_BUFFER_SIZE] = {0};
34     u_int32_t len = sizeof(tmp);
35     SystemReadParam(name, tmp, &len);
36     printf("CheckParamValue name %s value: \'%s\' expectValue:\'%s\' \n", name, tmp, expectValue);
37     EXPECT_NE((int)strlen(tmp), 0);
38     if (expectValue != nullptr) {
39         EXPECT_EQ(strcmp(tmp, expectValue), 0);
40     }
41     return 0;
42 }
43 
44 namespace init_ut {
45 static ParamTaskPtr g_worker = nullptr;
46 class ParamServiceUnitTest : public ::testing::Test {
47 public:
ParamServiceUnitTest()48     ParamServiceUnitTest() {}
~ParamServiceUnitTest()49     virtual ~ParamServiceUnitTest() {}
50 
SetUpTestCase(void)51     static void SetUpTestCase(void)
52     {
53         PrepareInitUnitTestEnv();
54     }
SetUp()55     void SetUp()
56     {
57         if (GetParamSecurityLabel() != nullptr) {
58             GetParamSecurityLabel()->cred.uid = 1000;  // 1000 test uid
59             GetParamSecurityLabel()->cred.gid = 1000;  // 1000 test gid
60         }
61     }
TearDown()62     void TearDown() {}
TestBody()63     void TestBody() {}
64 
TestSetParams(const char * params[][1+1],int num)65     int TestSetParams(const char *params[][1 + 1], int num)
66     {
67         for (int i = 0; i < num; i++) {
68             SystemWriteParam(params[i][0], params[i][1]);
69         }
70 
71         // check
72         for (int i = 0; i < num; i++) {
73             CheckServerParamValue(params[i][0], params[i][1]);
74         }
75 
76         for (int i = num - 1; i >= 0; i--) {
77             CheckServerParamValue(params[i][0], params[i][1]);
78         }
79         return 0;
80     }
81 
TestAddSecurityLabel1()82     int TestAddSecurityLabel1()
83     {
84         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
85         const char *name = "label1.test.aaa.bbb.ccc.dddd.eee";
86         const char *value = "2001";
87         uint32_t labelIndex = 0;
88         SystemWriteParam(name, value);
89         // 获取到跟属性
90         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
91         (void)FindTrieNode(workspace, name, strlen(name), &labelIndex);
92         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
93         if (node == nullptr) {
94             EXPECT_EQ(1, 0);
95             return 0;
96         }
97         EXPECT_EQ(node->gid, 0);
98         return 0;
99     }
100 
101     // 添加一个label,最长匹配到这个节点
TestAddSecurityLabel2()102     int TestAddSecurityLabel2()
103     {
104         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
105         const char *name = "label2.test.aaa.bbb.ccc.dddd.eee";
106         const char *value = "2001";
107         ParamAuditData auditData = {};
108         auditData.name = "label2.test.aaa";
109         auditData.dacData.gid = 202;  // 202 test dac gid
110         auditData.dacData.uid = geteuid();
111         auditData.dacData.mode = 0666;  // 0666 test mode
112         SystemWriteParam(name, value);
113         uint32_t labelIndex = 0;
114         AddSecurityLabel(&auditData);
115         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
116         (void)FindTrieNode(workspace, name, strlen(name), &labelIndex);
117         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
118         if (node == nullptr) {
119             EXPECT_EQ(1, 0);
120             return 0;
121         }
122         EXPECT_EQ(node->gid, auditData.dacData.gid);
123         return 0;
124     }
125 
126     // 添加一个label,最长匹配到最后一个相同节点
TestAddSecurityLabel3()127     int TestAddSecurityLabel3()
128     {
129         GetParamSecurityLabel()->cred.gid = 9999;  // 9999 test gid
130         const char *name = "label3.test.aaa.bbb.ccc.dddd.eee";
131         const char *value = "2001";
132         ParamAuditData auditData = {};
133         auditData.name = "label3.test.aaa";
134         auditData.dacData.gid = 203;  // 203 test gid
135         auditData.dacData.uid = geteuid();
136         auditData.dacData.mode = 0666;  // 0666 test mode
137         SystemWriteParam(name, value);
138         AddSecurityLabel(&auditData);
139 
140         auditData.name = "label3.test.aaa.bbb.ccc.dddd.eee.dddd";
141         auditData.dacData.gid = 202;  // 202 test dac gid
142         auditData.dacData.uid = geteuid();
143         auditData.dacData.mode = 0666;  // 0666 test mode
144         SystemWriteParam(name, value);
145         AddSecurityLabel(&auditData);
146 
147         uint32_t labelIndex = 0;
148         WorkSpace *workspace = GetWorkSpace(WORKSPACE_INDEX_DAC);
149         ParamTrieNode *paramNode = FindTrieNode(workspace, name, strlen(name), &labelIndex);
150         ParamSecurityNode *node = (ParamSecurityNode *)GetTrieNode(workspace, labelIndex);
151         if (paramNode == nullptr || node == nullptr) {
152             EXPECT_EQ(1, 0);
153             return 0;
154         }
155         EXPECT_EQ((int)node->gid, 203);  // 203 test gid
156         return 0;
157     }
158 
159     // 添加一个label,完全匹配
TestAddSecurityLabel4()160     int TestAddSecurityLabel4()
161     {
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         ret = SystemWriteParam(" ", "1111");
211         EXPECT_NE(ret, 0);
212         ret = SystemWriteParam("__.__..", "1111");
213         EXPECT_NE(ret, 0);
214         ret = SystemWriteParam(".__..", "1111");
215         EXPECT_NE(ret, 0);
216         ret = SystemWriteParam("test.-@:_", "1111");
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_EQ(ret, 0);
223 
224         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
225         ret = SystemWriteParam("const.test_readonly.aaaaaaaaaaaaaaaaaa.fffffffffffffffffff", buffer);
226         EXPECT_EQ(ret, 0);
227 
228         // 更新只读项目
229         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
230         ret = SystemWriteParam("const.test_readonly.dddddddddddddddddd.fffffffffffffffffff", buffer);
231         EXPECT_NE(ret, 0);
232 
233         // 写普通属性
234         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
235         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
236         EXPECT_EQ(ret, 0);
237         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX + 1);
238         ret = SystemWriteParam("test.bigvalue.dddddddddddddddddd.fffffffffffffffffff", buffer);
239         EXPECT_NE(ret, 0);
240 
241         // invalid name
242         TestBufferValue(buffer, PARAM_VALUE_LEN_MAX - 1);
243         ret = SystemWriteParam("test.invalidname..fffffffffffffffffff", buffer);
244         EXPECT_NE(ret, 0);
245         ret = SystemWriteParam("test.invalidname.%fffffffffffffffffff", buffer);
246         EXPECT_NE(ret, 0);
247         ret = SystemWriteParam("test.invalidname.$fffffffffffffffffff", buffer);
248         EXPECT_NE(ret, 0);
249         return 0;
250     }
251 
TestParamTraversal()252     int TestParamTraversal()
253     {
254         char value[PARAM_BUFFER_SIZE + PARAM_BUFFER_SIZE] = {0};
255         SystemTraversalParameter(
256             "",
257             [](ParamHandle handle, void *cookie) {
258                 SystemGetParameterName(handle, (char *)cookie, PARAM_BUFFER_SIZE);
259                 u_int32_t len = PARAM_BUFFER_SIZE;
260                 SystemGetParameterValue(handle, ((char *)cookie) + PARAM_BUFFER_SIZE, &len);
261                 printf("$$$$$$$$Param %s=%s \n", (char *)cookie, ((char *)cookie) + PARAM_BUFFER_SIZE);
262             },
263             (void *)value);
264         return 0;
265     }
266 
TestUpdateParam(const char * name,const char * value)267     int TestUpdateParam(const char *name, const char *value)
268     {
269         SystemWriteParam(name, value);
270         SystemWriteParam(name, value);
271         SystemWriteParam(name, value);
272         SystemWriteParam(name, value);
273         CheckServerParamValue(name, value);
274         return 0;
275     }
276 
TestPersistParam()277     int TestPersistParam()
278     {
279         RegisterPersistParamOps(nullptr);
280         LoadPersistParams();
281         SystemWriteParam("persist.111.ffff.bbbb.cccc.dddd.eeee", "1101");
282         SystemWriteParam("persist.111.aaaa.bbbb.cccc.dddd.eeee", "1102");
283         SystemWriteParam("persist.111.bbbb.cccc.dddd.eeee", "1103");
284         CheckServerParamValue("persist.111.bbbb.cccc.dddd.eeee", "1103");
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 
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 
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 
CreateAndGetStreamTask()302     ParamTaskPtr CreateAndGetStreamTask()
303     {
304         OnIncomingConnect(LE_GetDefaultLoop(), GetParamService()->serverTask);
305         EXPECT_NE(GetParamService()->watcherTask, nullptr);
306         return GetParamService()->watcherTask;
307     }
308 
TestServiceProcessMessage(const char * name,const char * value,int userLabel)309     int TestServiceProcessMessage(const char *name, const char *value, int userLabel)
310     {
311         if (g_worker == nullptr) {
312             g_worker = CreateAndGetStreamTask();
313         }
314         if (g_worker == nullptr) {
315             return 0;
316         }
317         ParamSecurityOps *paramSecurityOps = GetParamSecurityOps(0);
318         if (userLabel && paramSecurityOps != nullptr) {
319             paramSecurityOps->securityFreeLabel = TestFreeLocalSecurityLabel;
320             paramSecurityOps->securityCheckParamPermission = TestCheckParamPermission;
321         }
322         uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + PARAM_ALIGN(strlen(value) + 1);
323         ParamMessage *request = (ParamMessage *)CreateParamMessage(MSG_SET_PARAM, name, msgSize);
324         PARAM_CHECK(request != nullptr, return -1, "Failed to malloc for connect");
325         do {
326             request->type = MSG_SET_PARAM;
327             uint32_t offset = 0;
328             int ret = FillParamMsgContent(request, &offset, PARAM_VALUE, value, strlen(value));
329             PARAM_CHECK(ret == 0, break, "Failed to fill value");
330             ProcessMessage((const ParamTaskPtr)g_worker, (const ParamMessage *)request);
331         } while (0);
332         free(request);
333         RegisterSecurityOps(1);
334         return 0;
335     }
336 
AddWatch(int type,const char * name,const char * value)337     int AddWatch(int type, const char *name, const char *value)
338     {
339         if (g_worker == nullptr) {
340             g_worker = CreateAndGetStreamTask();
341         }
342         if (g_worker == nullptr) {
343             return 0;
344         }
345         uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + sizeof(ParamMsgContent)
346             + PARAM_ALIGN(strlen(value) + 1) + sizeof(uint32_t);
347         ParamMessage *request = (ParamMessage *)(ParamMessage *)CreateParamMessage(type, name, msgSize);
348         PARAM_CHECK(request != nullptr, return -1, "Failed to malloc for connect");
349         do {
350             uint32_t offset = 0;
351             int ret = FillParamMsgContent(request, &offset, PARAM_VALUE, value, strlen(value));
352             PARAM_CHECK(ret == 0, break, "Failed to fill value");
353 
354             ParamMsgContent *content = (ParamMsgContent *)(request->data + offset);
355             content->type = PARAM_WAIT_TIMEOUT;
356             content->contentSize = sizeof(uint32_t);
357             *((uint32_t *)(content->content)) = 100; // 100 is test value
358             offset += sizeof(ParamMsgContent) + sizeof(uint32_t);
359             request->msgSize = offset + sizeof(ParamMessage);
360 
361             ProcessMessage((const ParamTaskPtr)g_worker, (const ParamMessage *)request);
362         } while (0);
363         free(request);
364         return 0;
365     }
366 
367     // 无匹配
TestAddParamWait1()368     int TestAddParamWait1()
369     {
370         const char *name = "wait.aaa.bbb.ccc.111";
371         const char *value = "wait1";
372         AddWatch(MSG_WAIT_PARAM, name, value);
373         SystemWriteParam(name, value);
374         // execute trigger
375         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
376         return 0;
377     }
378 
379     // 模糊匹配
TestAddParamWait2()380     int TestAddParamWait2()
381     {
382         const char *name = "wait.aaa.bbb.ccc.222";
383         const char *value = "wait2";
384         AddWatch(MSG_WAIT_PARAM, name, "*");
385         SystemWriteParam(name, value);
386         // execute trigger
387         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
388         return 0;
389     }
390 
391     // 属性存在
TestAddParamWait3()392     int TestAddParamWait3()
393     {
394         const char *name = "wait.aaa.bbb.ccc.333";
395         const char *value = "wait3";
396         SystemWriteParam(name, value);
397         AddWatch(MSG_WAIT_PARAM, name, value);
398         // execute trigger
399         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
400         return 0;
401     }
402 
TestAddParamWatch1()403     int TestAddParamWatch1()
404     {
405         const char *name = "watch.aaa.bbb.ccc.111";
406         const char *value = "watch1";
407         AddWatch(MSG_ADD_WATCHER, name, value);
408         std::string newName = name;
409         newName += ".test.test.test";
410         SystemWriteParam(newName.c_str(), value);
411         // execute trigger
412         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
413         return 0;
414     }
415 
TestAddParamWatch2()416     int TestAddParamWatch2()
417     {
418         const char *name = "watch.aaa.bbb.ccc.222";
419         const char *value = "watch2";
420         AddWatch(MSG_ADD_WATCHER, name, "*");
421         SystemWriteParam(name, value);
422         // execute trigger
423         LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
424         return 0;
425     }
426 
TestAddParamWatch3()427     int TestAddParamWatch3()
428     {
429         const char *name = "watch.aaa.bbb.ccc.333";
430         const char *value = "watch3";
431         std::string newName = name;
432         newName += ".test.test.test";
433         SystemWriteParam(newName.c_str(), value);
434         AddWatch(MSG_ADD_WATCHER, name, value);
435         char buffer[] = "testbuff";
436         CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM_WATCH, buffer, strlen(buffer), TestTriggerExecute);
437         AddWatch(MSG_DEL_WATCHER, name, value);
438         return 0;
439     }
440 
TestCloseTriggerWatch()441     int TestCloseTriggerWatch()
442     {
443 #ifdef PARAM_SUPPORT_TRIGGER
444         SystemDumpTriggers(1, nullptr);
445 #endif
446         ParamWatcher *watcher = (ParamWatcher *)ParamGetTaskUserData(g_worker);
447         ClearWatchTrigger(watcher, TRIGGER_PARAM_WAIT);
448         ParamTaskClose(g_worker);
449         g_worker = nullptr;
450         ParamTaskClose(g_worker);
451         SystemWriteParam("init.svc.param_watcher", "stopped");
452         return 0;
453     }
454 
TestServiceCtrl(const char * serviceName,uint16_t mode)455     int TestServiceCtrl(const char *serviceName, uint16_t mode)
456     {
457         // service forbid
458         TestSetParamCheckResult("ohos.servicectrl.", mode, 1);
459         return SystemWriteParam("ohos.ctl.start", serviceName);
460     }
461 
TestPowerCtrl(const char * reboot,uint16_t mode)462     int TestPowerCtrl(const char *reboot, uint16_t mode)
463     {
464         // service forbid
465         TestSetParamCheckResult("ohos.servicectrl.reboot", mode, 1);
466         return SystemWriteParam("ohos.startup.powerctrl", reboot);
467     }
468 };
469 
470 HWTEST_F(ParamServiceUnitTest, TestPersistParam, TestSize.Level0)
471 {
472     ParamServiceUnitTest test;
473     test.TestPersistParam();
474 }
475 
476 HWTEST_F(ParamServiceUnitTest, TestReadCmdline, TestSize.Level0)
477 {
478     const char *snData = "222222222222222222222";
479     CreateTestFile(STARTUP_INIT_UT_PATH "/system/etc/sn", snData);
480     // for cmdline
481     std::string cmdLineForSn = "bootgroup=device.charge.group earlycon=uart8250,mmio32,0xfe660000 "
482         "root=PARTUUID=614e0000-0000 rw rootwait rootfstype=ext4 console=ttyFIQ0 hardware=rk3568"
483         " BOOT_IMAGE=/kernel  init=/init";
484     std::string snWithPath = cmdLineForSn + "ohos.boot.sn=" + STARTUP_INIT_UT_PATH "/system/etc/sn";
485     CreateTestFile(BOOT_CMD_LINE, snWithPath.c_str());
486     LoadParamFromCmdLine();
487     std::string snWithSN = cmdLineForSn + "ohos.boot.sn=" + snData;
488     CreateTestFile(BOOT_CMD_LINE, snWithSN.c_str());
489     LoadParamFromCmdLine();
490     CreateTestFile(BOOT_CMD_LINE, cmdLineForSn.c_str());
491     LoadParamFromCmdLine();
492 }
493 
494 HWTEST_F(ParamServiceUnitTest, TestServiceProcessMessage, TestSize.Level0)
495 {
496     ParamServiceUnitTest test;
497     test.TestServiceProcessMessage("wertt.qqqq.wwww.rrrr", "wwww.eeeee", 1);
498     test.TestServiceProcessMessage("wertt.2222.wwww.3333", "wwww.eeeee", 0);
499 }
500 
501 HWTEST_F(ParamServiceUnitTest, TestAddParamWait1, TestSize.Level0)
502 {
503     ParamServiceUnitTest test;
504     test.TestAddParamWait1();
505 }
506 
507 HWTEST_F(ParamServiceUnitTest, TestAddParamWait2, TestSize.Level0)
508 {
509     ParamServiceUnitTest test;
510     test.TestAddParamWait2();
511 }
512 
513 HWTEST_F(ParamServiceUnitTest, TestAddParamWait3, TestSize.Level0)
514 {
515     ParamServiceUnitTest test;
516     test.TestAddParamWait3();
517 }
518 
519 HWTEST_F(ParamServiceUnitTest, TestAddParamWatch1, TestSize.Level0)
520 {
521     ParamServiceUnitTest test;
522     test.TestAddParamWatch1();
523 }
524 
525 HWTEST_F(ParamServiceUnitTest, TestAddParamWatch2, TestSize.Level0)
526 {
527     ParamServiceUnitTest test;
528     test.TestAddParamWatch2();
529 }
530 
531 #ifndef OHOS_LITE
532 HWTEST_F(ParamServiceUnitTest, TestAddParamWatch3, TestSize.Level0)
533 {
534     ParamServiceUnitTest test;
535     test.TestAddParamWatch3();
536     if (GetParamService()->timer != nullptr) {
537         ((TimerTask *)GetParamService()->timer)->processTimer(nullptr, nullptr);
538     }
539     int hashCode = CheckWatchTriggerTimeout();
540     EXPECT_EQ(hashCode, 0);
541 }
542 
543 HWTEST_F(ParamServiceUnitTest, TestCloseTriggerWatch, TestSize.Level0)
544 {
545     ParamServiceUnitTest test;
546     test.TestCloseTriggerWatch();
547 }
548 
549 HWTEST_F(ParamServiceUnitTest, TestServiceCtrl, TestSize.Level0)
550 {
551     ParamServiceUnitTest test;
552     int ret = test.TestServiceCtrl("server1", 0770);
553     EXPECT_NE(ret, 0);
554 #ifdef PARAM_SUPPORT_SELINUX
555     // selinux forbid
556     ret = test.TestServiceCtrl("server2", 0772);
557     EXPECT_NE(ret, 0);
558 #endif
559     ret = 0;
560 }
561 
562 HWTEST_F(ParamServiceUnitTest, TestPowerCtrl, TestSize.Level0)
563 {
564     ParamServiceUnitTest test;
565     int ret = test.TestPowerCtrl("reboot,shutdown", 0770);
566     EXPECT_NE(ret, 0);
567     ret = test.TestPowerCtrl("reboot,shutdown", 0772);
568 #ifdef PARAM_SUPPORT_SELINUX
569     // selinux forbid
570     EXPECT_NE(ret, 0);
571 #endif
572     ret = test.TestPowerCtrl("reboot,updater", 0770);
573     EXPECT_NE(ret, 0);
574     ret = test.TestPowerCtrl("reboot,updater", 0772);
575 #ifdef PARAM_SUPPORT_SELINUX
576     // selinux forbid
577     EXPECT_NE(ret, 0);
578 #endif
579     ret = test.TestPowerCtrl("reboot,flashd", 0770);
580     EXPECT_NE(ret, 0);
581     ret = test.TestPowerCtrl("reboot,flashd", 0772);
582 #ifdef PARAM_SUPPORT_SELINUX
583     // selinux forbid
584     EXPECT_NE(ret, 0);
585 #endif
586 
587     ret = test.TestPowerCtrl("reboot", 0770);
588     EXPECT_NE(ret, 0);
589     ret = test.TestPowerCtrl("reboot", 0772);
590 #ifdef PARAM_SUPPORT_SELINUX
591     // selinux forbid
592     EXPECT_NE(ret, 0);
593 #endif
594 
595     ParamServiceStop();
596 }
597 #endif
598 }  // namespace init_ut
599