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