1fc223305Sopenharmony_ci/* 2fc223305Sopenharmony_ci * Copyright (c) 2021 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 16fc223305Sopenharmony_ci#include <gtest/gtest.h> 17fc223305Sopenharmony_ci 18fc223305Sopenharmony_ci#include <string> 19fc223305Sopenharmony_ci#include <thread> 20fc223305Sopenharmony_ci 21fc223305Sopenharmony_ci#include "log_print.h" 22fc223305Sopenharmony_ci#include "preferences.h" 23fc223305Sopenharmony_ci#include "preferences_errno.h" 24fc223305Sopenharmony_ci#include "preferences_helper.h" 25fc223305Sopenharmony_ci#include "preferences_xml_utils.h" 26fc223305Sopenharmony_ci 27fc223305Sopenharmony_ciusing namespace testing::ext; 28fc223305Sopenharmony_ciusing namespace OHOS::NativePreferences; 29fc223305Sopenharmony_ci 30fc223305Sopenharmony_cinamespace { 31fc223305Sopenharmony_ciclass PreferencesFileTest : public testing::Test { 32fc223305Sopenharmony_cipublic: 33fc223305Sopenharmony_ci static void SetUpTestCase(void); 34fc223305Sopenharmony_ci static void TearDownTestCase(void); 35fc223305Sopenharmony_ci void SetUp(); 36fc223305Sopenharmony_ci void TearDown(); 37fc223305Sopenharmony_ci}; 38fc223305Sopenharmony_ci 39fc223305Sopenharmony_civoid PreferencesFileTest::SetUpTestCase(void) 40fc223305Sopenharmony_ci{ 41fc223305Sopenharmony_ci} 42fc223305Sopenharmony_ci 43fc223305Sopenharmony_civoid PreferencesFileTest::TearDownTestCase(void) 44fc223305Sopenharmony_ci{ 45fc223305Sopenharmony_ci} 46fc223305Sopenharmony_ci 47fc223305Sopenharmony_civoid PreferencesFileTest::SetUp(void) 48fc223305Sopenharmony_ci{ 49fc223305Sopenharmony_ci} 50fc223305Sopenharmony_ci 51fc223305Sopenharmony_civoid PreferencesFileTest::TearDown(void) 52fc223305Sopenharmony_ci{ 53fc223305Sopenharmony_ci} 54fc223305Sopenharmony_ci 55fc223305Sopenharmony_ciint PreferencesPutValue(std::shared_ptr<Preferences> pref, const std::string &intKey, int intValue, 56fc223305Sopenharmony_ci const std::string &strKey, const std::string &strValue) 57fc223305Sopenharmony_ci{ 58fc223305Sopenharmony_ci pref->PutInt(intKey, intValue); 59fc223305Sopenharmony_ci pref->PutString(strKey, strValue); 60fc223305Sopenharmony_ci int ret = pref->FlushSync(); 61fc223305Sopenharmony_ci return ret; 62fc223305Sopenharmony_ci} 63fc223305Sopenharmony_ci 64fc223305Sopenharmony_ci/** 65fc223305Sopenharmony_ci * @tc.name: NativePreferencesFileTest_001 66fc223305Sopenharmony_ci * @tc.desc: normal testcase of backup file 67fc223305Sopenharmony_ci * @tc.type: FUNC 68fc223305Sopenharmony_ci * @tc.require: AR000CU2BN 69fc223305Sopenharmony_ci * @tc.author: liulinna 70fc223305Sopenharmony_ci */ 71fc223305Sopenharmony_ciHWTEST_F(PreferencesFileTest, NativePreferencesFileTest_001, TestSize.Level1) 72fc223305Sopenharmony_ci{ 73fc223305Sopenharmony_ci std::string file = "/data/test/test"; 74fc223305Sopenharmony_ci std::string backupFile = "/data/test/test.bak"; 75fc223305Sopenharmony_ci 76fc223305Sopenharmony_ci std::remove(file.c_str()); 77fc223305Sopenharmony_ci std::remove(backupFile.c_str()); 78fc223305Sopenharmony_ci 79fc223305Sopenharmony_ci std::vector<Element> settings; 80fc223305Sopenharmony_ci Element elem; 81fc223305Sopenharmony_ci elem.key_ = "intKey"; 82fc223305Sopenharmony_ci elem.tag_ = std::string("int"); 83fc223305Sopenharmony_ci elem.value_ = std::to_string(10); 84fc223305Sopenharmony_ci settings.push_back(elem); 85fc223305Sopenharmony_ci PreferencesXmlUtils::WriteSettingXml(backupFile, "", "", settings); 86fc223305Sopenharmony_ci 87fc223305Sopenharmony_ci int errCode = E_OK; 88fc223305Sopenharmony_ci std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode); 89fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 90fc223305Sopenharmony_ci int ret = pref->GetInt("intKey", 0); 91fc223305Sopenharmony_ci EXPECT_EQ(ret, 10); 92fc223305Sopenharmony_ci 93fc223305Sopenharmony_ci struct stat st = { 0 }; 94fc223305Sopenharmony_ci ret = stat(file.c_str(), &st); 95fc223305Sopenharmony_ci EXPECT_EQ(ret, 0); 96fc223305Sopenharmony_ci ret = (st.st_mode & (S_IXUSR | S_IXGRP | S_IRWXO)); 97fc223305Sopenharmony_ci EXPECT_EQ(ret, 0); 98fc223305Sopenharmony_ci 99fc223305Sopenharmony_ci pref = nullptr; 100fc223305Sopenharmony_ci ret = PreferencesHelper::DeletePreferences(file); 101fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 102fc223305Sopenharmony_ci} 103fc223305Sopenharmony_ci 104fc223305Sopenharmony_ci/** 105fc223305Sopenharmony_ci * @tc.name: NativePreferencesFileTest_002 106fc223305Sopenharmony_ci * @tc.desc: normal testcase of file permission 107fc223305Sopenharmony_ci * @tc.type: FUNC 108fc223305Sopenharmony_ci * @tc.require: AR000CU2BN 109fc223305Sopenharmony_ci * @tc.author: liulinna 110fc223305Sopenharmony_ci */ 111fc223305Sopenharmony_ciHWTEST_F(PreferencesFileTest, NativePreferencesFileTest_002, TestSize.Level1) 112fc223305Sopenharmony_ci{ 113fc223305Sopenharmony_ci std::string file = "/data/test/test"; 114fc223305Sopenharmony_ci std::remove(file.c_str()); 115fc223305Sopenharmony_ci 116fc223305Sopenharmony_ci int errCode = E_OK; 117fc223305Sopenharmony_ci std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode); 118fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 119fc223305Sopenharmony_ci 120fc223305Sopenharmony_ci int ret = PreferencesPutValue(pref, "key1", 2, "key2", "test"); 121fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 122fc223305Sopenharmony_ci 123fc223305Sopenharmony_ci struct stat st = { 0 }; 124fc223305Sopenharmony_ci int result = stat(file.c_str(), &st); 125fc223305Sopenharmony_ci EXPECT_EQ(result, 0); 126fc223305Sopenharmony_ci result = st.st_mode & (S_IXUSR | S_IXGRP | S_IRWXO); 127fc223305Sopenharmony_ci EXPECT_EQ(result, 0); 128fc223305Sopenharmony_ci 129fc223305Sopenharmony_ci pref = nullptr; 130fc223305Sopenharmony_ci result = PreferencesHelper::DeletePreferences(file); 131fc223305Sopenharmony_ci EXPECT_EQ(result, E_OK); 132fc223305Sopenharmony_ci} 133fc223305Sopenharmony_ci 134fc223305Sopenharmony_ci/** 135fc223305Sopenharmony_ci * @tc.name: NativePreferencesFileTest_003 136fc223305Sopenharmony_ci * @tc.desc: test FlushSync one times and five times 137fc223305Sopenharmony_ci * @tc.type: FUNC 138fc223305Sopenharmony_ci * @tc.require: AR000CU2BN 139fc223305Sopenharmony_ci * @tc.author: liulinna 140fc223305Sopenharmony_ci */ 141fc223305Sopenharmony_ciHWTEST_F(PreferencesFileTest, NativePreferencesFileTest_003, TestSize.Level1) 142fc223305Sopenharmony_ci{ 143fc223305Sopenharmony_ci std::string file = "/data/test/test"; 144fc223305Sopenharmony_ci int ret = PreferencesHelper::DeletePreferences(file); 145fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 146fc223305Sopenharmony_ci 147fc223305Sopenharmony_ci int errCode = E_OK; 148fc223305Sopenharmony_ci std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode); 149fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 150fc223305Sopenharmony_ci 151fc223305Sopenharmony_ci ret = PreferencesPutValue(pref, "intKey", 1, "stringKey", "string1"); 152fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 153fc223305Sopenharmony_ci 154fc223305Sopenharmony_ci EXPECT_EQ(1, pref->GetInt("intKey", 0)); 155fc223305Sopenharmony_ci EXPECT_EQ("string1", pref->GetString("stringKey", "")); 156fc223305Sopenharmony_ci 157fc223305Sopenharmony_ci pref = nullptr; 158fc223305Sopenharmony_ci ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper"); 159fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 160fc223305Sopenharmony_ci 161fc223305Sopenharmony_ci errCode = E_OK; 162fc223305Sopenharmony_ci pref = PreferencesHelper::GetPreferences(file, errCode); 163fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 164fc223305Sopenharmony_ci 165fc223305Sopenharmony_ci EXPECT_EQ(1, pref->GetInt("intKey", 0)); 166fc223305Sopenharmony_ci EXPECT_EQ("string1", pref->GetString("stringKey", "")); 167fc223305Sopenharmony_ci 168fc223305Sopenharmony_ci for (int i = 2; i <= 5; i++) { 169fc223305Sopenharmony_ci ret = PreferencesPutValue(pref, "intKey", i, "stringKey", "string" + std::to_string(i)); 170fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 171fc223305Sopenharmony_ci } 172fc223305Sopenharmony_ci 173fc223305Sopenharmony_ci EXPECT_EQ(5, pref->GetInt("intKey", 0)); 174fc223305Sopenharmony_ci EXPECT_EQ("string5", pref->GetString("stringKey", "")); 175fc223305Sopenharmony_ci 176fc223305Sopenharmony_ci pref = nullptr; 177fc223305Sopenharmony_ci ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper"); 178fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 179fc223305Sopenharmony_ci 180fc223305Sopenharmony_ci errCode = E_OK; 181fc223305Sopenharmony_ci pref = PreferencesHelper::GetPreferences(file, errCode); 182fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 183fc223305Sopenharmony_ci 184fc223305Sopenharmony_ci EXPECT_EQ(5, pref->GetInt("intKey", 0)); 185fc223305Sopenharmony_ci EXPECT_EQ("string5", pref->GetString("stringKey", "")); 186fc223305Sopenharmony_ci 187fc223305Sopenharmony_ci pref = nullptr; 188fc223305Sopenharmony_ci ret = PreferencesHelper::DeletePreferences("/data/test/test_helper"); 189fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 190fc223305Sopenharmony_ci} 191fc223305Sopenharmony_ci 192fc223305Sopenharmony_ci/** 193fc223305Sopenharmony_ci * @tc.name: NativePreferencesFileTest_004 194fc223305Sopenharmony_ci * @tc.desc: test Flush one times and five times 195fc223305Sopenharmony_ci * @tc.type: FUNC 196fc223305Sopenharmony_ci * @tc.require: AR000CU2BN 197fc223305Sopenharmony_ci * @tc.author: liulinna 198fc223305Sopenharmony_ci */ 199fc223305Sopenharmony_ciHWTEST_F(PreferencesFileTest, NativePreferencesFileTest_004, TestSize.Level3) 200fc223305Sopenharmony_ci{ 201fc223305Sopenharmony_ci std::string file = "/data/test/test"; 202fc223305Sopenharmony_ci int ret = PreferencesHelper::DeletePreferences(file); 203fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 204fc223305Sopenharmony_ci 205fc223305Sopenharmony_ci int errCode = E_OK; 206fc223305Sopenharmony_ci std::shared_ptr<Preferences> pref = PreferencesHelper::GetPreferences(file, errCode); 207fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 208fc223305Sopenharmony_ci 209fc223305Sopenharmony_ci ret = PreferencesPutValue(pref, "intKey", 1, "stringKey", "string1"); 210fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 211fc223305Sopenharmony_ci 212fc223305Sopenharmony_ci EXPECT_EQ(1, pref->GetInt("intKey", 0)); 213fc223305Sopenharmony_ci EXPECT_EQ("string1", pref->GetString("stringKey", "")); 214fc223305Sopenharmony_ci 215fc223305Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(20)); 216fc223305Sopenharmony_ci 217fc223305Sopenharmony_ci pref = nullptr; 218fc223305Sopenharmony_ci ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper"); 219fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 220fc223305Sopenharmony_ci 221fc223305Sopenharmony_ci errCode = E_OK; 222fc223305Sopenharmony_ci pref = PreferencesHelper::GetPreferences(file, errCode); 223fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 224fc223305Sopenharmony_ci 225fc223305Sopenharmony_ci EXPECT_EQ(1, pref->GetInt("intKey", 0)); 226fc223305Sopenharmony_ci EXPECT_EQ("string1", pref->GetString("stringKey", "")); 227fc223305Sopenharmony_ci 228fc223305Sopenharmony_ci for (int i = 2; i <= 5; i++) { 229fc223305Sopenharmony_ci ret = PreferencesPutValue(pref, "intKey", i, "stringKey", "string" + std::to_string(i)); 230fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 231fc223305Sopenharmony_ci } 232fc223305Sopenharmony_ci 233fc223305Sopenharmony_ci EXPECT_EQ(5, pref->GetInt("intKey", 0)); 234fc223305Sopenharmony_ci EXPECT_EQ("string5", pref->GetString("stringKey", "")); 235fc223305Sopenharmony_ci 236fc223305Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(20)); 237fc223305Sopenharmony_ci 238fc223305Sopenharmony_ci pref = nullptr; 239fc223305Sopenharmony_ci ret = PreferencesHelper::RemovePreferencesFromCache("/data/test/test_helper"); 240fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 241fc223305Sopenharmony_ci 242fc223305Sopenharmony_ci errCode = E_OK; 243fc223305Sopenharmony_ci pref = PreferencesHelper::GetPreferences(file, errCode); 244fc223305Sopenharmony_ci EXPECT_EQ(errCode, E_OK); 245fc223305Sopenharmony_ci 246fc223305Sopenharmony_ci EXPECT_EQ(5, pref->GetInt("intKey", 0)); 247fc223305Sopenharmony_ci EXPECT_EQ("string5", pref->GetString("stringKey", "")); 248fc223305Sopenharmony_ci 249fc223305Sopenharmony_ci pref = nullptr; 250fc223305Sopenharmony_ci ret = PreferencesHelper::DeletePreferences("/data/test/test_helper"); 251fc223305Sopenharmony_ci EXPECT_EQ(ret, E_OK); 252fc223305Sopenharmony_ci} 253fc223305Sopenharmony_ci} 254