gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: TWG refund tests.


From: gnunet
Subject: [taler-wallet-core] branch master updated: TWG refund tests.
Date: Mon, 15 Feb 2021 10:45:49 +0100

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

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

The following commit(s) were added to refs/heads/master by this push:
     new 7a2ab04d TWG refund tests.
7a2ab04d is described below

commit 7a2ab04da8548d9b409df1ab183c785c7bde7e48
Author: MS <ms@taler.net>
AuthorDate: Mon Feb 15 10:43:05 2021 +0100

    TWG refund tests.
    
    Arriving to the point where Libeufin services get
    launched and configured with multiple users.  The
    configuration provides: bank accounts, bank connections
    and facades; all being created via the abstraction
    "bundling" layer of one Libeufin 'user'.
---
 .../src/integrationtests/libeufin.ts               | 126 +++++++++++++++++++--
 .../src/integrationtests/test-libeufin-refund.ts   |  49 ++++++++
 .../src/integrationtests/testrunner.ts             |   2 +
 3 files changed, 168 insertions(+), 9 deletions(-)

diff --git a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts 
b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
index c96125d7..1bced0be 100644
--- a/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/libeufin.ts
@@ -21,9 +21,11 @@ import axios from "axios";
 import { URL } from "@gnu-taler/taler-wallet-core";
 import {
   GlobalTestState,
+  DbInfo,
   pingProc,
   ProcessWrapper,
   runCommand,
+  setupDb,
   sh,
 } from "./harness";
 
@@ -35,6 +37,12 @@ export interface LibeufinNexusServiceInterface {
   baseUrl: string;
 }
 
