gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] branch master updated: skeleton for the te


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: skeleton for the test for #4959
Date: Tue, 16 May 2017 18:56:15 +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 fc48947  skeleton for the test for #4959
fc48947 is described below

commit fc48947e32670864a5fac44a73df51433f4fdee8
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue May 16 18:56:10 2017 +0200

    skeleton for the test for #4959
---
 src/wire/Makefile.am                             |  18 +-
 src/wire/test_wire_plugin_transactions_test.c    | 286 +++++++++++++++++++++++
 src/wire/test_wire_plugin_transactions_test.conf |  15 ++
 3 files changed, 316 insertions(+), 3 deletions(-)

diff --git a/src/wire/Makefile.am b/src/wire/Makefile.am
index 7bea7c8..da1b8b5 100644
--- a/src/wire/Makefile.am
+++ b/src/wire/Makefile.am
@@ -16,7 +16,8 @@ pkgcfg_DATA = \
 EXTRA_DIST = \
   wire-sepa.conf \
   wire-test.conf \
-  test_wire_plugin.conf
+  test_wire_plugin.conf \
+  test_wire_plugin_transactions_test.conf
 
 plugindir = $(libdir)/taler
 
@@ -83,8 +84,8 @@ TESTS = \
 
 check_PROGRAMS= \
  test_sepa_wireformat \
- test_wire_plugin
-
+ test_wire_plugin \
+ test_wire_plugin_transactions_test
 
 
 test_sepa_wireformat_SOURCES = \
@@ -104,3 +105,14 @@ test_wire_plugin_LDADD = \
   -ljansson \
   libtalerwire.la \
   $(top_builddir)/src/util/libtalerutil.la
+
+
+test_wire_plugin_transactions_test_SOURCES = \
+  test_wire_plugin_transactions_test.c
+test_wire_plugin_transactions_test_LDADD = \
+  -lgnunetjson \
+  -lgnunetutil \
+  -ljansson \
+  libtalerwire.la \
+  $(top_builddir)/src/bank-lib/libtalerfakebank.la \
+  $(top_builddir)/src/util/libtalerutil.la
diff --git a/src/wire/test_wire_plugin_transactions_test.c 
b/src/wire/test_wire_plugin_transactions_test.c
new file mode 100644
index 0000000..3a9dc1a
--- /dev/null
+++ b/src/wire/test_wire_plugin_transactions_test.c
@@ -0,0 +1,286 @@
+/*
+  This file is part of TALER
+  (C) 2015, 2016, 2017 GNUnet e.V. and Inria
+
+  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_transactions_test.c
+ * @brief Tests performing actual transactions with the TEST wire plugin 
against FAKEBANK
+ * @author Christian Grothoff
+ */
+#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>
+#include <jansson.h>
+
+
+/**
+ * When does the test timeout? Right now, we expect this to be very
+ * fast.
+ */
+#define TIMEOUT GNUNET_TIME_UNIT_SECONDS
+
+
+const char *json_proto
+= "{  \"type\":\"test\", \"bank_uri\":\"http://localhost:8088/\";, 
\"account_number\":42 }";
+
+
+/**
+ * Private key used to sign wire details.
+ */
+static struct TALER_MasterPrivateKeyP priv_key;
+
+/**
+ * Public key matching #priv_key.
+ */
+static struct TALER_MasterPublicKeyP pub_key;
+
+/**
+ * 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 for the timeout task.
+ */
+static struct GNUNET_SCHEDULER_Task *tt;
+
+
+/**
+ * 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 != tt)
+  {
+    GNUNET_SCHEDULER_cancel (tt);
+    tt = NULL;
+  }
+}
+
+
+/**
+ * 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 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_BANK_Direction dir,
+                   const void *row_off,
+                   size_t row_off_size,
+                   const struct TALER_WIRE_TransferDetails *details)
+{
+  // FIXME: check result!
+  global_ret = GNUNET_OK;
+  GNUNET_SCHEDULER_shutdown ();
+  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 serial_id unique ID of the wire transfer in the bank's records; 
UINT64_MAX on error
+ * @param emsg NULL on success, otherwise an error message
+ */
+static void
+confirmation_cb (void *cls,
+                 int success,
+                 uint64_t serial_id,
+                 const char *emsg)
+{
+  eh = NULL;
+  if (GNUNET_OK != success)
+  {
+    GNUNET_break (0);
+    global_ret = GNUNET_SYSERR;
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  hh = plugin->get_history (plugin->cls,
+                            TALER_BANK_DIRECTION_BOTH,
+                            NULL, 0,
+                            5,
+                            &history_result_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)
+{
+  json_t *wire;
+  struct TALER_WireTransferIdentifierRawP wtid;
+  struct TALER_Amount amount;
+
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                 NULL);
+  tt = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                     &timeout_cb,
+                                     NULL);
+  fb = TALER_FAKEBANK_start (8088);
+  ph = plugin->prepare_wire_transfer (plugin->cls,
+                                      wire,
+                                      &amount,
+                                      "https://exchange.net/";,
+                                      &wtid,
+                                      &prepare_cb,
+                                      NULL);
+}
+
+
+int
+main (int argc,
+      const char *const argv[])
+{
+  struct GNUNET_CRYPTO_EddsaPrivateKey *pk;
+
+  GNUNET_log_setup ("test-wire-plugin-transactions-test",
+                    "WARNING",
+                    NULL);
+  cfg = GNUNET_CONFIGURATION_create ();
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONFIGURATION_load (cfg,
+                                            
"test_wire_plugin_transactions_test.conf"));
+  pk = GNUNET_CRYPTO_eddsa_key_create_from_file ("test_wire_plugin_key.priv");
+  priv_key.eddsa_priv = *pk;
+  GNUNET_free (pk);
+  GNUNET_CRYPTO_eddsa_key_get_public (&priv_key.eddsa_priv,
+                                      &pub_key.eddsa_pub);
+  global_ret = GNUNET_OK;
+  plugin = TALER_WIRE_plugin_load (cfg,
+                                   "test");
+  GNUNET_assert (NULL != plugin);
+  GNUNET_SCHEDULER_run (&run,
+                        NULL);
+  TALER_WIRE_plugin_unload (plugin);
+  GNUNET_CONFIGURATION_destroy (cfg);
+  if (GNUNET_OK != global_ret)
+    return 1;
+  return 0;
+}
+
+/* end of test_wire_plugin_transactions_test.c */
diff --git a/src/wire/test_wire_plugin_transactions_test.conf 
b/src/wire/test_wire_plugin_transactions_test.conf
new file mode 100644
index 0000000..601b28f
--- /dev/null
+++ b/src/wire/test_wire_plugin_transactions_test.conf
@@ -0,0 +1,15 @@
+# This file is in the public domain.
+#
+[test]
+# This is the response we give out for the /wire request.  It provides
+# wallets with the bank information for transfers to the exchange.
+TEST_RESPONSE_FILE = test_wire_plugin_test.json
+
+[exchange-wire-test]
+# For transfers made by the exchange, we need to know
+# the URI of the bank (where the /admin/add/incoming API
+# is avaialble).
+BANK_URI = http://localhost:8088/
+
+[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]