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: finish simplifying


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: finish simplifying main by adding more helpers and macros
Date: Sun, 21 Jan 2018 19:57:15 +0100

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 652bb0f  finish simplifying main by adding more helpers and macros
652bb0f is described below

commit 652bb0f9c4d9527c409db6a99a7e550c57328adf
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Jan 21 19:57:09 2018 +0100

    finish simplifying main by adding more helpers and macros
---
 src/exchange-lib/Makefile.am                       |   1 +
 src/exchange-lib/test_exchange_api_new.c           | 149 +++++++--------------
 .../testing_api_cmd_fakebank_transfer.c            |  13 +-
 src/exchange-lib/testing_api_helpers.c             |  85 ++++++++++++
 src/exchange-lib/testing_api_loop.c                |  54 +++++++-
 src/include/taler_testing_lib.h                    |  31 +++++
 6 files changed, 232 insertions(+), 101 deletions(-)

diff --git a/src/exchange-lib/Makefile.am b/src/exchange-lib/Makefile.am
index 2f02a6e..64a5f96 100644
--- a/src/exchange-lib/Makefile.am
+++ b/src/exchange-lib/Makefile.am
@@ -55,6 +55,7 @@ libtalertesting_la_SOURCES = \
 libtalertesting_la_LIBADD = \
   $(top_builddir)/src/json/libtalerjson.la \
   $(top_builddir)/src/util/libtalerutil.la \
+  $(top_builddir)/src/bank-lib/libtalerfakebank.la \
   -lgnunetcurl \
   -lgnunetjson \
   -lgnunetutil \
diff --git a/src/exchange-lib/test_exchange_api_new.c 
b/src/exchange-lib/test_exchange_api_new.c
index 49934fc..077115a 100644
--- a/src/exchange-lib/test_exchange_api_new.c
+++ b/src/exchange-lib/test_exchange_api_new.c
@@ -46,49 +46,49 @@
  */
 #define EXCHANGE_ACCOUNT_NO 2
 
-
 /**
- * Handle to access the exchange.
+ * Account number of some user.
  */
-// static struct TALER_EXCHANGE_Handle *exchange;
+#define USER_ACCOUNT_NO 42
 
 /**
- * Handle to the exchange process.
+ *
  */
-static struct GNUNET_OS_Process *exchanged;
-
+#define USER_LOGIN_NAME "user42"
 
 /**
- * Handle to our fakebank.
+ *
  */
-static struct TALER_FAKEBANK_Handle *fakebank;
-
+#define USER_LOGIN_PASS "pass42"
 
+/**
+ *
+ */
+#define FAKEBANK_URL "http://localhost:8082/";
 
+/**
+ *
+ */
+#define CONFIG_FILE "test_exchange_api.conf"
 
 /**
- * Function run when the test terminates (good or bad).
- * Cleans up our state.
  *
- * @param cls NULL
  */
-static void
-do_shutdown (void *cls)
-{
-  if (NULL != fakebank)
-  {
-    TALER_FAKEBANK_stop (fakebank);
-    fakebank = NULL;
-  }
-}
+#define CMD_EXEC_WIREWATCH(label) \
+   TALER_TESTING_cmd_exec_wirewatch (label, CONFIG_FILE)
 
-#define CONFIG_FILE "test_exchange_api.conf"
+/**
+ *
+ */
+#define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
+   TALER_TESTING_cmd_fakebank_transfer (label, amount, \
+     FAKEBANK_URL, USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO, \
+     USER_LOGIN_NAME, USER_LOGIN_PASS)
 
-#define RUN_WIREWATCH(label) TALER_TESTING_cmd_exec_wirewatch (label, 
CONFIG_FILE)
 
 
 /**
- * Main function that will tell the interpreter what to do.
+ * Main function that will tell the interpreter what commands to run.
  *
  * @param cls closure
  */
