gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-twister] branch master updated (175ad84 -> 3513119)


From: gnunet
Subject: [GNUnet-SVN] [taler-twister] branch master updated (175ad84 -> 3513119)
Date: Fri, 02 Mar 2018 15:17:20 +0100

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

marcello pushed a change to branch master
in repository twister.

    from 175ad84  helpers compile.
     new 3e9bfdf  check for talertesting among dependencies.
     new ad37b80  cmd exec compiles.
     new d5a431a  export testing lib header
     new 3513119  need process-trait.

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 configure.ac                                       |  28 +++++-
 src/include/Makefile.am                            |   3 +-
 src/include/taler_twister_service.h                |   6 +-
 src/include/taler_twister_testing_lib.h            |   1 +
 .../twister.conf => test/test_twister.conf}        |   3 +-
 src/twister/Makefile.am                            |  22 +++-
 src/twister/taler-twister-service.c                | 112 +++++++++++++--------
 src/twister/taler-twister.c                        |  23 ++++-
 src/twister/testing_api_cmd_exec_client.c          |  18 +++-
 src/twister/testing_api_helpers.c                  |  53 +++++++++-
 src/twister/twister_api.c                          |  14 ++-
 11 files changed, 214 insertions(+), 69 deletions(-)
 copy src/{twister/twister.conf => test/test_twister.conf} (82%)

diff --git a/configure.ac b/configure.ac
index afdb266..7820aec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,7 +88,6 @@ AS_IF([test $libgnunetutil != 1],
 ***   https://gnunet.org
 *** ]])])
 
-
 # Check for GNUnet's libgnunetjson.
 libgnunetjson=0
 AC_MSG_CHECKING([for libgnunetjson])
@@ -265,6 +264,33 @@ CFLAGS=$CFLAGS_SAVE
 LDFLAGS=$LDFLAGS_SAVE
 LIBS=$LIBS_SAVE
 
