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_CALLLOG = "datashare:///com.ohos.calllogability"; 20const calllogUri = "datashare:///com.ohos.calllogability/calls/calllog"; 21 22const URI_VOICEMAIL = "datashare:///com.ohos.voicemailability"; 23const voicemailUri = "datashare:///com.ohos.voicemailability/calls/voicemail"; 24 25const URI_CONTACTS = "datashare:///com.ohos.contactsdataability"; 26const rawContactUri = "datashare:///com.ohos.contactsdataability/contacts/raw_contact"; 27const contactDataUri = "datashare:///com.ohos.contactsdataability/contacts/contact_data"; 28const deletedUri = "datashare:///com.ohos.contactsdataability/contacts/deleted_raw_contact"; 29 30describe('PerformanceTest', function() { 31 console.log(' PerformanceTest is start'); 32 function sleep(numberMillis) 33 { 34 var now = new Date(); 35 var exitTime = now.getTime() + numberMillis; 36 while (true) { 37 now = new Date(); 38 if (now.getTime() > exitTime) 39 return; 40 } 41 } 42 43 /** 44 * @tc.number raw_contact_insert_stability_test_900 45 * @tc.name Add 10000 pieces of data to the raw_contact table to see if they can be successfully inserted 46 * @tc.desc Function test 47 */ 48 it("raw_contact_insert_stability_test_900", 0, async function(done) { 49 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 50 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 51 var listAddBluk = []; 52 for (var i = 0; i < 1000; i++) { 53 var add = {"display_name" : "xiaoli" + i, "company" : "testCompany" + i, "position" : "testPosition" + i}; 54 listAddBluk[i] = add; 55 } 56 try { 57 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 58 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 59 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 60 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 61 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 62 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 63 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 64 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 65 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 66 var batchInsertCode = await dataShareHelper.batchInsert(rawContactUri, listAddBluk); 67 sleep(1000); 68 console.info("logMessage raw_contact_insert_stability_test_900: contactDataId1 = " + batchInsertCode); 69 expect(batchInsertCode == 0).assertTrue(); 70 done(); 71 } catch (error) { 72 console.info('logMessage raw_contact_insert_stability_test_900: insert error = ' + error); 73 done(); 74 } 75 }); 76 77 /** 78 * @tc.number raw_contact_update_stability_test_1000 79 * @tc.name The raw_contact table updates the data whose ID is not equal to 0 to see whether they can be updated 80 * successfully 81 * @tc.desc Function test 82 */ 83 it("raw_contact_update_stability_test_1000", 0, async function(done) { 84 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 85 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 86 var updateValues = {"favorite" : 1}; 87 let condition = new dataShare.DataSharePredicates(); 88 condition.greaterThan("id", "0"); 89 condition.and(); 90 condition.equalTo("is_deleted", "0"); 91 try { 92 var updateCode = await dataShareHelper.update(rawContactUri, updateValues, condition); 93 sleep(1000); 94 console.info("logMessage raw_contact_update_stability_test_1000: updateCode = " + updateCode); 95 expect(updateCode == 0).assertTrue(); 96 done(); 97 } catch (error) { 98 console.info("logMessage raw_contact_update_stability_test_1000: update error = " + error); 99 done(); 100 } 101 }); 102 103 /** 104 * @tc.number raw_contact_query_stability_test_1100 105 * @tc.name The raw_contact table queries 10000 pieces of data to see whether they can be queried successfully 106 * @tc.desc Function test 107 */ 108 it("raw_contact_query_stability_test_1100", 0, async function(done) { 109 var tag = "raw_contact_query_stability_test_1100"; 110 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 111 console.info(tag + ': start ! dataShareHelper = ' + dataShareHelper); 112 var resultColumns = ["id"]; 113 let condition = new dataShare.DataSharePredicates(); 114 condition.greaterThan("id", "0"); 115 condition.and(); 116 condition.equalTo("is_deleted", "0"); 117 try { 118 var resultSet = await dataShareHelper.query(rawContactUri, resultColumns, condition); 119 sleep(1000); 120 console.info(tag + ' : logMessage : rowCount' + resultSet.rowCount); 121 expect(resultSet.rowCount == 10000).assertTrue(); 122 resultSet.close(); 123 done(); 124 } catch (error) { 125 console.info(tag + " :logMessage : error = " + error); 126 done(); 127 } 128 }); 129 130 /** 131 * @tc.number raw_contact_delete_stability_test_1200 132 * @tc.name Delete 10000 pieces of data in raw_contact table to see if they can be deleted successfully 133 * @tc.desc Function test 134 */ 135 it("raw_contact_delete_stability_test_1200", 0, async function(done) { 136 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 137 console.info('raw_contact_delete_stability_test_1200 : start ! dataShareHelper = ' + dataShareHelper); 138 let condition = new dataShare.DataSharePredicates(); 139 condition.greaterThan("id", "0"); 140 condition.and(); 141 condition.equalTo("is_deleted", "0"); 142 try { 143 var deleteCode = await dataShareHelper.delete(rawContactUri, condition); 144 sleep(1000); 145 console.info("logMessage raw_contact_delete_stability_test_1200: deleteCode = " + deleteCode); 146 expect(deleteCode == 0).assertTrue(); 147 done(); 148 } catch (error) { 149 console.info('logMessage raw_contact_delete_stability_test_1200: delete error = ' + error); 150 done(); 151 } 152 }); 153 154 /** 155 * @tc.number contact_data_insert_stability_test_1300 156 * @tc.name Add 10000 pieces of data to the contact_data table to see if they can be successfully inserted 157 * @tc.desc Function test 158 */ 159 it("contact_data_insert_stability_test_1300", 0, async function(done) { 160 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 161 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 162 163 var rawContactValues = { 164 "display_name" : "xiaoli", 165 }; 166 try { 167 var rawContactId = await dataShareHelper.insert(rawContactUri, rawContactValues); 168 sleep(1000); 169 console.info("logMessage contact_data_insert_stability_test_1300: rawContactId = " + rawContactId); 170 } catch (error) { 171 console.info("logMessage contact_data_insert_stability_test_1300: raw_contact insert error = " + error); 172 } 173 174 let condition = new dataShare.DataSharePredicates(); 175 condition.equalTo("id", rawContactId.toString()); 176 var deleteCode = await dataShareHelper.delete(rawContactUri, condition); 177 sleep(1000); 178 console.info("logMessage contact_data_insert_stability_test_1300: deleteCode = " + deleteCode); 179 180 var listAddBluk = []; 181 for (var i = 0; i < 1000; i++) { 182 var add = {"raw_contact_id" : rawContactId, "detail_info" : "xxx" + i, "content_type" : "name"}; 183 listAddBluk[i] = add; 184 } 185 try { 186 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 187 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 188 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 189 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 190 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 191 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 192 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 193 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 194 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 195 var batchInsertCode = await dataShareHelper.batchInsert(contactDataUri, listAddBluk); 196 sleep(2000); 197 console.info("logMessage contact_data_insert_stability_test_1300: batchInsertCode = " + batchInsertCode); 198 expect(batchInsertCode == 0).assertTrue(); 199 done(); 200 } catch (error) { 201 console.info('logMessage contact_data_insert_stability_test_1300: insert error = ' + error); 202 done(); 203 } 204 }); 205 206 /** 207 * @tc.number contact_data_update_stability_test_1400 208 * @tc.name The contact_data table updates the data whose ID is not equal to 0 to see whether they can be updated 209 * successfully 210 * @tc.desc Function test 211 */ 212 it("contact_data_update_stability_test_1400", 0, async function(done) { 213 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 214 console.info('logMessage contact_data_update_stability_test_1400 dataShareHelper success! dataShareHelper = ' + dataShareHelper); 215 var updateValues = {"syn_1" : "test"}; 216 let condition = new dataShare.DataSharePredicates(); 217 condition.greaterThan("id", "0"); 218 try { 219 var updateCode = await dataShareHelper.update(contactDataUri, updateValues, condition); 220 sleep(2000); 221 console.info("logMessage contact_data_update_stability_test_1400: updateCode = " + updateCode); 222 expect(updateCode == 0).assertTrue(); 223 done(); 224 } catch (error) { 225 console.info("logMessage contact_data_update_stability_test_1400: update error = " + error); 226 done(); 227 } 228 }); 229 230 /** 231 * @tc.number contact_data_query_stability_test_1500 232 * @tc.name The contact_data table queries 10000 pieces of data to see whether they can be queried successfully 233 * @tc.desc Function test 234 */ 235 it("contact_data_query_stability_test_1500", 0, async function(done) { 236 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 237 console.info('contact_data_query_stability_test_1500 start ! dataShareHelper = ' + dataShareHelper); 238 var resultColumns = ["id"]; 239 let condition = new dataShare.DataSharePredicates(); 240 condition.greaterThan("id", "0"); 241 try { 242 var resultSet = await dataShareHelper.query(contactDataUri, resultColumns, condition); 243 sleep(2000); 244 console.info(' contact_data_query_stability_test_1500 : resultSet.rowCount = ' + resultSet.rowCount); 245 expect(resultSet.rowCount == 10000).assertEqual(true); 246 resultSet.close(); 247 done(); 248 } catch (error) { 249 console.info("logMessage contact_data_query_stability_test_1500: error = " + error); 250 done(); 251 } 252 }); 253 254 /** 255 * @tc.number contact_data_delete_stability_test_1600 256 * @tc.name Delete 10000 pieces of data in contact_data table to see if they can be deleted successfully 257 * @tc.desc Function test 258 */ 259 it("contact_data_delete_stability_test_1600", 0, async function(done) { 260 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 261 console.info('contact_data_delete_stability_test_1600 : start ! dataShareHelper = ' + dataShareHelper); 262 let condition = new dataShare.DataSharePredicates(); 263 condition.greaterThan("id", "0"); 264 try { 265 var deleteCode = await dataShareHelper.delete(contactDataUri, condition); 266 sleep(2000); 267 console.info("logMessage contact_data_delete_stability_test_1600: deleteCode = " + deleteCode); 268 expect(deleteCode == 0).assertTrue(); 269 done(); 270 } catch (error) { 271 console.info('logMessage contact_data_delete_stability_test_1600: delete error = ' + error); 272 done(); 273 } 274 }); 275 276 /** 277 * @tc.number calllog_insert_stability_test_100 278 * @tc.name Add 10000 pieces of data to the callog table to see if they can be successfully inserted 279 * @tc.desc Function test 280 */ 281 it("calllog_insert_stability_test_100", 0, async function(done) { 282 console.info("---------logMessage calllog_insert_stability_test_100 is starting!----------"); 283 let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG); 284 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 285 var listAddBluk = []; 286 var phoneNumber = randomNum(6); 287 for (var i = 0; i < 1000; i++) { 288 var add = {"phone_number" : phoneNumber + i}; 289 listAddBluk[i] = add; 290 } 291 try { 292 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 293 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 294 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 295 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 296 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 297 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 298 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 299 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 300 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 301 var batchInsertCode = await dataShareHelper.batchInsert(calllogUri, listAddBluk); 302 sleep(1000); 303 console.info("logMessage calllog_insert_stability_test_100: batchInsertCode = " + batchInsertCode); 304 expect(batchInsertCode == 0).assertTrue(); 305 done(); 306 } catch (error) { 307 console.info("logMessage calllog_insert_stability_test_100: batchInsert error = " + error); 308 done(); 309 } 310 }); 311 312 /** 313 * @tc.number calllog_update_stability_test_200 314 * @tc.name The callog table updates the data whose ID is not equal to 0 to see whether they can be updated 315 * successfully 316 * @tc.desc Function test 317 */ 318 it("calllog_update_stability_test_200", 0, async function(done) { 319 let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG); 320 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 321 var updateValues = {"answer_state" : "1"}; 322 try { 323 let condition = new dataShare.DataSharePredicates(); 324 condition.greaterThan("id", "0"); 325 var updateCode = await dataShareHelper.update(calllogUri, updateValues, condition); 326 sleep(1000); 327 console.info("logMessage calllog_update_stability_test_200: updateCode = " + updateCode); 328 expect(updateCode == 0).assertTrue(); 329 done(); 330 } catch (error) { 331 console.info("logMessage calllog_update_stability_test_200: update error = " + error); 332 done(); 333 } 334 }); 335 336 /** 337 * @tc.number calllog_query_stability_test_300 338 * @tc.name The callog table queries 10000 pieces of data to see whether they can be queried successfully 339 * @tc.desc Function test 340 */ 341 it("calllog_query_stability_test_300", 0, async function(done) { 342 var tag = "calllog_query_stability_test_300"; 343 let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG); 344 console.info(tag + ': start ! dataShareHelper = ' + dataShareHelper); 345 var resultColumns = ["id"]; 346 let condition = new dataShare.DataSharePredicates(); 347 condition.notEqualTo("id", 0); 348 349 try { 350 let resultSet = await dataShareHelper.query(calllogUri, resultColumns, condition); 351 sleep(5000); 352 console.info(tag + ' : logMessage : rowCount' + resultSet.rowCount); 353 expect(resultSet.rowCount == 10000).assertTrue(); 354 resultSet.close(); 355 done(); 356 } catch (error) { 357 console.info("logMessage calllog_query_stability_test_300: error = " + error); 358 done() 359 } 360 }); 361 362 /** 363 * @tc.number calllog_delete_stability_test_400 364 * @tc.name Delete 10000 pieces of data in callog table to see if they can be deleted successfully 365 * @tc.desc Function test 366 */ 367 it("calllog_delete_stability_test_400", 0, async function(done) { 368 var tag = "calllog_delete_stability_test_400"; 369 let dataShareHelper = dataShare.createDataShareHelper(URI_CALLLOG); 370 console.info(tag + ': start ! dataShareHelper = ' + dataShareHelper); 371 let condition = new dataShare.DataSharePredicates(); 372 condition.greaterThan("id", "0"); 373 var deleteCode = await dataShareHelper.delete(calllogUri, condition); 374 sleep(5000); 375 console.info(tag + " : logMessage : deleteCode = " + deleteCode); 376 expect(deleteCode == 0).assertTrue(); 377 done(); 378 }); 379 380 /** 381 * @tc.number voicemail_insert_stability_test_500 382 * @tc.name Add 10000 pieces of data to the voicemail table to see if they can be successfully inserted 383 * @tc.desc Function test 384 */ 385 it("voicemail_insert_stability_test_500", 0, async function(done) { 386 console.info("---------logMessage voicemail_insert_stability_test_500 is starting!----------"); 387 let dataShareHelper = dataShare.createDataShareHelper(URI_VOICEMAIL); 388 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 389 390 var listAddBluk = []; 391 var phoneNumber = randomNum(4); 392 for (var i = 0; i < 1000; i++) { 393 var add = {"phone_number" : phoneNumber + i}; 394 listAddBluk[i] = add; 395 } 396 try { 397 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 398 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 399 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 400 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 401 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 402 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 403 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 404 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 405 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 406 var batchInsertCode = await dataShareHelper.batchInsert(voicemailUri, listAddBluk); 407 sleep(1000); 408 console.info("logMessage voicemail_insert_stability_test_500: batchInsertCode = " + batchInsertCode); 409 expect(batchInsertCode == 0).assertTrue(); 410 done(); 411 } catch (error) { 412 console.info("logMessage voicemail_insert_stability_test_500: batchInsert error = " + error); 413 done(); 414 } 415 }); 416 417 /** 418 * @tc.number voicemail_update_stability_test_600 419 * @tc.name The voicemail table updates the data whose ID is not equal to 0 to see whether they can be updated 420 * successfully 421 * @tc.desc Function test 422 */ 423 it("voicemail_update_stability_test_600", 0, async function(done) { 424 let dataShareHelper = dataShare.createDataShareHelper(URI_VOICEMAIL); 425 console.info('logMessage get dataShareHelper success! dataShareHelper = ' + dataShareHelper); 426 var updateValues = {"origin_type" : "test"}; 427 try { 428 let condition = new dataShare.DataSharePredicates(); 429 condition.notEqualTo("id", 0); 430 var updateCode = await dataShareHelper.update(voicemailUri, updateValues, condition); 431 sleep(1000); 432 console.info("logMessage voicemail_update_stability_test_600: updateCode = " + updateCode); 433 expect(updateCode == 0).assertTrue(); 434 done(); 435 } catch (error) { 436 console.info("logMessage voicemail_update_stability_test_600: update error = " + error); 437 done(); 438 } 439 }); 440 441 /** 442 * @tc.number voicemail_query_stability_test_700 443 * @tc.name The voicemail table queries 10000 pieces of data to see whether they can be queried successfully 444 * @tc.desc Function test 445 */ 446 it("voicemail_query_stability_test_700", 0, async function(done) { 447 var tag = "voicemail_query_stability_test_700"; 448 let dataShareHelper = dataShare.createDataShareHelper(URI_VOICEMAIL); 449 console.info(tag + ': start ! dataShareHelper = ' + dataShareHelper); 450 var resultColumns = ["id"]; 451 let condition = new dataShare.DataSharePredicates(); 452 condition.greaterThan("id", "0"); 453 try { 454 var resultSet = await dataShareHelper.query(voicemailUri, resultColumns, condition); 455 sleep(1000); 456 console.info(tag + ' : resultSet.rowCount = ' + resultSet.rowCount); 457 expect(resultSet.rowCount == 10000).assertEqual(true); 458 resultSet.close(); 459 done(); 460 } catch (error) { 461 console.info("logMessage voicemail_query_stability_test_700: error = " + error); 462 done() 463 } 464 }); 465 466 /** 467 * @tc.number voicemail_delete_stability_test_800 468 * @tc.name Delete 10000 pieces of data in voicemail table to see if they can be deleted successfully 469 * @tc.desc Function test 470 */ 471 it("voicemail_delete_stability_test_800", 0, async function(done) { 472 var tag = "voicemail_delete_stability_test_800"; 473 let dataShareHelper = dataShare.createDataShareHelper(URI_VOICEMAIL); 474 console.info(tag + ': start ! dataShareHelper = ' + dataShareHelper); 475 let condition = new dataShare.DataSharePredicates(); 476 condition.greaterThan("id", "0"); 477 try { 478 var deleteCode = await dataShareHelper.delete(voicemailUri, condition); 479 sleep(2000); 480 console.info(tag + " : logMessage : deleteCode = " + deleteCode); 481 expect(deleteCode == 0).assertTrue(); 482 done(); 483 } catch (error) { 484 console.info("logMessage voicemail_delete_stability_test_800: error = " + error); 485 done(); 486 } 487 }); 488 489 afterAll(async function() { 490 let dataShareHelper = dataShare.createDataShareHelper(URI_CONTACTS); 491 console.info('Stability : start ! dataShareHelper = ' + dataShareHelper); 492 let condition = new dataShare.DataSharePredicates(); 493 condition.notEqualTo("id", "0"); 494 try { 495 var resultColumns = [ "id" ]; 496 var conditionDelete = new dataShare.DataSharePredicates(); 497 conditionDelete.greaterThan("id", "0"); 498 var count = 0; 499 var deleteCount = 9999; 500 while (count < deleteCount) { 501 var result = await dataShareHelper.query(deletedUri, resultColumns, conditionDelete); 502 console.info("Stability : result.rowCount = " + result.rowCount); 503 count = result.rowCount; 504 result.close(); 505 sleep(5000); 506 } 507 var deleteCode = await dataShareHelper.delete(deletedUri, condition); 508 console.info("Stability afterAll logMessage DeleteContact: deleteCode = " + deleteCode); 509 } catch (error) { 510 console.info('Stability afterAll logMessage DeleteContact: delete error = ' + error); 511 } 512 }); 513}) 514 515function randomNum (num) { 516 let number = toString(Math.floor(Math.random() * (9 * Math.pow(10, num))) + (1 * Math.pow(10, num))); 517 return number ; 518} 519