@@ -97,97 +97,50 @@ run (void *cls,
      struct TALER_TESTING_Interpreter *is)
 {
   struct TALER_TESTING_Command commands[] = {
-    TALER_TESTING_cmd_fakebank_transfer ("create-reserve-1",
-                                         "EUR:5.01",
-                                         42,
-                                         EXCHANGE_ACCOUNT_NO,
-                                         "user42",
-                                         "pass42"),
-    RUN_WIREWATCH ("exec-wirewatch-1"),
+    CMD_TRANSFER_TO_EXCHANGE ("create-reserve-1",
+                              "EUR:5.01"),
+    CMD_EXEC_WIREWATCH ("exec-wirewatch-1"),
     TALER_TESTING_cmd_end ()
   };
 
-  fakebank = TALER_FAKEBANK_start (8082);
-  TALER_TESTING_run (is,
-                     commands);
-  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
-                                 NULL);
+  TALER_TESTING_run_with_fakebank (is,
+                                   commands,
+                                   FAKEBANK_URL);
 }
 
 
-
 int
 main (int argc,
       char * const *argv)
 {
-  struct GNUNET_OS_Process *proc;
-  enum GNUNET_OS_ProcessStatusType type;
-  unsigned long code;
-  unsigned int iter;
-  int result;
-
-  /* These might get in the way... */
+  /* These environment variables get in the way... */
   unsetenv ("XDG_DATA_HOME");
   unsetenv ("XDG_CONFIG_HOME");
   GNUNET_log_setup ("test-exchange-api-new",
                     "INFO",
                     NULL);
-  TALER_TESTING_cleanup_files (CONFIG_FILE);
-  result = TALER_TESTING_prepare_exchange (CONFIG_FILE);
-  if (GNUNET_SYSERR == result)
-    return 1;
-  if (GNUNET_NO == result)
-    return 77;
-
-  /* For fakebank */
   if (GNUNET_OK !=
-      GNUNET_NETWORK_test_port_free (IPPROTO_TCP,
-                                    8082))
+      TALER_TESTING_url_port_free (FAKEBANK_URL))
+    return 77;
+  TALER_TESTING_cleanup_files (CONFIG_FILE);
+  switch (TALER_TESTING_prepare_exchange (CONFIG_FILE))
   {
-    fprintf (stderr,
-             "Required port %u not available, skipping.\n",
-            8082);
+  case GNUNET_SYSERR:
+    GNUNET_break (0);
+    return 1;
+  case GNUNET_NO:
     return 77;
+  case GNUNET_OK:
+    if (GNUNET_OK !=
+        TALER_TESTING_setup_with_exchange (&run,
+                                           NULL,
+                                           CONFIG_FILE))
+      return 1;
+  default:
+    GNUNET_break (0);
+    return 1;
   }
