From 8af9e5953f56547e95095640a518e1b41b41cb42 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Wed, 9 Nov 2022 06:20:48 -0500 Subject: [PATCH] tests: better error recovery on testing sending transactions --- src.ts/_tests/test-providers-send.ts | 32 ++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src.ts/_tests/test-providers-send.ts b/src.ts/_tests/test-providers-send.ts index 683cc80bd..e88d64dc1 100644 --- a/src.ts/_tests/test-providers-send.ts +++ b/src.ts/_tests/test-providers-send.ts @@ -1,9 +1,15 @@ import assert from "assert"; -import { Wallet } from "../index.js"; +import { isError, Wallet } from "../index.js"; import { getProvider, providerNames } from "./create-provider.js"; +import type { TransactionResponse } from "../index.js"; + +function stall(duration: number): Promise { + return new Promise((resolve) => { setTimeout(resolve, duration); }); +} + describe("Sends Transactions", function() { @@ -30,11 +36,25 @@ describe("Sends Transactions", function() { const dustAddr = Wallet.createRandom().address; - const tx = await w.sendTransaction({ - to: dustAddr, - value: 42, - type: 2 - }); + // Retry if another CI instance used our value + let tx: null | TransactionResponse = null; + for (let i = 0; i < 10; i++) { + try { + tx = await w.sendTransaction({ + to: dustAddr, + value: 42, + type: 2 + }); + break; + } catch (error) { + if (isError(error, "REPLACEMENT_UNDERPRICED")) { + await stall(1000); + continue; + } + throw error; + } + } + assert.ok(!!tx, "too many retries"); //const receipt = await provider.waitForTransaction(tx.hash); //tx.wait();