gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r13262 - in gnunet/src: dht dv include testing


From: gnunet
Subject: [GNUnet-SVN] r13262 - in gnunet/src: dht dv include testing
Date: Tue, 12 Oct 2010 14:56:50 +0200

Author: nevans
Date: 2010-10-12 14:56:49 +0200 (Tue, 12 Oct 2010)
New Revision: 13262

Modified:
   gnunet/src/dht/gnunet-dht-driver.c
   gnunet/src/dht/test_dht_multipeer.c
   gnunet/src/dht/test_dht_twopeer.c
   gnunet/src/dht/test_dht_twopeer_put_get.c
   gnunet/src/dv/test_transport_api_dv.c
   gnunet/src/include/gnunet_testing_lib.h
   gnunet/src/testing/test_testing_topology.c
   gnunet/src/testing/test_testing_topology_blacklist.c
   gnunet/src/testing/testing_group.c
Log:
change connect topology in testing_group.c to call callback on all peers 
connected (or possibly timed out connecting)

Modified: gnunet/src/dht/gnunet-dht-driver.c
===================================================================
--- gnunet/src/dht/gnunet-dht-driver.c  2010-10-12 11:46:24 UTC (rev 13261)
+++ gnunet/src/dht/gnunet-dht-driver.c  2010-10-12 12:56:49 UTC (rev 13262)
@@ -2380,7 +2380,7 @@
       expected_connections = UINT_MAX;
       if ((pg != NULL) && (peers_left == 0))
         {
-          expected_connections = GNUNET_TESTING_connect_topology (pg, 
connect_topology, connect_topology_option, connect_topology_option_modifier);
+          expected_connections = GNUNET_TESTING_connect_topology (pg, 
connect_topology, connect_topology_option, connect_topology_option_modifier, 
NULL, NULL);
 
           peer_connect_meter = create_meter(expected_connections, "Peer 
connection ", GNUNET_YES);
           fprintf(stderr, "Have %d expected connections\n", 
expected_connections);

Modified: gnunet/src/dht/test_dht_multipeer.c
===================================================================
--- gnunet/src/dht/test_dht_multipeer.c 2010-10-12 11:46:24 UTC (rev 13261)
+++ gnunet/src/dht/test_dht_multipeer.c 2010-10-12 12:56:49 UTC (rev 13262)
@@ -666,7 +666,7 @@
       expected_connections = -1;
       if ((pg != NULL) && (peers_left == 0))
         {
-          expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier);
+          expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier, 
NULL, NULL);
 #if VERBOSE
           GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                       "Have %d expected connections\n", expected_connections);

Modified: gnunet/src/dht/test_dht_twopeer.c
===================================================================
--- gnunet/src/dht/test_dht_twopeer.c   2010-10-12 11:46:24 UTC (rev 13261)
+++ gnunet/src/dht/test_dht_twopeer.c   2010-10-12 12:56:49 UTC (rev 13262)
@@ -320,7 +320,7 @@
 {
   expected_connections = -1;
   if ((pg != NULL) && (peers_left == 0))
-    expected_connections = GNUNET_TESTING_connect_topology (pg, 
GNUNET_TESTING_TOPOLOGY_CLIQUE, GNUNET_TESTING_TOPOLOGY_OPTION_ALL, 0.0);
+    expected_connections = GNUNET_TESTING_connect_topology (pg, 
GNUNET_TESTING_TOPOLOGY_CLIQUE, GNUNET_TESTING_TOPOLOGY_OPTION_ALL, 0.0, NULL, 
NULL);
 
   GNUNET_SCHEDULER_cancel (sched, die_task);
   if (expected_connections == GNUNET_SYSERR)

Modified: gnunet/src/dht/test_dht_twopeer_put_get.c
===================================================================
--- gnunet/src/dht/test_dht_twopeer_put_get.c   2010-10-12 11:46:24 UTC (rev 
13261)
+++ gnunet/src/dht/test_dht_twopeer_put_get.c   2010-10-12 12:56:49 UTC (rev 
13262)
@@ -407,7 +407,7 @@
       if ((pg != NULL)) /* Sanity check */
         {
           /* Connect peers in a "straight line" topology, return the number of 
expected connections */
-          expected_connections = GNUNET_TESTING_connect_topology (pg, 
GNUNET_TESTING_TOPOLOGY_LINE, GNUNET_TESTING_TOPOLOGY_OPTION_ALL, 0.0);
+          expected_connections = GNUNET_TESTING_connect_topology (pg, 
GNUNET_TESTING_TOPOLOGY_LINE, GNUNET_TESTING_TOPOLOGY_OPTION_ALL, 0.0, NULL, 
NULL);
         }
 
       /* Cancel current timeout fail task */

Modified: gnunet/src/dv/test_transport_api_dv.c
===================================================================
--- gnunet/src/dv/test_transport_api_dv.c       2010-10-12 11:46:24 UTC (rev 
13261)
+++ gnunet/src/dv/test_transport_api_dv.c       2010-10-12 12:56:49 UTC (rev 
13262)
@@ -757,7 +757,7 @@
   expected_connections = -1;
   if ((pg != NULL) && (peers_left == 0))
     {
-      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier);
+      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier, 
NULL, NULL);
 #if VERBOSE
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "Have %d expected connections\n", expected_connections);

