git.delta.rocks / unique-network / refs/commits / c6880a4e70ee

difftreelog

Hide unneeded websocker errors

Greg Zaitsev2021-02-11parent: #cb095c7.patch.diff
in: master

1 file changed

modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
before · tests/src/substrate/substrate-api.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from "@polkadot/api";7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from "@polkadot/types/types";1011import config from "../config";12import promisifySubstrate from "./promisify-substrate";13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";14import rtt from "../../../runtime_types.json";1516function defaultApiOptions(): ApiOptions {17  const wsProvider = new WsProvider(config.substrateUrl);18  return { provider: wsProvider, types: rtt };19}2021export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {22  settings = settings || defaultApiOptions();23  let api: ApiPromise = new ApiPromise(settings);2425  try {26    await promisifySubstrate(api, async () => {27      if(api) {28        await api.isReadyOrError;29        await action(api);30      }31    })();32  } finally {33    await api.disconnect();34  }35}3637enum TransactionStatus {38  Success,39  Fail,40  NotReady41}4243function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {44  if (status.isReady) {45    return TransactionStatus.NotReady;46  }47  if (status.isBroadcast) {48    return TransactionStatus.NotReady;49  } 50  if (status.isInBlock || status.isFinalized) {51    if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {52      return TransactionStatus.Fail;53    }54    if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {55      return TransactionStatus.Success;56    }57  }5859  return TransactionStatus.Fail;60}6162export function63submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {64  return new Promise(async (resolve, reject) => {65    try {66      await transaction.signAndSend(sender, ({ events = [], status }) => {67        const transactionStatus = getTransactionStatus(events, status);6869        if (transactionStatus === TransactionStatus.Success) {70          resolve(events);71        } else if (transactionStatus === TransactionStatus.Fail) {72          console.log(`Something went wrong with transaction. Status: ${status}`);73          reject(events);74        }75      });76    } catch (e) {77      console.log('Error: ', e);78      reject(e);79    }80  });81}8283export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {84  const consoleError = console.error;85  const consoleLog = console.log;86  console.error = () => {};87  console.log = () => {};8889  return new Promise<EventRecord[]>(async function(res, rej) {90    const resolve = (rec: EventRecord[]) => {91      setTimeout(() => {92        res(rec);93        console.error = consoleError;94        console.log = consoleLog;95      });96    };97    const reject = (errror: any) => {98      setTimeout(() => {99        rej(errror);100        console.error = consoleError;101        console.log = consoleLog;102      });103    };104    try {105      await transaction.signAndSend(sender, ({ events = [], status }) => {106        const transactionStatus = getTransactionStatus(events, status);107108        // console.log('transactionStatus', transactionStatus, 'events', events);109110        if (transactionStatus === TransactionStatus.Success) {111          resolve(events);112        } else if (transactionStatus === TransactionStatus.Fail) {113          reject(events);114        }115      });116    } catch (e) {117      reject(e);118    }119  });120}
after · tests/src/substrate/substrate-api.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from "@polkadot/api";7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from "@polkadot/types/types";1011import config from "../config";12import promisifySubstrate from "./promisify-substrate";13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";14import rtt from "../../../runtime_types.json";1516function defaultApiOptions(): ApiOptions {17  const wsProvider = new WsProvider(config.substrateUrl);18  return { provider: wsProvider, types: rtt };19}2021export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {22  settings = settings || defaultApiOptions();23  let api: ApiPromise = new ApiPromise(settings);2425  // TODO: Remove, this is temporary: Filter unneeded API output 26  // (Jaco promised it will be removed in the next version)27  const consoleErr = console.error;28  console.error = (message: string) => {29    if (message.includes("StorageChangeSet:: WebSocket is not connected") || message.includes("2021-")) {}30    else consoleErr(message);31  };3233  try {34    await promisifySubstrate(api, async () => {35      if(api) {36        await api.isReadyOrError;37        await action(api);38      }39    })();40  } finally {41    await api.disconnect();42    console.error = consoleErr;43  }44}4546enum TransactionStatus {47  Success,48  Fail,49  NotReady50}5152function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {53  if (status.isReady) {54    return TransactionStatus.NotReady;55  }56  if (status.isBroadcast) {57    return TransactionStatus.NotReady;58  } 59  if (status.isInBlock || status.isFinalized) {60    if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {61      return TransactionStatus.Fail;62    }63    if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {64      return TransactionStatus.Success;65    }66  }6768  return TransactionStatus.Fail;69}7071export function72submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {73  return new Promise(async (resolve, reject) => {74    try {75      await transaction.signAndSend(sender, ({ events = [], status }) => {76        const transactionStatus = getTransactionStatus(events, status);7778        if (transactionStatus === TransactionStatus.Success) {79          resolve(events);80        } else if (transactionStatus === TransactionStatus.Fail) {81          console.log(`Something went wrong with transaction. Status: ${status}`);82          reject(events);83        }84      });85    } catch (e) {86      console.log('Error: ', e);87      reject(e);88    }89  });90}9192export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {93  const consoleError = console.error;94  const consoleLog = console.log;95  console.error = () => {};96  console.log = () => {};9798  return new Promise<EventRecord[]>(async function(res, rej) {99    const resolve = (rec: EventRecord[]) => {100      setTimeout(() => {101        res(rec);102        console.error = consoleError;103        console.log = consoleLog;104      });105    };106    const reject = (errror: any) => {107      setTimeout(() => {108        rej(errror);109        console.error = consoleError;110        console.log = consoleLog;111      });112    };113    try {114      await transaction.signAndSend(sender, ({ events = [], status }) => {115        const transactionStatus = getTransactionStatus(events, status);116117        // console.log('transactionStatus', transactionStatus, 'events', events);118119        if (transactionStatus === TransactionStatus.Success) {120          resolve(events);121        } else if (transactionStatus === TransactionStatus.Fail) {122          reject(events);123        }124      });125    } catch (e) {126      reject(e);127    }128  });129}