leaks
[oweals/gnunet.git] / src / topology / test_gnunet_service_topology.c
index cc87926593b960ff21b3b1c87f41f2575b6dffcf..b4083055921996e5301449fd9cd956bba0ed7502 100644 (file)
@@ -24,9 +24,9 @@
 #include "platform.h"
 #include "gnunet_testing_lib.h"
 
-#define VERBOSE GNUNET_NO
+#define VERBOSE GNUNET_YES
 
-#define NUM_PEERS 10
+#define NUM_PEERS 2
 
 /**
  * How long until we give up on connecting the peers?
@@ -38,11 +38,58 @@ static int ok;
 
 static int peers_left;
 
+static int connect_left;
+
 static struct GNUNET_TESTING_PeerGroup *pg;
 
+static struct GNUNET_TESTING_Daemon *first;
+
+static struct GNUNET_TESTING_Daemon *last;
+
 static struct GNUNET_SCHEDULER_Handle *sched;
 
 
+static void
+clean_up_task (void *cls,
+                const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  GNUNET_TESTING_daemons_stop (pg);
+  ok = 0;     
+}
+
+
+static void 
+notify_connect_complete(void *cls,
+                        const struct GNUNET_PeerIdentity *first,
+                        const struct GNUNET_PeerIdentity *second,
+                        const struct GNUNET_CONFIGURATION_Handle *first_cfg,
+                        const struct GNUNET_CONFIGURATION_Handle *second_cfg,
+                        struct GNUNET_TESTING_Daemon *first_daemon,
+                        struct GNUNET_TESTING_Daemon *second_daemon,
+                        const char *emsg)
+{
+  if (NULL != emsg)
+    {
+      fprintf (stderr,
+              "Failed to connect two peers: %s\n",
+              emsg);
+      GNUNET_assert (0);
+      return;
+    }
+  connect_left--;
+  if (connect_left == 0)
+    {
+      /* FIXME: check that topology adds a few more links
+        in addition to those that were seeded */
+      /* For now, sleep so we can have the daemon do some work */
+      GNUNET_SCHEDULER_add_delayed (sched,
+                                   GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
+                                   &clean_up_task,
+                                   NULL);
+    }
+}
+
+
 static void my_cb(void *cls,
                   const struct GNUNET_PeerIdentity *id,
                   const struct GNUNET_CONFIGURATION_Handle *cfg,
@@ -50,12 +97,23 @@ static void my_cb(void *cls,
                   const char *emsg)
 {
   GNUNET_assert (id != NULL);
-  peers_left--;
+  peers_left--;  
+  if (first == NULL)
+    {
+      connect_left = NUM_PEERS;
+      first = d;
+      last = d;
+      return;
+    }
+  GNUNET_TESTING_daemons_connect (last, d, TIMEOUT,
+                                 &notify_connect_complete,
+                                 NULL);
   if (peers_left == 0)
     {
-      /* FIXME: connect a few... */
-      GNUNET_TESTING_daemons_stop (pg);
-      ok = 0;
+      /* close circle */
+      GNUNET_TESTING_daemons_connect (d, first, TIMEOUT,
+                                     &notify_connect_complete,
+                                     NULL);
     }
 }
 
@@ -76,7 +134,7 @@ run (void *cls,
   peers_left = NUM_PEERS;
   pg = GNUNET_TESTING_daemons_start (sched, cfg, 
                                     peers_left,
-                                    &my_cb, NULL, NULL);
+                                    &my_cb, NULL, NULL, NULL, NULL);
   GNUNET_assert (pg != NULL);
 }
 
@@ -113,7 +171,7 @@ main (int argc, char *argv[])
 #endif
                     NULL);
   ret = check ();
-  sleep (1);
+  sleep (1); /* FIXME: needed? */
   GNUNET_DISK_directory_remove ("/tmp/test-gnunet-topology");
   return ret;
 }