gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: clean up bank API, get test_bank


From: gnunet
Subject: [taler-exchange] branch master updated: clean up bank API, get test_bank_api_with_nexus to finally pass
Date: Thu, 12 Oct 2023 22:10:06 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 0cd18a0f clean up bank API, get test_bank_api_with_nexus to finally 
pass
0cd18a0f is described below

commit 0cd18a0f8f2545eb1212c504683a8a70007caa48
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Thu Oct 12 22:10:00 2023 +0200

    clean up bank API, get test_bank_api_with_nexus to finally pass
---
 src/bank-lib/bank_api_credit.c                     |   4 +-
 src/bank-lib/bank_api_debit.c                      |   4 +-
 src/bank-lib/taler-exchange-wire-gateway-client.c  |   8 +-
 src/include/taler_bank_service.h                   |  19 ++-
 src/include/taler_testing_lib.h                    |  18 --
 src/testing/Makefile.am                            |   1 -
 src/testing/taler-unified-setup.sh                 |   1 +
 src/testing/test_bank_api.c                        |  23 +--
 src/testing/test_bank_api_nexus.conf               |  14 ++
 src/testing/testing_api_cmd_bank_history_credit.c  |   1 -
 src/testing/testing_api_cmd_bank_history_debit.c   |  90 +++++++++-
 .../testing_api_cmd_nexus_fetch_transactions.c     | 188 ---------------------
 12 files changed, 127 insertions(+), 244 deletions(-)

diff --git a/src/bank-lib/bank_api_credit.c b/src/bank-lib/bank_api_credit.c
index 9ed8a231..124415b8 100644
--- a/src/bank-lib/bank_api_credit.c
+++ b/src/bank-lib/bank_api_credit.c
@@ -83,12 +83,11 @@ parse_account_history (struct 
TALER_BANK_CreditHistoryHandle *hh,
     .response = history
   };
   const json_t *history_array;
-  const char *credit_account_uri;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_array_const ("incoming_transactions",
                                   &history_array),
     GNUNET_JSON_spec_string ("credit_account",
-                             &credit_account_uri),
+                             &chr.details.ok.credit_account_uri),
     GNUNET_JSON_spec_end ()
   };
 
@@ -134,7 +133,6 @@ parse_account_history (struct 
TALER_BANK_CreditHistoryHandle *hh,
         GNUNET_break_op (0);
         return GNUNET_SYSERR;
       }
-      td->credit_account_uri = credit_account_uri;
     }
     chr.details.ok.details_length = len;
     chr.details.ok.details = cd;
diff --git a/src/bank-lib/bank_api_debit.c b/src/bank-lib/bank_api_debit.c
index f3c69ce3..58dc0a73 100644
--- a/src/bank-lib/bank_api_debit.c
+++ b/src/bank-lib/bank_api_debit.c
@@ -82,13 +82,12 @@ parse_account_history (struct TALER_BANK_DebitHistoryHandle 
*hh,
     .ec = TALER_EC_NONE,
     .response = history
   };
-  const char *debit_account_uri;
   const json_t *history_array;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_array_const ("outgoing_transactions",
                                   &history_array),
     GNUNET_JSON_spec_string ("debit_account",
-                             &debit_account_uri),
+                             &dhr.details.ok.debit_account_uri),
     GNUNET_JSON_spec_end ()
   };
 
@@ -136,7 +135,6 @@ parse_account_history (struct TALER_BANK_DebitHistoryHandle 
*hh,
         GNUNET_break_op (0);
         return GNUNET_SYSERR;
       }
-      td->debit_account_uri = debit_account_uri;
     }
     dhr.details.ok.details_length = len;
     dhr.details.ok.details = dd;