-
-  exchanged = GNUNET_OS_start_process (GNUNET_NO,
-                                       GNUNET_OS_INHERIT_STD_ALL,
-                                       NULL, NULL, NULL,
-                                       "taler-exchange-httpd",
-                                       "taler-exchange-httpd",
-                                       "-c", CONFIG_FILE,
-                                       "-i",
-                                       NULL);
-  /* give child time to start and bind against the socket */
-  fprintf (stderr,
-           "Waiting for `taler-exchange-httpd' to be ready");
-  iter = 0;
-  do
-    {
-      if (10 == iter)
-      {
-       fprintf (stderr,
-                "Failed to launch `taler-exchange-httpd' (or `wget')\n");
-       GNUNET_OS_process_kill (exchanged,
-                               SIGTERM);
-       GNUNET_OS_process_wait (exchanged);
-       GNUNET_OS_process_destroy (exchanged);
-       return 77;
-      }
-      fprintf (stderr, ".");
-      sleep (1);
-      iter++;
-    }
-  while (0 != system ("wget -q -t 1 -T 1 http://127.0.0.1:8081/keys -o 
/dev/null -O /dev/null"));
-  fprintf (stderr, "\n");
-
-  result = TALER_TESTING_setup (&run,
-                                NULL);
-  GNUNET_break (0 ==
-                GNUNET_OS_process_kill (exchanged,
-                                        SIGTERM));
-  GNUNET_break (GNUNET_OK ==
-                GNUNET_OS_process_wait (exchanged));
-  GNUNET_OS_process_destroy (exchanged);
-  return (GNUNET_OK == result) ? 0 : 1;
+  return 0;
 }
+
+/* end of test_exchange_api_new.c */
diff --git a/src/exchange-lib/testing_api_cmd_fakebank_transfer.c 
b/src/exchange-lib/testing_api_cmd_fakebank_transfer.c
index eb8c680..6b1a99d 100644
--- a/src/exchange-lib/testing_api_cmd_fakebank_transfer.c
+++ b/src/exchange-lib/testing_api_cmd_fakebank_transfer.c
@@ -55,6 +55,11 @@ struct FakebankTransferState
   const char *subject;
 
   /**
+   * URL to use for the bank.
+   */
+  const char *bank_url;
+
+  /**
    * Sender (debit) account number.
    */
   uint64_t debit_account_no;
@@ -200,7 +205,7 @@ fakebank_transfer_run (void *cls,
   fts->is = is;
   fts->aih
     = TALER_BANK_admin_add_incoming (TALER_TESTING_interpreter_get_context 
(is),
-                                     "http://localhost:8082/";, /* bank URL: 
FIXME */
+                                     fts->bank_url,
                                      &auth,
                                      "https://exchange.com/";, /* exchange URL: 
FIXME */
                                      subject,
@@ -286,6 +291,7 @@ fakebank_transfer_traits (void *cls,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer (const char *label,
                                      const char *amount,
+                                     const char *bank_url,
                                      uint64_t debit_account_no,
                                      uint64_t credit_account_no,
                                      const char *auth_username,
@@ -295,6 +301,7 @@ TALER_TESTING_cmd_fakebank_transfer (const char *label,
   struct FakebankTransferState *fts;
 
   fts = GNUNET_new (struct FakebankTransferState);
+  fts->bank_url = bank_url;
   fts->credit_account_no = credit_account_no;
   fts->debit_account_no = debit_account_no;
   fts->auth_username = auth_username;
@@ -325,6 +332,7 @@ TALER_TESTING_cmd_fakebank_transfer (const char *label,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer_with_subject (const char *label,
                                                   const char *amount,
+                                                  const char *bank_url,
                                                   uint64_t debit_account_no,
                                                   uint64_t credit_account_no,
                                                   const char *auth_username,
@@ -335,6 +343,7 @@ TALER_TESTING_cmd_fakebank_transfer_with_subject (const 
char *label,
   struct FakebankTransferState *fts;
 
   fts = GNUNET_new (struct FakebankTransferState);
+  fts->bank_url = bank_url;
   fts->credit_account_no = credit_account_no;
   fts->debit_account_no = debit_account_no;
   fts->auth_username = auth_username;
@@ -366,6 +375,7 @@ TALER_TESTING_cmd_fakebank_transfer_with_subject (const 
char *label,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer_with_ref (const char *label,
                                               const char *amount,
+                                              const char *bank_url,
                                               uint64_t debit_account_no,
                                               uint64_t credit_account_no,
                                               const char *auth_username,
@@ -376,6 +386,7 @@ TALER_TESTING_cmd_fakebank_transfer_with_ref (const char 
*label,
   struct FakebankTransferState *fts;
 
   fts = GNUNET_new (struct FakebankTransferState);
+  fts->bank_url = bank_url;
   fts->credit_account_no = credit_account_no;
   fts->debit_account_no = debit_account_no;
   fts->auth_username = auth_username;
diff --git a/src/exchange-lib/testing_api_helpers.c 
b/src/exchange-lib/testing_api_helpers.c
index 36ef5c9..fd3d2dd 100644
--- a/src/exchange-lib/testing_api_helpers.c
+++ b/src/exchange-lib/testing_api_helpers.c
@@ -239,4 +239,89 @@ TALER_TESTING_find_pk (const struct TALER_EXCHANGE_Keys 
*keys,
   return NULL;
 }
 
+
+/**
+ * Initialize scheduler loop and curl context for the testcase
+ * including starting and stopping the exchange using the given
+ * configuration file.
+ */
+int
+TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb,
+                                   void *main_cb_cls,
+                                   const char *config_file)
+{
+  int result;
+  unsigned int iter;
+  struct GNUNET_OS_Process *exchanged;
+
+  exchanged = GNUNET_OS_start_process (GNUNET_NO,
+                                       GNUNET_OS_INHERIT_STD_ALL,
+                                       NULL, NULL, NULL,
+                                       "taler-exchange-httpd",
+                                       "taler-exchange-httpd",
+                                       "-c", config_file,
+                                       "-i",
+                                       NULL);
+  /* give child time to start and bind against the socket */
+  fprintf (stderr,
+           "Waiting for `taler-exchange-httpd' to be ready");
+  iter = 0;
+  do
+    {
+      if (10 == iter)
+      {
+       fprintf (stderr,
+                "Failed to launch `taler-exchange-httpd' (or `wget')\n");
+       GNUNET_OS_process_kill (exchanged,
+                               SIGTERM);
+       GNUNET_OS_process_wait (exchanged);
+       GNUNET_OS_process_destroy (exchanged);
+       return 77;
+      }
+      fprintf (stderr, ".");
+      sleep (1);
+      iter++;
+    }
+  while (0 != system ("wget -q -t 1 -T 1 http://127.0.0.1:8081/keys -o 
/dev/null -O /dev/null"));
+  fprintf (stderr, "\n");
+
+  result = TALER_TESTING_setup (main_cb,
+                                main_cb_cls);
+  GNUNET_break (0 ==
+                GNUNET_OS_process_kill (exchanged,
+                                        SIGTERM));
+  GNUNET_break (GNUNET_OK ==
+                GNUNET_OS_process_wait (exchanged));
+  GNUNET_OS_process_destroy (exchanged);
+  return result;
+}
+
+
+/**
+ * Test port in URL string for availability.
+ */
+int
+TALER_TESTING_url_port_free (const char *url)
+{
+  const char *port;
+  long pnum;
+
+  port = strrchr (url,
+                  (unsigned char) ':');
+  if (NULL == port)
+    pnum = 80;
+  else
+    pnum = strtol (port + 1, NULL, 10);
+  if (GNUNET_OK !=
+      GNUNET_NETWORK_test_port_free (IPPROTO_TCP,
+                                    pnum))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Port %u not available.\n",
+                (unsigned int) pnum);
+    return GNUNET_SYSERR;
+  }
+  return GNUNET_OK;
+}
+
 /* end of testing_api_helpers.c */
diff --git a/src/exchange-lib/testing_api_loop.c 
b/src/exchange-lib/testing_api_loop.c
index 47175fe..8c23649 100644
--- a/src/exchange-lib/testing_api_loop.c
+++ b/src/exchange-lib/testing_api_loop.c
@@ -26,6 +26,8 @@
 #include "exchange_api_handle.h"
 #include "taler_signatures.h"
 #include "taler_testing_lib.h"
+#include "taler_fakebank_lib.h"
+
 
 /**
  * Global state of the interpreter, used by a command
@@ -61,6 +63,12 @@ struct TALER_TESTING_Interpreter
   struct GNUNET_CURL_RescheduleContext *rc;
 
   /**
+   * Handle to our fakebank, if #TALER_TESTING_run_with_fakebank() was used.
+   * Otherwise NULL.
+   */
+  struct TALER_FAKEBANK_Handle *fakebank;
+
+  /**
    * Task run on timeout.
    */
   struct GNUNET_SCHEDULER_Task *timeout_task;
@@ -123,9 +131,46 @@ TALER_TESTING_interpreter_lookup_command (struct 
TALER_TESTING_Interpreter *is,
  * Obtain main execution context for the main loop.
  */
 struct GNUNET_CURL_Context *
-TALER_TESTING_interpreter_get_context (struct TALER_TESTING_Interpreter *i)
+TALER_TESTING_interpreter_get_context (struct TALER_TESTING_Interpreter *is)
+{
+  return is->ctx;
+}
+
+
+struct TALER_FAKEBANK_Handle *
+TALER_TESTING_interpreter_get_fakebank (struct TALER_TESTING_Interpreter *is)
+{
+  return is->fakebank;
+}
+
+
+void
+TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
+                                 struct TALER_TESTING_Command *commands,
+                                 const char *bank_url)
 {
-  return i->ctx;
+  const char *port;
+  long pnum;
+
+  port = strrchr (bank_url,
+                  (unsigned char) ':');
+  if (NULL == port)
+    pnum = 80;
+  else
+    pnum = strtol (port + 1, NULL, 10);
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Staring Fakebank on port %u (%s)\n",
+              (unsigned int) pnum,
+              bank_url);
+  is->fakebank = TALER_FAKEBANK_start ((uint16_t) pnum);
+  if (NULL == is->fakebank)
+  {
+    GNUNET_break (0);
+    is->result = GNUNET_SYSERR;
+    return;
+  }
+  TALER_TESTING_run (is,
+                     commands);
 }
 
 
@@ -258,6 +303,11 @@ do_shutdown (void *cls)
     GNUNET_SCHEDULER_cancel (is->child_death_task);
     is->child_death_task = NULL;
   }
+  if (NULL != is->fakebank)
+  {
+    TALER_FAKEBANK_stop (is->fakebank);
+    is->fakebank = NULL;
+  }
   GNUNET_free_non_null (is->commands);
 }
 
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 48259bc..709139b 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -64,6 +64,13 @@ void
 TALER_TESTING_cleanup_files (const char *config_name);
 
 
+/**
+ * Test port in URL string for availability.
+ */
+int
+TALER_TESTING_url_port_free (const char *url);
+
+
 
 /* ******************* Generic interpreter logic ****************** */
 
@@ -165,6 +172,9 @@ struct GNUNET_CURL_Context *
 TALER_TESTING_interpreter_get_context (struct TALER_TESTING_Interpreter *is);
 
 
+struct TALER_FAKEBANK_Handle *
+TALER_TESTING_interpreter_get_fakebank (struct TALER_TESTING_Interpreter *is);
+
 /**
  * Current command is done, run the next one.
  */
@@ -199,6 +209,13 @@ TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
                    struct TALER_TESTING_Command *commands);
 
 
+
+void
+TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
+                                 struct TALER_TESTING_Command *commands,
+                                 const char *bank_url);
+
+
 typedef void
 (*TALER_TESTING_Main)(void *cls,
                       struct TALER_TESTING_Interpreter *is);
@@ -212,6 +229,17 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb,
                      void *main_cb_cls);
 
 
+/**
+ * Initialize scheduler loop and curl context for the testcase
+ * including starting and stopping the exchange using the given
+ * configuration file.
+ */
+int
+TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb,
+                                   void *main_cb_cls,
+                                   const char *config_file);
+
+
 
 
 /* ****************** Specific interpreter commands **************** */
@@ -224,6 +252,7 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer (const char *label,
                                      const char *amount,
+                                     const char *bank_url,
                                      uint64_t debit_account_no,
                                      uint64_t credit_account_no,
                                      const char *auth_username,
@@ -237,6 +266,7 @@ TALER_TESTING_cmd_fakebank_transfer (const char *label,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer_with_subject (const char *label,
                                                   const char *amount,
+                                                  const char *bank_url,
                                                   uint64_t debit_account_no,
                                                   uint64_t credit_account_no,
                                                   const char *auth_username,
@@ -251,6 +281,7 @@ TALER_TESTING_cmd_fakebank_transfer_with_subject (const 
char *label,
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_fakebank_transfer_with_ref (const char *label,
                                               const char *amount,
+                                              const char *bank_url,
                                               uint64_t debit_account_no,
                                               uint64_t credit_account_no,
                                               const char *auth_username,

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



reply via email to

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