Modified: gnunet/src/include/gnunet_testing_lib.h
===================================================================
--- gnunet/src/include/gnunet_testing_lib.h     2010-10-12 11:46:24 UTC (rev 
13261)
+++ gnunet/src/include/gnunet_testing_lib.h     2010-10-12 12:56:49 UTC (rev 
13262)
@@ -879,13 +879,18 @@
  * @param topology which topology to connect the peers in
  * @param options options for connecting the topology
  * @param option_modifier modifier for options that take a parameter
+ * @param notify_callback notification to be called once all connections 
completed
+ * @param notify_cls closure for notification callback
+ *
  * @return the number of connections that will be attempted, GNUNET_SYSERR on 
error
  */
 int
 GNUNET_TESTING_connect_topology (struct GNUNET_TESTING_PeerGroup *pg,
                                  enum GNUNET_TESTING_Topology topology,
                                  enum GNUNET_TESTING_TopologyOption options,
-                                 double option_modifier);
+                                 double option_modifier,
+                                 GNUNET_TESTING_NotifyCompletion 
notify_callback,
+                                 void *notify_cls);
 
 /**
  * Start or stop an individual peer from the given group.

Modified: gnunet/src/testing/test_testing_topology.c
===================================================================
--- gnunet/src/testing/test_testing_topology.c  2010-10-12 11:46:24 UTC (rev 
13261)
+++ gnunet/src/testing/test_testing_topology.c  2010-10-12 12:56:49 UTC (rev 
13262)
@@ -706,13 +706,20 @@
     }
 }
 
+static void topology_creation_finished (void *cls,
+                                        const char *emsg)
+{
+  if (emsg == NULL)
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "All topology connections created 
successfully!\n");
+}
+
 static void
 connect_topology ()
 {
   expected_connections = -1;
   if ((pg != NULL) && (peers_left == 0))
     {
-      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier);
+      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier, 
&topology_creation_finished, NULL);
 #if VERBOSE > 1
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "Have %d expected connections\n", expected_connections);

Modified: gnunet/src/testing/test_testing_topology_blacklist.c
===================================================================
--- gnunet/src/testing/test_testing_topology_blacklist.c        2010-10-12 
11:46:24 UTC (rev 13261)
+++ gnunet/src/testing/test_testing_topology_blacklist.c        2010-10-12 
12:56:49 UTC (rev 13262)
@@ -250,7 +250,7 @@
   expected_connections = -1;
   if ((pg != NULL) && (peers_left == 0))
     {
-      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier);
+      expected_connections = GNUNET_TESTING_connect_topology (pg, 
connection_topology, connect_topology_option, connect_topology_option_modifier, 
NULL, NULL);
 #if VERBOSE
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "Have %d expected connections\n", expected_connections);

Modified: gnunet/src/testing/testing_group.c
===================================================================
--- gnunet/src/testing/testing_group.c  2010-10-12 11:46:24 UTC (rev 13261)
+++ gnunet/src/testing/testing_group.c  2010-10-12 12:56:49 UTC (rev 13262)
@@ -67,7 +67,7 @@
  * Prototype of a function called whenever two peers would be connected
  * in a certain topology.
  */
