indentation
[oweals/gnunet.git] / src / testing / test_testing_topology_churn.c
index 0d894378ffa5def951ec0ca9e463f893afbcaeeb..ee800c52cb57702f1041d3154db59c4d1ec7d044 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      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 2, or (at your
+     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
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -51,8 +51,6 @@ static unsigned long long peers_left;
 
 static struct GNUNET_TESTING_PeerGroup *pg;
 
 
 static struct GNUNET_TESTING_PeerGroup *pg;
 
-static struct GNUNET_SCHEDULER_Handle *sched;
-
 const struct GNUNET_CONFIGURATION_Handle *main_cfg;
 
 GNUNET_SCHEDULER_TaskIdentifier die_task;
 const struct GNUNET_CONFIGURATION_Handle *main_cfg;
 
 GNUNET_SCHEDULER_TaskIdentifier die_task;
@@ -74,13 +72,35 @@ struct GNUNET_TestMessage
   uint32_t uid;
 };
 
   uint32_t uid;
 };
 
+/**
+ * Check whether peers successfully shut down.
+ */
+void
+shutdown_callback (void *cls, const char *emsg)
+{
+  if (emsg != NULL)
+  {
+#if VERBOSE
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown of peers failed!\n");
+#endif
+    if (ok == 0)
+      ok = 666;
+  }
+  else
+  {
+#if VERBOSE
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All peers successfully shut down!\n");
+#endif
+  }
+}
+
 static void
 finish_testing ()
 {
   GNUNET_assert (pg != NULL);
 
   if (die_task != GNUNET_SCHEDULER_NO_TASK)
 static void
 finish_testing ()
 {
   GNUNET_assert (pg != NULL);
 
   if (die_task != GNUNET_SCHEDULER_NO_TASK)
-    GNUNET_SCHEDULER_cancel(sched, die_task);
+    GNUNET_SCHEDULER_cancel (die_task);
 
 #if VERBOSE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
 
 #if VERBOSE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -88,30 +108,29 @@ finish_testing ()
 #endif
 
 #if VERBOSE
 #endif
 
 #if VERBOSE
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                      "Calling daemons_stop\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Calling daemons_stop\n");
 #endif
 #endif
-  GNUNET_TESTING_daemons_stop (pg, TIMEOUT);
+  GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
 #if VERBOSE
 #if VERBOSE
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                      "daemons_stop finished\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "daemons_stop finished\n");
 #endif
 
   ok = 0;
 }
 
 static void
 #endif
 
   ok = 0;
 }
 
 static void
-end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   char *msg = cls;
 {
   char *msg = cls;
+
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "End badly was called (%s)... stopping daemons.\n", msg);
 
   if (pg != NULL)
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "End badly was called (%s)... stopping daemons.\n", msg);
 
   if (pg != NULL)
-    {
-      GNUNET_TESTING_daemons_stop (pg, TIMEOUT);
-      ok = 7331;                /* Opposite of leet */
-    }
+  {
+    GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
+    ok = 7331;                  /* Opposite of leet */
+  }
   else
     ok = 401;                   /* Never got peers started */
 
   else
     ok = 401;                   /* Never got peers started */
 
@@ -131,63 +150,65 @@ static struct ChurnTestContext churn_ctx;
  * @param cls closure
  * @param emsg NULL on success
  */
  * @param cls closure
  * @param emsg NULL on success
  */
-void churn_callback(void *cls,
-                    const char *emsg)
+void
+churn_callback (void *cls, const char *emsg)
 {
   if (emsg == NULL)
 {
   if (emsg == NULL)
-    {
-      GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Successfully churned peers!\n", emsg);
-      GNUNET_SCHEDULER_add_now(sched, churn_ctx.next_task, NULL);
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Successfully churned peers!\n",
+                emsg);
+    GNUNET_SCHEDULER_add_now (churn_ctx.next_task, NULL);
+  }
   else
   else
-    {
-      GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Failed to churn peers with error `%s'\n", emsg);
-      GNUNET_SCHEDULER_cancel(sched, die_task);
-      die_task = GNUNET_SCHEDULER_add_now(sched, &end_badly, NULL);
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Failed to churn peers with error `%s'\n", emsg);
+    GNUNET_SCHEDULER_cancel (die_task);
+    die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
+  }
 }
 
 
 static void
 }
 
 
 static void
