1fc223305Sopenharmony_ci/*
2fc223305Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3fc223305Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fc223305Sopenharmony_ci * you may not use this file except in compliance with the License.
5fc223305Sopenharmony_ci * You may obtain a copy of the License at
6fc223305Sopenharmony_ci *
7fc223305Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8fc223305Sopenharmony_ci *
9fc223305Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fc223305Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fc223305Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fc223305Sopenharmony_ci * See the License for the specific language governing permissions and
13fc223305Sopenharmony_ci * limitations under the License.
14fc223305Sopenharmony_ci */
15fc223305Sopenharmony_ci#include <cctype>
16fc223305Sopenharmony_ci#include <condition_variable>
17fc223305Sopenharmony_ci#include <cstdint>
18fc223305Sopenharmony_ci#include <fcntl.h>
19fc223305Sopenharmony_ci#include <filesystem>
20fc223305Sopenharmony_ci#include <functional>
21fc223305Sopenharmony_ci#include <gtest/gtest.h>
22fc223305Sopenharmony_ci#include <iostream>
23fc223305Sopenharmony_ci#include <list>
24fc223305Sopenharmony_ci#include <map>
25fc223305Sopenharmony_ci#include <memory>
26fc223305Sopenharmony_ci#include <mutex>
27fc223305Sopenharmony_ci#include <string>
28fc223305Sopenharmony_ci#include <sys/mman.h>
29fc223305Sopenharmony_ci#include <thread>
30fc223305Sopenharmony_ci#include <vector>
31fc223305Sopenharmony_ci
32fc223305Sopenharmony_ci#include "log_print.h"
33fc223305Sopenharmony_ci#include "preferences_test_utils.h"
34fc223305Sopenharmony_ci#include "oh_preferences_impl.h"
35fc223305Sopenharmony_ci#include "oh_preferences.h"
36fc223305Sopenharmony_ci#include "oh_preferences_err_code.h"
37fc223305Sopenharmony_ci#include "oh_preferences_value.h"
38fc223305Sopenharmony_ci#include "oh_preferences_option.h"
39fc223305Sopenharmony_ci#include "preferences_helper.h"
40fc223305Sopenharmony_ci
41fc223305Sopenharmony_ciusing namespace testing::ext;
42fc223305Sopenharmony_ci
43fc223305Sopenharmony_ciusing namespace OHOS::PreferencesNdk;
44fc223305Sopenharmony_ciusing namespace OHOS::NativePreferences;
45fc223305Sopenharmony_cinamespace {
46fc223305Sopenharmony_ciclass PreferencesNdkValueTest : public testing::Test {
47fc223305Sopenharmony_cipublic:
48fc223305Sopenharmony_ci    static void SetUpTestCase(void);
49fc223305Sopenharmony_ci    static void TearDownTestCase(void);
50fc223305Sopenharmony_ci    void SetUp();
51fc223305Sopenharmony_ci    void TearDown();
52fc223305Sopenharmony_ci};
53fc223305Sopenharmony_ci
54fc223305Sopenharmony_civoid PreferencesNdkValueTest::SetUpTestCase(void)
55fc223305Sopenharmony_ci{
56fc223305Sopenharmony_ci    NdkTestUtils::CreateDirectoryRecursively("/data/test/");
57fc223305Sopenharmony_ci}
58fc223305Sopenharmony_civoid PreferencesNdkValueTest::TearDownTestCase(void) {}
59fc223305Sopenharmony_ci
60fc223305Sopenharmony_civoid PreferencesNdkValueTest::SetUp(void)
61fc223305Sopenharmony_ci{
62fc223305Sopenharmony_ci    NdkTestUtils::CreateDirectoryRecursively("/data/test/");
63fc223305Sopenharmony_ci}
64fc223305Sopenharmony_ci
65fc223305Sopenharmony_civoid PreferencesNdkValueTest::TearDown(void) {}
66fc223305Sopenharmony_ci
67fc223305Sopenharmony_cienum class PrefDataType { UNASSIGNED, INT, STRING, BOOL };
68fc223305Sopenharmony_ci
69fc223305Sopenharmony_cistatic OH_PreferencesOption *GetCommonOption()
70fc223305Sopenharmony_ci{
71fc223305Sopenharmony_ci    OH_PreferencesOption *option = OH_PreferencesOption_Create();
72fc223305Sopenharmony_ci    EXPECT_EQ(OH_PreferencesOption_SetFileName(option, "valueTestDbb"), PREFERENCES_OK);
73fc223305Sopenharmony_ci    EXPECT_EQ(OH_PreferencesOption_SetBundleName(option, "com.uttest"), PREFERENCES_OK);
74fc223305Sopenharmony_ci    EXPECT_EQ(OH_PreferencesOption_SetDataGroupId(option, "123"), PREFERENCES_OK);
75fc223305Sopenharmony_ci    return option;
76fc223305Sopenharmony_ci}
77fc223305Sopenharmony_ci
78fc223305Sopenharmony_ciint PreferencesFlush(OH_Preferences *store)
79fc223305Sopenharmony_ci{
80fc223305Sopenharmony_ci    if (store == nullptr) {
81fc223305Sopenharmony_ci        printf("preferences flush failed, store is null\n");
82fc223305Sopenharmony_ci        return PREFERENCES_ERROR_BASE;
83fc223305Sopenharmony_ci    }
84fc223305Sopenharmony_ci    OH_PreferencesImpl *pref = static_cast<OH_PreferencesImpl *>(store);
85fc223305Sopenharmony_ci    std::shared_ptr<OHOS::NativePreferences::Preferences> nativePreferences = pref->GetNativePreferences();
86fc223305Sopenharmony_ci    return nativePreferences->FlushSync();
87fc223305Sopenharmony_ci}
88fc223305Sopenharmony_ci
89fc223305Sopenharmony_ci/**
90fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTest_001
91fc223305Sopenharmony_ci * @tc.desc: test pref is nullptr
92fc223305Sopenharmony_ci * @tc.type: FUNC
93fc223305Sopenharmony_ci * @tc.require: NA
94fc223305Sopenharmony_ci * @tc.author: Lirui
95fc223305Sopenharmony_ci */
96fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTest_001, TestSize.Level1)
97fc223305Sopenharmony_ci{
98fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
99fc223305Sopenharmony_ci    std::string intKey = "ndktest_int_key";
100fc223305Sopenharmony_ci    int value = 0;
101fc223305Sopenharmony_ci    int res = 0;
102fc223305Sopenharmony_ci    errCode = OH_Preferences_SetInt(nullptr, intKey.c_str(), 123);
103fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
104fc223305Sopenharmony_ci
105fc223305Sopenharmony_ci    errCode = OH_Preferences_GetInt(nullptr, intKey.c_str(), &value);
106fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
107fc223305Sopenharmony_ci
108fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
109fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
110fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
111fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
112fc223305Sopenharmony_ci
113fc223305Sopenharmony_ci    errCode = OH_Preferences_SetInt(pref, "", value);
114fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
115fc223305Sopenharmony_ci    errCode = OH_Preferences_GetInt(pref, "", &res);
116fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
117fc223305Sopenharmony_ci
118fc223305Sopenharmony_ci    errCode = OH_Preferences_SetInt(pref, nullptr, value);
119fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
120fc223305Sopenharmony_ci    errCode = OH_Preferences_GetInt(pref, nullptr, &res);
121fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
122fc223305Sopenharmony_ci    EXPECT_EQ(res, value);
123fc223305Sopenharmony_ci
124fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
125fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
126fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
127fc223305Sopenharmony_ci}
128fc223305Sopenharmony_ci
129fc223305Sopenharmony_ci/**
130fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTest_002
131fc223305Sopenharmony_ci * @tc.desc: test pref is nullptr
132fc223305Sopenharmony_ci * @tc.type: FUNC
133fc223305Sopenharmony_ci * @tc.require: NA
134fc223305Sopenharmony_ci * @tc.author: Lirui
135fc223305Sopenharmony_ci */
136fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTest_002, TestSize.Level1)
137fc223305Sopenharmony_ci{
138fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
139fc223305Sopenharmony_ci    std::string stringKey = "ndktest_int_key";
140fc223305Sopenharmony_ci    uint32_t len = 0;
141fc223305Sopenharmony_ci    char *res = nullptr;
142fc223305Sopenharmony_ci    char *resValue = nullptr;
143fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(nullptr, stringKey.c_str(), "test");
144fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
145fc223305Sopenharmony_ci
146fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(nullptr, stringKey.c_str(), &res, &len);
147fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
148fc223305Sopenharmony_ci
149fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
150fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
151fc223305Sopenharmony_ci
152fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
153fc223305Sopenharmony_ci
154fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, "", "test");
155fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
156fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(pref, "", &res, &len);
157fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
158fc223305Sopenharmony_ci
159fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, nullptr, "test");
160fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
161fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(pref, nullptr, &res, &len);
162fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
163fc223305Sopenharmony_ci
164fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, stringKey.c_str(), "123 test");
165fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
166fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(pref, stringKey.c_str(), &resValue, &len);
167fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
168fc223305Sopenharmony_ci    EXPECT_EQ(strcmp(resValue, "123 test"), 0);
169fc223305Sopenharmony_ci    EXPECT_EQ(PreferencesFlush(pref), PREFERENCES_OK);
170fc223305Sopenharmony_ci    OH_Preferences_FreeString(resValue);
171fc223305Sopenharmony_ci
172fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
173fc223305Sopenharmony_ci    pref = OH_Preferences_Open(option, &errCode);
174fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(pref, stringKey.c_str(), &resValue, &len);
175fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
176fc223305Sopenharmony_ci    EXPECT_EQ(strcmp(resValue, "123 test"), 0);
177fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
178fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
179fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
180fc223305Sopenharmony_ci}
181fc223305Sopenharmony_ci
182fc223305Sopenharmony_ci/**
183fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTest_003
184fc223305Sopenharmony_ci * @tc.desc: test pref is nullptr
185fc223305Sopenharmony_ci * @tc.type: FUNC
186fc223305Sopenharmony_ci * @tc.require: NA
187fc223305Sopenharmony_ci * @tc.author: Lirui
188fc223305Sopenharmony_ci */
189fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTest_003, TestSize.Level1)
190fc223305Sopenharmony_ci{
191fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
192fc223305Sopenharmony_ci    std::string boolKey = "ndktest_int_key";
193fc223305Sopenharmony_ci    bool boolValue = false;
194fc223305Sopenharmony_ci    errCode = OH_Preferences_SetBool(nullptr, boolKey.c_str(), true);
195fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
196fc223305Sopenharmony_ci
197fc223305Sopenharmony_ci    errCode = OH_Preferences_GetBool(nullptr, boolKey.c_str(), &boolValue);
198fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
199fc223305Sopenharmony_ci
200fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
201fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
202fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
203fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
204fc223305Sopenharmony_ci
205fc223305Sopenharmony_ci    errCode = OH_Preferences_SetBool(pref, "", false);
206fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
207fc223305Sopenharmony_ci    errCode = OH_Preferences_GetBool(pref, "", &boolValue);
208fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
209fc223305Sopenharmony_ci
210fc223305Sopenharmony_ci    errCode = OH_Preferences_SetBool(pref, nullptr, false);
211fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
212fc223305Sopenharmony_ci    errCode = OH_Preferences_GetBool(pref, nullptr, &boolValue);
213fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
214fc223305Sopenharmony_ci
215fc223305Sopenharmony_ci    errCode = OH_Preferences_SetBool(pref, " ", true);
216fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_OK);
217fc223305Sopenharmony_ci    errCode = OH_Preferences_GetBool(pref, " ", &boolValue);
218fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_OK);
219fc223305Sopenharmony_ci    ASSERT_EQ(boolValue, true);
220fc223305Sopenharmony_ci
221fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
222fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
223fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
224fc223305Sopenharmony_ci}
225fc223305Sopenharmony_ci
226fc223305Sopenharmony_ci/**
227fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTest_004
228fc223305Sopenharmony_ci * @tc.desc: test pref is nullptr
229fc223305Sopenharmony_ci * @tc.type: FUNC
230fc223305Sopenharmony_ci * @tc.require: NA
231fc223305Sopenharmony_ci * @tc.author: Lirui
232fc223305Sopenharmony_ci */
233fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTest_004, TestSize.Level1)
234fc223305Sopenharmony_ci{
235fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
236fc223305Sopenharmony_ci    std::string boolKey = "ndktest_int_key";
237fc223305Sopenharmony_ci    errCode = OH_Preferences_Delete(nullptr, boolKey.c_str());
238fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
239fc223305Sopenharmony_ci
240fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
241fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
242fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
243fc223305Sopenharmony_ci
244fc223305Sopenharmony_ci    errCode = OH_Preferences_Delete(pref, "");
245fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
246fc223305Sopenharmony_ci    errCode = OH_Preferences_Delete(pref, nullptr);
247fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
248fc223305Sopenharmony_ci
249fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
250fc223305Sopenharmony_ci
251fc223305Sopenharmony_ci    errCode = OH_Preferences_SetBool(pref, boolKey.c_str(), false);
252fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
253fc223305Sopenharmony_ci    bool res;
254fc223305Sopenharmony_ci    errCode = OH_Preferences_GetBool(pref, boolKey.c_str(), &res);
255fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
256fc223305Sopenharmony_ci    EXPECT_EQ(res, false);
257fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
258fc223305Sopenharmony_ci
259fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
260fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
261fc223305Sopenharmony_ci}
262fc223305Sopenharmony_ci
263fc223305Sopenharmony_ci/**
264fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTest_005
265fc223305Sopenharmony_ci * @tc.desc: test key and value
266fc223305Sopenharmony_ci * @tc.type: FUNC
267fc223305Sopenharmony_ci * @tc.require: NA
268fc223305Sopenharmony_ci * @tc.author: Lirui
269fc223305Sopenharmony_ci */
270fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTest_005, TestSize.Level1)
271fc223305Sopenharmony_ci{
272fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
273fc223305Sopenharmony_ci    std::string boolKey = "ndktest_int_key";
274fc223305Sopenharmony_ci    errCode = OH_Preferences_Delete(nullptr, boolKey.c_str());
275fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
276fc223305Sopenharmony_ci
277fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
278fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
279fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
280fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
281fc223305Sopenharmony_ci
282fc223305Sopenharmony_ci    std::string stringKey(1024, 'a');
283fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, stringKey.c_str(), "test");
284fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_OK);
285fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, stringKey.append("a").c_str(), "test");
286fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
287fc223305Sopenharmony_ci    std::string stringValue(16 * 1024 * 1024, 'a');
288fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, "test", stringValue.c_str());
289fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_OK);
290fc223305Sopenharmony_ci    errCode = OH_Preferences_SetString(pref, "test", stringValue.append("a").c_str());
291fc223305Sopenharmony_ci    EXPECT_EQ(errCode, PREFERENCES_ERROR_INVALID_PARAM);
292fc223305Sopenharmony_ci
293fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
294fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
295fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
296fc223305Sopenharmony_ci}
297fc223305Sopenharmony_ci
298fc223305Sopenharmony_ci/**
299fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTestEmptyValueTest001
300fc223305Sopenharmony_ci * @tc.desc: test key and value
301fc223305Sopenharmony_ci * @tc.type: FUNC
302fc223305Sopenharmony_ci * @tc.require: NA
303fc223305Sopenharmony_ci * @tc.author: Lirui
304fc223305Sopenharmony_ci */
305fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTestEmptyValueTest001, TestSize.Level1)
306fc223305Sopenharmony_ci{
307fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
308fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
309fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
310fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
311fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
312fc223305Sopenharmony_ci
313fc223305Sopenharmony_ci    uint32_t len = 0;
314fc223305Sopenharmony_ci    char *valueGet = nullptr;
315fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_SetString(pref, "abc", ""), PREFERENCES_OK);
316fc223305Sopenharmony_ci    errCode = OH_Preferences_GetString(pref, "abc", &valueGet, &len);
317fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
318fc223305Sopenharmony_ci    EXPECT_EQ(strcmp(valueGet, ""), 0);
319fc223305Sopenharmony_ci    EXPECT_EQ(len, 1);
320fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
321fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
322fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
323fc223305Sopenharmony_ci}
324fc223305Sopenharmony_ci
325fc223305Sopenharmony_ci/**
326fc223305Sopenharmony_ci * @tc.name: NDKPreferencesTestEmptyValueTest001
327fc223305Sopenharmony_ci * @tc.desc: test key and value
328fc223305Sopenharmony_ci * @tc.type: FUNC
329fc223305Sopenharmony_ci * @tc.require: NA
330fc223305Sopenharmony_ci * @tc.author: bluhuang
331fc223305Sopenharmony_ci */
332fc223305Sopenharmony_ciHWTEST_F(PreferencesNdkValueTest, NDKPreferencesTestTypeTest001, TestSize.Level1)
333fc223305Sopenharmony_ci{
334fc223305Sopenharmony_ci    int errCode = PREFERENCES_OK;
335fc223305Sopenharmony_ci    OH_PreferencesOption *option = GetCommonOption();
336fc223305Sopenharmony_ci    OH_Preferences *pref = OH_Preferences_Open(option, &errCode);
337fc223305Sopenharmony_ci    ASSERT_EQ(errCode, PREFERENCES_OK);
338fc223305Sopenharmony_ci    (void)OH_PreferencesOption_Destroy(option);
339fc223305Sopenharmony_ci
340fc223305Sopenharmony_ci    std::string key = "testKey";
341fc223305Sopenharmony_ci    uint32_t len = 0;
342fc223305Sopenharmony_ci    char *strValue = nullptr;
343fc223305Sopenharmony_ci    bool boolValue = false;
344fc223305Sopenharmony_ci    int intValue = -1;
345fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_SetInt(pref, key.c_str(), 123), PREFERENCES_OK);
346fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetString(pref, key.c_str(), &strValue, &len), PREFERENCES_ERROR_KEY_NOT_FOUND);
347fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetBool(pref, key.c_str(), &boolValue), PREFERENCES_ERROR_KEY_NOT_FOUND);
348fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetInt(pref, key.c_str(), &intValue), PREFERENCES_OK);
349fc223305Sopenharmony_ci
350fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_SetBool(pref, key.c_str(), true), PREFERENCES_OK);
351fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetInt(pref, key.c_str(), &intValue), PREFERENCES_ERROR_KEY_NOT_FOUND);
352fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetString(pref, key.c_str(), &strValue, &len), PREFERENCES_ERROR_KEY_NOT_FOUND);
353fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetBool(pref, key.c_str(), &boolValue), PREFERENCES_OK);
354fc223305Sopenharmony_ci
355fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_SetString(pref, key.c_str(), ""), PREFERENCES_OK);
356fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetBool(pref, key.c_str(), &boolValue), PREFERENCES_ERROR_KEY_NOT_FOUND);
357fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetInt(pref, key.c_str(), &intValue), PREFERENCES_ERROR_KEY_NOT_FOUND);
358fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_GetString(pref, key.c_str(), &strValue, &len), PREFERENCES_OK);
359fc223305Sopenharmony_ci
360fc223305Sopenharmony_ci    EXPECT_EQ(OH_Preferences_Close(pref), PREFERENCES_OK);
361fc223305Sopenharmony_ci    EXPECT_EQ(OHOS::NativePreferences::PreferencesHelper::DeletePreferences("/data/test/valueTestDb"),
362fc223305Sopenharmony_ci        OHOS::NativePreferences::E_OK);
363fc223305Sopenharmony_ci}
364fc223305Sopenharmony_ci}
365