gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] 01/02: More on #5746.


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] 01/02: More on #5746.
Date: Wed, 04 Sep 2019 17:08:07 +0200

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

marcello pushed a commit to branch master
in repository exchange.

commit a07d036c804ab879c7953e835d68ec0a595a379b
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Sep 4 15:24:24 2019 +0200

    More on #5746.
---
 src/wire-plugins/Makefile.am                       |  14 +-
 .../test_wire_plugin_legacy_taler-bank.c           | 394 +++++++++++++++++++++
 .../test_wire_plugin_legacy_taler-bank.conf        |  12 +
 3 files changed, 419 insertions(+), 1 deletion(-)

diff --git a/src/wire-plugins/Makefile.am b/src/wire-plugins/Makefile.am
index e46ef48f..df2c6f8e 100644
--- a/src/wire-plugins/Makefile.am
+++ b/src/wire-plugins/Makefile.am
@@ -74,7 +74,8 @@ AM_TESTS_ENVIRONMENT=export 
TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=
 TESTS = \
  test_ebics_wireformat \
  test_wire_plugin \
- test_wire_plugin_transactions_taler_bank
+ test_wire_plugin_transactions_taler_bank \
+ test_wire_plugin_legacy_taler_bank
 
 check_PROGRAMS= \
  test_ebics_wireformat \
@@ -98,6 +99,17 @@ test_wire_plugin_LDADD = \
   $(top_builddir)/src/util/libtalerutil.la
 
 
+test_wire_plugin_legacy_taler_bank_SOURCES = \
+  test_wire_plugin_legacy_taler-bank.c
+test_wire_plugin_legacy_taler_bank_LDADD = \
+  -lgnunetjson \
+  -lgnunetutil \
+  -ljansson \
+  $(top_builddir)/src/wire/libtalerwire.la \
+  $(top_builddir)/src/bank-lib/libtalerbank.la \
+  $(top_builddir)/src/bank-lib/libtalerfakebank.la \
+  $(top_builddir)/src/util/libtalerutil.la
+
 test_wire_plugin_transactions_taler_bank_SOURCES = \
   test_wire_plugin_transactions_taler-bank.c
 test_wire_plugin_transactions_taler_bank_LDADD = \