+export interface LibeufinServices {
+  libeufinSandbox: LibeufinSandboxServiceInterface;
+  libeufinNexus: LibeufinNexusServiceInterface;
+  commonDb: DbInfo;
+}
+
 export interface LibeufinSandboxConfig {
   httpPort: number;
   databaseJdbcUri: string;
@@ -255,11 +263,13 @@ export interface SimulateIncomingTransactionRequest {
 export class NexusUserBundle {
   userReq: CreateNexusUserRequest;
   connReq: CreateEbicsBankConnectionRequest;
-  twg: CreateTalerWireGatewayFacadeRequest;
+  twgReq: CreateTalerWireGatewayFacadeRequest;
+  twgTransferPermission: PostNexusPermissionRequest;
+  twgHistoryPermission: PostNexusPermissionRequest;
   localAccountName: string;
   remoteAccountName: string;
 
-  constructor(ebicsURL: string, salt: string) {
+  constructor(salt: string, ebicsURL: string) {
     this.userReq = {
       username: `username-${salt}`,
       password: `password-${salt}`,
@@ -268,12 +278,12 @@ export class NexusUserBundle {
     this.connReq = {
       name: `connection-${salt}`,
       ebicsURL: ebicsURL,
-      hostID: `ebicshost-${salt}`,
-      partnerID: `ebicspartner-${salt}`,
-      userID: `ebicsuser-${salt}`,
+      hostID: `ebicshost,${salt}`,
+      partnerID: `ebicspartner,${salt}`,
+      userID: `ebicsuser,${salt}`,
     };
 
-    this.twg = {
+    this.twgReq = {
       currency: "EUR",
       name: `twg-${salt}`,
       reserveTransferLevel: "report",
@@ -282,6 +292,26 @@ export class NexusUserBundle {
     };
     this.remoteAccountName = `remote-account-${salt}`;
     this.localAccountName = `local-account-${salt}`;
+    this.twgTransferPermission = {
+      action: "grant",
+      permission: {
+        subjectType: `username-${salt}`,
+        subjectId: "twguser",
+        resourceType: "facade",
+        resourceId: `twg-${salt}`,
+        permissionName: "facade.talerWireGateway.transfer",
+      },
+    };
+    this.twgHistoryPermission = {
+      action: "grant",
+      permission: {
+        subjectType: `username-${salt}`,
+        subjectId: "twguser",
+        resourceType: "facade",
+        resourceId: `twg-${salt}`,
+        permissionName: "facade.talerWireGateway.history",
+      },
+    };
   }
 }
 
@@ -303,9 +333,9 @@ export class SandboxUserBundle {
       label: `remote-account-${salt}`,
       name: `Taler Exchange: ${salt}`,
       subscriber: {
-        hostID: `ebicshost-${salt}`,
-        partnerID: `ebicspartner-${salt}`,
-        userID: `ebicsuser-${salt}`,
+        hostID: `ebicshost,${salt}`,
+        partnerID: `ebicspartner,${salt}`,
+        userID: `ebicsuser,${salt}`,
       },
     };
   }
@@ -873,3 +903,81 @@ export namespace LibeufinNexusApi {
     );
   }
 }
+
+/**
+ * Launch Nexus and Sandbox.
+ */
+export async function launchLibeufinServices(
+  t: GlobalTestState,
+  nexusUserBundle: NexusUserBundle[],
+  sandboxUserBundle: SandboxUserBundle[],
+): Promise<LibeufinServices> {
+  const db = await setupDb(t);
+
+  const libeufinSandbox = await LibeufinSandboxService.create(t, {
+    httpPort: 5010,
+    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
+  });
+
+  await libeufinSandbox.start();
+  await libeufinSandbox.pingUntilAvailable();
+
+  const libeufinNexus = await LibeufinNexusService.create(t, {
+    httpPort: 5011,
+    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
+  });
+
+  await libeufinNexus.start();
+  await libeufinNexus.pingUntilAvailable();
+  console.log("Libeufin services launched!");
+
+  for (let sb of sandboxUserBundle) {
+    await LibeufinSandboxApi.createEbicsHost(
+      libeufinSandbox,
+      sb.ebicsBankAccount.subscriber.hostID,
+    );
+    await LibeufinSandboxApi.createEbicsSubscriber(
+      libeufinSandbox,
+      sb.ebicsBankAccount.subscriber,
+    );
+    await LibeufinSandboxApi.createEbicsBankAccount(
+      libeufinSandbox,
+      sb.ebicsBankAccount,
+    );
+  }
+  console.log("Sandbox user(s) / account(s) / subscriber(s): created");
+
+  for (let nb of nexusUserBundle) {
+    await LibeufinNexusApi.createEbicsBankConnection(libeufinNexus, 
nb.connReq);
+    await LibeufinNexusApi.connectBankConnection(
+      libeufinNexus,
+      nb.connReq.name,
+    );
+    await LibeufinNexusApi.fetchAccounts(libeufinNexus, nb.connReq.name);
+    await LibeufinNexusApi.importConnectionAccount(
+      libeufinNexus,
+      nb.connReq.name,
+      nb.remoteAccountName,
+      nb.localAccountName,
+    );
+    await LibeufinNexusApi.createTwgFacade(libeufinNexus, nb.twgReq);
+    await LibeufinNexusApi.createUser(libeufinNexus, nb.userReq);
+    await LibeufinNexusApi.postPermission(
+      libeufinNexus,
+      nb.twgTransferPermission,
+    );
+    await LibeufinNexusApi.postPermission(
+      libeufinNexus,
+      nb.twgHistoryPermission,
+    );
+  }
+  console.log(
+    "Nexus user(s) / connection(s) / facade(s) / permission(s): created",
+  );
+
+  return {
+    commonDb: db,
+    libeufinNexus: libeufinNexus,
+    libeufinSandbox: libeufinSandbox,
+  };
+}
diff --git 
a/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts 
b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts
new file mode 100644
index 00000000..2d5103dc
--- /dev/null
+++ b/packages/taler-wallet-cli/src/integrationtests/test-libeufin-refund.ts
@@ -0,0 +1,49 @@
+/*
+ This file is part of GNU Taler
+ (C) 2020 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Imports.
+ */
+import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
+import { CoinConfig, defaultCoinConfig } from "./denomStructures";
+import { GlobalTestState } from "./harness";
+import {
+  SandboxUserBundle,
+  NexusUserBundle,
+  launchLibeufinServices,
+} from "./libeufin";
+
+/**
+ * Run basic test with LibEuFin.
+ */
+export async function runLibeufinRefundTest(t: GlobalTestState) {
+  const user01nexus = new NexusUserBundle(
+    "01",
+    "http://localhost:5010/ebicsweb";,
+  );
+  const user01sandbox = new SandboxUserBundle("01");
+  const user02nexus = new NexusUserBundle(
+    "02",
+    "http://localhost:5010/ebicsweb";,
+  );
+  const user02sandbox = new SandboxUserBundle("02");
+
+  await launchLibeufinServices(
+    t,
+    [user01nexus, user02nexus],
+    [user01sandbox, user02sandbox],
+  );
+}
diff --git a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts 
b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
index e220e45e..a11b4587 100644
--- a/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
+++ b/packages/taler-wallet-cli/src/integrationtests/testrunner.ts
@@ -55,6 +55,7 @@ import { runWithdrawalBankIntegratedTest } from 
"./test-withdrawal-bank-integrat
 import M from "minimatch";
 import { runMerchantExchangeConfusionTest } from 
"./test-merchant-exchange-confusion";
 import { runLibeufinBasicTest } from "./test-libeufin-basic";
+import { runLibeufinRefundTest } from "./test-libeufin-refund";
 import { runLibeufinTutorialTest } from "./test-libeufin-tutorial";
 import { runDepositTest } from "./test-deposit";
 import CancellationToken from "cancellationtoken";
@@ -79,6 +80,7 @@ const allTests: TestMainFunction[] = [
   runFeeRegressionTest,
   runLibeufinBasicTest,
   runLibeufinTutorialTest,
+  runLibeufinRefundTest,
   runMerchantExchangeConfusionTest,
   runMerchantLongpollingTest,
   runMerchantRefundApiTest,

-- 
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]