git.delta.rocks / unique-network / refs/commits / 9be8cddef00f

difftreelog

Wait new blocks with timeout

Max Andreev2022-10-31parent: #2a6c8a6.patch.diff
in: master

1 file changed

modifiedtests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth
383 this.helper = helper;383 this.helper = helper;
384 }384 }
385
386 sleep(milliseconds: number) {
387 return new Promise((resolve) => setTimeout(resolve, milliseconds));
388 }
389
390 private async waitWithTimeout(promise: Promise<any>, timeout: number) {
391 let isBlock = false;
392 promise.then(() => isBlock = true).catch(() => isBlock = true);
393 let totalTime = 0;
394 const step = 100;
395 while(!isBlock) {
396 console.log('Waiting...');
397 await this.sleep(step);
398 totalTime += step;
399 if(totalTime >= timeout) throw Error('Blocks production failed');
400 }
401 return promise;
402 }
385403
386 /**404 /**
387 * Wait for specified number of blocks405 * Wait for specified number of blocks
388 * @param blocksCount number of blocks to wait406 * @param blocksCount number of blocks to wait
389 * @returns 407 * @returns
390 */408 */
391 newBlocks(blocksCount = 1): Promise<void> {409 async newBlocks(blocksCount = 1, timeout?: number): Promise<void> {
410 timeout = timeout ?? blocksCount * 60_000;
392 // eslint-disable-next-line no-async-promise-executor411 // eslint-disable-next-line no-async-promise-executor
393 const promise = new Promise<void>(async (resolve) => {412 const promise = new Promise<void>(async (resolve) => {
394 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads(() => {413 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads(() => {
400 }419 }
401 });420 });
402 });421 });
422 await this.waitWithTimeout(promise, timeout);
403 return promise;423 return promise;
404 }424 }
405425
406 forParachainBlockNumber(blockNumber: bigint) {426 async forParachainBlockNumber(blockNumber: bigint, timeout?: number) {
427 timeout = timeout ?? 300_000;
407 // eslint-disable-next-line no-async-promise-executor428 // eslint-disable-next-line no-async-promise-executor
408 return new Promise<void>(async (resolve) => {429 const promise = new Promise<void>(async (resolve) => {
409 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads((data: any) => {430 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads((data: any) => {
410 if (data.number.toNumber() >= blockNumber) {431 if (data.number.toNumber() >= blockNumber) {
411 unsubscribe();432 unsubscribe();
412 resolve();433 resolve();
413 }434 }
414 });435 });
415 });436 });
437 await this.waitWithTimeout(promise, timeout);
438 return promise;
416 }439 }
417 440
418 forRelayBlockNumber(blockNumber: bigint) {441 async forRelayBlockNumber(blockNumber: bigint, timeout?: number) {
442 timeout = timeout ?? 300_000;
419 // eslint-disable-next-line no-async-promise-executor443 // eslint-disable-next-line no-async-promise-executor
420 return new Promise<void>(async (resolve) => {444 const promise = new Promise<void>(async (resolve) => {
421 const unsubscribe = await this.helper.getApi().query.parachainSystem.validationData((data: any) => {445 const unsubscribe = await this.helper.getApi().query.parachainSystem.validationData((data: any) => {
422 if (data.value.relayParentNumber.toNumber() >= blockNumber) {446 if (data.value.relayParentNumber.toNumber() >= blockNumber) {
423 // @ts-ignore447 // @ts-ignore
426 }450 }
427 });451 });
428 });452 });
453 await this.waitWithTimeout(promise, timeout);
454 return promise;
429 }455 }
430456
431 noScheduledTasks() {457 noScheduledTasks() {