diff --git a/src/wire-plugins/test_wire_plugin_legacy_taler-bank.c 
b/src/wire-plugins/test_wire_plugin_legacy_taler-bank.c
new file mode 100644
index 00000000..a69d618c
--- /dev/null
+++ b/src/wire-plugins/test_wire_plugin_legacy_taler-bank.c
@@ -0,0 +1,394 @@
+/*
+  This file is part of TALER
+  (C) 2015-2018 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 wire/test_wire_plugin_legacy_taler-bank.c
+ * @brief Tests legacy history-range API against the Fakebank.
+ *        Version for the real Python bank forthcoming.
+ *
+ * @author Christian Grothoff
+ * @author Marcello Stanisci
+ */
+#include "platform.h"
+#include "taler_util.h"
+#include "taler_wire_lib.h"
+#include "taler_wire_plugin.h"
+#include "taler_fakebank_lib.h"
+#include <gnunet/gnunet_json_lib.h>
+
+
+/**
+ * When does the test timeout? Right now, we expect this to be very
+ * fast.
+ */
+#define TIMEOUT GNUNET_TIME_UNIT_SECONDS
+
+
+/**
+ * Destination account to use.
+ */
+static const char *dest_account = "payto://x-taler-bank/localhost:8088/42";
+
+/**
+ * Origin account, section in the configuration file.
+ */
+static const char *my_account = "account-test";
+
+/**
+ * Our configuration.
+ */
+static struct GNUNET_CONFIGURATION_Handle *cfg;
+
+/**
+ * Set to #GNUNET_SYSERR if the test failed.
+ */
+static int global_ret;
+
+/**
+ * The 'test' plugin that we are using for the test.
+ */
+static struct TALER_WIRE_Plugin *plugin;
+
+/**
+ * Active preparation handle, or NULL if not active.
+ */
+static struct TALER_WIRE_PrepareHandle *ph;
+
+/**
+ * Active execution handle, or NULL if not active.
+ */
+static struct TALER_WIRE_ExecuteHandle *eh;
+
+/**
+ * Handle to the bank.
+ */
+static struct TALER_FAKEBANK_Handle *fb;
+
+/**
+ * Handle to the history request.
+ */
+static struct TALER_WIRE_HistoryHandle *hh;
+
+/**
+ * Handle to the history-range request (the "legacy" bank API).
+ */
+static struct TALER_WIRE_HistoryHandle *hhr;
+
+/**
+ * Handle for the timeout task.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
+
+/**
+ * Which serial ID do we expect to get from /history?
+ */
+static uint64_t serial_target;
+
+/**
+ * Wire transfer identifier we are using.
+ */
+static struct TALER_WireTransferIdentifierRawP wtid;
+
+/**
+ * Number of total transaction to make it happen in the test.
+ */
+static int ntransactions = 5;
+
+/**
+ * Function called on shutdown (regular, error or CTRL-C).
+ *
+ * @param cls NULL
+ */
+static void
+do_shutdown (void *cls)
+{
+  TALER_FAKEBANK_stop (fb);
+  fb = NULL;
+  if (NULL != eh)
+  {
+    plugin->execute_wire_transfer_cancel (plugin->cls,
+                                          eh);
+    eh = NULL;
+  }
+  if (NULL != ph)
+  {
+    plugin->prepare_wire_transfer_cancel (plugin->cls,
+                                          ph);
+    ph = NULL;
+  }
+  if (NULL != hh)
+  {
+    plugin->get_history_cancel (plugin->cls,
+                                hh);
+    hh = NULL;
+  }
+
+  if (NULL != hhr)
+  {
+    plugin->get_history_cancel (plugin->cls,
+                                hhr);
+    hhr = NULL;
+  }
+
+  if (NULL != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
+  TALER_WIRE_plugin_unload (plugin);
+}
+
+
+/**
+ * Function called on timeout.
+ *
+ * @param cls NULL
+ */
+static void
+timeout_cb (void *cls)
+{
+  tt = NULL;
+  GNUNET_break (0);
+  global_ret = GNUNET_SYSERR;
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Callbacks of this type are used to serve the result of asking
+ * the bank for the transaction history.
+ *
+ * @param cls closure
+ * @param ec taler status code
+ * @param dir direction of the transfer
+ * @param row_off identification of the position at
+ *        which we are querying
+ * @param row_off_size number of bytes in @a row_off
+ * @param details details about the wire transfer
+ * @return #GNUNET_OK to continue, #GNUNET_SYSERR to
+ *         abort iteration
+ */
+static int
+history_result_cb
+  (void *cls,
+  enum TALER_ErrorCode ec,
+  enum TALER_BANK_Direction dir,
+  const void *row_off,
+  size_t row_off_size,
+  const struct TALER_WIRE_TransferDetails *details)
+{
+  uint64_t *serialp;
+  uint64_t serialh;
+  struct TALER_Amount amount;
+
+  hh = NULL;
+  if ( (TALER_BANK_DIRECTION_NONE == dir) &&
+       (GNUNET_OK == global_ret) )
+  {
+    GNUNET_SCHEDULER_shutdown ();
+    return GNUNET_OK;
+  }
+  if (sizeof (uint64_t) != row_off_size)
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return GNUNET_SYSERR;
+  }
+  serialp = (uint64_t *) row_off;
+  serialh = GNUNET_ntohll (*serialp);
+  if (serialh != serial_target)
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return GNUNET_SYSERR;
+  }
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_string_to_amount ("KUDOS:5.01",
+                                         &amount));
+  if (0 != TALER_amount_cmp (&amount,
+                             &details->amount))
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return GNUNET_SYSERR;
+  }
+  if (0 != GNUNET_memcmp (&wtid,
+                          &details->wtid))
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return GNUNET_SYSERR;
+  }
+  global_ret = GNUNET_OK;
+  return GNUNET_OK;
+}
+
+
+/**
+ * Function called with the result from the execute step.
+ *
+ * @param cls closure
+ * @param success #GNUNET_OK on success,
+ *        #GNUNET_SYSERR on failure
+ * @param row_id ID of the fresh transaction,
+ *        in _network_ byte order.
+ * @param emsg NULL on success, otherwise an error message
+ */
+static void
+confirmation_cb (void *cls,
+                 int success,
+                 const void *row_id,
+                 size_t row_id_size,
+                 const char *emsg)
+{
+  uint64_t tmp;
+  struct TALER_Amount amount;
+
+
+  eh = NULL;
+  if (GNUNET_OK != success)
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+
+  if (0 => --ntransactions)
+  {
+    /* Done, check all is correct here.  */ 
+    
+    if (GNUNET_YES)
+    {
+      /* Something went wrong.  */
+      GNUNET_break (0);
+      global_ret = GNUNET_SYSERR;
+      GNUNET_SCHEDULER_shutdown ();
+      return;
+    }
+    
+    /* All correct, ending the test.  */
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+
+  /* Issue a new wire transfer!  */
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_string_to_amount ("KUDOS:5.01",
+                                         &amount));
+  ph = plugin->prepare_wire_transfer (plugin->cls,
+                                      my_account,
+                                      dest_account,
+                                      &amount,
+                                      "https://exchange.net/";,
+                                      &wtid,
+                                      &prepare_cb,
+                                      NULL);
+}
+
+
+/**
+ * Callback with prepared transaction.
+ *
+ * @param cls closure
+ * @param buf transaction data to persist, NULL on error
+ * @param buf_size number of bytes in @a buf, 0 on error
+ */
+static void
+prepare_cb (void *cls,
+            const char *buf,
+            size_t buf_size)
+{
+
+  ph = NULL;
+  if (NULL == buf)
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  plugin->execute_wire_transfer (plugin->cls,
+                                 buf,
+                                 buf_size,
+                                 &confirmation_cb,
+                                 NULL);
+}
+
+
+/**
+ * Run the test.
+ *
+ * @param cls NULL
+ */
+static void
+run (void *cls)
+{
+  struct TALER_Amount amount;
+  
+  ntransactions = 5;
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                 NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                     &timeout_cb,
+                                     NULL);
+  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
+                              &wtid,
+                              sizeof (wtid));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_string_to_amount ("KUDOS:5.01",
+                                         &amount));
+  fb = TALER_FAKEBANK_start (8088);
+
+  ph = plugin->prepare_wire_transfer (plugin->cls,
+                                      my_account,
+                                      dest_account,
+                                      &amount,
+                                      "https://exchange.net/";,
+                                      &wtid,
+                                      &prepare_cb,
+                                      NULL);
+}
+
+
+int
+main (int argc,
+      const char *const argv[])
+{
+
+  GNUNET_log_setup ("test-wire-plugin-legacy-test",
+                    "WARNING",
+                    NULL);
+  cfg = GNUNET_CONFIGURATION_create ();
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONFIGURATION_load (cfg,
+                                            
"test_wire_plugin_legacy_taler-bank.conf"));
+  global_ret = GNUNET_OK;
+  plugin = TALER_WIRE_plugin_load (cfg,
+                                   "taler_bank");
+  GNUNET_assert (NULL != plugin);
+  GNUNET_SCHEDULER_run (&run,
+                        NULL);
+  GNUNET_CONFIGURATION_destroy (cfg);
+  if (GNUNET_OK != global_ret)
+    return 1;
+  return 0;
+}
+
+/* end of test_wire_plugin_legacy_taler-bank.c */
diff --git a/src/wire-plugins/test_wire_plugin_legacy_taler-bank.conf 
b/src/wire-plugins/test_wire_plugin_legacy_taler-bank.conf
new file mode 100644
index 00000000..d6d2e834
--- /dev/null
+++ b/src/wire-plugins/test_wire_plugin_legacy_taler-bank.conf
@@ -0,0 +1,12 @@
+# This file is in the public domain.
+#
+[account-test]
+# This is the response we give out for the /wire request.  It provides
+# wallets with the bank information for transfers to the exchange.
+
+TALER_BANK_AUTH_METHOD = NONE
+
+URL = payto://x-taler-bank/localhost:8088/2
+
+[taler]
+CURRENCY = "KUDOS"

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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