-churn_peers_both()
+churn_peers_both ()
 {
   churn_ctx.next_task = &finish_testing;
 {
   churn_ctx.next_task = &finish_testing;
-  GNUNET_TESTING_daemons_churn(pg, 1, 1, TIMEOUT, &churn_callback, NULL);
+  GNUNET_TESTING_daemons_churn (pg, NULL, 1, 1, TIMEOUT, &churn_callback, NULL);
 }
 
 static void
 }
 
 static void
-churn_peers_off_again()
+churn_peers_off_again ()
 {
   churn_ctx.next_task = &churn_peers_both;
 {
   churn_ctx.next_task = &churn_peers_both;
-  GNUNET_TESTING_daemons_churn(pg, 2, 0, TIMEOUT, &churn_callback, NULL);
+  GNUNET_TESTING_daemons_churn (pg, NULL, 2, 0, TIMEOUT, &churn_callback, NULL);
 }
 
 static void
 }
 
 static void
-churn_peers_on()
+churn_peers_on ()
 {
   churn_ctx.next_task = &churn_peers_off_again;
 {
   churn_ctx.next_task = &churn_peers_off_again;
-  GNUNET_TESTING_daemons_churn(pg, 0, 2, TIMEOUT, &churn_callback, NULL);
+  GNUNET_TESTING_daemons_churn (pg, NULL, 0, 2, TIMEOUT, &churn_callback, NULL);
 }
 
 static void
 }
 
 static void
-churn_peers_off()
+churn_peers_off ()
 {
   churn_ctx.next_task = &churn_peers_on;
 {
   churn_ctx.next_task = &churn_peers_on;
-  GNUNET_TESTING_daemons_churn(pg, 2, 0, TIMEOUT, &churn_callback, NULL);
+  GNUNET_TESTING_daemons_churn (pg, NULL, 2, 0, TIMEOUT, &churn_callback, NULL);
 }
 
 static void
 peers_started_callback (void *cls,
 }
 
 static void
 peers_started_callback (void *cls,
-       const struct GNUNET_PeerIdentity *id,
-       const struct GNUNET_CONFIGURATION_Handle *cfg,
-       struct GNUNET_TESTING_Daemon *d, const char *emsg)
+                        const struct GNUNET_PeerIdentity *id,
+                        const struct GNUNET_CONFIGURATION_Handle *cfg,
+                        struct GNUNET_TESTING_Daemon *d, const char *emsg)
 {
   if (emsg != NULL)
 {
   if (emsg != NULL)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to start daemon with error: `%s'\n",
-                  emsg);
-      return;
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Failed to start daemon with error: `%s'\n", emsg);
+    return;
+  }
   GNUNET_assert (id != NULL);
 #if VERBOSE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Started daemon %llu out of %llu\n",
   GNUNET_assert (id != NULL);
 #if VERBOSE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Started daemon %llu out of %llu\n",
@@ -195,32 +216,29 @@ peers_started_callback (void *cls,
 #endif
   peers_left--;
   if (peers_left == 0)
 #endif
   peers_left--;
   if (peers_left == 0)
-    {
+  {
 #if VERBOSE
 #if VERBOSE
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "All %d daemons started, now testing churn!\n",
-                  num_peers);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "All %d daemons started, now testing churn!\n", num_peers);
 #endif
 #endif
-      GNUNET_SCHEDULER_cancel (sched, die_task);
-      /* Set up task in case topology creation doesn't finish
-       * within a reasonable amount of time */
-      die_task = GNUNET_SCHEDULER_add_delayed (sched,
-                                               GNUNET_TIME_relative_multiply
-                                               (GNUNET_TIME_UNIT_MINUTES, 5),
-                                               &end_badly, "from peers_started_callback");
-      churn_peers_off ();
-      ok = 0;
-    }
+    GNUNET_SCHEDULER_cancel (die_task);
+    /* Set up task in case topology creation doesn't finish
+     * within a reasonable amount of time */
+    die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+                                             (GNUNET_TIME_UNIT_MINUTES, 5),
+                                             &end_badly,
+                                             "from peers_started_callback");
+    churn_peers_off ();
+    ok = 0;
+  }
 }
 
 
 static void
 run (void *cls,
 }
 
 
 static void
 run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *s,
      char *const *args,
      const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
      char *const *args,
      const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-  sched = s;
   ok = 1;
 
 #if VERBOSE
   ok = 1;
 
 #if VERBOSE