+# Check for Taler's libtalertesting
+libtalertesting=0
+AC_MSG_CHECKING([for libtalertesting])
+AC_ARG_WITH(exchange,
+            [AS_HELP_STRING([--with-exchange=PFX],
+              [base of Taler EXCHANGE installation, provides testing 
dependency.])],
+            [AC_MSG_RESULT([given as $with_exchange])],
+            [AC_MSG_RESULT(not given)
+             with_exchange=yes])
+AS_CASE([$with_exchange],
+        [yes], [],
+        [no], [],
+        [LDFLAGS="-L$with_exchange/lib $LDFLAGS"
+         CPPFLAGS="-I$with_exchange/include $CPPFLAGS"])
+
+CPPFLAGS="$CPPFLAGS"
+LDFLAGS="$LDFLAGS -L/usr/local/lib"
+
+
+
+AC_CHECK_HEADERS([gnunet/platform.h taler/taler_testing_lib.h],
+ [AC_CHECK_LIB([talertesting], [TALER_TESTING_setup], 
libtalertesting=1,,[-ltalerexchange -ltalerbank])],
+   [], [#ifdef HAVE_GNUNET_PLATFORM_H
+          #include <gnunet/platform.h>
+        #endif])
+
+AM_CONDITIONAL(HAVE_TALERTESTING, test x$libtalertesting = x1)
 
 # should developer logic be compiled (not-for-production code)?
 AC_MSG_CHECKING(whether to compile developer logic)
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index 238babf..1eff945 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -4,4 +4,5 @@ SUBDIRS = .
 talerincludedir = $(includedir)/taler
 
 talerinclude_HEADERS = \
-  taler_twister_service.h
+  taler_twister_service.h \
+  taler_twister_testing_lib.h
diff --git a/src/include/taler_twister_service.h 
b/src/include/taler_twister_service.h
index b279025..c9b5fb8 100644
--- a/src/include/taler_twister_service.h
+++ b/src/include/taler_twister_service.h
@@ -53,8 +53,7 @@ struct TALER_TWISTER_Handle;
  * Connect to the twister service.
  *
  * @param cfg the configuration to use
- * @return handle to use in #TALER_TWISTER_disconnect
- *         to disconnect
+ * @return handle to use in #TALER_TWISTER_disconnect to disconnect
  */
 struct TALER_TWISTER_Handle *
 TALER_TWISTER_connect
@@ -129,13 +128,10 @@ TALER_TESTING_prepare_twister (const char 
*config_filename);
  * Run the twister service.
  *
  * @param config_filename configuration file name.
- * @param base_url twister base URL, used by wget to check
- *        if the twister is up and running.
  *
  * @return twister process handle, NULL upon errors.
  */
 struct GNUNET_OS_Process *
 TALER_TESTING_run_twister (const char *config_filename);
 
-
 #endif /* TALER_NSE_SERVICE_H_ */
diff --git a/src/include/taler_twister_testing_lib.h 
b/src/include/taler_twister_testing_lib.h
index e64ac43..597dc3a 100644
--- a/src/include/taler_twister_testing_lib.h
+++ b/src/include/taler_twister_testing_lib.h
@@ -43,6 +43,7 @@
  */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_hack_response_code (const char *label,
+                                      const char *config_filename,
                                       unsigned int http_status);
 
 
diff --git a/src/twister/twister.conf b/src/test/test_twister.conf
similarity index 82%
copy from src/twister/twister.conf
copy to src/test/test_twister.conf
index b62d883..fbe48e2 100644
--- a/src/twister/twister.conf
+++ b/src/test/test_twister.conf
@@ -2,7 +2,8 @@
 # HTTP listen port for twister
 HTTP_PORT = 8888
 
-# HTTP Destination for twister
+# HTTP Destination for twister.  The test-Webserver needs
+# to listen on the port used here.
 # Note: no trailing '/'!
 DESTINATION_BASE_URL = http://localhost:8080
 
diff --git a/src/twister/Makefile.am b/src/twister/Makefile.am
index 1721280..abd67f9 100644
--- a/src/twister/Makefile.am
+++ b/src/twister/Makefile.am
@@ -26,13 +26,27 @@ taler_twister_LDADD = \
   $(XLIB) $(GN_LIBINTL)
 
 
-lib_LTLIBRARIES = libtalertwister.la
+lib_LTLIBRARIES = \
+  libtalertwister.la
+
+if HAVE_TALERTESTING
+lib_LTLIBRARIES += libtalertwistertesting.la
+libtalertwistertesting_la_SOURCES = \
+  testing_api_helpers.c \
+  testing_api_cmd_exec_client.c
+libtalertwistertesting_la_LIBADD = \
+  -lgnunetutil \
+  -ltalertesting \
+  $(XLIB)
+libtalertwistertesting_la_LDFLAGS = \
+  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
+  -version-info 0:0:0
+endif
 
 libtalertwister_la_SOURCES = \
-  twister_api.c twister.h \
-  testing_api_helpers.c
+  twister_api.c twister.h
 libtalertwister_la_LIBADD = \
-  -lgnunetutil \
+  -lgnunetutil
   $(XLIB)
 libtalertwister_la_LDFLAGS = \
   $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
diff --git a/src/twister/taler-twister-service.c 
b/src/twister/taler-twister-service.c
index eff9d84..eaf77a4 100644
--- a/src/twister/taler-twister-service.c
+++ b/src/twister/taler-twister-service.c
@@ -3,10 +3,10 @@
      Copyright (C) 2012-2014 GNUnet e.V.
      Copyright (C) 2018 Taler Systems SA
 
-     GNUnet 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.
+     GNUnet 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.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -44,10 +44,11 @@
  * @param fun name of curl_easy-function that gave the error
  * @param rc return code from curl
  */
-#define LOG_CURL_EASY(level,fun,rc) GNUNET_log(level, _("%s failed at %s:%d: 
`%s'\n"), fun, __FILE__, __LINE__, curl_easy_strerror (rc))
+#define LOG_CURL_EASY(level,fun,rc) \
+  GNUNET_log(level, _("%s failed at %s:%d: `%s'\n"), fun, __FILE__, __LINE__, 
curl_easy_strerror (rc))
 
 
-/* *********************** Datastructures for HTTP handling ****************** 
*/
+/* ******** Datastructures for HTTP handling ********** */
 
 
 /**
@@ -122,7 +123,8 @@ struct HttpRequest
   struct GNUNET_SCHEDULER_Task * wtask;
 
   /**
-   * Buffer we use for moving data between MHD and curl (in both directions).
+   * Buffer we use for moving data between MHD and
+   * curl (in both directions).
    */
   char *io_buf;
 
@@ -624,25 +626,28 @@ curl_download_prepare ()
     GNUNET_NETWORK_fdset_copy_native (gws,
                                      &ws,
                                      max + 1);
-    curl_download_task = GNUNET_SCHEDULER_add_select 
(GNUNET_SCHEDULER_PRIORITY_DEFAULT,
-                                                      rtime,
-                                                      grs, gws,
-                                                      &curl_task_download,
-                                                     curl_multi);
+    curl_download_task = GNUNET_SCHEDULER_add_select
+      (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+       rtime,
+       grs, gws,
+       &curl_task_download,
+       curl_multi);
     GNUNET_NETWORK_fdset_destroy (gws);
     GNUNET_NETWORK_fdset_destroy (grs);
   }
   else
   {
-    curl_download_task = GNUNET_SCHEDULER_add_delayed (rtime,
-                                                       &curl_task_download,
-                                                       curl_multi);
+    curl_download_task = GNUNET_SCHEDULER_add_delayed
+      (rtime,
+       &curl_task_download,
+       curl_multi);
   }
 }
 
 
 /**
- * Task that is run when we are ready to receive more data from curl.
+ * Task that is run when we are ready to receive
+ * more data from curl.
  *
  * @param cls closure, NULL
  */
