diff options
Diffstat (limited to 'packages/taler-wallet-cli/src/harness')
-rw-r--r-- | packages/taler-wallet-cli/src/harness/harness.ts | 86 | ||||
-rw-r--r-- | packages/taler-wallet-cli/src/harness/libeufin.ts | 43 |
2 files changed, 56 insertions, 73 deletions
diff --git a/packages/taler-wallet-cli/src/harness/harness.ts b/packages/taler-wallet-cli/src/harness/harness.ts index 3b58219bb..c735c9956 100644 --- a/packages/taler-wallet-cli/src/harness/harness.ts +++ b/packages/taler-wallet-cli/src/harness/harness.ts @@ -70,7 +70,7 @@ import { TipCreateConfirmation, TipCreateRequest, TippingReserveStatus, -} from "./merchantApiTypes"; +} from "./merchantApiTypes.js"; const exec = util.promisify(require("child_process").exec); @@ -478,14 +478,14 @@ class BankServiceBase { protected globalTestState: GlobalTestState, protected bankConfig: BankConfig, protected configFile: string, - ) { } + ) {} } /** * Work in progress. The key point is that both Sandbox and Nexus * will be configured and started by this class. */ -class EufinBankService extends BankServiceBase implements BankServiceHandle { +class LibEuFinBankService extends BankServiceBase implements BankServiceHandle { sandboxProc: ProcessWrapper | undefined; nexusProc: ProcessWrapper | undefined; @@ -494,8 +494,8 @@ class EufinBankService extends BankServiceBase implements BankServiceHandle { static async create( gc: GlobalTestState, bc: BankConfig, - ): Promise<EufinBankService> { - return new EufinBankService(gc, bc, "foo"); + ): Promise<LibEuFinBankService> { + return new LibEuFinBankService(gc, bc, "foo"); } get port() { @@ -761,7 +761,10 @@ class EufinBankService extends BankServiceBase implements BankServiceHandle { } } -class PybankService extends BankServiceBase implements BankServiceHandle { +/** + * Implementation of the bank service using the "taler-fakebank-run" tool. + */ +class FakebankService extends BankServiceBase implements BankServiceHandle { proc: ProcessWrapper | undefined; http = new NodeHttpLib(); @@ -769,41 +772,23 @@ class PybankService extends BankServiceBase implements BankServiceHandle { static async create( gc: GlobalTestState, bc: BankConfig, - ): Promise<PybankService> { + ): Promise<FakebankService> { const config = new Configuration(); setTalerPaths(config, gc.testDir + "/talerhome"); config.setString("taler", "currency", bc.currency); - config.setString("bank", "database", bc.database); config.setString("bank", "http_port", `${bc.httpPort}`); 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", - "allow_registrations", - bc.allowRegistrations ? "yes" : "no", - ); const cfgFilename = gc.testDir + "/bank.conf"; config.write(cfgFilename); - await sh( - gc, - "taler-bank-manage_django", - `taler-bank-manage -c '${cfgFilename}' django migrate`, - ); - await sh( - gc, - "taler-bank-manage_django", - `taler-bank-manage -c '${cfgFilename}' django provide_accounts`, - ); - - return new PybankService(gc, bc, cfgFilename); + return new FakebankService(gc, bc, cfgFilename); } setSuggestedExchange(e: ExchangeServiceInterface, exchangePayto: string) { const config = Configuration.load(this.configFile); config.setString("bank", "suggested_exchange", e.baseUrl); - config.setString("bank", "suggested_exchange_payto", exchangePayto); config.write(this.configFile); } @@ -815,21 +800,6 @@ class PybankService extends BankServiceBase implements BankServiceHandle { accountName: string, password: string, ): Promise<HarnessExchangeBankAccount> { - await sh( - this.globalTestState, - "taler-bank-manage_django", - `taler-bank-manage -c '${this.configFile}' django add_bank_account ${accountName}`, - ); - await sh( - this.globalTestState, - "taler-bank-manage_django", - `taler-bank-manage -c '${this.configFile}' django changepassword_unsafe ${accountName} ${password}`, - ); - await sh( - this.globalTestState, - "taler-bank-manage_django", - `taler-bank-manage -c '${this.configFile}' django top_up ${accountName} ${this.bankConfig.currency}:100000`, - ); return { accountName: accountName, accountPassword: password, @@ -844,8 +814,8 @@ class PybankService extends BankServiceBase implements BankServiceHandle { async start(): Promise<void> { this.proc = this.globalTestState.spawnService( - "taler-bank-manage", - ["-c", this.configFile, "serve"], + "taler-fakebank-run", + ["-c", this.configFile], "bank", ); } @@ -857,7 +827,7 @@ class PybankService extends BankServiceBase implements BankServiceHandle { } // Use libeufin bank instead of pybank. -const useLibeufinBank = process.env.WALLET_HARNESS_WITH_EUFIN; +const useLibeufinBank = true; /** * Return a euFin or a pyBank implementation of @@ -866,21 +836,21 @@ const useLibeufinBank = process.env.WALLET_HARNESS_WITH_EUFIN; * on a particular env variable. */ function getBankServiceImpl(): { - prototype: typeof PybankService.prototype; - create: typeof PybankService.create; + prototype: typeof FakebankService.prototype; + create: typeof FakebankService.create; } { if (useLibeufinBank) return { - prototype: EufinBankService.prototype, - create: EufinBankService.create, + prototype: LibEuFinBankService.prototype, + create: LibEuFinBankService.create, }; return { - prototype: PybankService.prototype, - create: PybankService.create, + prototype: FakebankService.prototype, + create: FakebankService.create, }; } -export type BankService = PybankService; +export type BankService = FakebankService; export const BankService = getBankServiceImpl(); export class FakeBankService { @@ -923,7 +893,7 @@ export class FakeBankService { private globalTestState: GlobalTestState, private bankConfig: FakeBankConfig, private configFile: string, - ) { } + ) {} async start(): Promise<void> { this.proc = this.globalTestState.spawnService( @@ -1189,7 +1159,7 @@ export class ExchangeService implements ExchangeServiceInterface { private exchangeConfig: ExchangeConfig, private configFilename: string, private keyPair: EddsaKeyPair, - ) { } + ) {} get name() { return this.exchangeConfig.name; @@ -1442,7 +1412,7 @@ export class MerchantApiClient { constructor( private baseUrl: string, public readonly auth: MerchantAuthConfiguration, - ) { } + ) {} async changeAuth(auth: MerchantAuthConfiguration): Promise<void> { const url = new URL("private/auth", this.baseUrl); @@ -1635,7 +1605,7 @@ export class MerchantService implements MerchantServiceInterface { private globalState: GlobalTestState, private merchantConfig: MerchantConfig, private configFilename: string, - ) { } + ) {} private currentTimetravel: Duration | undefined; @@ -1947,8 +1917,10 @@ export class WalletCli { const resp = await sh( self.globalTestState, `wallet-${self.name}`, - `taler-wallet-cli ${self.timetravelArg ?? "" - } --no-throttle -LTRACE --wallet-db '${self.dbfile + `taler-wallet-cli ${ + self.timetravelArg ?? "" + } --no-throttle -LTRACE --wallet-db '${ + self.dbfile }' api '${op}' ${shellWrap(JSON.stringify(payload))}`, ); console.log("--- wallet core response ---"); diff --git a/packages/taler-wallet-cli/src/harness/libeufin.ts b/packages/taler-wallet-cli/src/harness/libeufin.ts index 0107d5a8b..7356a6273 100644 --- a/packages/taler-wallet-cli/src/harness/libeufin.ts +++ b/packages/taler-wallet-cli/src/harness/libeufin.ts @@ -36,7 +36,7 @@ import { runCommand, setupDb, sh, - getRandomIban + getRandomIban, } from "../harness/harness.js"; import { LibeufinSandboxApi, @@ -53,13 +53,10 @@ import { CreateAnastasisFacadeRequest, PostNexusTaskRequest, PostNexusPermissionRequest, - CreateNexusUserRequest + CreateNexusUserRequest, } from "../harness/libeufin-apis.js"; -export { - LibeufinSandboxApi, - LibeufinNexusApi -} +export { LibeufinSandboxApi, LibeufinNexusApi }; export interface LibeufinServices { libeufinSandbox: LibeufinSandboxService; @@ -206,6 +203,16 @@ export class LibeufinSandboxService implements LibeufinSandboxServiceInterface { } async start(): Promise<void> { + await sh( + this.globalTestState, + "libeufin-sandbox-config", + "libeufin-sandbox config default", + { + ...process.env, + LIBEUFIN_SANDBOX_DB_CONNECTION: this.sandboxConfig.databaseJdbcUri, + }, + ); + this.sandboxProc = this.globalTestState.spawnService( "libeufin-sandbox", ["serve", "--port", `${this.sandboxConfig.httpPort}`], @@ -235,7 +242,8 @@ export class LibeufinSandboxService implements LibeufinSandboxServiceInterface { debit: string, credit: string, amount: string, // $currency:x.y - subject: string,): Promise<string> { + subject: string, + ): Promise<string> { const stdout = await sh( this.globalTestState, "libeufin-sandbox-maketransfer", @@ -428,7 +436,7 @@ export class LibeufinCli { LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl, LIBEUFIN_SANDBOX_USERNAME: "admin", LIBEUFIN_SANDBOX_PASSWORD: "secret", - } + }; } async checkSandbox(): Promise<void> { @@ -436,7 +444,7 @@ export class LibeufinCli { this.globalTestState, "libeufin-cli-checksandbox", "libeufin-cli sandbox check", - this.env() + this.env(), ); } @@ -445,7 +453,7 @@ export class LibeufinCli { this.globalTestState, "libeufin-cli-createebicshost", `libeufin-cli sandbox ebicshost create --host-id=${hostId}`, - this.env() + this.env(), ); console.log(stdout); } @@ -460,7 +468,7 @@ export class LibeufinCli { ` --host-id=${details.hostId}` + ` --partner-id=${details.partnerId}` + ` --user-id=${details.userId}`, - this.env() + this.env(), ); console.log(stdout); } @@ -480,7 +488,7 @@ export class LibeufinCli { ` --ebics-host-id=${sd.hostId}` + ` --ebics-partner-id=${sd.partnerId}` + ` --ebics-user-id=${sd.userId}`, - this.env() + this.env(), ); console.log(stdout); } @@ -490,7 +498,7 @@ export class LibeufinCli { this.globalTestState, "libeufin-cli-generatetransactions", `libeufin-cli sandbox bankaccount generate-transactions ${accountName}`, - this.env() + this.env(), ); console.log(stdout); } @@ -500,7 +508,7 @@ export class LibeufinCli { this.globalTestState, "libeufin-cli-showsandboxtransactions", `libeufin-cli sandbox bankaccount transactions ${accountName}`, - this.env() + this.env(), ); console.log(stdout); } @@ -834,9 +842,12 @@ export async function launchLibeufinServices( libeufinNexus, nb.twgHistoryPermission, ); - break; + break; case "anastasis": - await LibeufinNexusApi.createAnastasisFacade(libeufinNexus, nb.anastasisReq); + await LibeufinNexusApi.createAnastasisFacade( + libeufinNexus, + nb.anastasisReq, + ); } } } |