1/* 2 * Copyright (c) 2021-2022 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 16import dataShare from '@ohos.data.dataShare'; 17import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'deccjsunit/index' 18 19const URI_CONTACTS = "datashare:///com.ohos.contactsdataability"; 20const rawContactUri = "datashare:///com.ohos.contactsdataability/contacts/raw_contact"; 21const backup = "datashare:///com.ohos.contactsdataability/contacts/backup"; 22const recover = "datashare:///com.ohos.contactsdataability/contacts/recover"; 23const deletedUri = "datashare:///com.ohos.contactsdataability/contacts/deleted_raw_contact"; 24 25describe('RecoveryTest', function() { 26 function sleep(numberMillis) 27 { 28 var now = new Date(); 29 var exitTime = now.getTime() + numberMillis; 30 while (true) { 31 now = new Date(); 32 if (now.getTime() > exitTime) 33 return; 34 } 35 } 36 37 async function ContactsQuery(tag, uri, size) 38 { 39 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 40 console.info(tag + ': ContactsQuery start ! dataShareHelper = ' + dataShareHelper); 41 var resultColumns = []; 42 let condition = new dataShare.DataSharePredicates(); 43 condition.greaterThan("id", "0"); 44 try { 45 var resultSet = await dataShareHelper.query(uri, resultColumns, condition); 46 console.info(tag + ' ContactsQuery resultSet.rowCount is = ' + resultSet.rowCount); 47 console.info(tag + ' ContactsQuery size is = ' + size); 48 expect(resultSet.rowCount == size).assertEqual(true); 49 if (resultSet.rowCount > 0) { 50 if (resultSet.goToFirstRow()) { 51 do { 52 var id = resultSet.getString(resultSet.getColumnIndex("id")); 53 console.info(tag + ':logMessage contactsQuery id = ' + id); 54 var name = resultSet.getString(resultSet.getColumnIndex("display_name")); 55 console.info(tag + ':logMessage contactsQuery name = ' + name); 56 } while (resultSet.goToNextRow()) 57 } 58 } 59 resultSet.close(); 60 } catch (error) { 61 console.info(tag + "logMessage ContactsQuery: error = " + error); 62 } 63 } 64 65 async function rawContactInsert(name) 66 { 67 console.info("------logMessage rawContactInsert is starting!-----"); 68 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 69 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 70 var insertValue = { 71 "display_name" : name, 72 } 73 try { 74 var rawContactId = await dataShareHelper.insert(rawContactUri, insertValue); 75 console.info('logMessage rawContactInsert: rawContactId = ' + rawContactId); 76 expect(rawContactId > 0).assertTrue(); 77 } catch (error) { 78 console.info('logMessage rawContactInsert: insert error = ' + error); 79 } 80 return rawContactId; 81 } 82 83 async function deleteRawContact(tag) 84 { 85 try { 86 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 87 let condition = new dataShare.DataSharePredicates(); 88 condition.greaterThan("id", "0"); 89 condition.and(); 90 condition.equalTo("is_deleted", "0"); 91 await dataShareHelper.delete(rawContactUri, condition); 92 sleep(5000); 93 var conditionAll = new dataShare.DataSharePredicates(); 94 conditionAll.greaterThan("id", "0"); 95 await dataShareHelper.delete(deletedUri, conditionAll); 96 } catch (error) { 97 console.info(tag + ': deleteRawContact error = ' + error); 98 } 99 } 100 101 /** 102 * @tc.number recovery_test_100 103 * @tc.name backup database 104 * @tc.desc Function test 105 */ 106 it("recovery_test_100", 0, async function(done) { 107 await deleteRawContact("recovery_test_100"); 108 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 109 var updateValues = {}; 110 let condition = new dataShare.DataSharePredicates(); 111 try { 112 var updateCode = await dataShareHelper.update(backup, updateValues, condition); 113 sleep(2000); 114 console.info('logMessage recovery_test_100: updateCode = ' + updateCode); 115 expect(updateCode == 0).assertTrue(); 116 sleep(2000); 117 await ContactsQuery("recovery_test_100", rawContactUri, 0); 118 done(); 119 } catch (error) { 120 console.info('logMessage recovery_test_100: raw_contact update error = ' + error); 121 done(); 122 } 123 }); 124 125 /** 126 * @tc.number recovery_test_200 127 * @tc.n ame recovery database 128 * @tc.desc Function test 129 */ 130 it("recovery_test_200", 0, async function(done) { 131 await deleteRawContact("recovery_test_200"); 132 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 133 var updateValues = {}; 134 let condition = new dataShare.DataSharePredicates(); 135 rawContactInsert("liming"); 136 rawContactInsert("xiaolilili"); 137 sleep(2000); 138 var updateCode = await dataShareHelper.update(backup, updateValues, condition); 139 sleep(2000); 140 console.info(' recovery_test_200: backup = ' + updateCode); 141 expect(updateCode == 0).assertTrue(); 142 sleep(1000); 143 try { 144 var updateCode = await dataShareHelper.update(recover, updateValues, condition); 145 sleep(3000); 146 console.info('logMessage recovery_test_200: recover = ' + updateCode); 147 expect(updateCode == 0).assertTrue(); 148 await ContactsQuery("recovery_test_200", rawContactUri, 2); 149 await deleteRawContact("recovery_test_200"); 150 done(); 151 } catch (error) { 152 console.info('logMessage recovery_test_200: raw_contact update error = ' + error); 153 done(); 154 } 155 }); 156});