diff --git a/src/bank-lib/taler-exchange-wire-gateway-client.c 
b/src/bank-lib/taler-exchange-wire-gateway-client.c
index b20a5fd3..b0d387b7 100644
--- a/src/bank-lib/taler-exchange-wire-gateway-client.c
+++ b/src/bank-lib/taler-exchange-wire-gateway-client.c
@@ -187,7 +187,7 @@ credit_history_cb (void *cls,
       /* If credit/debit accounts were specified, use as a filter */
       if ( (NULL != credit_account) &&
            (0 != strcasecmp (credit_account,
-                             cd->credit_account_uri) ) )
+                             reply->details.ok.credit_account_uri) ) )
         continue;
       if ( (NULL != debit_account) &&
            (0 != strcasecmp (debit_account,
@@ -197,7 +197,7 @@ credit_history_cb (void *cls,
                "%llu: %s->%s (%s) over %s at %s\n",
                (unsigned long long) cd->serial_id,
                cd->debit_account_uri,
-               cd->credit_account_uri,
+               reply->details.ok.credit_account_uri,
                TALER_B2S (&cd->reserve_pub),
                TALER_amount2s (&cd->amount),
                GNUNET_TIME_timestamp2s (cd->execution_date));
@@ -291,12 +291,12 @@ debit_history_cb (void *cls,
         continue;
       if ( (NULL != debit_account) &&
            (0 != strcasecmp (debit_account,
-                             dd->debit_account_uri) ) )
+                             reply->details.ok.debit_account_uri) ) )
         continue;
       fprintf (stdout,
                "%llu: %s->%s (%s) over %s at %s\n",
                (unsigned long long) dd->serial_id,
-               dd->debit_account_uri,
+               reply->details.ok.debit_account_uri,
                dd->credit_account_uri,
                TALER_B2S (&dd->wtid),
                TALER_amount2s (&dd->amount),
diff --git a/src/include/taler_bank_service.h b/src/include/taler_bank_service.h
index e0970cb1..e8e32947 100644
--- a/src/include/taler_bank_service.h
+++ b/src/include/taler_bank_service.h
@@ -367,10 +367,6 @@ struct TALER_BANK_CreditDetails
    */
   const char *debit_account_uri;
 
-  /**
-   * payto://-URL of the target account that received the funds.
-   */
-  const char *credit_account_uri;
 };
 
 
@@ -409,6 +405,11 @@ struct TALER_BANK_CreditHistoryResponse
     struct
     {
 
+      /**
+       * payto://-URL of the target account that received the funds.
+       */
+      const char *credit_account_uri;
+
       /**
        * Array of transactions received.
        */
@@ -517,11 +518,6 @@ struct TALER_BANK_DebitDetails
    */
   const char *exchange_base_url;
 
-  /**
-   * payto://-URI of the source account that send the funds.
-   */
-  const char *debit_account_uri;
-
   /**
    * payto://-URI of the target account that received the funds.
    */
@@ -565,6 +561,11 @@ struct TALER_BANK_DebitHistoryResponse
     struct
     {
 
+      /**
+       * payto://-URI of the source account that send the funds.
+       */
+      const char *debit_account_uri;
+
       /**
        * Array of transactions initiated.
        */
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 4fedb93c..72d70d00 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -967,24 +967,6 @@ TALER_TESTING_cmd_exec_wget (const char *label,
                              const char *url);
 
 
-/**
- * Request fetch-transactions via "wget".
- *
- * @param label command label.
- * @param username username to use
- * @param password password to use
- * @param bank_base_url base URL of the nexus
- * @param account_id account to fetch transactions for
- * @return the command.
- */
-struct TALER_TESTING_Command
-TALER_TESTING_cmd_nexus_fetch_transactions (const char *label,
-                                            const char *username,
-                                            const char *password,
-                                            const char *bank_base_url,
-                                            const char *account_id);
-
-
 /**
  * Make a "expire" CMD.
  *
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index c63c7647..d8e44053 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -79,7 +79,6 @@ libtalertesting_la_SOURCES = \
   testing_api_cmd_kyc_check_get.c \
   testing_api_cmd_kyc_proof.c \
   testing_api_cmd_kyc_wallet_get.c \
-  testing_api_cmd_nexus_fetch_transactions.c \
   testing_api_cmd_oauth.c \
   testing_api_cmd_offline_sign_global_fees.c \
   testing_api_cmd_offline_sign_wire_fees.c \
diff --git a/src/testing/taler-unified-setup.sh 
b/src/testing/taler-unified-setup.sh
index b6624b46..9055ed29 100755
--- a/src/testing/taler-unified-setup.sh
+++ b/src/testing/taler-unified-setup.sh
@@ -285,6 +285,7 @@ then
     echo $! > libeufin-bank.pid
     echo "DONE"
     echo -n "Waiting for Bank ..."
+    OK="0"
     for n in $(seq 1 100); do
         echo -n "."
         sleep "$DEFAULT_SLEEP"
diff --git a/src/testing/test_bank_api.c b/src/testing/test_bank_api.c
index 8477ef9b..0dea6026 100644
--- a/src/testing/test_bank_api.c
+++ b/src/testing/test_bank_api.c
@@ -112,8 +112,6 @@ run (void *cls,
                                                      cred.user42_payto,
                                                      "credit-1",
                                                      -1),
-      TALER_TESTING_cmd_sleep ("Waiting 4s for 'credit-1' to settle",
-                               4),
       /**
        * Check that the incoming payment with a duplicate
        * reserve public key didn't make it to the exchange.
@@ -137,18 +135,6 @@ run (void *cls,
                                   cred.user42_payto,
                                   &wtid,
                                   "http://exchange.example.com/";),
-
-      TALER_TESTING_cmd_sleep ("Waiting 5s for 'debit-1' to settle",
-                               5),
-      (bs == TALER_TESTING_BS_IBAN)
-      ? TALER_TESTING_cmd_nexus_fetch_transactions (
-        "fetch-transactions-at-nexus",
-        "exchange", /* from taler-nexus-prepare */
-        "x", /* from taler-nexus-prepare */
-        "http://localhost:8082";,
-        "exchange-nexus") /* from taler-nexus-prepare */
-      : TALER_TESTING_cmd_sleep ("nop",
-                                 0),
       TALER_TESTING_cmd_bank_debits ("history-2b",
                                      &cred.ba,
                                      NULL,
@@ -181,6 +167,15 @@ main (int argc,
   {
     bs = TALER_TESTING_BS_IBAN;
     cfgfile = CONFIG_FILE_NEXUS;
+    if (GNUNET_SYSERR ==
+        GNUNET_OS_check_helper_binary ("libeufin-bank",
+                                       false,
+                                       NULL))
+    {
+      fprintf (stderr,
+               "libeufin-bank not found. Skipping test.\n");
+      return 77;
+    }
   }
   else
   {
diff --git a/src/testing/test_bank_api_nexus.conf 
b/src/testing/test_bank_api_nexus.conf
index 94e422a8..6fc97ee3 100644
--- a/src/testing/test_bank_api_nexus.conf
+++ b/src/testing/test_bank_api_nexus.conf
@@ -12,3 +12,17 @@ PASSWORD = x
 
 [libeufin-bankdb-postgres]
 CONFIG="postgresql:///talercheck"
+
+# libeufin doesn't search our config.d/currencies.conf
+# as it has a different resource path. Thus replicated
+# here.
+[currency-euro]
+ENABLED = YES
+name = "Euro"
+code = "EUR"
+decimal_separator = ","
+fractional_input_digits = 2
+fractional_normal_digits = 2
+fractional_trailing_zero_digits = 2
+is_currency_name_leading = NO
+alt_unit_names = {"0":"€"}
diff --git a/src/testing/testing_api_cmd_bank_history_credit.c 
b/src/testing/testing_api_cmd_bank_history_credit.c
index 7428a7d8..956e6c85 100644
--- a/src/testing/testing_api_cmd_bank_history_credit.c
+++ b/src/testing/testing_api_cmd_bank_history_credit.c
@@ -276,7 +276,6 @@ command_cb (void *cls,
   ic->h[ic->pos].details.amount = *amount;
   ic->h[ic->pos].row_id = *row_id;
   ic->h[ic->pos].details.reserve_pub = *reserve_pub;
-  ic->h[ic->pos].details.credit_account_uri = exchange_credit_url;
   ic->pos++;
 }
 
diff --git a/src/testing/testing_api_cmd_bank_history_debit.c 
b/src/testing/testing_api_cmd_bank_history_debit.c
index 538538b6..1cb7320f 100644
--- a/src/testing/testing_api_cmd_bank_history_debit.c
+++ b/src/testing/testing_api_cmd_bank_history_debit.c
@@ -267,7 +267,6 @@ command_cb (void *cls,
   ic->h[ic->pos].c_url = GNUNET_strdup (credit_account);
   ic->h[ic->pos].d_url = GNUNET_strdup (debit_account);
   ic->h[ic->pos].details.credit_account_uri = ic->h[ic->pos].c_url;
-  ic->h[ic->pos].details.debit_account_uri = ic->h[ic->pos].d_url;
   ic->h[ic->pos].details.amount = *amount;
   ic->h[ic->pos].row_id = *row_id;
   ic->h[ic->pos].details.wtid = *wtid;
@@ -335,6 +334,69 @@ build_history (struct HistoryState *hs,
 }
 
 
+/**
+ * Normalize IBAN-based payto URI in @a in.
+ *
+ * @param in input payto://-URI to normalize
+ * @return normalized IBAN for the test
+ */
+static char *
+normalize (const char *in)
+{
+  char *npt;
+  const char *q = strchr (in,
+                          '?');
+  const char *mptr;
+  const char *bic;
+  const char *iban;
+
+  if (NULL == q)
+    npt = GNUNET_strdup (in);
+  else
+    npt = GNUNET_strndup (in,
+                          q - in);
+  if (0 != strncasecmp (npt,
+                        "payto://",
+                        strlen ("payto://")))
+  {
+    GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Invalid payto: %s\n",
+                npt);
+    GNUNET_free (npt);
+    return NULL;
+  }
+  mptr = npt + strlen ("payto://");
+  bic = strchr (mptr, '/');
+  if (NULL == bic)
+  {
+    GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Invalid payto: %s\n",
+                npt);
+    GNUNET_free (npt);
+    return NULL;
+  }
+  bic++;
+  iban = strchr (bic, '/');
+  if (NULL != iban)
+  {
+    /* need to remove bic */
+    char *n;
+
+    iban++;
+    GNUNET_asprintf (&n,
+                     "payto://%.*s/%s",
+                     (int) ((bic - mptr) - 1),
+                     mptr,
+                     iban);
+    GNUNET_free (npt);
+    npt = n;
+  }
+  return npt;
+}
+
+
 /**
  * Check that the "/history/outgoing" response matches the
  * CMD whose offset in the list of CMDs is @a off.
@@ -352,6 +414,9 @@ check_result (struct History *h,
               unsigned int off,
               const struct TALER_BANK_DebitDetails *details)
 {
+  char *u1;
+  char *u2;
+
   if (off >= total)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -364,14 +429,33 @@ check_result (struct History *h,
                     off);
     return GNUNET_SYSERR;
   }
+  u1 = normalize (h[off].details.credit_account_uri);
+  if (NULL == u1)
+    return GNUNET_SYSERR;
+  u2 = normalize (details->credit_account_uri);
+  if (NULL == u2)
+  {
+    GNUNET_free (u1);
+    return GNUNET_SYSERR;
+  }
   if ( (0 != GNUNET_memcmp (&h[off].details.wtid,
                             &details->wtid)) ||
        (0 != TALER_amount_cmp (&h[off].details.amount,
                                &details->amount)) ||
-       (0 != strcasecmp (h[off].details.credit_account_uri,
-                         details->credit_account_uri)) )
+       (0 != strcasecmp (u1,
+                         u2)) )
   {
     GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "expected debit_account_uri: %s with %s for %s\n",
+                u1,
+                TALER_amount2s (&h[off].details.amount),
+                TALER_B2S (&h[off].details.wtid));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "actual debit_account_uri: %s with %s for %s\n",
+                u2,
+                TALER_amount2s (&details->amount),
+                TALER_B2S (&details->wtid));
     print_expected (h,
                     total,
                     off);
diff --git a/src/testing/testing_api_cmd_nexus_fetch_transactions.c 
b/src/testing/testing_api_cmd_nexus_fetch_transactions.c
deleted file mode 100644
index fc59444d..00000000
--- a/src/testing/testing_api_cmd_nexus_fetch_transactions.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-  This file is part of TALER
-  Copyright (C) 2023 Taler Systems SA
-
-  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.
-
-  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 TALER; see the file COPYING.  If not, see
-  <http://www.gnu.org/licenses/>
-*/
-/**
- * @file testing/testing_api_cmd_nexus_fetch_transactions.c
- * @brief run a nft command
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_json_lib.h"
-#include <gnunet/gnunet_curl_lib.h>
-#include "taler_signatures.h"
-#include "taler_testing_lib.h"
-
-
-/**
- * State for a "nft" CMD.
- */
-struct NftState
-{
-  /**
-   * Process for the nfter.
-   */
-  struct GNUNET_OS_Process *nft_proc;
-
-  const char *username;
-  const char *password;
-  const char *bank_base_url;
-  const char *account_id;
-};
-
-
-/**
- * Run the command; use the `nft' program.
- *
- * @param cls closure.
- * @param cmd command currently being executed.
- * @param is interpreter state.
- */
-static void
-nft_run (void *cls,
-         const struct TALER_TESTING_Command *cmd,
-         struct TALER_TESTING_Interpreter *is)
-{
-  struct NftState *ws = cls;
-  char *url;
-  char *user;
-  char *pass;
-
-  (void) cmd;
-  GNUNET_asprintf (&url,
-                   "%s/bank-accounts/%s/fetch-transactions",
-                   ws->bank_base_url,
-                   ws->account_id);
-  GNUNET_asprintf (&user,
-                   "--user=%s",
-                   ws->username);
-  GNUNET_asprintf (&pass,
-                   "--password=%s",
-                   ws->password);
-  ws->nft_proc
-    = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_ALL,
-                               NULL, NULL, NULL,
-                               "wget",
-                               "wget",
-                               "--header=Content-Type:application/json",
-                               "--auth-no-challenge",
-                               "--output-file=/dev/null",
-                               "--output-document=/dev/null",
-                               
"--post-data={\"level\":\"all\",\"rangeType\":\"latest\"}",
-                               user,
-                               pass,
-                               url,
-                               NULL);
-  GNUNET_free (url);
-  GNUNET_free (user);
-  GNUNET_free (pass);
-  if (NULL == ws->nft_proc)
-  {
-    GNUNET_break (0);
-    TALER_TESTING_interpreter_fail (is);
-    return;
-  }
-  TALER_TESTING_wait_for_sigchld (is);
-}
-
-
-/**
- * Free the state of a "nft" CMD, and possibly
- * kills its process if it did not terminate regularly.
- *
- * @param cls closure.
- * @param cmd the command being freed.
- */
-static void
-nft_cleanup (void *cls,
-             const struct TALER_TESTING_Command *cmd)
-{
-  struct NftState *ws = cls;
-
-  (void) cmd;
-  if (NULL != ws->nft_proc)
-  {
-    GNUNET_break (0 ==
-                  GNUNET_OS_process_kill (ws->nft_proc,
-                                          SIGKILL));
-    GNUNET_OS_process_wait (ws->nft_proc);
-    GNUNET_OS_process_destroy (ws->nft_proc);
-    ws->nft_proc = NULL;
-  }
-  GNUNET_free (ws);
-}
-
-
-/**
- * Offer "nft" CMD internal data to other commands.
- *
- * @param cls closure.
- * @param[out] ret result.
- * @param trait name of the trait.
- * @param index index number of the object to offer.
- * @return #GNUNET_OK on success.
- */
-static enum GNUNET_GenericReturnValue
-nft_traits (void *cls,
-            const void **ret,
-            const char *trait,
-            unsigned int index)
-{
-  struct NftState *ws = cls;
-  struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (&ws->nft_proc),
-    TALER_TESTING_trait_end ()
-  };
-
-  return TALER_TESTING_get_trait (traits,
-                                  ret,
-                                  trait,
-                                  index);
-}
-
-
-struct TALER_TESTING_Command
-TALER_TESTING_cmd_nexus_fetch_transactions (
-  const char *label,
-  const char *username,
-  const char *password,
-  const char *bank_base_url,
-  const char *account_id)
-{
-  struct NftState *ws;
-
-  ws = GNUNET_new (struct NftState);
-  ws->username = username;
-  ws->password = password;
-  ws->bank_base_url = bank_base_url;
-  ws->account_id = account_id;
-
-  {
-    struct TALER_TESTING_Command cmd = {
-      .cls = ws,
-      .label = label,
-      .run = &nft_run,
-      .cleanup = &nft_cleanup,
-      .traits = &nft_traits
-    };
-
-    return cmd;
-  }
-}
-
-
-/* end of testing_api_cmd_nexus_fetch_transactions.c */

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