-typedef int (*GNUNET_TESTING_ConnectionProcessor)(struct 
GNUNET_TESTING_PeerGroup *pg, 
+typedef unsigned int (*GNUNET_TESTING_ConnectionProcessor)(struct 
GNUNET_TESTING_PeerGroup *pg,
                                                  unsigned int first,
                                                  unsigned int second);
 
@@ -556,14 +556,50 @@
   unsigned int fdnum;
 };
 
+struct ConnectTopologyContext
+{
+  /**
+   * How many connections are left to create.
+   */
+  unsigned int remaining_connections;
 
+  /**
+   * Handle to group of peers.
+   */
+  struct GNUNET_TESTING_PeerGroup *pg;
+
+  /**
+   * Temp value set for each iteration.
+   */
+  struct PeerData *first;
+
+  /**
+   * Notification that all peers are connected.
+   */
+  GNUNET_TESTING_NotifyCompletion notify_connections_done;
+
+  /**
+   * Closure for notify.
+   */
+  void *notify_cls;
+};
+
 struct ConnectContext
 {
+  /**
+   * Peer to connect second to.
+   */
   struct GNUNET_TESTING_Daemon *first;
 
+  /**
+   * Peer to connect first to.
+   */
   struct GNUNET_TESTING_Daemon *second;
 
-  struct GNUNET_TESTING_PeerGroup *pg;
+  /**
+   * Higher level topology connection context.
+   */
+  struct ConnectTopologyContext *ct_ctx;
 };
 
 /**
@@ -608,7 +644,7 @@
  *         known topology, GNUNET_NO if not
  */
 int
