-adding some rudimentary logging
[oweals/gnunet.git] / src / transport / transport-testing.c
index d11c885f811ba00ded265a6a3a8ca4b9f466afe3..dcd95053b176f004a79c5744fc01ce23bd514fe6 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "transport-testing.h"
 
-#define VERBOSE GNUNET_YES
 #define HOSTKEYFILESIZE 914
 
 static const char *
@@ -254,9 +253,13 @@ try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 
 /**
  * Start a peer with the given configuration
+ * @param tth the testing handle
+ * @param cfgname configuration file
+ * @param peer_id the peer_id
  * @param rec receive callback
  * @param nc connect callback
  * @param nd disconnect callback
+ * @param start_cb start callback
  * @param cb_cls closure for callback
  * @return the peer context
  */
@@ -285,22 +288,22 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct GNUNET_TRANSPORT_TESTING_handle
   p->cfg = GNUNET_CONFIGURATION_create ();
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
 
-  if (GNUNET_CONFIGURATION_have_value (p->
-      cfg, "PATHS", "SERVICEHOME"))
+  if (GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME"))
     GNUNET_assert (GNUNET_OK ==
                    GNUNET_CONFIGURATION_get_value_string (p->cfg, "PATHS",
                                                           "SERVICEHOME",
                                                           &p->servicehome));
 
-    if (NULL != p->servicehome)
-      GNUNET_DISK_directory_remove (p->servicehome);
+  if (NULL != p->servicehome)
+    GNUNET_DISK_directory_remove (p->servicehome);
 
-  hostkey = get_host_key(tth);
+  hostkey = get_host_key (tth);
   if (hostkey != NULL)
   {
 
     GNUNET_asprintf (&p->hostkeyfile, "%s/.hostkey", p->servicehome);
-    GNUNET_assert(GNUNET_OK == GNUNET_DISK_directory_create_for_file (p->hostkeyfile));
+    GNUNET_assert (GNUNET_OK ==
+                   GNUNET_DISK_directory_create_for_file (p->hostkeyfile));
     fn = GNUNET_DISK_file_open (p->hostkeyfile,
                                 GNUNET_DISK_OPEN_READWRITE |
                                 GNUNET_DISK_OPEN_CREATE,
@@ -353,25 +356,28 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct GNUNET_TRANSPORT_TESTING_handle
 * @param tth testing handle
 * @param p the peer
 * @param cfgname the cfg file used to restart
+* @param restart_cb callback to call when restarted
+* @param cb_cls callback closure
 * @return GNUNET_OK in success otherwise GNUNET_SYSERR
 */
 int
-GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle *tth,
-                                       struct PeerContext *p,
-                                       const char *cfgname)
+GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle
+                                       *tth, struct PeerContext *p,
+                                       const char *cfgname,
+                                       GNUNET_TRANSPORT_TESTING_start_cb
+                                       restart_cb, void *cb_cls)
 {
   struct GNUNET_DISK_FileHandle *fn;
-  int success = GNUNET_OK;
 
+  GNUNET_assert (tth != NULL);
   GNUNET_assert (p != NULL);
   GNUNET_assert (p->hostkeyfile != NULL);
   GNUNET_assert (p->servicehome != NULL);
 
   /* shutdown */
 #if VERBOSE
-    GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
-                     "Stopping peer %u (`%s')\n", p->no,
-                     GNUNET_i2s (&p->id));
+  GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
+                   "Stopping peer %u (`%s')\n", p->no, GNUNET_i2s (&p->id));
 #endif
   if (p->ghh != NULL)
     GNUNET_TRANSPORT_get_hello_cancel (p->ghh);
@@ -396,73 +402,71 @@ GNUNET_TRANSPORT_TESTING_restart_peer (struct GNUNET_TRANSPORT_TESTING_handle *t
     GNUNET_CONFIGURATION_destroy (p->cfg);
   p->cfg = NULL;
 
+
   /* start */
 #if VERBOSE
-    GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
-                     "Restarting peer %u (`%s')\n", p->no,
-                     GNUNET_i2s (&p->id));
+  GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
+                   "Restarting peer %u (`%s')\n", p->no, GNUNET_i2s (&p->id));
 #endif
 
+  sleep (5);                    // YUCK!
 
-  GNUNET_assert (tth != NULL);
   if (GNUNET_DISK_file_test (cfgname) == GNUNET_NO)
   {
-  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
-                  "File not found: `%s' \n", cfgname);
-  success = GNUNET_SYSERR;
-  goto fail;
+    GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
+                     "File not found: `%s' \n", cfgname);
+    goto fail;
   }
 
   p->cfg = GNUNET_CONFIGURATION_create ();
   GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
