-doxygen
[oweals/gnunet.git] / src / dv / test_transport_dv.c
index 0b021e92e7007b944f664389e4ff3521bcc8e624..fd55750a40ab9a77ff71815a36af3aa22e2a1aac 100644 (file)
  */
 static int ok;
 
+struct GNUNET_TESTBED_Operation *topology_op;
+
+static GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+
+static void do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  shutdown_task = GNUNET_SCHEDULER_NO_TASK;
+  if (NULL != topology_op)
+  {
+    GNUNET_TESTBED_operation_done (topology_op);
+    topology_op = NULL;
+  }
+}
+
+static void topology_completed (void *cls,
+                                unsigned int nsuccess,
+                                unsigned int nfailures)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Links successful %u / %u failed\n", nsuccess, nfailures);
+  GNUNET_TESTBED_operation_done (topology_op);
+  topology_op = NULL;
+
+  if (nfailures > 0)
+  {
+    fprintf (stderr, "Error: links successful %u but %u failed\n", nsuccess, nfailures);
+    ok = 1;
+  }
+  else
+    ok = 0;
+
+  GNUNET_SCHEDULER_shutdown ();
+}
+
+
 static void
 test_connection (void *cls,
                  struct GNUNET_TESTBED_RunHandle *h,
@@ -38,22 +72,29 @@ test_connection (void *cls,
                  unsigned int links_succeeded,
                  unsigned int links_failed)
 {
-  int c;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Links successful %u / %u failed\n", links_succeeded, links_failed);
-
-  if ( (4 != num_peers) || (0 != links_failed) )
+  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown, NULL);
+  if (4 != num_peers)
   {
-    fprintf (stderr, "Testbed failed to connect peers\n");
-    GNUNET_SCHEDULER_shutdown ();
-    return;
+    ok = 1;
+    fprintf (stderr, "Only %u out of 4 peers were started ...\n",
+        num_peers);
   }
-  ok = 0;
-  if (1)
+
+  if (0 != links_failed)
   {
-    GNUNET_SCHEDULER_shutdown ();
+    /* All peers except DV peers are connected  */
+    fprintf (stderr, "Testbed failed to connect peers,\n");
+
+    topology_op = GNUNET_TESTBED_overlay_configure_topology(NULL, num_peers, peers, NULL,
+        &topology_completed, NULL,
+        GNUNET_TESTBED_TOPOLOGY_CLIQUE,
+        GNUNET_TESTBED_TOPOLOGY_OPTION_END);
+    return;
   }
-  else
-    fprintf (stderr, "Test passed, press CTRL-C to shut down\n");
+
+  ok = 1;
+  fprintf (stderr, "Testbed connected peers, should not happen...\n");
+  GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -61,6 +102,7 @@ int
 main (int argc, char *argv[])
 {
   ok = 1;
+  /* Connecting initial topology */
   (void) GNUNET_TESTBED_test_run ("test-transport-dv",
                                  "test_transport_dv_data.conf",
                                  4,