commit f2b3b5f28796d53b4f0445ce12abb66916dc25f0
parent c84ac97dc1de944834c3fa6b5c97e58b57ae1f25
Author: Florian Dold <florian@dold.me>
Date: Sat, 14 Feb 2026 16:43:23 +0100
harness: survive bad exit code from test worker
Diffstat:
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts b/packages/taler-harness/src/integrationtests/testrunner.ts
@@ -16,11 +16,9 @@
import {
CancellationToken,
- j2s,
Logger,
minimatch,
setGlobalLogLevelFromString,
- TalerError,
} from "@gnu-taler/taler-util";
import * as child_process from "child_process";
import { spawnSync } from "child_process";
@@ -51,9 +49,9 @@ import { runDenomLostTest } from "./test-denom-lost.js";
import { runDenomUnofferedTest } from "./test-denom-unoffered.js";
import { runDepositFaultTest } from "./test-deposit-fault.js";
import { runDepositLargeTest } from "./test-deposit-large.js";
-import { runDepositTwiceTest } from "./test-deposit-twice.js";
import { runDepositMergeTest } from "./test-deposit-merge.js";
import { runDepositTooLargeTest } from "./test-deposit-too-large.js";
+import { runDepositTwiceTest } from "./test-deposit-twice.js";
import { runDepositTest } from "./test-deposit.js";
import { runDonauCharityManagementTest } from "./test-donau-charity-management.js";
import { runDonauCompatTest } from "./test-donau-compat.js";
@@ -107,6 +105,7 @@ import { runKycWithdrawalVerbotenTest } from "./test-kyc-withdrawal-verboten.js"
import { runLibeufinBankTest } from "./test-libeufin-bank.js";
import { runLibeufinConversionTest } from "./test-libeufin-conversion.js";
import { runMerchantAcctselTest } from "./test-merchant-acctsel.js";
+import { runMerchantBankBadWireTargetTest } from "./test-merchant-bank-bad-wire-target.js";
import { runMerchantCategoriesTest } from "./test-merchant-categories.js";
import { runMerchantExchangeConfusionTest } from "./test-merchant-exchange-confusion.js";
import { runMerchantInstancesDeleteTest } from "./test-merchant-instances-delete.js";
@@ -195,6 +194,7 @@ import { runWalletNetworkAvailabilityTest } from "./test-wallet-network-availabi
import { runWalletNotificationsTest } from "./test-wallet-notifications.js";
import { runWalletObservabilityTest } from "./test-wallet-observability.js";
import { runWalletRefreshErrorsTest } from "./test-wallet-refresh-errors.js";
+import { runWalletRefreshRedenominateTest } from "./test-wallet-refresh-redenominate.js";
import { runWalletRefreshTest } from "./test-wallet-refresh.js";
import { runWalletTokensDiscountTest } from "./test-wallet-tokens-discount.js";
import { runWalletTokensTest } from "./test-wallet-tokens.js";
@@ -216,9 +216,7 @@ import { runWithdrawalHugeTest } from "./test-withdrawal-huge.js";
import { runWithdrawalIdempotentTest } from "./test-withdrawal-idempotent.js";
import { runWithdrawalManualTest } from "./test-withdrawal-manual.js";
import { runWithdrawalPrepareTest } from "./test-withdrawal-prepare.js";
-import { runMerchantBankBadWireTargetTest } from "./test-merchant-bank-bad-wire-target.js";
import { runWebMerchantLoginTest } from "./web/test-merchant-login.js";
-import { runWalletRefreshRedenominateTest } from "./test-wallet-refresh-redenominate.js";
/**
* Test runner.
@@ -703,9 +701,18 @@ export async function runTests(spec: TestRunSpec) {
name: testName,
};
currentChild.kill("SIGTERM");
+ } else if (e instanceof Error) {
+ result = {
+ status: "fail",
+ reason: `worker error: ${e.message}`,
+ timeSec: testTimeoutMs / 1000,
+ name: testName,
+ };
+ currentChild.kill("SIGTERM");
} else {
- logger.error(`test failed: ${j2s(TalerError.fromException(e))}`);
- throw Error(e);
+ currentChild.kill("SIGTERM");
+ // Should never happen
+ throw Error("test failed with strange exception");
}
}