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