taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 9c0fc4565460544a4f377d62bc5e18182e3ed7ca
parent 3df6d79c2a4e425eaf48d68e18e63d73b590f135
Author: Florian Dold <florian@dold.me>
Date:   Mon, 14 Jul 2025 22:19:44 +0200

harness: add test for large deposit

Diffstat:
Apackages/taler-harness/src/integrationtests/test-deposit-large.ts | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/taler-harness/src/integrationtests/testrunner.ts | 6++++--
2 files changed, 94 insertions(+), 2 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-deposit-large.ts b/packages/taler-harness/src/integrationtests/test-deposit-large.ts @@ -0,0 +1,90 @@ +/* + This file is part of GNU Taler + (C) 2024 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import { + TransactionMajorState, + TransactionMinorState, +} from "@gnu-taler/taler-util"; +import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; +import { CoinConfig } from "../harness/denomStructures.js"; +import { + createSimpleTestkudosEnvironmentV3, + withdrawViaBankV3, +} from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; + +const coinCommon = { + cipher: "RSA" as const, + durationLegal: "3 years", + durationSpend: "2 years", + durationWithdraw: "7 days", + feeDeposit: "TESTKUDOS:0", + feeRefresh: "TESTKUDOS:0", + feeRefund: "TESTKUDOS:0", + feeWithdraw: "TESTKUDOS:0", + rsaKeySize: 1024, +}; + +const coinConfigList: CoinConfig[] = [ + { + ...coinCommon, + name: "n1", + value: "TESTKUDOS:1", + }, +]; + +/** + * Test deposit with a large number of coins. + * + * In particular, this checks that the wallet properly + * splits deposits into batches with <=64 coins per batch. + * + * Since we use an artifically large number of coins, this + * test is a bit slower than other tests. + */ +export async function runDepositLargeTest(t: GlobalTestState) { + // Set up test environment + const { walletClient, bankClient, exchange } = + await createSimpleTestkudosEnvironmentV3(t, coinConfigList); + + // Withdraw digital cash into the wallet. + const withdrawRes = await withdrawViaBankV3(t, { + walletClient, + bankClient, + exchange, + amount: "TESTKUDOS:200", + }); + + await withdrawRes.withdrawalFinishedCond; + + const depositResp = await walletClient.call( + WalletApiOperation.CreateDepositGroup, + { + amount: "TESTKUDOS:100", + depositPaytoUri: withdrawRes.accountPaytoUri, + }, + ); + + await walletClient.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: depositResp.transactionId, + txState: { + major: TransactionMajorState.Finalizing, + minor: TransactionMinorState.Track, + }, + }); +} + +runDepositLargeTest.suites = ["wallet", "slow"]; diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts b/packages/taler-harness/src/integrationtests/testrunner.ts @@ -46,6 +46,7 @@ import { runCurrencyScopeTest } from "./test-currency-scope.js"; 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 { runDepositMergeTest } from "./test-deposit-merge.js"; import { runDepositTest } from "./test-deposit.js"; import { runExchangeDepositTest } from "./test-exchange-deposit.js"; @@ -71,6 +72,8 @@ import { runKycDepositAggregateTest } from "./test-kyc-deposit-aggregate.js"; import { runKycDepositDepositKyctransferTest } from "./test-kyc-deposit-deposit-kyctransfer.js"; import { runKycDepositDepositTest } from "./test-kyc-deposit-deposit.js"; import { runKycExchangeWalletTest } from "./test-kyc-exchange-wallet.js"; +import { runKycFailRecoverDoubleTest } from "./test-kyc-fail-recover-double.js"; +import { runKycFailRecoverSimpleTest } from "./test-kyc-fail-recover-simple.js"; import { runKycFormBadMeasureTest } from "./test-kyc-form-bad-measure.js"; import { runKycFormCompressionTest } from "./test-kyc-form-compression.js"; import { runKycFormWithdrawalTest } from "./test-kyc-form-withdrawal.js"; @@ -185,8 +188,6 @@ 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 { runKycFailRecoverDoubleTest } from "./test-kyc-fail-recover-double.js"; -import { runKycFailRecoverSimpleTest } from "./test-kyc-fail-recover-simple.js"; /** * Test runner. @@ -359,6 +360,7 @@ const allTests: TestMainFunction[] = [ runTopsPeerTest, runWalletExchangeMigrationTest, runKycFormCompressionTest, + runDepositLargeTest, ]; export interface TestRunSpec {