@@ -667,11 +672,13 @@ curl_task_download (void *cls)
     while (NULL != (msg = curl_multi_info_read (curl_multi,
                                                &msgnum)))
     {
-      GNUNET_break (CURLE_OK ==
-                    curl_easy_getinfo (msg->easy_handle,
-                                       CURLINFO_PRIVATE,
-                                       (char **) &hr ));
-      if (NULL == hr)
+      GNUNET_break
+        (CURLE_OK == curl_easy_getinfo
+          (msg->easy_handle,
+           CURLINFO_PRIVATE,
+           (char **) &hr ));
+
+      if   (NULL == hr)
       {
         GNUNET_break (0);
         continue;
@@ -698,14 +705,16 @@ curl_task_download (void *cls)
               GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                           "Download curl failed: %s\n",
                           curl_easy_strerror (msg->data.result));
-              /* FIXME: indicate error somehow? close MHD connection badly as 
well? */
+              /* FIXME: indicate error somehow?
+               * close MHD connection badly as well? */
               hr->state = REQUEST_STATE_DOWNLOAD_DONE;
               break;
           }
           if (NULL == hr->response)
             hr->response = curl_failure_response;
          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                     "Curl request for `%s' finished, response generated\n",
+                     "Curl request for `%s' finished,"
+                      " response generated\n",
                      hr->url);
          run_mhd_now ();
           break;
@@ -730,14 +739,15 @@ curl_task_download (void *cls)
   if (0 == running)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Suspending cURL multi loop, no more events pending\n");
+                "Suspending cURL multi loop,"
+                " no more events pending\n");
     return; /* nothing more in progress */
   }
   curl_download_prepare ();
 }
 
 
-/* ********************************* MHD response generation 
******************* */
+/* *************** MHD response generation ******************* */
 
 
 /**
@@ -798,7 +808,8 @@ con_val_iter (void *cls,
  * @param upload_data_size set initially to the size of the
  *        @a upload_data provided; the method must update this
  *        value to the number of bytes NOT processed;
- * @param con_cls pointer to location where we store the 'struct Request'
+ * @param con_cls pointer to location where we store the
+ *        'struct Request'
  * @return MHD_YES if the connection was handled successfully,
  *         MHD_NO if the socket must be closed due to a serious
  *         error while handling the request
@@ -844,8 +855,9 @@ create_response (void *cls,
       GNUNET_assert (*upload_data_size + hr->io_len > hr->io_len);
       GNUNET_array_grow (hr->io_buf,
                         hr->io_size,
-                        GNUNET_MAX (hr->io_size * 2 + 1024,
-                                    *upload_data_size + hr->io_len));
+                        GNUNET_MAX
+                           (hr->io_size * 2 + 1024,
+                           *upload_data_size + hr->io_len));
     }
     GNUNET_memcpy (&hr->io_buf[hr->io_len],
                    upload_data,
@@ -1058,12 +1070,14 @@ create_response (void *cls,
 
 
 /**
- * Function called when MHD decides that we are done with a request.
+ * Function called when MHD decides that we
+ * are done with a request.
  *
  * @param cls NULL
  * @param connection connection handle
  * @param con_cls value as set by the last call to
- *        the MHD_AccessHandlerCallback, should be our `struct HttpRequest *`
+ *        the MHD_AccessHandlerCallback, should be
+ *        our `struct HttpRequest *` (set by `create_response()`)
  * @param toe reason for request termination (ignored)
  */
 static void
