[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: test for manual withdrawal,
gnunet <=