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