@@ -1097,8 +1111,12 @@ mhd_completed_cb (void *cls,
   }
   if ( (NULL != hr->response) &&
        (curl_failure_response != hr->response) )
+    /* Destroy non-error responses... (?) */
     MHD_destroy_response (hr->response);
-  for (header = hr->header_head; header != NULL; header = hr->header_head)
+
+  for (header = hr->header_head;
+       header != NULL;
+       header = hr->header_head)
   {
     GNUNET_CONTAINER_DLL_remove (hr->header_head,
                                  hr->header_tail,
@@ -1313,7 +1331,10 @@ do_shutdown (void *cls)
 
 
 /**
- * Main function that will be run
+ * Main function that will be run.  Main tasks are (1) init. the
+ * curl infrastructure (curl_global_init() / curl_multi_init()),
+ * then fetch the HTTP port where its Web service should listen at,
+ * and finally start MHD on that port.
  *
  * @param cls closure
  * @param c configuration
@@ -1343,10 +1364,11 @@ run (void *cls,
     return;
   }
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (c,
-                                             "twister",
-                                             "DESTINATION_BASE_URL",
-                                             &target_server_base_url))
+      GNUNET_CONFIGURATION_get_value_string
+        (c,
+         "twister",
+         "DESTINATION_BASE_URL",
+         &target_server_base_url))
   {
     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
                                "twister",
@@ -1371,14 +1393,16 @@ run (void *cls,
               port);
 
   /* start MHD daemon for HTTP */
-  mhd_daemon = MHD_start_daemon (MHD_USE_DEBUG,
-                                 (uint16_t)  port,
-                                 NULL, NULL,
-                                 &create_response, NULL,
-                                 MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 
16,
-                                 MHD_OPTION_NOTIFY_COMPLETED, 
&mhd_completed_cb, NULL,
-                                 MHD_OPTION_URI_LOG_CALLBACK, 
&mhd_log_callback, NULL,
-                                 MHD_OPTION_END);
+  mhd_daemon = MHD_start_daemon
+    (MHD_USE_DEBUG,
+     (uint16_t)  port,
+     NULL, NULL,
+     &create_response, NULL,
+     MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
+     MHD_OPTION_NOTIFY_COMPLETED, &mhd_completed_cb, NULL,
+     MHD_OPTION_URI_LOG_CALLBACK, &mhd_log_callback, NULL,
+     MHD_OPTION_END);
+
   if (NULL == mhd_daemon)
   {
     GNUNET_break (0);
diff --git a/src/twister/taler-twister.c b/src/twister/taler-twister.c
index 6eec9a8..7abef7b 100644
--- a/src/twister/taler-twister.c
+++ b/src/twister/taler-twister.c
@@ -45,6 +45,13 @@ static int status;
 static unsigned int hack_response_code;
 
 /**
+ * This option is used to check whether the twister can accept
+ * connections over the unix domain socket interface.  Used when
+ * launching it to see if everything (?) is okay.
+ */
+static int check_alive;
+
+/**
  * Number of operations we launched.
  */
 static unsigned int num_ops;
@@ -108,6 +115,14 @@ run (void *cls,
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
+
+
+  if (0 != check_alive)
+  {
+    fprintf (stderr, "Could connect to twister via IPC socket.\n");
+    status = 0;
+  }
+
   if ( (0 != hack_response_code) &&
        (NULL != TALER_TWISTER_change_response_code
          (tth,
@@ -120,8 +135,7 @@ run (void *cls,
 
   if (0 == num_ops)
   {
-    fprintf (stderr,
-             "No valid hacks specified!\n");
+    fprintf (stderr, "No valid hacks specified!\n");
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
@@ -138,6 +152,11 @@ main (int argc,
       char *const *argv)
 {
   struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_option_flag
+      ('a',
+       "checkalive",
+       gettext_noop ("Check if twister accepts IPC connections\n"),
+       &check_alive),
     GNUNET_GETOPT_option_uint
       ('r',
        "responsecode",
diff --git a/src/twister/testing_api_cmd_exec_client.c 
b/src/twister/testing_api_cmd_exec_client.c
index 878895a..b3075d3 100644
--- a/src/twister/testing_api_cmd_exec_client.c
+++ b/src/twister/testing_api_cmd_exec_client.c
@@ -27,7 +27,7 @@
 
 #include "platform.h"
 #include <taler/taler_testing_lib.h>
-#include <taler/taler_twsiter_testing_lib.h>
+#include "taler_twister_testing_lib.h"
 
 struct HackResponseCodeState
 {
@@ -91,8 +91,17 @@ hack_response_code_traits (void *cls,
                            const char *trait,
                            unsigned int index)
 {
-  /* Some other command may "probe" here looking for traits. */
-  return GNUNET_SYSERR;
+
+  struct HackResponseCodeState *hrcs = cls;
+  struct TALER_TESTING_Trait traits[] = {
+    TALER_TESTING_make_trait_process (0, &hrcs->proc),
+    TALER_TESTING_trait_end ()
+  };
+
+  return TALER_TESTING_get_trait (traits,
+                                  ret,
+                                  trait,
+                                  index);
 }
 
 static void
@@ -130,13 +139,14 @@ hack_response_code_run (void *cls,
  * the next connection that will be made to the twister.
  *
  * @param label command label
- * @param http_status new response code to use
  * @param config_filename configuration filename.
+ * @param http_status new response code to use
  *
  * @return the command
  */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_hack_response_code (const char *label,
+                                      const char *config_filename,
                                       unsigned int http_status)
 {
   struct HackResponseCodeState *hrcs;
diff --git a/src/twister/testing_api_helpers.c 
b/src/twister/testing_api_helpers.c
index dc29fe9..5b70ec3 100644
--- a/src/twister/testing_api_helpers.c
+++ b/src/twister/testing_api_helpers.c
@@ -31,8 +31,57 @@
 /**
  * @param config_filename configuration filename.
  *
- * @return the process, or NULL if the process could not
- *         be started.
+ * @return twister base URL, NULL upon errors.
+ */
+char *
+TALER_TESTING_prepare_twister (const char *config_filename)
+{
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  unsigned long long port;
+  char *base_url;
+
+  cfg = GNUNET_CONFIGURATION_create ();
+
+  if (GNUNET_OK != GNUNET_CONFIGURATION_load
+      (cfg, config_filename))
+    TWISTER_FAIL ();
+
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number
+    (cfg, "twister",
+     "HTTP_PORT", &port))
+  {
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                               "twister",
+                               "HTTP_PORT");
+    GNUNET_CONFIGURATION_destroy (cfg);
+    TWISTER_FAIL ();
+  }
+
+  GNUNET_CONFIGURATION_destroy (cfg);
+
+  if (GNUNET_OK != GNUNET_NETWORK_test_port_free
+    (IPPROTO_TCP, (uint16_t) port))
+  {
+    fprintf (stderr,
+             "Required port %llu not available, skipping.\n",
+            port);
+    TWISTER_FAIL ();
+  }
+
+  GNUNET_assert (0 < GNUNET_asprintf
+    (&base_url,
+     "http://localhost:%llu";,
+     port));
+
+  return base_url;
+}
+
+/**
+ * Run the twister service.
+ *
+ * @param config_filename configuration file name.
+ *
+ * @return twister process handle, NULL upon errors.
  */
 struct GNUNET_OS_Process *
 TALER_TESTING_run_twister (const char *config_filename)
diff --git a/src/twister/twister_api.c b/src/twister/twister_api.c
index 78f0427..07583f8 100644
--- a/src/twister/twister_api.c
+++ b/src/twister/twister_api.c
@@ -126,7 +126,8 @@ handle_acknowledgement (void *cls,
  * @return handle to use
  */
 struct TALER_TWISTER_Handle *
-TALER_TWISTER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
+TALER_TWISTER_connect
+  (const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   struct TALER_TWISTER_Handle *h;
 
@@ -134,10 +135,11 @@ TALER_TWISTER_connect (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
   h->cfg = cfg;
   {
     struct GNUNET_MQ_MessageHandler handlers[] = {
-      GNUNET_MQ_hd_fixed_size (acknowledgement,
-                               TWISTER_MESSAGE_TYPE_ACKNOWLEDGEMENT,
-                               struct GNUNET_MessageHeader,
-                               h),
+      GNUNET_MQ_hd_fixed_size
+        (acknowledgement,
+         TWISTER_MESSAGE_TYPE_ACKNOWLEDGEMENT,
+         struct GNUNET_MessageHeader,
+         h),
       GNUNET_MQ_handler_end ()
     };
 
@@ -151,6 +153,8 @@ TALER_TWISTER_connect (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
   }
   if (NULL == h->mq)
   {
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+         "Could not connect to twister service\n");
     GNUNET_free (h);
     return NULL;
   }

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



reply via email to

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