From bc434ebb83a5985a3aa33b94310eb23d694214da Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 23 Aug 2022 22:30:05 +0200 Subject: use fakebank for integration tests --- packages/taler-wallet-cli/src/harness/harness.ts | 27 +++++++++++++++++++--- .../src/integrationtests/test-payment-on-demo.ts | 1 + packages/taler-wallet-core/src/bank-api-client.ts | 25 ++++++++++++++++---- packages/taler-wallet-core/src/dbless.ts | 1 + 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/packages/taler-wallet-cli/src/harness/harness.ts b/packages/taler-wallet-cli/src/harness/harness.ts index 33f677d94..51f0ce649 100644 --- a/packages/taler-wallet-cli/src/harness/harness.ts +++ b/packages/taler-wallet-cli/src/harness/harness.ts @@ -42,6 +42,8 @@ import { TalerProtocolDuration, } from "@gnu-taler/taler-util"; import { + BankAccessApi, + BankApi, BankServiceHandle, HarnessExchangeBankAccount, NodeHttpLib, @@ -522,11 +524,17 @@ class LibEuFinBankService extends BankServiceBase implements BankServiceHandle { return url.href; } + // FIXME: Duplicate? Where is this needed? get baseUrlAccessApi(): string { let url = new URL("access-api/", this.baseUrlDemobank); return url.href; } + get bankAccessApiBaseUrl(): string { + let url = new URL("access-api/", this.baseUrlDemobank); + return url.href; + } + get baseUrlNetloc(): string { return `http://localhost:${this.bankConfig.httpPort}/`; } @@ -796,10 +804,19 @@ class FakebankService extends BankServiceBase implements BankServiceHandle { return `http://localhost:${this.bankConfig.httpPort}/`; } + get bankAccessApiBaseUrl(): string { + let url = new URL("taler-bank-access/", this.baseUrl); + return url.href; + } + async createExchangeAccount( accountName: string, password: string, ): Promise { + // FIXME: Is there a better place to do this initialization? + await this.start(); + await this.pingUntilAvailable(); + await BankApi.registerAccount(this, accountName, password); return { accountName: accountName, accountPassword: password, @@ -813,6 +830,10 @@ class FakebankService extends BankServiceBase implements BankServiceHandle { } async start(): Promise { + if (this.proc) { + console.log("fakebank already running, not starting again"); + return; + } this.proc = this.globalTestState.spawnService( "taler-fakebank-run", ["-c", this.configFile], @@ -821,13 +842,13 @@ class FakebankService extends BankServiceBase implements BankServiceHandle { } async pingUntilAvailable(): Promise { - const url = `http://localhost:${this.bankConfig.httpPort}/config`; + const url = `http://localhost:${this.bankConfig.httpPort}/taler-bank-integration/config`; await pingProc(this.proc, url, "bank"); } } // Use libeufin bank instead of pybank. -const useLibeufinBank = true; +const useLibeufinBank = false; /** * Return a euFin or a pyBank implementation of @@ -2032,7 +2053,7 @@ export function getPayto(label: string): string { return `payto://iban/SANDBOXX/${getRandomIban( label, )}?receiver-name=${label}`; - return `payto://x-taler-bank/${label}`; + return `payto://x-taler-bank/localhost/${label}`; } function waitMs(ms: number): Promise { diff --git a/packages/taler-wallet-cli/src/integrationtests/test-payment-on-demo.ts b/packages/taler-wallet-cli/src/integrationtests/test-payment-on-demo.ts index 50a18944b..737620ce7 100644 --- a/packages/taler-wallet-cli/src/integrationtests/test-payment-on-demo.ts +++ b/packages/taler-wallet-cli/src/integrationtests/test-payment-on-demo.ts @@ -34,6 +34,7 @@ export async function runPaymentDemoTest(t: GlobalTestState) { // Withdraw digital cash into the wallet. let bankInterface: BankServiceHandle = { baseUrl: "https://bank.demo.taler.net/", + bankAccessApiBaseUrl: "https://bank.demo.taler.net/", http: new NodeHttpLib(), }; let user = await BankApi.createRandomBankUser(bankInterface); diff --git a/packages/taler-wallet-core/src/bank-api-client.ts b/packages/taler-wallet-core/src/bank-api-client.ts index a38896983..fa93409c5 100644 --- a/packages/taler-wallet-core/src/bank-api-client.ts +++ b/packages/taler-wallet-core/src/bank-api-client.ts @@ -56,6 +56,7 @@ export interface BankAccountBalanceResponse { export interface BankServiceHandle { readonly baseUrl: string; + readonly bankAccessApiBaseUrl: string; readonly http: HttpRequestLibrary; } @@ -96,12 +97,13 @@ const codecForWithdrawalOperationInfo = (): Codec => .build("WithdrawalOperationInfo"); export namespace BankApi { + // FIXME: Move to BankAccessApi?! export async function registerAccount( bank: BankServiceHandle, username: string, password: string, ): Promise { - const url = new URL("testing/register", bank.baseUrl); + const url = new URL("testing/register", bank.bankAccessApiBaseUrl); const resp = await bank.http.postJson(url.href, { username, password }); let paytoUri = `payto://x-taler-bank/localhost/${username}`; if (resp.status !== 200 && resp.status !== 202) { @@ -130,6 +132,7 @@ export namespace BankApi { }; } + // FIXME: Move to BankAccessApi?! export async function createRandomBankUser( bank: BankServiceHandle, ): Promise { @@ -177,9 +180,10 @@ export namespace BankApi { ): Promise { const url = new URL( `accounts/${bankUser.username}/withdrawals/${wopi.withdrawal_id}/confirm`, - bank.baseUrl, + bank.bankAccessApiBaseUrl, ); - await bank.http.postJson( + logger.info(`confirming withdrawal operation via ${url.href}`); + const resp = await bank.http.postJson( url.href, {}, { @@ -191,6 +195,14 @@ export namespace BankApi { }, }, ); + + logger.info(`response status ${resp.status}`); + const respJson = await readSuccessResponseJsonOrThrow( + resp, + codecForAny(), + ); + + // FIXME: We don't check the status here! } export async function abortWithdrawalOperation( @@ -222,7 +234,10 @@ export namespace BankAccessApi { bank: BankServiceHandle, bankUser: BankUser, ): Promise { - const url = new URL(`accounts/${bankUser.username}`, bank.baseUrl); + const url = new URL( + `accounts/${bankUser.username}`, + bank.bankAccessApiBaseUrl, + ); const resp = await bank.http.get(url.href, { headers: { Authorization: makeBasicAuthHeader( @@ -241,7 +256,7 @@ export namespace BankAccessApi { ): Promise { const url = new URL( `accounts/${bankUser.username}/withdrawals`, - bank.baseUrl, + bank.bankAccessApiBaseUrl, ); const resp = await bank.http.postJson( url.href, diff --git a/packages/taler-wallet-core/src/dbless.ts b/packages/taler-wallet-core/src/dbless.ts index e0fe3d1ce..9bc9c36bf 100644 --- a/packages/taler-wallet-core/src/dbless.ts +++ b/packages/taler-wallet-core/src/dbless.ts @@ -109,6 +109,7 @@ export async function topupReserveWithDemobank( ) { const bankHandle: BankServiceHandle = { baseUrl: bankBaseUrl, + bankAccessApiBaseUrl: "??", // FIXME! http, }; const bankUser = await BankApi.createRandomBankUser(bankHandle); -- cgit v1.2.3