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