gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: taler-harness: new test


From: gnunet
Subject: [taler-wallet-core] branch master updated: taler-harness: new test
Date: Wed, 05 Apr 2023 18:19:17 +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 3cf6d15ea taler-harness: new test
3cf6d15ea is described below

commit 3cf6d15eae299576eada8b501e5848ef29dad03c
Author: Florian Dold <florian@dold.me>
AuthorDate: Wed Apr 5 18:19:14 2023 +0200

    taler-harness: new test
---
 ...t-wallet-dbless.ts => test-exchange-deposit.ts} | 61 ++++++++++++++++++----
 .../src/integrationtests/test-wallet-dbless.ts     | 26 ++++++++-
 .../src/integrationtests/testrunner.ts             |  6 ++-
 packages/taler-wallet-core/src/dbless.ts           | 13 +++--
 4 files changed, 89 insertions(+), 17 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts 
b/packages/taler-harness/src/integrationtests/test-exchange-deposit.ts
similarity index 66%
copy from packages/taler-harness/src/integrationtests/test-wallet-dbless.ts
copy to packages/taler-harness/src/integrationtests/test-exchange-deposit.ts
index 08c10fd91..7df1047ea 100644
--- a/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts
+++ b/packages/taler-harness/src/integrationtests/test-exchange-deposit.ts
@@ -17,7 +17,12 @@
 /**
  * Imports.
  */
