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:
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),