-  if (GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME"))
+
+  if (!GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME"))
+    goto fail;
 
   fn = GNUNET_DISK_file_open (p->hostkeyfile,
-                             GNUNET_DISK_OPEN_READWRITE |
-                             GNUNET_DISK_OPEN_CREATE,
-                             GNUNET_DISK_PERM_USER_READ |
-                             GNUNET_DISK_PERM_USER_WRITE);
+                              GNUNET_DISK_OPEN_READWRITE |
+                              GNUNET_DISK_OPEN_CREATE,
+                              GNUNET_DISK_PERM_USER_READ |
+                              GNUNET_DISK_PERM_USER_WRITE);
   if (fn == NULL)
-  {
-   success = GNUNET_SYSERR;
-   goto fail;
-  }
+    goto fail;
   if (GNUNET_OK != GNUNET_DISK_file_close (fn))
-  {
-   success = GNUNET_SYSERR;
-   goto fail;
-  }
+    goto fail;
 
-  p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
-                              "gnunet-service-arm", "-c", cfgname,
-  #if VERBOSE_PEERS
-                              "-L", "DEBUG",
-  #else
-                              "-L", "ERROR",
-  #endif
-                              NULL);
+  p->arm_proc =
+      GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
+                               "gnunet-service-arm", "-c", cfgname,
+#if VERBOSE_PEERS
+                               "-L", "DEBUG",
+#else
+                               "-L", "ERROR",
+#endif
+                               NULL);
 
   p->th =
-     GNUNET_TRANSPORT_connect (p->cfg, NULL, p, &notify_receive,
-                               &notify_connect, &notify_disconnect);
+      GNUNET_TRANSPORT_connect (p->cfg, NULL, p, &notify_receive,
+                                &notify_connect, &notify_disconnect);
   GNUNET_assert (p->th != NULL);
 
+  p->start_cb = restart_cb;
+  p->cb_cls = cb_cls;
+
   p->ghh = GNUNET_TRANSPORT_get_hello (p->th, &get_hello, p);
   GNUNET_assert (p->ghh != NULL);
+  return GNUNET_OK;
 
-  fail:
-  if (success == GNUNET_SYSERR)
-  {
-   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
-                    "Restarting peer %u (`%s') failed, removing peer\n", p->no,
-                    GNUNET_i2s (&p->id));
-   GNUNET_TRANSPORT_TESTING_stop_peer (tth,p);
-  }
-  return success;
+fail:
+  GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
+                   "Restarting peer %u (`%s') failed, removing peer\n", p->no,
+                   GNUNET_i2s (&p->id));
+  GNUNET_TRANSPORT_TESTING_stop_peer (tth, p);
+  return GNUNET_SYSERR;
 }
 
 /**
  * shutdown the given peer
+ * @param tth testing handle
  * @param p the peer
  */
 void
@@ -566,7 +570,9 @@ GNUNET_TRANSPORT_TESTING_connect_peers (struct GNUNET_TRANSPORT_TESTING_handle
 /**
  * Cancel the request to connect two peers
  * Tou MUST cancel the request if you stop the peers before the peers connected succesfully
- * @param cc a connect request handle
+ *
+ * @param tth transport testing handle
+ * @param ccr a connect request handle
  */
 void
 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (struct
@@ -636,20 +642,20 @@ GNUNET_TRANSPORT_TESTING_done (struct GNUNET_TRANSPORT_TESTING_handle *tth)
 struct GNUNET_TRANSPORT_TESTING_handle *
 GNUNET_TRANSPORT_TESTING_init ()
 {
-  struct GNUNET_TRANSPORT_TESTING_handle *tth =
-      GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_TESTING_handle));
+  struct GNUNET_TRANSPORT_TESTING_handle *tth;
   struct GNUNET_DISK_FileHandle *fd;
   uint64_t fs;
   uint64_t total_hostkeys;
 
 
   /* prepare hostkeys */
+  tth = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_TESTING_handle));
   tth->hostkey_data = NULL;
-  char * hostkeys_file = "../../contrib/testing_hostkeys.dat";
+  const char *hostkeys_file = "../../contrib/testing_hostkeys.dat";
+
   if (GNUNET_YES != GNUNET_DISK_file_test (hostkeys_file))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Could not read hostkeys file!\n"));
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not read hostkeys file!\n"));
   }
   else
   {
@@ -658,8 +664,8 @@ GNUNET_TRANSPORT_TESTING_init ()
                                 GNUNET_DISK_PERM_NONE);
     if (NULL == fd)
     {
-      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open",
-                                hostkeys_file);
+      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", hostkeys_file);
+      GNUNET_free (tth);
       return NULL;
     }
 
@@ -669,7 +675,7 @@ GNUNET_TRANSPORT_TESTING_init ()
     if (0 != (fs % HOSTKEYFILESIZE))
     {
       GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
-                  "File size %llu seems incorrect for hostkeys...\n", fs);
+                       "File size %llu seems incorrect for hostkeys...\n", fs);
     }
     else
     {
@@ -677,7 +683,7 @@ GNUNET_TRANSPORT_TESTING_init ()
       tth->hostkey_data = GNUNET_malloc_large (fs);
       GNUNET_assert (fs == GNUNET_DISK_file_read (fd, tth->hostkey_data, fs));
       GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
-                  "Read %llu hostkeys from file\n", total_hostkeys);
+                       "Read %llu hostkeys from file\n", total_hostkeys);
       tth->hostkeys_total = total_hostkeys;
     }
     GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd));
@@ -832,8 +838,9 @@ suc:
 /**
  * This function takes the filename (e.g. argv[0), removes a "lt-"-prefix and
  * if existing ".exe"-prefix and adds the peer-number
+ *
  * @param file filename of the test, e.g. argv[0]
- * @param cfgname where to write the result
+ * @param dest where to write the filename
  * @param count peer number
  */
 void