-import { j2s, TalerError } from "@gnu-taler/taler-util";
+import {
+  encodeCrock,
+  getRandomBytes,
+  j2s,
+  TalerError,
+} from "@gnu-taler/taler-util";
 import { createPlatformHttpLib } from "@gnu-taler/taler-util/http";
 import {
   checkReserve,
@@ -36,7 +41,7 @@ import { createSimpleTestkudosEnvironment } from 
"../harness/helpers.js";
 /**
  * Run test for basic, bank-integrated withdrawal and payment.
  */
-export async function runWalletDblessTest(t: GlobalTestState) {
+export async function runExchangeDepositTest(t: GlobalTestState) {
   // Set up test environment
 
   const { bank, exchange } = await createSimpleTestkudosEnvironment(t);
@@ -80,7 +85,14 @@ export async function runWalletDblessTest(t: 
GlobalTestState) {
       exchangeBaseUrl: exchange.baseUrl,
     });
 
+    const wireSalt = encodeCrock(getRandomBytes(16));
+    const merchantPub = encodeCrock(getRandomBytes(32));
+    const contractTermsHash = encodeCrock(getRandomBytes(64));
+
     await depositCoin({
+      contractTermsHash,
+      merchantPub,
+      wireSalt,
       amount: "TESTKUDOS:4",
       coin: coin,
       cryptoApi,
@@ -88,17 +100,44 @@ export async function runWalletDblessTest(t: 
GlobalTestState) {
       http,
     });
 
-    const refreshDenoms = [
-      findDenomOrThrow(exchangeInfo, "TESTKUDOS:1"),
-      findDenomOrThrow(exchangeInfo, "TESTKUDOS:1"),
-    ];
-
-    await refreshCoin({
-      oldCoin: coin,
+    // Idempotency
+    await depositCoin({
+      contractTermsHash,
+      merchantPub,
+      wireSalt,
+      amount: "TESTKUDOS:4",
+      coin: coin,
       cryptoApi,
+      exchangeBaseUrl: exchange.baseUrl,
       http,
-      newDenoms: refreshDenoms,
     });
+
+    try {
+      // Non-idempotent request with different amount
+      await depositCoin({
+        contractTermsHash,
+        merchantPub,
+        wireSalt,
+        amount: "TESTKUDOS:3.5",
+        coin: coin,
+        cryptoApi,
+        exchangeBaseUrl: exchange.baseUrl,
+        http,
+      });
+    } catch (e) {
+      if (e instanceof TalerError && e.errorDetail.code === 7005) {
+        if (e.errorDetail.httpStatusCode === 400) {
+          console.log("got expected error response from exchange");
+          console.log(e);
+          console.log(j2s(e.errorDetail));
+        } else {
+          console.log("did not expect deposit error from exchange");
+          throw e;
+        }
+      } else {
+        throw e;
+      }
+    }
   } catch (e) {
     if (e instanceof TalerError) {
       console.log(e);
@@ -110,4 +149,4 @@ export async function runWalletDblessTest(t: 
GlobalTestState) {
   }
 }
 
-runWalletDblessTest.suites = ["wallet"];
+runExchangeDepositTest.suites = ["exchange"];
diff --git a/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts 
b/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts
index 08c10fd91..a1de7617b 100644
--- a/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts
+++ b/packages/taler-harness/src/integrationtests/test-wallet-dbless.ts
@@ -17,7 +17,12 @@
 /**
  * Imports.
  */
-import { j2s, TalerError } from "@gnu-taler/taler-util";
+import {
+  encodeCrock,
+  getRandomBytes,
+  j2s,
+  TalerError,
+} from "@gnu-taler/taler-util";
 import { createPlatformHttpLib } from "@gnu-taler/taler-util/http";
 import {
   checkReserve,
@@ -80,7 +85,26 @@ export async function runWalletDblessTest(t: 
GlobalTestState) {
       exchangeBaseUrl: exchange.baseUrl,
     });
 
+    const wireSalt = encodeCrock(getRandomBytes(16));
+    const merchantPub = encodeCrock(getRandomBytes(32));
+    const contractTermsHash = encodeCrock(getRandomBytes(64));
+
+    await depositCoin({
+      contractTermsHash,
+      merchantPub,
+      wireSalt,
+      amount: "TESTKUDOS:4",
+      coin: coin,
+      cryptoApi,
+      exchangeBaseUrl: exchange.baseUrl,
+      http,
+    });
+
+    // Idempotency
     await depositCoin({
+      contractTermsHash,
+      merchantPub,
+      wireSalt,
       amount: "TESTKUDOS:4",
       coin: coin,
       cryptoApi,
diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts 
b/packages/taler-harness/src/integrationtests/testrunner.ts
index a20300e02..38047a850 100644
--- a/packages/taler-harness/src/integrationtests/testrunner.ts
+++ b/packages/taler-harness/src/integrationtests/testrunner.ts
@@ -101,6 +101,7 @@ import { runPaymentAbortTest } from 
"./test-payment-abort.js";
 import { runWithdrawalFeesTest } from "./test-withdrawal-fees.js";
 import { runWalletBalanceTest } from "./test-wallet-balance.js";
 import { runPaymentTemplateTest } from "./test-payment-template.js";
+import { runExchangeDepositTest } from "./test-exchange-deposit.js";
 
 /**
  * Test runner.
@@ -131,6 +132,7 @@ const allTests: TestMainFunction[] = [
   runFeeRegressionTest,
   runForcedSelectionTest,
   runKycTest,
+  runExchangeDepositTest,
   runLibeufinAnastasisFacadeTest,
   runLibeufinApiBankaccountTest,
   runLibeufinApiBankconnectionTest,
@@ -340,7 +342,9 @@ export async function runTests(spec: TestRunSpec) {
       console.log(`running ${testName} with timeout ${testTimeoutMs}ms`);
     }
 
-    const token = spec.noTimeout ? CancellationToken.CONTINUE : 
CancellationToken.timeout(testTimeoutMs).token;
+    const token = spec.noTimeout
+      ? CancellationToken.CONTINUE
+      : CancellationToken.timeout(testTimeoutMs).token;
 
     const resultPromise: Promise<TestRunResult> = new Promise(
       (resolve, reject) => {
diff --git a/packages/taler-wallet-core/src/dbless.ts 
b/packages/taler-wallet-core/src/dbless.ts
index fe5eb6e3f..5dc13433a 100644
--- a/packages/taler-wallet-core/src/dbless.ts
+++ b/packages/taler-wallet-core/src/dbless.ts
@@ -229,17 +229,22 @@ export async function depositCoin(args: {
   coin: CoinInfo;
   amount: AmountString;
   depositPayto?: string;
-}) {
+  merchantPub?: string;
+  contractTermsHash?: string;
+  // 16 bytes, crockford encoded
+  wireSalt?: string;
+}): Promise<void> {
   const { coin, http, cryptoApi } = args;
   const depositPayto =
     args.depositPayto ?? "payto://x-taler-bank/localhost/foo";
-  const wireSalt = encodeCrock(getRandomBytes(16));
+  const wireSalt = args.wireSalt ?? encodeCrock(getRandomBytes(16));
   const timestampNow = AbsoluteTime.toTimestamp(AbsoluteTime.now());
-  const contractTermsHash = encodeCrock(getRandomBytes(64));
+  const contractTermsHash =
+    args.contractTermsHash ?? encodeCrock(getRandomBytes(64));
   const depositTimestamp = timestampNow;
   const refundDeadline = timestampNow;
   const wireTransferDeadline = timestampNow;
-  const merchantPub = encodeCrock(getRandomBytes(32));
+  const merchantPub = args.merchantPub ?? encodeCrock(getRandomBytes(32));
   const dp = await cryptoApi.signDepositPermission({
     coinPriv: coin.coinPriv,
     coinPub: coin.coinPub,

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