taler-typescript-core

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

commit 6f07e1d0a05365e071e6f788abd24b89943a5c99
parent e1df85697f5070a29df09cae2b8f9bfde2630af3
Author: Florian Dold <florian@dold.me>
Date:   Mon, 26 May 2025 11:59:46 +0200

harness: use aml_freq options instead of time-travel

Issue: https://bugs.taler.net/n/9892

Diffstat:
Mpackages/taler-harness/src/harness/environments.ts | 15+++++++++++----
Mpackages/taler-harness/src/harness/harness.ts | 16++++++++++++++++
Mpackages/taler-harness/src/integrationtests/test-kyc-merchant-deposit-rewrite.ts | 23++++++++---------------
3 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/packages/taler-harness/src/harness/environments.ts b/packages/taler-harness/src/harness/environments.ts @@ -1085,6 +1085,7 @@ export interface KycEnvOptions { coinConfig?: CoinConfig[]; onWalletNotification?: (n: WalletNotification) => void; adjustExchangeConfig?(config: Configuration): void; + adjustMerchantConfig?(config: Configuration): void; } export interface KycTestEnv { @@ -1214,6 +1215,13 @@ export async function createKycTestkudosEnvironment( merchant.addExchange(exchange); + const adjustMerchantConfig = opts.adjustMerchantConfig; + if (adjustMerchantConfig) { + await merchant.modifyConfig(async (config) => { + adjustMerchantConfig(config); + }); + } + await merchant.start(); await merchant.addInstanceWithWireAccount({ @@ -1264,10 +1272,9 @@ export async function createKycTestkudosEnvironment( harnessHttpLib, ); - const exchangeApi = new TalerExchangeHttpClient( - exchange.baseUrl, - { httpClient: harnessHttpLib } - ); + const exchangeApi = new TalerExchangeHttpClient(exchange.baseUrl, { + httpClient: harnessHttpLib, + }); return { commonDb: db, diff --git a/packages/taler-harness/src/harness/harness.ts b/packages/taler-harness/src/harness/harness.ts @@ -2063,6 +2063,22 @@ export class MerchantService implements MerchantServiceInterface { return new MerchantService(gc, mc, cfgFilename); } + /** + * Run a function that modifies the existing exchange configuration. + * The modified exchange configuration will then be written to the + * file system. + */ + async modifyConfig( + f: (config: Configuration) => Promise<void>, + ): Promise<void> { + const config = Configuration.load( + this.configFilename, + ConfigSources["taler-merchant"], + ); + await f(config); + config.writeTo(this.configFilename, { excludeDefaults: true }); + } + addExchange(e: ExchangeServiceInterface): void { const config = Configuration.load( this.configFilename, diff --git a/packages/taler-harness/src/integrationtests/test-kyc-merchant-deposit-rewrite.ts b/packages/taler-harness/src/integrationtests/test-kyc-merchant-deposit-rewrite.ts @@ -19,7 +19,6 @@ */ import { Configuration, - Duration, encodeCrock, hashNormalizedPaytoUri, j2s, @@ -66,12 +65,17 @@ function adjustExchangeConfig(config: Configuration) { config.setString("KYC-CHECK-C1", "fallback", "FREEZE"); } +function adjustMerchantConfig(config: Configuration) { + config.setString("merchant-kyccheck", "aml_freq", "2s"); + config.setString("merchant-kyccheck", "aml_low_freq", "5s"); +} + // FIXME: This is not very readable, replace it with "retryUntilTrue". async function retryUntil<T, X extends T>( fx: () => Promise<T>, condition: (x: T, i: number) => boolean, - maxRetry: number = 10, - waitMs: number = 500, + maxRetry: number = 15, + waitMs: number = 1000, ): Promise<X> { let i = 0; let x = await fx(); @@ -107,6 +111,7 @@ export async function runKycMerchantDepositRewriteTest(t: GlobalTestState) { exchangeApi, } = await createKycTestkudosEnvironment(t, { adjustExchangeConfig, + adjustMerchantConfig, }); let exchangeWireTarget: string | undefined; @@ -114,10 +119,6 @@ export async function runKycMerchantDepositRewriteTest(t: GlobalTestState) { { const kycStatus = await retryUntil( async () => { - logger.info("running kyccheck"); - await merchant.runKyccheckOnce(); - logger.info("done running kyccheck"); - await merchant.runDepositcheckOnce(); return succeedOrThrow<MerchantAccountKycRedirectsResponse | void>( await merchantApi.getCurrentInstanceKycStatus(undefined), ); @@ -236,17 +237,9 @@ export async function runKycMerchantDepositRewriteTest(t: GlobalTestState) { paytoHash: merchantAmlAccount, }); - await merchant.stop(); - merchant.setTimetravel( - Duration.toMilliseconds(Duration.fromSpec({ days: 7 })), - ); - await merchant.start(); - { const kycStatus = await retryUntil( async () => { - await merchant.runKyccheckOnce(); - await merchant.runDepositcheckOnce(); // Now we can check the status return succeedOrThrow<MerchantAccountKycRedirectsResponse | void>( await merchantApi.getCurrentInstanceKycStatus(undefined),