gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: test for manual withdrawal


From: gnunet
Subject: [taler-wallet-core] branch master updated: test for manual withdrawal
Date: Sat, 08 Aug 2020 18:57:31 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 5fb9dae1 test for manual withdrawal
5fb9dae1 is described below

commit 5fb9dae13cf154dfe73aa3c62bc94ccb45f0c8d1
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Sat Aug 8 22:27:26 2020 +0530

    test for manual withdrawal
---
 packages/taler-integrationtests/src/harness.ts     | 114 ++++++++++++++++++---
 packages/taler-integrationtests/src/helpers.ts     |   9 +-
 .../src/test-payment-fault.ts                      |   6 +-
 .../src/test-payment-multiple.ts                   |   6 +-
 ...rawal.ts => test-withdrawal-bank-integrated.ts} |   0
 ...est-withdrawal.ts => test-withdrawal-manual.ts} |  34 +++---
 6 files changed, 134 insertions(+), 35 deletions(-)

diff --git a/packages/taler-integrationtests/src/harness.ts 
b/packages/taler-integrationtests/src/harness.ts
index d092a973..027869d1 100644
--- a/packages/taler-integrationtests/src/harness.ts
+++ b/packages/taler-integrationtests/src/harness.ts
@@ -69,8 +69,7 @@ export async function sh(
   logName: string,
   command: string,
 ): Promise<string> {
-  console.log("runing command");
-  console.log(command);
+  console.log("runing command", command);
   return new Promise((resolve, reject) => {
     const stdoutChunks: Buffer[] = [];
     const proc = spawn(command, {
@@ -89,8 +88,8 @@ export async function sh(
       flags: "a",
     });
     proc.stderr.pipe(stderrLog);
-    proc.on("exit", (code) => {
-      console.log("child process exited");
+    proc.on("exit", (code, signal) => {
+      console.log(`child process exited (${code} / ${signal})`);
       if (code != 0) {
         reject(Error(`Unexpected exit code ${code} for '${command}'`));
         return;
@@ -419,6 +418,13 @@ async function pingProc(
   }
 }
 
+export interface ExchangeBankAccount {
+  accountName: string;
+  accountPassword: string;
+  accountPaytoUri: string;
+  wireGatewayApiBaseUrl: string;
+}
+
 export class BankService {
   proc: ProcessWrapper | undefined;
 
@@ -454,6 +460,18 @@ export class BankService {
     );
     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 BankService(gc, bc, cfgFilename);
   }
 
@@ -463,6 +481,33 @@ export class BankService {
     config.setString("bank", "suggested_exchange_payto", exchangePayto);
   }
 
+  async createExchangeAccount(
+    accountName: string,
+    password: string,
+  ): Promise<ExchangeBankAccount> {
+    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,
+      accountPaytoUri: `payto://x-taler-bank/${accountName}`,
+      wireGatewayApiBaseUrl: 
`http://localhost:${this.bankConfig.httpPort}/taler-wire-gateway/${accountName}/`,
+    };
+  }
+
   get port() {
     return this.bankConfig.httpPort;
   }
@@ -495,10 +540,12 @@ export class BankService {
   }
 
   async createRandomBankUser(): Promise<BankUser> {
+    const username =
+      "user-" + talerCrypto.encodeCrock(talerCrypto.getRandomBytes(10));
     const bankUser: BankUser = {
-      username:
-        "user-" + talerCrypto.encodeCrock(talerCrypto.getRandomBytes(10)),
+      username,
       password: "pw-" + 
talerCrypto.encodeCrock(talerCrypto.getRandomBytes(10)),
+      accountPaytoUri: `payto://x-taler-bank/localhost/${username}`,
     };
     await this.createAccount(bankUser.username, bankUser.password);
     return bankUser;
@@ -521,6 +568,29 @@ export class BankService {
     return codecForWithdrawalOperationInfo().decode(resp.data);
   }
 
+  async adminAddIncoming(params: {
+    exchangeBankAccount: ExchangeBankAccount;
+    amount: string;
+    reservePub: string;
+    debitAccountPayto: string;
+  }) {
+    const url = 
`http://localhost:${this.bankConfig.httpPort}/taler-wire-gateway/${params.exchangeBankAccount.accountName}/admin/add-incoming`;
+    await axios.post(
+      url,
+      {
+        amount: params.amount,
+        reserve_pub: params.reservePub,
+        debit_account: params.debitAccountPayto,
+      },
+      {
+        auth: {
+          username: params.exchangeBankAccount.accountName,
+          password: params.exchangeBankAccount.accountPassword,
+        },
+      },
+    );
+  }
+
   async confirmWithdrawalOperation(
     bankUser: BankUser,
     wopi: WithdrawalOperationInfo,
@@ -539,6 +609,7 @@ export class BankService {
 export interface BankUser {
   username: string;
   password: string;
+  accountPaytoUri: string;
 }
 
 export interface WithdrawalOperationInfo {
@@ -600,6 +671,14 @@ export class ExchangeService implements 
ExchangeServiceInterface {
     return new ExchangeService(gc, ec, cfgFilename, keyPair);
   }
 
+  async runWirewatchOnce() {
+    await sh(
+      this.globalState,
+      "wirewatch-test",
+      `taler-exchange-wirewatch -c '${this.configFilename}' -t`,
+    );
+  }
+
   static create(gc: GlobalTestState, e: ExchangeConfig) {
     const config = new Configuration();
     config.setString("taler", "currency", e.currency);
@@ -686,13 +765,10 @@ export class ExchangeService implements 
ExchangeServiceInterface {
     return this.exchangeConfig.httpPort;
   }
 
-  async setupTestBankAccount(
-    bc: BankService,
+  async addBankAccount(
     localName: string,
-    accountName: string,
-    password: string,
+    exchangeBankAccount: ExchangeBankAccount,
   ): Promise<void> {
-    await bc.createAccount(accountName, password);
     const config = Configuration.load(this.configFilename);
     config.setString(
       `exchange-account-${localName}`,
@@ -702,22 +778,30 @@ export class ExchangeService implements 
ExchangeServiceInterface {
     config.setString(
       `exchange-account-${localName}`,
       "payto_uri",
-      `payto://x-taler-bank/localhost/${accountName}`,
+      exchangeBankAccount.accountPaytoUri,
     );
     config.setString(`exchange-account-${localName}`, "enable_credit", "yes");
     config.setString(`exchange-account-${localName}`, "enable_debit", "yes");
     config.setString(
       `exchange-account-${localName}`,
       "wire_gateway_url",
-      `http://localhost:${bc.port}/taler-wire-gateway/${accountName}/`,
+      exchangeBankAccount.wireGatewayApiBaseUrl,
     );
     config.setString(
       `exchange-account-${localName}`,
       "wire_gateway_auth_method",
       "basic",
     );
-    config.setString(`exchange-account-${localName}`, "username", accountName);
-    config.setString(`exchange-account-${localName}`, "password", password);
+    config.setString(
+      `exchange-account-${localName}`,
+      "username",
+      exchangeBankAccount.accountName,
+    );
+    config.setString(
+      `exchange-account-${localName}`,
+      "password",
+      exchangeBankAccount.accountPassword,
+    );
     config.write(this.configFilename);
   }
 
diff --git a/packages/taler-integrationtests/src/helpers.ts 
b/packages/taler-integrationtests/src/helpers.ts
index 9afb6642..41cd39d7 100644
--- a/packages/taler-integrationtests/src/helpers.ts
+++ b/packages/taler-integrationtests/src/helpers.ts
@@ -32,6 +32,7 @@ import {
   setupDb,
   BankService,
   defaultCoinConfig,
+  ExchangeBankAccount,
 } from "./harness";
 import { AmountString } from "taler-wallet-core/lib/types/talerTypes";
 
@@ -39,6 +40,7 @@ export interface SimpleTestEnvironment {
   commonDb: DbInfo;
   bank: BankService;
   exchange: ExchangeService;
+  exchangeBankAccount: ExchangeBankAccount;
   merchant: MerchantService;
   wallet: WalletCli;
 }
@@ -73,13 +75,15 @@ export async function createSimpleTestkudosEnvironment(
     database: db.connStr,
   });
 
-  bank.setSuggestedExchange(exchange, "payto://x-taler-bank/MyExchange");
+  const exchangeBankAccount = await bank.createExchangeAccount("MyExchange", 
"x");
+  exchange.addBankAccount("1", exchangeBankAccount);
+
+  bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
 
   await bank.start();
 
   await bank.pingUntilAvailable();
 
-  await exchange.setupTestBankAccount(bank, "1", "MyExchange", "x");
   exchange.addOfferedCoins(defaultCoinConfig);
 
   await exchange.start();
@@ -112,6 +116,7 @@ export async function createSimpleTestkudosEnvironment(
     merchant,
     wallet,
     bank,
+    exchangeBankAccount,
   };
 }
 
diff --git a/packages/taler-integrationtests/src/test-payment-fault.ts 
b/packages/taler-integrationtests/src/test-payment-fault.ts
index f0b17a7f..0db6770b 100644
--- a/packages/taler-integrationtests/src/test-payment-fault.ts
+++ b/packages/taler-integrationtests/src/test-payment-fault.ts
@@ -56,13 +56,15 @@ runTest(async (t: GlobalTestState) => {
     database: db.connStr,
   });
 
-  bank.setSuggestedExchange(exchange, "payto://x-taler-bank/MyExchange");
+  const exchangeBankAccount = await bank.createExchangeAccount("MyExchange", 
"x");
+
+  bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
 
   await bank.start();
 
   await bank.pingUntilAvailable();
 
-  await exchange.setupTestBankAccount(bank, "1", "MyExchange", "x");
+  await exchange.addBankAccount("1", exchangeBankAccount);
   exchange.addOfferedCoins(defaultCoinConfig);
 
   await exchange.start();
diff --git a/packages/taler-integrationtests/src/test-payment-multiple.ts 
b/packages/taler-integrationtests/src/test-payment-multiple.ts
index 84aab4c8..5bbeecbd 100644
--- a/packages/taler-integrationtests/src/test-payment-multiple.ts
+++ b/packages/taler-integrationtests/src/test-payment-multiple.ts
@@ -51,15 +51,17 @@ async function setupTest(t: GlobalTestState): Promise<{
     database: db.connStr,
   });
 
+  const exchangeBankAccount = await bank.createExchangeAccount("MyExchange", 
"x");
+
   exchange.addOfferedCoins([coin_ct10, coin_u1]);
 
-  bank.setSuggestedExchange(exchange, "payto://x-taler-bank/MyExchange");
+  bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
 
   await bank.start();
 
   await bank.pingUntilAvailable();
 
-  await exchange.setupTestBankAccount(bank, "1", "MyExchange", "x");
+  await exchange.addBankAccount("1", exchangeBankAccount);
 
   await exchange.start();
   await exchange.pingUntilAvailable();
diff --git a/packages/taler-integrationtests/src/test-withdrawal.ts 
b/packages/taler-integrationtests/src/test-withdrawal-bank-integrated.ts
similarity index 100%
copy from packages/taler-integrationtests/src/test-withdrawal.ts
copy to packages/taler-integrationtests/src/test-withdrawal-bank-integrated.ts
diff --git a/packages/taler-integrationtests/src/test-withdrawal.ts 
b/packages/taler-integrationtests/src/test-withdrawal-manual.ts
similarity index 66%
rename from packages/taler-integrationtests/src/test-withdrawal.ts
rename to packages/taler-integrationtests/src/test-withdrawal-manual.ts
index a856560d..afaf41e6 100644
--- a/packages/taler-integrationtests/src/test-withdrawal.ts
+++ b/packages/taler-integrationtests/src/test-withdrawal-manual.ts
@@ -20,6 +20,7 @@
 import { runTest, GlobalTestState } from "./harness";
 import { createSimpleTestkudosEnvironment } from "./helpers";
 import { walletTypes } from "taler-wallet-core";
+import { CoreApiResponse } from "taler-wallet-core/lib/walletCoreApiHandler";
 
 /**
  * Run test for basic, bank-integrated withdrawal.
@@ -28,33 +29,38 @@ runTest(async (t: GlobalTestState) => {
   
   // Set up test environment
 
-  const { wallet, bank, exchange } = await createSimpleTestkudosEnvironment(t);
+  const { wallet, bank, exchange, exchangeBankAccount } = await 
createSimpleTestkudosEnvironment(t);
 
   // Create a withdrawal operation
 
   const user = await bank.createRandomBankUser();
-  const wop = await bank.createWithdrawalOperation(user, "TESTKUDOS:10");
 
-  // Hand it to the wallet
+  let wresp: CoreApiResponse;
 
-  const r1 = await wallet.apiRequest("getWithdrawalDetailsForUri", {
-    talerWithdrawUri: wop.taler_withdraw_uri,
+  wresp = await wallet.apiRequest("addExchange", {
+    exchangeBaseUrl: exchange.baseUrl,
   });
-  t.assertTrue(r1.type === "response");
 
-  await wallet.runPending();
+  t.assertTrue(wresp.type === "response");
 
-  // Confirm it
+  wresp = await wallet.apiRequest("acceptManualWithdrawal", {
+    exchangeBaseUrl: exchange.baseUrl,
+    amount: "TESTKUDOS:10",
+  });
 
-  await bank.confirmWithdrawalOperation(user, wop);
+  t.assertTrue(wresp.type === "response");
 
-  // Withdraw
+  const reservePub: string = (wresp.result as any).reservePub;
 
-  const r2 = await wallet.apiRequest("acceptBankIntegratedWithdrawal", {
-    exchangeBaseUrl: exchange.baseUrl,
-    talerWithdrawUri: wop.taler_withdraw_uri,
+  await bank.adminAddIncoming({
+    exchangeBankAccount,
+    amount: "TESTKUDOS:10",
+    debitAccountPayto: user.accountPaytoUri,
+    reservePub: reservePub,
   });
-  t.assertTrue(r2.type === "response");
+
+  await exchange.runWirewatchOnce();
+
   await wallet.runUntilDone();
 
   // Check balance

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]