@@ -228,11 +246,13 @@ run (void *cls,
               "Starting daemons based on config file %s\n", cfgfile);
 #endif
 
               "Starting daemons based on config file %s\n", cfgfile);
 #endif
 
-  if (GNUNET_YES != GNUNET_CONFIGURATION_get_value_string(cfg, "paths", "servicehome", &test_directory))
-    {
-      ok = 404;
-      return;
-    }
+  if (GNUNET_YES !=
+      GNUNET_CONFIGURATION_get_value_string (cfg, "paths", "servicehome",
+                                             &test_directory))
+  {
+    ok = 404;
+    return;
+  }
 
   if (GNUNET_SYSERR ==
       GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "num_peers",
 
   if (GNUNET_SYSERR ==
       GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "num_peers",
@@ -242,6 +262,7 @@ run (void *cls,
   main_cfg = cfg;
 
   peers_left = num_peers;
   main_cfg = cfg;
 
   peers_left = num_peers;
+  GNUNET_assert (num_peers > 0 && num_peers < (unsigned int) -1);
 
   /* For this specific test we only really want a CLIQUE topology as the
    * overlay allowed topology, and a RING topology as the underlying connection
 
   /* For this specific test we only really want a CLIQUE topology as the
    * overlay allowed topology, and a RING topology as the underlying connection
@@ -253,14 +274,18 @@ run (void *cls,
 
 
   /* Set up a task to end testing if peer start fails */
 
 
   /* Set up a task to end testing if peer start fails */
-  die_task = GNUNET_SCHEDULER_add_delayed (sched,
-                                           GNUNET_TIME_relative_multiply
+  die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
                                            (GNUNET_TIME_UNIT_MINUTES, 5),
                                            (GNUNET_TIME_UNIT_MINUTES, 5),
-                                           &end_badly, "didn't start all daemons in reasonable amount of time!!!");
+                                           &end_badly,
+                                           "didn't start all daemons in reasonable amount of time!!!");
 
 
-  pg = GNUNET_TESTING_daemons_start (sched, cfg,
-                                     peers_left, TIMEOUT, NULL, NULL, &peers_started_callback, NULL,
-                                     NULL, NULL, NULL);
+  pg = GNUNET_TESTING_daemons_start (cfg,
+                                     peers_left,
+                                     peers_left,
+                                     peers_left,
+                                     TIMEOUT, NULL, NULL,
+                                     &peers_started_callback, NULL, NULL,
+                                     NULL, NULL);
 
 }
 
 
 }
 
@@ -268,7 +293,8 @@ static int
 check ()
 {
   int ret;
 check ()
 {
   int ret;
-  char *const argv[] = {"test-testing-topology-churn",
+
+  char *const argv[] = { "test-testing-topology-churn",
     "-c",
     "test_testing_data_topology_churn.conf",
 #if VERBOSE
     "-c",
     "test_testing_data_topology_churn.conf",
 #if VERBOSE
@@ -280,12 +306,14 @@ check ()
     GNUNET_GETOPT_OPTION_END
   };
   ret = GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
     GNUNET_GETOPT_OPTION_END
   };
   ret = GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
-                      argv, "test-testing-topology-churn", "nohelp",
-                      options, &run, &ok);
+                            argv, "test-testing-topology-churn", "nohelp",
+                            options, &run, &ok);
   if (ret != GNUNET_OK)
   if (ret != GNUNET_OK)
-    {
-      GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "`test-testing-topology-churn': Failed with error code %d\n", ret);
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "`test-testing-topology-churn': Failed with error code %d\n",
+                ret);
+  }
 
   return ok;
 }
 
   return ok;
 }
@@ -309,12 +337,13 @@ main (int argc, char *argv[])
    * of by the testing framework.
    */
   if (test_directory != NULL)
    * of by the testing framework.
    */
   if (test_directory != NULL)
+  {
+    if (GNUNET_DISK_directory_remove (test_directory) != GNUNET_OK)
     {
     {
-      if (GNUNET_DISK_directory_remove (test_directory) != GNUNET_OK)
-        {
-          GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Failed to remove testing directory %s\n", test_directory);
-        }
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Failed to remove testing directory %s\n", test_directory);
     }
     }
+  }
 
   return ret;
 }
 
   return ret;
 }