1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ci 16115cd2caSopenharmony_ci#include "recovery_test.h" 17115cd2caSopenharmony_ci 18115cd2caSopenharmony_ci#include "database_disaster_recovery.h" 19115cd2caSopenharmony_ci#include "test_common.h" 20115cd2caSopenharmony_ci 21115cd2caSopenharmony_cinamespace Contacts { 22115cd2caSopenharmony_cinamespace Test { 23115cd2caSopenharmony_civoid RecoveryTest::ClearData() 24115cd2caSopenharmony_ci{ 25115cd2caSopenharmony_ci OHOS::AbilityRuntime::ContactsDataAbility contactsDataAbility; 26115cd2caSopenharmony_ci OHOS::DataShare::DataSharePredicates predicates; 27115cd2caSopenharmony_ci OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 28115cd2caSopenharmony_ci predicates.NotEqualTo("id", "0"); 29115cd2caSopenharmony_ci predicates.And(); 30115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 31115cd2caSopenharmony_ci int code1 = contactsDataAbility.Delete(uriRawContact, predicates); 32115cd2caSopenharmony_ci HILOG_INFO("RecoveryTest ClearData code1 is %{public}d", code1); 33115cd2caSopenharmony_ci int time = 3000; 34115cd2caSopenharmony_ci std::chrono::milliseconds dura(time); 35115cd2caSopenharmony_ci std::this_thread::sleep_for(dura); 36115cd2caSopenharmony_ci OHOS::DataShare::DataSharePredicates predicates2; 37115cd2caSopenharmony_ci OHOS::Uri uriRawContactComplete(ContactsUri::DELETED_RAW_CONTACT); 38115cd2caSopenharmony_ci predicates2.NotEqualTo("id", "0"); 39115cd2caSopenharmony_ci int code = contactsDataAbility.Delete(uriRawContactComplete, predicates2); 40115cd2caSopenharmony_ci HILOG_INFO("RecoveryTest ClearData code is %{public}d", code); 41115cd2caSopenharmony_ci} 42115cd2caSopenharmony_ci 43115cd2caSopenharmony_ciint64_t RecoveryTest::RawContactInsert(std::string displayName) 44115cd2caSopenharmony_ci{ 45115cd2caSopenharmony_ci OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 46115cd2caSopenharmony_ci OHOS::DataShare::DataShareValuesBucket rawContactValues; 47115cd2caSopenharmony_ci rawContactValues.Put("display_name", displayName); 48115cd2caSopenharmony_ci int64_t code = contactsDataAbility.Insert(uriRawContact, rawContactValues); 49115cd2caSopenharmony_ci rawContactValues.Clear(); 50115cd2caSopenharmony_ci return code; 51115cd2caSopenharmony_ci} 52115cd2caSopenharmony_ci 53115cd2caSopenharmony_ci/* 54115cd2caSopenharmony_ci * @tc.number recovery_test_100 55115cd2caSopenharmony_ci * @tc.name Backup database 56115cd2caSopenharmony_ci * @tc.desc Exception use case 57115cd2caSopenharmony_ci * @tc.level Level1 58115cd2caSopenharmony_ci * @tc.size MediumTest 59115cd2caSopenharmony_ci * @tc.type Function 60115cd2caSopenharmony_ci */ 61115cd2caSopenharmony_ciHWTEST_F(RecoveryTest, recovery_test_100, testing::ext::TestSize.Level1) 62115cd2caSopenharmony_ci{ 63115cd2caSopenharmony_ci HILOG_INFO("--- recovery_test_100 is starting! ---"); 64115cd2caSopenharmony_ci std::shared_ptr<OHOS::Contacts::DataBaseDisasterRecovery> instance = 65115cd2caSopenharmony_ci OHOS::Contacts::DataBaseDisasterRecovery::GetInstance(); 66115cd2caSopenharmony_ci std::shared_ptr<OHOS::Contacts::ContactsDataBase> contactDatabase = OHOS::Contacts::ContactsDataBase::GetInstance(); 67115cd2caSopenharmony_ci int result = instance->SQLiteCheckDb(); 68115cd2caSopenharmony_ci HILOG_INFO("--- recovery_test_100 SQLiteCheckDb ret ! --- %{public}d", result); 69115cd2caSopenharmony_ci if (result == 0) { 70115cd2caSopenharmony_ci instance->BackDatabase(); 71115cd2caSopenharmony_ci } 72115cd2caSopenharmony_ci std::string backupPath = instance->GetBackUpDatabase(contactDatabase->contactStore_); 73115cd2caSopenharmony_ci HILOG_INFO("--- recovery_test_100 is end! --- %{private}s ", backupPath.c_str()); 74115cd2caSopenharmony_ci ClearData(); 75115cd2caSopenharmony_ci} 76115cd2caSopenharmony_ci 77115cd2caSopenharmony_ci/* 78115cd2caSopenharmony_ci * @tc.number recovery_test_200 79115cd2caSopenharmony_ci * @tc.name Backup database after insert two person, then recover 80115cd2caSopenharmony_ci * @tc.desc Exception use case 81115cd2caSopenharmony_ci * @tc.level Level1 82115cd2caSopenharmony_ci * @tc.size MediumTest 83115cd2caSopenharmony_ci * @tc.type Function 84115cd2caSopenharmony_ci */ 85115cd2caSopenharmony_ciHWTEST_F(RecoveryTest, recovery_test_200, testing::ext::TestSize.Level1) 86115cd2caSopenharmony_ci{ 87115cd2caSopenharmony_ci HILOG_INFO("--- recovery_test_200 is starting! ---"); 88115cd2caSopenharmony_ci RawContactInsert("liming"); 89115cd2caSopenharmony_ci RawContactInsert("xiaolilili"); 90115cd2caSopenharmony_ci // backup 91115cd2caSopenharmony_ci OHOS::Uri uriRawContactBackUp(ContactsUri::BACKUP); 92115cd2caSopenharmony_ci OHOS::DataShare::DataShareValuesBucket value; 93115cd2caSopenharmony_ci OHOS::DataShare::DataSharePredicates predicates; 94115cd2caSopenharmony_ci int retCode = contactsDataAbility.Update(uriRawContactBackUp, predicates, value); 95115cd2caSopenharmony_ci EXPECT_EQ(0, retCode); 96115cd2caSopenharmony_ci 97115cd2caSopenharmony_ci RawContactInsert("xiaobaibaibai"); 98115cd2caSopenharmony_ci RawContactInsert("xiaolitiantian"); 99115cd2caSopenharmony_ci OHOS::Uri uriRawContact(ContactsUri::RAW_CONTACT); 100115cd2caSopenharmony_ci std::vector<std::string> columns; 101115cd2caSopenharmony_ci predicates.EqualTo("is_deleted", "0"); 102115cd2caSopenharmony_ci std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet = 103115cd2caSopenharmony_ci contactsDataAbility.Query(uriRawContact, predicates, columns); 104115cd2caSopenharmony_ci int rowCount = 0; 105115cd2caSopenharmony_ci resultSet->GetRowCount(rowCount); 106115cd2caSopenharmony_ci resultSet->Close(); 107115cd2caSopenharmony_ci EXPECT_EQ(4, rowCount); 108115cd2caSopenharmony_ci 109115cd2caSopenharmony_ci OHOS::Uri uriRawContactRecover(ContactsUri::RECOVER); 110115cd2caSopenharmony_ci int retCodeRecover = contactsDataAbility.Update(uriRawContactRecover, predicates, value); 111115cd2caSopenharmony_ci EXPECT_EQ(0, retCodeRecover); 112115cd2caSopenharmony_ci 113115cd2caSopenharmony_ci std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSetRecover = 114115cd2caSopenharmony_ci contactsDataAbility.Query(uriRawContact, predicates, columns); 115115cd2caSopenharmony_ci int rowCountRecover = 0; 116115cd2caSopenharmony_ci resultSetRecover->GetRowCount(rowCountRecover); 117115cd2caSopenharmony_ci resultSetRecover->Close(); 118115cd2caSopenharmony_ci EXPECT_EQ(2, rowCountRecover); 119115cd2caSopenharmony_ci ClearData(); 120115cd2caSopenharmony_ci} 121115cd2caSopenharmony_ci} // namespace Test 122115cd2caSopenharmony_ci} // namespace Contacts 123