• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 
18 #include <string>
19 #include <thread>
20 
21 #include "logger.h"
22 #include "preferences.h"
23 #include "preferences_errno.h"
24 #include "preferences_helper.h"
25 #include "preferences_xml_utils.h"
26 
27 using namespace testing::ext;
28 using namespace OHOS::NativePreferences;
29 
30 class PreferencesFileTest : public testing::Test {
31 public:
32     static void SetUpTestCase(void);
33     static void TearDownTestCase(void);
34     void SetUp();
35     void TearDown();
36 };
37 
SetUpTestCase(void)38 void PreferencesFileTest::SetUpTestCase(void)
39 {
40 }
41 
TearDownTestCase(void)42 void PreferencesFileTest::TearDownTestCase(void)
43 {
44 }
45 
SetUp(void)46 void PreferencesFileTest::SetUp(void)
47 {
48 }
49 
TearDown(void)50 void PreferencesFileTest::TearDown(void)
51 {
52 }
53 
54 /**
55  * @tc.name: NativePreferencesFileTest_001
56  * @tc.desc: normal testcase of backup file
57  * @tc.type: FUNC
58  * @tc.require: AR000CU2BN
59  * @tc.author: liulinna
60  */
61 HWTEST_F(PreferencesFileTest, NativePreferencesFileTest_001, TestSize.Level1)
62 {
63     std::string file = "/data/test/test";
64     std::string backupFile = "/data/test/test.bak";
65 
66     std::remove(file.c_str());
67     std::remove(backupFile.c_str());
68 
69     std::vector<Element> settings;
70     Element elem;
71     elem.key_ = "intKey";
72     elem.tag_ = std::string("int");
73     elem.value_ = std::to_string(10);
74     settings.push_back(elem);
75     PreferencesXmlUtils::WriteSettingXml(backupFile, settings);
76 
77     int errCode = E_OK;
78     std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode);
79     EXPECT_EQ(errCode, E_OK);
80     int ret = pref->GetInt("intKey", 0);
81     EXPECT_EQ(ret, 10);
82 
83     struct stat st = { 0 };
84     ret = stat(file.c_str(), &st);
85     EXPECT_EQ(ret, 0);
86     ret = (st.st_mode & (S_IXUSR | S_IXGRP | S_IRWXO));
87     EXPECT_EQ(ret, 0);
88 
89     pref = nullptr;
90     ret = PreferencesHelper::DeletePreferences(file);
91     EXPECT_EQ(ret, E_OK);
92 }
93 
94 /**
95  * @tc.name: NativePreferencesFileTest_002
96  * @tc.desc: normal testcase of file permission
97  * @tc.type: FUNC
98  * @tc.require: AR000CU2BN
99  * @tc.author: liulinna
100  */
101 HWTEST_F(PreferencesFileTest, NativePreferencesFileTest_002, TestSize.Level1)
102 {
103     std::string file = "/data/test/test";
104     std::remove(file.c_str());
105 
106     int errCode = E_OK;
107     std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode);
108     EXPECT_EQ(errCode, E_OK);
109 
110     pref->PutInt("key1", 2);
111     pref->PutString("key2", "test");
112     int ret = pref->FlushSync();
113     EXPECT_EQ(ret, E_OK);
114 
115     struct stat st = { 0 };
116     int result = stat(file.c_str(), &st);
117     EXPECT_EQ(result, 0);
118     result = st.st_mode & (S_IXUSR | S_IXGRP | S_IRWXO);
119     EXPECT_EQ(result, 0);
120 
121     pref = nullptr;
122     result = PreferencesHelper::DeletePreferences(file);
123     EXPECT_EQ(result, E_OK);
124 }
125 
126 /**
127  * @tc.name: NativePreferencesFileTest_003
128  * @tc.desc: test two same file path
129  * @tc.type: FUNC
130  * @tc.require: AR000CU2BN
131  * @tc.author: liulinna
132  */
133 HWTEST_F(PreferencesFileTest, NativePreferencesFileTest_003, TestSize.Level1)
134 {
135     std::string absolutePath = "/data/test1";
136     std::string relativePath = "/data/test/../test1";
137     std::remove(absolutePath.c_str());
138 
139     int errCode = E_OK;
140     std::shared_ptr<Preferences> pref1 = PreferencesHelper::GetPreferences(absolutePath, errCode);
141     EXPECT_EQ(errCode, E_OK);
142 
143     errCode = E_OK;
144     std::shared_ptr<Preferences> pref2 = PreferencesHelper::GetPreferences(relativePath, errCode);
145     EXPECT_EQ(errCode, E_OK);
146 
147     EXPECT_EQ(pref1, pref2);
148 
149     pref1 = nullptr;
150     pref2 = nullptr;
151     int result = PreferencesHelper::DeletePreferences(absolutePath);
152     EXPECT_EQ(result, E_OK);
153 }
154 
155 /**
156  * @tc.name: NativePreferencesFileTest_004
157  * @tc.desc: test FlushSync one times and five times
158  * @tc.type: FUNC
159  * @tc.require: AR000CU2BN
160  * @tc.author: liulinna
161  */
162 HWTEST_F(PreferencesFileTest, NativePreferencesFileTest_004, TestSize.Level1)
163 {
164     std::string file = "/data/test/test";
165     int ret = PreferencesHelper::DeletePreferences(file);
166     EXPECT_EQ(ret, E_OK);
167 
168     int errCode = E_OK;
169     std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode);
170     EXPECT_EQ(errCode, E_OK);
171 
172     pref->PutInt("intKey", 1);
173     pref->PutString("stringKey", "string1");
174     ret = pref->FlushSync();
175     EXPECT_EQ(ret, E_OK);
176 
177     EXPECT_EQ(1, pref->GetInt("intKey", 0));
178     EXPECT_EQ("string1", pref->GetString("stringKey", ""));
179 
180     pref = nullptr;
181     ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper");
182     EXPECT_EQ(ret, E_OK);
183 
184     errCode = E_OK;
185     pref = PreferencesHelper::GetPreferences(file, errCode);
186     EXPECT_EQ(errCode, E_OK);
187 
188     EXPECT_EQ(1, pref->GetInt("intKey", 0));
189     EXPECT_EQ("string1", pref->GetString("stringKey", ""));
190 
191     pref->PutInt("intKey", 2);
192     pref->PutString("stringKey", "string2");
193     ret = pref->FlushSync();
194     EXPECT_EQ(ret, E_OK);
195     pref->PutInt("intKey", 3);
196     pref->PutString("stringKey", "string3");
197     ret = pref->FlushSync();
198     EXPECT_EQ(ret, E_OK);
199 
200     pref->PutInt("intKey", 4);
201     pref->PutString("stringKey", "string4");
202     ret = pref->FlushSync();
203     EXPECT_EQ(ret, E_OK);
204 
205     pref = PreferencesHelper::GetPreferences(file, errCode);
206     pref->PutInt("intKey", 5);
207     pref->PutString("stringKey", "string5");
208     ret = pref->FlushSync();
209     EXPECT_EQ(ret, E_OK);
210 
211     EXPECT_EQ(5, pref->GetInt("intKey", 0));
212     EXPECT_EQ("string5", pref->GetString("stringKey", ""));
213 
214     pref = nullptr;
215     ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper");
216     EXPECT_EQ(ret, E_OK);
217 
218     errCode = E_OK;
219     pref = PreferencesHelper::GetPreferences(file, errCode);
220     EXPECT_EQ(errCode, E_OK);
221 
222     EXPECT_EQ(5, pref->GetInt("intKey", 0));
223     EXPECT_EQ("string5", pref->GetString("stringKey", ""));
224 
225     pref = nullptr;
226     ret = PreferencesHelper::DeletePreferences("/data/test/test_helper");
227     EXPECT_EQ(ret, E_OK);
228 }
229 
230 /**
231  * @tc.name: NativePreferencesFileTest_005
232  * @tc.desc: test Flush one times and five times
233  * @tc.type: FUNC
234  * @tc.require: AR000CU2BN
235  * @tc.author: liulinna
236  */
237 HWTEST_F(PreferencesFileTest, NativePreferencesFileTest_005, TestSize.Level3)
238 {
239     std::string file = "/data/test/test";
240     int ret = PreferencesHelper::DeletePreferences(file);
241     EXPECT_EQ(ret, E_OK);
242 
243     int errCode = E_OK;
244     std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode);
245     EXPECT_EQ(errCode, E_OK);
246 
247     pref->PutInt("intKey", 1);
248     pref->PutString("stringKey", "string1");
249     pref->Flush();
250 
251     EXPECT_EQ(1, pref->GetInt("intKey", 0));
252     EXPECT_EQ("string1", pref->GetString("stringKey", ""));
253 
254     std::this_thread::sleep_for(std::chrono::milliseconds(20));
255 
256     pref = nullptr;
257     ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper");
258     EXPECT_EQ(ret, E_OK);
259 
260     errCode = E_OK;
261     pref = PreferencesHelper::GetPreferences(file, errCode);
262     EXPECT_EQ(errCode, E_OK);
263 
264     EXPECT_EQ(1, pref->GetInt("intKey", 0));
265     EXPECT_EQ("string1", pref->GetString("stringKey", ""));
266 
267     pref->PutInt("intKey", 2);
268     pref->PutString("stringKey", "string2");
269     pref->Flush();
270     pref->PutInt("intKey", 3);
271     pref->PutString("stringKey", "string3");
272     pref->Flush();
273 
274     pref->PutInt("intKey", 4);
275     pref->PutString("stringKey", "string4");
276     pref->Flush();
277 
278     pref->PutInt("intKey", 5);
279     pref->PutString("stringKey", "string5");
280     pref->Flush();
281 
282     EXPECT_EQ(5, pref->GetInt("intKey", 0));
283     EXPECT_EQ("string5", pref->GetString("stringKey", ""));
284 
285     std::this_thread::sleep_for(std::chrono::milliseconds(20));
286 
287     pref = nullptr;
288     ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper");
289     EXPECT_EQ(ret, E_OK);
290 
291     errCode = E_OK;
292     pref = PreferencesHelper::GetPreferences(file, errCode);
293     EXPECT_EQ(errCode, E_OK);
294 
295     EXPECT_EQ(5, pref->GetInt("intKey", 0));
296     EXPECT_EQ("string5", pref->GetString("stringKey", ""));
297 
298     pref = nullptr;
299     ret = PreferencesHelper::DeletePreferences("/data/test/test_helper");
300     EXPECT_EQ(ret, E_OK);
301 }
302