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