aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-cli/src/harness
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-08-25 23:35:29 +0200
committerFlorian Dold <florian@dold.me>2022-08-25 23:35:29 +0200
commit70d0199572ee6a95c68dd0b960d80e4ae93c4b0a (patch)
tree56b81ba6056a91fb45cf53b5bca6626c0e007ad3 /packages/taler-wallet-cli/src/harness
parent499e003ff8bfcb75a20619c65c4a03a73cb7a850 (diff)
downloadwallet-core-70d0199572ee6a95c68dd0b960d80e4ae93c4b0a.tar.xz
integration tests: various fixes
Diffstat (limited to 'packages/taler-wallet-cli/src/harness')
-rw-r--r--packages/taler-wallet-cli/src/harness/harness.ts118
-rw-r--r--packages/taler-wallet-cli/src/harness/libeufin.ts4
2 files changed, 34 insertions, 88 deletions
diff --git a/packages/taler-wallet-cli/src/harness/harness.ts b/packages/taler-wallet-cli/src/harness/harness.ts
index 0e7238b9a..ca0ea1f2f 100644
--- a/packages/taler-wallet-cli/src/harness/harness.ts
+++ b/packages/taler-wallet-cli/src/harness/harness.ts
@@ -775,11 +775,21 @@ class LibEuFinBankService extends BankServiceBase implements BankServiceHandle {
/**
* Implementation of the bank service using the "taler-fakebank-run" tool.
*/
-class FakebankService extends BankServiceBase implements BankServiceHandle {
+export class FakebankService
+ extends BankServiceBase
+ implements BankServiceHandle
+{
proc: ProcessWrapper | undefined;
http = new NodeHttpLib();
+ // We store "created" accounts during setup and
+ // register them after startup.
+ private accounts: {
+ accountName: string;
+ accountPassword: string;
+ }[] = [];
+
static async create(
gc: GlobalTestState,
bc: BankConfig,
@@ -791,6 +801,7 @@ class FakebankService extends BankServiceBase implements BankServiceHandle {
config.setString("bank", "serve", "http");
config.setString("bank", "max_debt_bank", `${bc.currency}:999999`);
config.setString("bank", "max_debt", bc.maxDebt ?? `${bc.currency}:100`);
+ config.setString("bank", "ram_limit", `${1024}`);
const cfgFilename = gc.testDir + "/bank.conf";
config.write(cfgFilename);
@@ -798,6 +809,9 @@ class FakebankService extends BankServiceBase implements BankServiceHandle {
}
setSuggestedExchange(e: ExchangeServiceInterface, exchangePayto: string) {
+ if (!!this.proc) {
+ throw Error("Can't set suggested exchange while bank is running.");
+ }
const config = Configuration.load(this.configFile);
config.setString("bank", "suggested_exchange", e.baseUrl);
config.write(this.configFile);
@@ -816,10 +830,10 @@ class FakebankService extends BankServiceBase implements BankServiceHandle {
accountName: string,
password: string,
): Promise<HarnessExchangeBankAccount> {
- // FIXME: Is there a better place to do this initialization?
- await this.start();
- await this.pingUntilAvailable();
- await BankApi.registerAccount(this, accountName, password);
+ this.accounts.push({
+ accountName,
+ accountPassword: password,
+ });
return {
accountName: accountName,
accountPassword: password,
@@ -833,15 +847,25 @@ class FakebankService extends BankServiceBase implements BankServiceHandle {
}
async start(): Promise<void> {
+ logger.info("starting fakebank");
if (this.proc) {
logger.info("fakebank already running, not starting again");
return;
}
this.proc = this.globalTestState.spawnService(
"taler-fakebank-run",
- ["-c", this.configFile],
+ [
+ "-c",
+ this.configFile,
+ "--signup-bonus",
+ `${this.bankConfig.currency}:100`,
+ ],
"bank",
);
+ await this.pingUntilAvailable();
+ for (const acc of this.accounts) {
+ await BankApi.registerAccount(this, acc.accountName, acc.accountPassword);
+ }
}
async pingUntilAvailable(): Promise<void> {
@@ -853,86 +877,8 @@ class FakebankService extends BankServiceBase implements BankServiceHandle {
// Use libeufin bank instead of pybank.
const useLibeufinBank = false;
-/**
- * Return a euFin or a pyBank implementation of
- * the exported BankService class. This allows
- * to "dynamically export" such class depending
- * on a particular env variable.
- */
-function getBankServiceImpl(): {
- prototype: typeof FakebankService.prototype;
- create: typeof FakebankService.create;
-} {
- if (useLibeufinBank)
- return {
- prototype: LibEuFinBankService.prototype,
- create: LibEuFinBankService.create,
- };
- return {
- prototype: FakebankService.prototype,
- create: FakebankService.create,
- };
-}
-
-export type BankService = FakebankService;
-export const BankService = getBankServiceImpl();
-
-export class FakeBankService {
- proc: ProcessWrapper | undefined;
-
- static fromExistingConfig(gc: GlobalTestState): FakeBankService {
- const cfgFilename = gc.testDir + "/bank.conf";
- logger.info("reading fakebank config from", cfgFilename);
- const config = Configuration.load(cfgFilename);
- const bc: FakeBankConfig = {
- currency: config.getString("taler", "currency").required(),
- httpPort: config.getNumber("bank", "http_port").required(),
- };
- return new FakeBankService(gc, bc, cfgFilename);
- }
-
- static async create(
- gc: GlobalTestState,
- bc: FakeBankConfig,
- ): Promise<FakeBankService> {
- const config = new Configuration();
- setTalerPaths(config, gc.testDir + "/talerhome");
- config.setString("taler", "currency", bc.currency);
- config.setString("bank", "http_port", `${bc.httpPort}`);
- config.setString("bank", "ram_limit", `${1024}`);
- const cfgFilename = gc.testDir + "/bank.conf";
- config.write(cfgFilename);
- return new FakeBankService(gc, bc, cfgFilename);
- }
-
- get baseUrl(): string {
- return `http://localhost:${this.bankConfig.httpPort}/`;
- }
-
- get port() {
- return this.bankConfig.httpPort;
- }
-
- private constructor(
- private globalTestState: GlobalTestState,
- private bankConfig: FakeBankConfig,
- private configFile: string,
- ) {}
-
- async start(): Promise<void> {
- this.proc = this.globalTestState.spawnService(
- "taler-fakebank-run",
- ["-c", this.configFile],
- "fakebank",
- );
- }
-
- async pingUntilAvailable(): Promise<void> {
- // Fakebank doesn't have "/config", so we ping just "/".
- const url = `http://localhost:${this.bankConfig.httpPort}/`;
- await pingProc(this.proc, url, "bank");
- }
-}
+export type BankService = BankServiceHandle;
+export const BankService = FakebankService;
export interface ExchangeConfig {
name: string;
diff --git a/packages/taler-wallet-cli/src/harness/libeufin.ts b/packages/taler-wallet-cli/src/harness/libeufin.ts
index 7356a6273..bc210d132 100644
--- a/packages/taler-wallet-cli/src/harness/libeufin.ts
+++ b/packages/taler-wallet-cli/src/harness/libeufin.ts
@@ -691,8 +691,8 @@ export class LibeufinCli {
): Promise<void> {
const stdout = await sh(
this.globalTestState,
- "libeufin-cli-submitpayment",
- `libeufin-cli accounts submit-payment` +
+ "libeufin-cli-submitpayments",
+ `libeufin-cli accounts submit-payments` +
` --payment-uuid=${paymentUuid}` +
` ${details.nexusBankAccountName}`,
{