1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2022 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
16d9f0492fSopenharmony_ci#include <thread>
17d9f0492fSopenharmony_ci#include <gtest/gtest.h>
18d9f0492fSopenharmony_ci#include <cstdint>
19d9f0492fSopenharmony_ci#include "param_wrapper.h"
20d9f0492fSopenharmony_ci#include "parameter.h"
21d9f0492fSopenharmony_ci#include "parameters.h"
22d9f0492fSopenharmony_ci#include "sysversion.h"
23d9f0492fSopenharmony_ci#include "param_comm.h"
24d9f0492fSopenharmony_ci#include "init_param.h"
25d9f0492fSopenharmony_ci#include "sysparam_errno.h"
26d9f0492fSopenharmony_ci#include "sys_param.h"
27d9f0492fSopenharmony_ci
28d9f0492fSopenharmony_ciusing namespace std;
29d9f0492fSopenharmony_ciusing namespace testing::ext;
30d9f0492fSopenharmony_ciusing namespace OHOS;
31d9f0492fSopenharmony_ci
32d9f0492fSopenharmony_ciconst int THREAD_NUM = 5;
33d9f0492fSopenharmony_ci
34d9f0492fSopenharmony_cinamespace initModuleTest {
35d9f0492fSopenharmony_cistatic void GetAllParameterTestFunc(void)
36d9f0492fSopenharmony_ci{
37d9f0492fSopenharmony_ci    EXPECT_STRNE(GetSecurityPatchTag(), nullptr);
38d9f0492fSopenharmony_ci    EXPECT_STRNE(GetOSFullName(), nullptr);
39d9f0492fSopenharmony_ci    EXPECT_STRNE(GetVersionId(), nullptr);
40d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBuildRootHash(), nullptr);
41d9f0492fSopenharmony_ci    EXPECT_STRNE(GetOsReleaseType(), nullptr);
42d9f0492fSopenharmony_ci    GetSdkApiVersion();
43d9f0492fSopenharmony_ci    EXPECT_STRNE(GetDeviceType(), nullptr);
44d9f0492fSopenharmony_ci    EXPECT_STRNE(GetProductModel(), nullptr);
45d9f0492fSopenharmony_ci    EXPECT_STRNE(GetManufacture(), nullptr);
46d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBrand(), nullptr);
47d9f0492fSopenharmony_ci    EXPECT_STRNE(GetMarketName(), nullptr);
48d9f0492fSopenharmony_ci    EXPECT_STRNE(GetProductSeries(), nullptr);
49d9f0492fSopenharmony_ci    EXPECT_STRNE(GetSoftwareModel(), nullptr);
50d9f0492fSopenharmony_ci    EXPECT_STRNE(GetHardwareModel(), nullptr);
51d9f0492fSopenharmony_ci    EXPECT_STRNE(GetHardwareProfile(), nullptr);
52d9f0492fSopenharmony_ci    EXPECT_STRNE(GetSerial(), nullptr);
53d9f0492fSopenharmony_ci    EXPECT_STRNE(GetAbiList(), nullptr);
54d9f0492fSopenharmony_ci    EXPECT_STRNE(GetDisplayVersion(), nullptr);
55d9f0492fSopenharmony_ci    EXPECT_STRNE(GetIncrementalVersion(), nullptr);
56d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBootloaderVersion(), nullptr);
57d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBuildType(), nullptr);
58d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBuildUser(), nullptr);
59d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBuildHost(), nullptr);
60d9f0492fSopenharmony_ci    EXPECT_STRNE(GetBuildTime(), nullptr);
61d9f0492fSopenharmony_ci    GetFirstApiVersion();
62d9f0492fSopenharmony_ci    EXPECT_STRNE(system::GetDeviceType().c_str(), nullptr);
63d9f0492fSopenharmony_ci}
64d9f0492fSopenharmony_ci
65d9f0492fSopenharmony_cistatic void GetUdidTestFunc(char* udid, int size)
66d9f0492fSopenharmony_ci{
67d9f0492fSopenharmony_ci    int ret = GetDevUdid(udid, size);
68d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
69d9f0492fSopenharmony_ci    EXPECT_STRNE(udid, nullptr);
70d9f0492fSopenharmony_ci}
71d9f0492fSopenharmony_ci
72d9f0492fSopenharmony_cistatic void SetParameterTestFunc(const char *key, const char *value)
73d9f0492fSopenharmony_ci{
74d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key, value), 0);
75d9f0492fSopenharmony_ci    uint32_t handle = FindParameter(key);
76d9f0492fSopenharmony_ci    EXPECT_NE(handle, static_cast<unsigned int>(-1));
77d9f0492fSopenharmony_ci    uint32_t result = GetParameterCommitId(handle);
78d9f0492fSopenharmony_ci    EXPECT_NE(result, static_cast<unsigned int>(-1));
79d9f0492fSopenharmony_ci    char nameGet[PARAM_NAME_LEN_MAX] = {0};
80d9f0492fSopenharmony_ci    int ret = GetParameterName(handle, nameGet, PARAM_NAME_LEN_MAX);
81d9f0492fSopenharmony_ci    EXPECT_EQ(ret, strlen(nameGet));
82d9f0492fSopenharmony_ci    EXPECT_STREQ(key, nameGet);
83d9f0492fSopenharmony_ci    char valueGet[PARAM_VALUE_LEN_MAX] = {0};
84d9f0492fSopenharmony_ci    ret = GetParameterValue(handle, valueGet, PARAM_VALUE_LEN_MAX);
85d9f0492fSopenharmony_ci    EXPECT_EQ(ret, strlen(valueGet));
86d9f0492fSopenharmony_ci    EXPECT_STREQ(value, valueGet);
87d9f0492fSopenharmony_ci    EXPECT_NE(GetSystemCommitId(), 0);
88d9f0492fSopenharmony_ci}
89d9f0492fSopenharmony_ci
90d9f0492fSopenharmony_cistatic void GetParameterTestReInt(const char *key, const char *def, char *value, uint32_t len)
91d9f0492fSopenharmony_ci{
92d9f0492fSopenharmony_ci    int ret = GetParameter(key, def, value, len);
93d9f0492fSopenharmony_ci    EXPECT_EQ(ret, strlen(value));
94d9f0492fSopenharmony_ci    EXPECT_STREQ(value, "v10.1.1");
95d9f0492fSopenharmony_ci}
96d9f0492fSopenharmony_ci
97d9f0492fSopenharmony_cistatic void GetParameterTestFuncReStr(string key, string def)
98d9f0492fSopenharmony_ci{
99d9f0492fSopenharmony_ci    string ret = system::GetParameter(key, def);
100d9f0492fSopenharmony_ci    EXPECT_STREQ(ret.c_str(), "v10.1.1");
101d9f0492fSopenharmony_ci}
102d9f0492fSopenharmony_ci
103d9f0492fSopenharmony_cistatic void ParamSetFun(string key, string value)
104d9f0492fSopenharmony_ci{
105d9f0492fSopenharmony_ci    bool ret = system::SetParameter(key, value);
106d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
107d9f0492fSopenharmony_ci    string testValue = system::GetParameter(key, "");
108d9f0492fSopenharmony_ci    EXPECT_STREQ(testValue.c_str(), value.c_str());
109d9f0492fSopenharmony_ci}
110d9f0492fSopenharmony_ci
111d9f0492fSopenharmony_cistatic void TestParameterChange(const char *key, const char *value, void *context)
112d9f0492fSopenharmony_ci{
113d9f0492fSopenharmony_ci    std::cout<<"TestParameterChange key: "<<key<<"value: "<<value<<endl;
114d9f0492fSopenharmony_ci}
115d9f0492fSopenharmony_ci
116d9f0492fSopenharmony_cistatic void TestParameterWatchChange(void)
117d9f0492fSopenharmony_ci{
118d9f0492fSopenharmony_ci    size_t index = 1;
119d9f0492fSopenharmony_ci    int ret = WatchParameter("test.param.watcher.test1", TestParameterChange, reinterpret_cast<void *>(index));
120d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
121d9f0492fSopenharmony_ci    ret = RemoveParameterWatcher("test.param.watcher.test1", TestParameterChange, reinterpret_cast<void *>(index));
122d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
123d9f0492fSopenharmony_ci}
124d9f0492fSopenharmony_ci
125d9f0492fSopenharmony_ciclass SysparaModuleTest : public testing::Test {
126d9f0492fSopenharmony_cipublic:
127d9f0492fSopenharmony_ci    static void SetUpTestCase(void) {};
128d9f0492fSopenharmony_ci    static void TearDownTestCase(void) {};
129d9f0492fSopenharmony_ci    void SetUp(void) {};
130d9f0492fSopenharmony_ci    void TearDown(void) {};
131d9f0492fSopenharmony_ci};
132d9f0492fSopenharmony_ci
133d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_SysVersion_test_001, TestSize.Level0)
134d9f0492fSopenharmony_ci{
135d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SysVersion_test_001 start";
136d9f0492fSopenharmony_ci    GetMajorVersion();
137d9f0492fSopenharmony_ci    GetSeniorVersion();
138d9f0492fSopenharmony_ci    GetFeatureVersion();
139d9f0492fSopenharmony_ci    GetBuildVersion();
140d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SysVersion_test_001 end";
141d9f0492fSopenharmony_ci}
142d9f0492fSopenharmony_ci
143d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_GetParam_test_002, TestSize.Level0)
144d9f0492fSopenharmony_ci{
145d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParam_test_002 start";
146d9f0492fSopenharmony_ci    for (int i = 0; i < THREAD_NUM; ++i) {
147d9f0492fSopenharmony_ci        std::thread(GetAllParameterTestFunc).join();
148d9f0492fSopenharmony_ci    }
149d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParam_test_002 end";
150d9f0492fSopenharmony_ci}
151d9f0492fSopenharmony_ci
152d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_GetUdid_test_003, TestSize.Level0)
153d9f0492fSopenharmony_ci{
154d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetUdid_test_003 start";
155d9f0492fSopenharmony_ci    for (int i = 0; i < THREAD_NUM; ++i) {
156d9f0492fSopenharmony_ci        char udid[UDID_LEN] = {0};
157d9f0492fSopenharmony_ci        std::thread(GetUdidTestFunc, udid, UDID_LEN).join();
158d9f0492fSopenharmony_ci    }
159d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetUdid_test_003 end";
160d9f0492fSopenharmony_ci}
161d9f0492fSopenharmony_ci
162d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_SetParameter_test_004, TestSize.Level0)
163d9f0492fSopenharmony_ci{
164d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_004 start";
165d9f0492fSopenharmony_ci    char key1[] = "test1.param.version";
166d9f0492fSopenharmony_ci    char value1[] = "v10.1.1";
167d9f0492fSopenharmony_ci    char key2[] = "test2.param.version";
168d9f0492fSopenharmony_ci    char value2[] = "v10.2.2";
169d9f0492fSopenharmony_ci    char key3[] = "test3.param.version";
170d9f0492fSopenharmony_ci    char value3[] = "v10.3.3";
171d9f0492fSopenharmony_ci    std::thread(SetParameterTestFunc, key1, value1).join();
172d9f0492fSopenharmony_ci    std::thread(SetParameterTestFunc, key2, value2).join();
173d9f0492fSopenharmony_ci    std::thread(SetParameterTestFunc, key3, value3).join();
174d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_004 end";
175d9f0492fSopenharmony_ci}
176d9f0492fSopenharmony_ci
177d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_SetParameter_test_005, TestSize.Level0)
178d9f0492fSopenharmony_ci{
179d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_005 start";
180d9f0492fSopenharmony_ci    // check param name length
181d9f0492fSopenharmony_ci    char key1[] = "test.param.name.xxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxx";
182d9f0492fSopenharmony_ci    char value[] = "test.value.xxxx";
183d9f0492fSopenharmony_ci    int ret = SetParameter(key1, value);
184d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
185d9f0492fSopenharmony_ci    // check param name, Illegal param name
186d9f0492fSopenharmony_ci    char key2[] = ".test.param.name.xxxxx";
187d9f0492fSopenharmony_ci    ret = SetParameter(key2, value);
188d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
189d9f0492fSopenharmony_ci    char key3[] = "test..param.name.xxxxx";
190d9f0492fSopenharmony_ci    ret = SetParameter(key3, value);
191d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
192d9f0492fSopenharmony_ci    char key4[] = "test..param.   .name";
193d9f0492fSopenharmony_ci    ret = SetParameter(key4, value);
194d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
195d9f0492fSopenharmony_ci    // check param name, legal param name
196d9f0492fSopenharmony_ci    char key5[] = "test.param.name.--__.:::";
197d9f0492fSopenharmony_ci    ret = SetParameter(key5, value);
198d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
199d9f0492fSopenharmony_ci    EXPECT_STREQ(value, "test.value.xxxx");
200d9f0492fSopenharmony_ci    char key6[] = "test.param.name.@@@.---";
201d9f0492fSopenharmony_ci    ret = SetParameter(key6, value);
202d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
203d9f0492fSopenharmony_ci    EXPECT_STREQ(value, "test.value.xxxx");
204d9f0492fSopenharmony_ci    // not const param, check param value, bool 8, int 32, other 96
205d9f0492fSopenharmony_ci    char key7[] = "test.param.name.xxxx";
206d9f0492fSopenharmony_ci    char value1[] = "test.value.xxxxxxxxx.xxxxxxxxxxxxx.xxxxxxxxxxxx.xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxx";
207d9f0492fSopenharmony_ci    ret = SetParameter(key7, value1);
208d9f0492fSopenharmony_ci    EXPECT_EQ(ret, SYSPARAM_INVALID_VALUE);
209d9f0492fSopenharmony_ci    char key8[] = "startup.service.ctl.test.int";
210d9f0492fSopenharmony_ci    char value2[] = "111111111111111111111111111111111";
211d9f0492fSopenharmony_ci    ret = SetParameter(key8, value2);
212d9f0492fSopenharmony_ci    EXPECT_EQ(ret, SYSPARAM_INVALID_VALUE);
213d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_005 end";
214d9f0492fSopenharmony_ci}
215d9f0492fSopenharmony_ci
216d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_Getparameter_test_006, TestSize.Level0)
217d9f0492fSopenharmony_ci{
218d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_Getparameter_test_006 start";
219d9f0492fSopenharmony_ci    string key = "test.param.set.001";
220d9f0492fSopenharmony_ci    string value = "xxx.xxx.xxx";
221d9f0492fSopenharmony_ci    bool ret = system::SetParameter(key, value);
222d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
223d9f0492fSopenharmony_ci    string testValue = system::GetParameter(key, "");
224d9f0492fSopenharmony_ci    EXPECT_STREQ(testValue.c_str(), value.c_str());
225d9f0492fSopenharmony_ci    // not read param value,the result is default
226d9f0492fSopenharmony_ci    testValue = system::GetParameter("test.param.set.002", "aaa.aaa.aaa");
227d9f0492fSopenharmony_ci    EXPECT_STREQ(testValue.c_str(), "aaa.aaa.aaa");
228d9f0492fSopenharmony_ci    testValue = system::GetParameter("test.param.set.003", "");
229d9f0492fSopenharmony_ci    EXPECT_STREQ(testValue.c_str(), "");
230d9f0492fSopenharmony_ci    // correct set value
231d9f0492fSopenharmony_ci    string key1 = "test.param.set.bool";
232d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "1");
233d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
234d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, false));
235d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "y");
236d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
237d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, false));
238d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "yes");
239d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
240d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, false));
241d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "on");
242d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
243d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, false));
244d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "true");
245d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
246d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, false));
247d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "0");
248d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
249d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, true));
250d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "off");
251d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
252d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, true));
253d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "n");
254d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
255d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, true));
256d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "no");
257d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
258d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, true));
259d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "false");
260d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
261d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, true));
262d9f0492fSopenharmony_ci    // set value type not bool,the result get form def
263d9f0492fSopenharmony_ci    ret = system::SetParameter(key1, "test");
264d9f0492fSopenharmony_ci    EXPECT_TRUE(ret);
265d9f0492fSopenharmony_ci    EXPECT_TRUE(system::GetBoolParameter(key1, true));
266d9f0492fSopenharmony_ci    EXPECT_FALSE(system::GetBoolParameter(key1, false));
267d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_Getparameter_test_006 end";
268d9f0492fSopenharmony_ci}
269d9f0492fSopenharmony_ci
270d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_SetParameter_test_007, TestSize.Level0)
271d9f0492fSopenharmony_ci{
272d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_007 start";
273d9f0492fSopenharmony_ci    string key1 = "const.param.test";
274d9f0492fSopenharmony_ci    string value1 = "test.param.value.001";
275d9f0492fSopenharmony_ci
276d9f0492fSopenharmony_ci    int ret = 0;
277d9f0492fSopenharmony_ci    string vRet = "";
278d9f0492fSopenharmony_ci    uint32_t handle1 = FindParameter(key1.c_str());
279d9f0492fSopenharmony_ci    cout<<"handle1 is: "<<handle1<<std::endl;
280d9f0492fSopenharmony_ci    if (handle1 == static_cast<uint32_t>(-1)) {
281d9f0492fSopenharmony_ci        ret = SetParameter(key1.c_str(), value1.c_str());
282d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
283d9f0492fSopenharmony_ci        vRet = system::GetParameter(key1, "");
284d9f0492fSopenharmony_ci        EXPECT_STREQ(vRet.c_str(), value1.c_str());
285d9f0492fSopenharmony_ci    }
286d9f0492fSopenharmony_ci    string value2 = "test.param.value.002";
287d9f0492fSopenharmony_ci    ret = SetParameter(key1.c_str(), value2.c_str());
288d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
289d9f0492fSopenharmony_ci
290d9f0492fSopenharmony_ci    string key2 = "ro.param.test";
291d9f0492fSopenharmony_ci    string value3 = "test.param.value.003";
292d9f0492fSopenharmony_ci    uint32_t handle2 = FindParameter(key2.c_str());
293d9f0492fSopenharmony_ci    cout<<"handle2 is: "<<handle2<<std::endl;
294d9f0492fSopenharmony_ci    if (handle2 == static_cast<uint32_t>(-1)) {
295d9f0492fSopenharmony_ci        ret = SetParameter(key2.c_str(), value3.c_str());
296d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
297d9f0492fSopenharmony_ci        vRet = system::GetParameter(key2, "");
298d9f0492fSopenharmony_ci        EXPECT_STREQ(vRet.c_str(), value3.c_str());
299d9f0492fSopenharmony_ci    }
300d9f0492fSopenharmony_ci    string value4 = "test.param.value.004";
301d9f0492fSopenharmony_ci    ret = SetParameter(key2.c_str(), value4.c_str());
302d9f0492fSopenharmony_ci    EXPECT_EQ(ret, EC_INVALID);
303d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SetParameter_test_007 end";
304d9f0492fSopenharmony_ci}
305d9f0492fSopenharmony_ci
306d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_GetParameterReIntOrStr_test_008, TestSize.Level0)
307d9f0492fSopenharmony_ci{
308d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParameterReIntOrStr_test_008 start";
309d9f0492fSopenharmony_ci    string key = "test1.param.version";
310d9f0492fSopenharmony_ci    string value = "v10.1.1";
311d9f0492fSopenharmony_ci    int ret = SetParameter(key.c_str(), value.c_str());
312d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
313d9f0492fSopenharmony_ci    char retValue[PARAM_VALUE_LEN_MAX] = {0};
314d9f0492fSopenharmony_ci    for (int i = 0; i < THREAD_NUM; ++i) {
315d9f0492fSopenharmony_ci        std::thread(GetParameterTestReInt, key.c_str(), "", retValue, PARAM_VALUE_LEN_MAX).join();
316d9f0492fSopenharmony_ci    }
317d9f0492fSopenharmony_ci    for (int j = 0; j < THREAD_NUM; ++j) {
318d9f0492fSopenharmony_ci        std::thread(GetParameterTestFuncReStr, key, "").join();
319d9f0492fSopenharmony_ci    }
320d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParameterReIntOrStr_test_008 end";
321d9f0492fSopenharmony_ci}
322d9f0492fSopenharmony_ci
323d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_WaitParameter_test_009, TestSize.Level0)
324d9f0492fSopenharmony_ci{
325d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_WaitParameter_test_009 start";
326d9f0492fSopenharmony_ci    // param already set succeed,waitParamter succeed.
327d9f0492fSopenharmony_ci    char key[] = "test1.param.wait";
328d9f0492fSopenharmony_ci    char value[] = "aaa.bbb.ccc";
329d9f0492fSopenharmony_ci    int ret = SetParameter(key, value);
330d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
331d9f0492fSopenharmony_ci    ret = WaitParameter(key, value, 5);
332d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
333d9f0492fSopenharmony_ci    // param not set,waitParamter will wait param set,return succeed.
334d9f0492fSopenharmony_ci    char key1[] = "test2.param.wait";
335d9f0492fSopenharmony_ci    char value1[] = "aaa.aaa.aaa";
336d9f0492fSopenharmony_ci    std::thread(ParamSetFun, key1, value1).join();
337d9f0492fSopenharmony_ci    ret = WaitParameter(key1, value1, 5);
338d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
339d9f0492fSopenharmony_ci    char key2[] = "test3.param.wait";
340d9f0492fSopenharmony_ci    std::thread(ParamSetFun, key2, "*****").join();
341d9f0492fSopenharmony_ci    ret = WaitParameter(key2, "*****", 5);
342d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
343d9f0492fSopenharmony_ci    // param not set,waitParamter will timeout,return failed.
344d9f0492fSopenharmony_ci    char key3[] = "test4.param.wait";
345d9f0492fSopenharmony_ci    ret = WaitParameter(key3, "*****", 5);
346d9f0492fSopenharmony_ci    EXPECT_EQ(ret, SYSPARAM_WAIT_TIMEOUT);
347d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_WaitParameter_test_009 end";
348d9f0492fSopenharmony_ci}
349d9f0492fSopenharmony_ci
350d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_watcherParameter_test_010, TestSize.Level0)
351d9f0492fSopenharmony_ci{
352d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_watcherParameter_test_010 start";
353d9f0492fSopenharmony_ci    for (int i = 0; i < THREAD_NUM; ++i) {
354d9f0492fSopenharmony_ci        std::thread(TestParameterWatchChange).join();
355d9f0492fSopenharmony_ci    }
356d9f0492fSopenharmony_ci
357d9f0492fSopenharmony_ci    std::thread(ParamSetFun, "test.param.watcher.test1", "test.param.value.xxx").join();
358d9f0492fSopenharmony_ci
359d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_watcherParameter_test_010 end";
360d9f0492fSopenharmony_ci}
361d9f0492fSopenharmony_ci
362d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_GetParameter_test_011, TestSize.Level0)
363d9f0492fSopenharmony_ci{
364d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParameter_test_011 start";
365d9f0492fSopenharmony_ci
366d9f0492fSopenharmony_ci    char key1[] = "test.param.int1";
367d9f0492fSopenharmony_ci    char value1[] = "0x111111";
368d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key1, value1), 0);
369d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key1, 0), 1118481); // 0x111111 decimalism result
370d9f0492fSopenharmony_ci    EXPECT_EQ(GetUintParameter(key1, 0), 1118481);
371d9f0492fSopenharmony_ci
372d9f0492fSopenharmony_ci    char key2[] = "test.param.int2";
373d9f0492fSopenharmony_ci    char value2[] = "-0x111111";
374d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key2, value2), 0);
375d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key2, 0), -1118481);  // 0x111111 decimalism result
376d9f0492fSopenharmony_ci
377d9f0492fSopenharmony_ci    GetUintParameter(key2, 0);
378d9f0492fSopenharmony_ci
379d9f0492fSopenharmony_ci    char key3[] = "test.param.int3";
380d9f0492fSopenharmony_ci    char value3[] = "9999999";
381d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key3, value3), 0);
382d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key3, 0), 9999999); // value3 int result
383d9f0492fSopenharmony_ci    EXPECT_EQ(GetUintParameter(key3, 0), 9999999); // value3 uint result
384d9f0492fSopenharmony_ci
385d9f0492fSopenharmony_ci    char key4[] = "test.param.int4";
386d9f0492fSopenharmony_ci    char value4[] = "-9999999";
387d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key4, value4), 0);
388d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key4, 0), -9999999); // value4 int result
389d9f0492fSopenharmony_ci    EXPECT_EQ(GetUintParameter(key4, 0), 0);
390d9f0492fSopenharmony_ci
391d9f0492fSopenharmony_ci    char key5[] = "test.param.int5";
392d9f0492fSopenharmony_ci    char value5[] = "-2147483648"; // INT32_MIN
393d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key5, value5), 0);
394d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key5, 0), 0);
395d9f0492fSopenharmony_ci
396d9f0492fSopenharmony_ci    char key6[] = "test.param.int6";
397d9f0492fSopenharmony_ci    char value6[] = "2147483647"; // INT32_MAX
398d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key6, value6), 0);
399d9f0492fSopenharmony_ci    EXPECT_EQ(GetIntParameter(key6, 0), 0);
400d9f0492fSopenharmony_ci
401d9f0492fSopenharmony_ci    char key7[] = "test.param.uint7";
402d9f0492fSopenharmony_ci    char value7[] = "4294967295"; // UINT32_MAX
403d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key7, value7), 0);
404d9f0492fSopenharmony_ci    EXPECT_EQ(GetUintParameter(key7, 0), 0);
405d9f0492fSopenharmony_ci
406d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_GetParameter_test_011 end";
407d9f0492fSopenharmony_ci}
408d9f0492fSopenharmony_ci
409d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_CacheParameter_test_001, TestSize.Level0)
410d9f0492fSopenharmony_ci{
411d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_CacheParameter_test_001 start";
412d9f0492fSopenharmony_ci
413d9f0492fSopenharmony_ci    const char *name = "test.write.1111111.222222";
414d9f0492fSopenharmony_ci    CachedHandle cacheHandle = CachedParameterCreate(name, "true");
415d9f0492fSopenharmony_ci    EXPECT_NE(cacheHandle, nullptr);
416d9f0492fSopenharmony_ci    const char *value = CachedParameterGet(cacheHandle);
417d9f0492fSopenharmony_ci    int ret = SetParameter(name, "false");
418d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
419d9f0492fSopenharmony_ci
420d9f0492fSopenharmony_ci    value = CachedParameterGet(cacheHandle);
421d9f0492fSopenharmony_ci    EXPECT_EQ(strcmp(value, "false"), 0);
422d9f0492fSopenharmony_ci    CachedParameterDestroy(cacheHandle);
423d9f0492fSopenharmony_ci
424d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_CacheParameter_test_001 end";
425d9f0492fSopenharmony_ci}
426d9f0492fSopenharmony_ci
427d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_CacheParameter_test_002, TestSize.Level0)
428d9f0492fSopenharmony_ci{
429d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_CacheParameter_test_002 start";
430d9f0492fSopenharmony_ci
431d9f0492fSopenharmony_ci    const char *name = "test.write.1111111.333333";
432d9f0492fSopenharmony_ci    int ret = SetParameter(name, "3333");
433d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
434d9f0492fSopenharmony_ci    CachedHandle cacheHandle3 = CachedParameterCreate(name, "true");
435d9f0492fSopenharmony_ci    EXPECT_NE(cacheHandle3, nullptr);
436d9f0492fSopenharmony_ci    const char *value = CachedParameterGet(cacheHandle3);
437d9f0492fSopenharmony_ci    EXPECT_EQ(strcmp(value, "3333"), 0);
438d9f0492fSopenharmony_ci
439d9f0492fSopenharmony_ci    ret = SetParameter(name, "2222222");
440d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
441d9f0492fSopenharmony_ci    int valueChange = 0;
442d9f0492fSopenharmony_ci    value = CachedParameterGetChanged(cacheHandle3, &valueChange);
443d9f0492fSopenharmony_ci    EXPECT_EQ(strcmp(value, "2222222"), 0);
444d9f0492fSopenharmony_ci    EXPECT_EQ(valueChange, 1);
445d9f0492fSopenharmony_ci    CachedParameterDestroy(cacheHandle3);
446d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_CacheParameter_test_002 end";
447d9f0492fSopenharmony_ci}
448d9f0492fSopenharmony_ci
449d9f0492fSopenharmony_ciHWTEST_F(SysparaModuleTest, Syspara_SaveParameters_test_001, TestSize.Level0)
450d9f0492fSopenharmony_ci{
451d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SaveParameters_test_001 start";
452d9f0492fSopenharmony_ci
453d9f0492fSopenharmony_ci    char key1[] = "test.param.int1";
454d9f0492fSopenharmony_ci    char value1[] = "0x111111";
455d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key1, value1), 0);
456d9f0492fSopenharmony_ci    char key2[] = "persist.test.param.int2";
457d9f0492fSopenharmony_ci    char value2[] = "-0x111111";
458d9f0492fSopenharmony_ci    EXPECT_EQ(SetParameter(key2, value2), 0);
459d9f0492fSopenharmony_ci    EXPECT_EQ(SaveParameters(), 0);
460d9f0492fSopenharmony_ci
461d9f0492fSopenharmony_ci    GTEST_LOG_(INFO) << "Syspara_SaveParameters_test_001 end";
462d9f0492fSopenharmony_ci}
463d9f0492fSopenharmony_ci}