From 557213f9c4fd834fadb189799073dc64cdb00a07 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 30 Aug 2023 09:54:47 +0200 Subject: wallet-core,harness: get p2p tests to pass again --- .../taler-wallet-core/src/operations/testing.ts | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'packages/taler-wallet-core/src/operations') diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts index aff92622a..1962c965c 100644 --- a/packages/taler-wallet-core/src/operations/testing.ts +++ b/packages/taler-wallet-core/src/operations/testing.ts @@ -29,6 +29,7 @@ import { TestPayResult, TransactionMajorState, TransactionMinorState, + TransactionType, WithdrawTestBalanceRequest, } from "@gnu-taler/taler-util"; import { @@ -498,6 +499,59 @@ export async function waitUntilDone(ws: InternalWalletState): Promise { logger.info("done waiting until all transactions are in a final state"); } +export async function waitUntilRefreshesDone( + ws: InternalWalletState, +): Promise { + logger.info("waiting until all refresh transactions are in a final state"); + ws.ensureTaskLoopRunning(); + let p: OpenedPromise | undefined = undefined; + const cancelNotifs = ws.addNotificationListener((notif) => { + if (!p) { + return; + } + if (notif.type === NotificationType.TransactionStateTransition) { + switch (notif.newTxState.major) { + case TransactionMajorState.Pending: + case TransactionMajorState.Aborting: + break; + default: + p.resolve(); + } + } + }); + while (1) { + p = openPromise(); + const txs = await getTransactions(ws, { + includeRefreshes: true, + filterByState: "nonfinal", + }); + let finished = true; + for (const tx of txs.transactions) { + if (tx.type !== TransactionType.Refresh) { + continue; + } + switch (tx.txState.major) { + case TransactionMajorState.Pending: + case TransactionMajorState.Aborting: + case TransactionMajorState.Suspended: + case TransactionMajorState.SuspendedAborting: + finished = false; + logger.info( + `continuing waiting, ${tx.transactionId} in ${tx.txState.major}(${tx.txState.minor})`, + ); + break; + } + } + if (finished) { + break; + } + // Wait until transaction state changed + await p.promise; + } + cancelNotifs(); + logger.info("done waiting until all refreshes are in a final state"); +} + async function waitUntilPendingReady( ws: InternalWalletState, transactionId: string, -- cgit v1.2.3