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