xvine:fixes
[oweals/gnunet.git] / src / dv / test_transport_dv.c
index aa208515f1a74e40cb9e67c7c9ad820b84085058..6a2cbde9475a97d89e0a27e48d4ae552597358bb 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,
@@ -39,19 +83,36 @@ test_connection (void *cls,
                  unsigned int links_succeeded,
                  unsigned int 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 (%u links OK, %u links failed)\n",
+             links_succeeded,
+             links_failed);
+
+    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 ();
 }
 
 
@@ -59,6 +120,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,