-GNUNET_TESTING_topology_get(enum GNUNET_TESTING_Topology *topology, char * 
topology_string)
+GNUNET_TESTING_topology_get(enum GNUNET_TESTING_Topology *topology, const char 
* topology_string)
 {
   /**
    * Strings representing topologies in enum
@@ -697,7 +733,7 @@
  */
 int
 GNUNET_TESTING_topology_option_get (enum GNUNET_TESTING_TopologyOption 
*topology_option,
-                                   char * topology_string)
+                                   const char * topology_string)
 {
   /**
    * Options for connecting a topology as strings.
@@ -922,7 +958,7 @@
  *         technically should only be 0 or 2
  *
  */
-static int
+static unsigned int
 add_actual_connections(struct GNUNET_TESTING_PeerGroup *pg, unsigned int 
first, unsigned int second)
 {
   int added;
@@ -979,7 +1015,7 @@
  *         for being sure doesn't bother me!
  *
  */
-static int
+static unsigned int
 add_allowed_connections(struct GNUNET_TESTING_PeerGroup *pg, unsigned int 
first, unsigned int second)
 {
   int added;
@@ -1069,7 +1105,7 @@
  * @return the number of connections added (can be 0, 1 or 2)
  *
  */
-static int
+static unsigned int
 blacklist_connections(struct GNUNET_TESTING_PeerGroup *pg, unsigned int first, 
unsigned int second)
 {
   int added;
@@ -1121,7 +1157,7 @@
  * @return the number of connections removed (can be 0, 1 or 2)
  *
  */
-static int
+static unsigned int
 unblacklist_connections(struct GNUNET_TESTING_PeerGroup *pg, unsigned int 
first, unsigned int second)
 {
   int removed;
@@ -1167,7 +1203,7 @@
  *
  * @return the number of connections created
  */
-static int
+static unsigned int
 create_scale_free (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
 
@@ -1222,7 +1258,7 @@
  * @return the number of connections that were set up
  *
  */
-int
+static unsigned int
 create_small_world_ring(struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int i, j;
@@ -1344,7 +1380,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_nated_internet (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int outer_count, inner_count;
@@ -1406,7 +1442,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_small_world (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int i, j, k;
@@ -1568,7 +1604,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_erdos_renyi (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   double temp_rand;
@@ -1628,7 +1664,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_2d_torus (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int i;
@@ -1716,7 +1752,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_clique (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int outer_count;
@@ -1753,7 +1789,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_line (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int count;
@@ -1786,7 +1822,7 @@
  * @return the number of connections that were set up
  *
  */
-static int
+static unsigned int
 create_ring (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_ConnectionProcessor proc)
 {
   unsigned int count;
@@ -2019,7 +2055,7 @@
  * @param transports space delimited list of transports to blacklist
  */
 static int
-create_and_copy_blacklist_files (struct GNUNET_TESTING_PeerGroup *pg, char 
*transports)
+create_and_copy_blacklist_files (struct GNUNET_TESTING_PeerGroup *pg, const 
char *transports)
 {
   FILE *temp_file_handle;
   static struct BlacklistContext blacklist_ctx;
@@ -2176,10 +2212,19 @@
                                      struct GNUNET_TESTING_Daemon 
*second_daemon,
                                      const char *emsg)
 {
-  struct GNUNET_TESTING_PeerGroup *pg = cls;
+  struct ConnectTopologyContext *ct_ctx = cls;
+  struct GNUNET_TESTING_PeerGroup *pg = ct_ctx->pg;
   outstanding_connects--;
+  ct_ctx->remaining_connections--;
+  if (ct_ctx->remaining_connections == 0)
+    {
+      if (ct_ctx->notify_connections_done != NULL)
+        ct_ctx->notify_connections_done(ct_ctx->notify_cls, NULL);
+      GNUNET_free(ct_ctx);
+    }
 
-  pg->notify_connection(pg->notify_connection_cls, first, second, distance, 
first_cfg, second_cfg, first_daemon, second_daemon, emsg);
+  if (pg->notify_connection != NULL)
+    pg->notify_connection (pg->notify_connection_cls, first, second, distance, 
first_cfg, second_cfg, first_daemon, second_daemon, emsg);
 }
 
 
@@ -2203,7 +2248,7 @@
           GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                       _("Delaying connect, we have too many outstanding 
connections!\n"));
 #endif
-      GNUNET_SCHEDULER_add_delayed(connect_context->pg->sched, 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 100), 
&schedule_connect, connect_context);
+      GNUNET_SCHEDULER_add_delayed(connect_context->ct_ctx->pg->sched, 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 100), 
&schedule_connect, connect_context);
     }
   else
     {
@@ -2217,7 +2262,7 @@
                                       CONNECT_TIMEOUT,
                                       CONNECT_ATTEMPTS,
                                       &internal_connect_notify,
-                                      connect_context->pg);
+                                      connect_context->ct_ctx);
       GNUNET_free(connect_context);
     }
 }
@@ -2238,14 +2283,15 @@
                   const GNUNET_HashCode * key,
                   void *value)
 {
-  struct PeerData *first = cls;
+  struct ConnectTopologyContext *ct_ctx = cls;
+  struct PeerData *first = ct_ctx->first;
   struct GNUNET_TESTING_Daemon *second = value;
   struct ConnectContext *connect_context;
 
   connect_context = GNUNET_malloc(sizeof(struct ConnectContext));
-  connect_context->pg = first->pg;
   connect_context->first = first->daemon;
   connect_context->second = second;
+  connect_context->ct_ctx = ct_ctx;
   GNUNET_SCHEDULER_add_now(first->pg->sched, &schedule_connect, 
connect_context);
 
   return GNUNET_YES;
@@ -2309,23 +2355,41 @@
  * @return the number of connections that will be attempted
  */
 static int
-connect_topology (struct GNUNET_TESTING_PeerGroup *pg)
+connect_topology (struct GNUNET_TESTING_PeerGroup *pg, 
GNUNET_TESTING_NotifyCompletion notify_callback, void *notify_cls)
 {
   unsigned int pg_iter;
   int ret;
-  int total;
+  unsigned int total;
+  struct ConnectTopologyContext *ct_ctx;
 #if OLD
   struct PeerConnection *connection_iter;
   struct ConnectContext *connect_context;
 #endif
 
   total = 0;
+  ct_ctx = GNUNET_malloc(sizeof(struct ConnectTopologyContext));
+  ct_ctx->notify_connections_done = notify_callback;
+  ct_ctx->notify_cls = notify_cls;
+  ct_ctx->pg = pg;
+
   for (pg_iter = 0; pg_iter < pg->total; pg_iter++)
     {
-      ret = 
GNUNET_CONTAINER_multihashmap_iterate(pg->peers[pg_iter].connect_peers, 
&connect_iterator, &pg->peers[pg_iter]);
-      if (GNUNET_SYSERR == ret)
-        return GNUNET_SYSERR;
+      total += 
GNUNET_CONTAINER_multihashmap_size(pg->peers[pg_iter].connect_peers);
+    }
 
+  if (total == 0)
+    {
+      GNUNET_free(ct_ctx);
+      return total;
+    }
+  ct_ctx->remaining_connections = total;
+  total = 0;
+
+  for (pg_iter = 0; pg_iter < pg->total; pg_iter++)
+    {
+      ct_ctx->first = &pg->peers[pg_iter];
+      ret = 
GNUNET_CONTAINER_multihashmap_iterate(pg->peers[pg_iter].connect_peers, 
&connect_iterator, ct_ctx);
+      GNUNET_assert(GNUNET_SYSERR != ret && ret >= 0);
       total = total + ret;
 
 #if OLD
@@ -2365,14 +2429,14 @@
  * @return the maximum number of connections were all allowed peers
  *         connected to each other
  */
-int
+unsigned int
 GNUNET_TESTING_create_topology (struct GNUNET_TESTING_PeerGroup *pg,
                                 enum GNUNET_TESTING_Topology topology,
                                 enum GNUNET_TESTING_Topology restrict_topology,
-                                char *restrict_transports)
+                                const char *restrict_transports)
 {
   int ret;
-  int num_connections;
+  unsigned int num_connections;
   int unblacklisted_connections;
 
   GNUNET_assert (pg->notify_connection != NULL);
@@ -2480,6 +2544,7 @@
   /* Use the create clique method to initially set all connections as 
blacklisted. */
   if (restrict_topology != GNUNET_TESTING_TOPOLOGY_NONE)
     create_clique (pg, &blacklist_connections);
+
   unblacklisted_connections = 0;
   /* Un-blacklist connections as per the topology specified */
   switch (restrict_topology)
@@ -2565,7 +2630,7 @@
         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                     _("Failed during blacklist file copying!\n"));
 #endif
-        return GNUNET_SYSERR;
+        return 0;
       }
     else
       {
@@ -3361,13 +3426,18 @@
  * @param topology which topology to connect the peers in
  * @param options options for connecting the topology
  * @param option_modifier modifier for options that take a parameter
+ * @param notify_callback notification to be called once all connections 
completed
+ * @param notify_cls closure for notification callback
+ *
  * @return the number of connections that will be attempted, GNUNET_SYSERR on 
error
  */
 int
 GNUNET_TESTING_connect_topology (struct GNUNET_TESTING_PeerGroup *pg,
                                  enum GNUNET_TESTING_Topology topology,
                                  enum GNUNET_TESTING_TopologyOption options,
-                                 double option_modifier)
+                                 double option_modifier,
+                                 GNUNET_TESTING_NotifyCompletion 
notify_callback,
+                                 void *notify_cls)
 {
   switch (topology)
       {
@@ -3485,7 +3555,7 @@
       break;
     }
 
-  return connect_topology(pg);
+  return connect_topology(pg, notify_callback, notify_cls);
 }
 
 /**




reply via email to

[Prev in Thread] Current Thread [Next in Thread]