Testing api change and related test case fixes, remember retry task and clean up...
authorNathan S. Evans <evans@in.tum.de>
Tue, 15 Feb 2011 12:06:37 +0000 (12:06 +0000)
committerNathan S. Evans <evans@in.tum.de>
Tue, 15 Feb 2011 12:06:37 +0000 (12:06 +0000)
17 files changed:
src/core/core_api.c
src/core/gnunet-service-core.c
src/dht/test_dht_multipeer.c
src/dht/test_dht_twopeer.c
src/dht/test_dht_twopeer_path_tracking.c
src/dht/test_dht_twopeer_put_get.c
src/dv/test_transport_api_dv.c
src/fs/fs_test_lib.c
src/include/gnunet_testing_lib.h
src/testing/test_testing_group.c
src/testing/test_testing_group_remote.c
src/testing/test_testing_large_topology.c
src/testing/test_testing_topology.c
src/testing/test_testing_topology_blacklist.c
src/testing/test_testing_topology_churn.c
src/topology/test_gnunet_daemon_topology.c
src/transport/plugin_transport_unix.c

index a2e0dae091b3cde35da1e23da2973cab428b05d8..f4a19790949fa630778fd4abd1e2d0dbdfa835b4 100644 (file)
@@ -1728,6 +1728,10 @@ GNUNET_CORE_peer_request_connect (struct GNUNET_CORE_Handle *h,
   struct GNUNET_CORE_PeerRequestHandle *ret;
   struct ControlMessage *cm;
   struct ConnectMessage *msg;
+
+  if (NULL != GNUNET_CONTAINER_multihashmap_get (h->peers,
+                                          &peer->hashPubKey))
+    GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, "core_api", "Received CONNECT requests for already connected peer!\n");
   
   cm = GNUNET_malloc (sizeof (struct ControlMessage) + 
                      sizeof (struct ConnectMessage));
index 410d65b93d5ea4a7fa2fd6c69f171c8e97e23d6c..4519991b3c93d779c09894b5e5659a8630dddb27 100644 (file)
@@ -3336,9 +3336,9 @@ process_hello_retry_handle_set_key (void *cls,
 
   if (err_msg != NULL)
   {
-         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                     _("Error in communication with PEERINFO service\n"));
-       /* return; */
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                _("Error in communication with PEERINFO service\n"));
+    /* return; */
   }
 
   if (peer == NULL)
index 626c1bc30ec5b190879011926c878fc7161414a6..593e965278b927d0a294324d881952b7f55e9e90 100644 (file)
@@ -876,8 +876,9 @@ run (void *cls,
                                            &end_badly, "didn't generate all hostkeys within a reasonable amount of time!!!");
 
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     peers_left,
-                                     peers_left,
+                                     peers_left, /* Total number of peers */
+                                     peers_left, /* Number of outstanding connections */
+                                     peers_left, /* Number of parallel ssh connections, or peers being started at once */
                                      GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, SECONDS_PER_PEER_START * num_peers),
                                      &hostkey_callback,
                                      NULL,
index e85c6101bc4ffb9c7b50f90c7e94eb6322279184..8c373d3652abbbb78a7eef3b9e1b1071eaebe79a 100644 (file)
@@ -415,6 +415,7 @@ run (void *cls,
   pg = GNUNET_TESTING_daemons_start (cfg,
                                      num_peers,
                                      10,
+                                     num_peers,
                                      TIMEOUT,
                                      NULL, NULL,
                                      &peers_started_callback,
index f8ce26da63e408e88cbeb5b0dc0599f2d23a300c..d4e5a13322db60df4ad850c6759d478c85c50070 100644 (file)
@@ -461,8 +461,9 @@ run (void *cls,
   /* Start num_peers peers, call peers_started_callback on peer start, topology_callback on peer connect */
   /* Read the API documentation for other parameters! */
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     num_peers,
-                                     num_peers,
+                                     peers_left, /* Total number of peers */
+                                     peers_left, /* Number of outstanding connections */
+                                     peers_left, /* Number of parallel ssh connections, or peers being started at once */
                                      TIMEOUT,
                                      NULL,
                                      NULL,
index 057f9ebfe50a7a0ec64944797079ea8a5c7ad49e..40a1652362469365c6ab5cde32ca929e07d290c4 100644 (file)
@@ -540,6 +540,7 @@ run (void *cls,
   pg = GNUNET_TESTING_daemons_start (cfg,
                                      num_peers,
                                      2,
+                                     2,
                                      TIMEOUT,
                                      NULL,
                                      NULL,
index 8a2e54142a70818846f3ec753f8bf0b04a05f421..e6caa43cae89f13a361358f90ca10ba834f2352e 100644 (file)
@@ -1138,8 +1138,9 @@ run (void *cls,
 
   peer_daemon_hash = GNUNET_CONTAINER_multihashmap_create(peers_left);
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     peers_left,
-                                     peers_left,
+                                     peers_left, /* Total number of peers */
+                                     peers_left, /* Number of outstanding connections */
+                                     peers_left, /* Number of parallel ssh connections, or peers being started at once */
                                      TIMEOUT,
                                      &hostkey_callback,
                                      NULL,
index 287c0eb1c85fdc85bf7bdd554c2d19faf418dd86..a3f33a5226323abc43c6951670afbd0f32c0d205 100644 (file)
@@ -395,6 +395,7 @@ GNUNET_FS_TEST_daemons_start (const char *template_cfg_file,
   sctx->group = GNUNET_TESTING_daemons_start (sctx->cfg,
                                              total,
                                              total, /* Outstanding connections */
+                                             total, /* Outstanding ssh connections */
                                              timeout,
                                              NULL,
                                              NULL,
index b0c43c44bfcfef5502c621c7239531ca1ef2baec..6ddc4ea7418c2035ff938cca9abb9c5c32e50026 100644 (file)
@@ -567,7 +567,9 @@ void GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
  * @param cfg configuration template to use
  * @param total number of daemons to start
  * @param max_concurrent_connections for testing, how many peers can
- *                                   we connect to simultaneously
+*                                   we connect to simultaneously
+ * @param max_concurrent_ssh when starting with ssh, how many ssh
+ *        connections will we allow at once (based on remote hosts allowed!)
  * @param timeout total time allowed for peers to start
  * @param hostkey_callback function to call on each peers hostkey generation
  *        if NULL, peers will be started by this call, if non-null,
@@ -587,6 +589,7 @@ struct GNUNET_TESTING_PeerGroup *
 GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
                               unsigned int total,
                               unsigned int max_concurrent_connections,
+                              unsigned int max_concurrent_ssh,
                               struct GNUNET_TIME_Relative timeout,
                               GNUNET_TESTING_NotifyHostkeyCreated
                               hostkey_callback, void *hostkey_cls,
index 1facaa63f7df6c1caa9312f4b18d8efff5602acc..0056588bc3b34cc21db7f1d9c6fe12b8c2f41907 100644 (file)
@@ -116,8 +116,9 @@ run (void *cls,
 #endif
   peers_left = NUM_PEERS;
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     peers_left,
-                                     NUM_PEERS,
+                                     peers_left, /* Total number of peers */
+                                     peers_left, /* Number of outstanding connections */
+                                     peers_left, /* Number of parallel ssh connections, or peers being started at once */
                                      TIMEOUT,
                                      NULL, NULL,
                                      &my_cb, NULL, NULL, NULL, NULL);
index 02f76f826d0d4e3e254c8db6099a9f5101bcea9b..6a4d0cc1e4a221986bc736ffe988930ea18a849e 100644 (file)
@@ -202,8 +202,9 @@ run (void *cls,
 
   peers_left = num_peers;
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     peers_left,
-                                     peers_left,
+                                     peers_left, /* Total number of peers */
+                                     peers_left, /* Number of outstanding connections */
+                                     peers_left, /* Number of parallel ssh connections, or peers being started at once */
                                      TIMEOUT,
                                      NULL,
                                      NULL, &my_cb, NULL, NULL, NULL, hosts);
index 46626618a2b24c435d0e9bac8a4cb9127192993e..9f6b27059739a4507a21112181083f67e7acae5f 100644 (file)
@@ -1131,6 +1131,7 @@ run (void *cls,
   pg = GNUNET_TESTING_daemons_start (cfg,
                                      peers_left,
                                      peers_left / 2,
+                                     peers_left,
                                      timeout,
                                      &hostkey_callback, NULL,
                                      &peers_started_callback, NULL,
index 66540c07853d63100cc6d6d98b37ae73274f2c23..5af3e9ed2e8bc0d946e1a7e2a0df46343af81c05 100644 (file)
@@ -1181,6 +1181,7 @@ run (void *cls,
   pg = GNUNET_TESTING_daemons_start (cfg,
                                      peers_left,
                                      peers_left / 2,
+                                     peers_left,
                                      GNUNET_TIME_relative_multiply
                                      (GNUNET_TIME_UNIT_SECONDS,
                                       SECONDS_PER_PEER_START * num_peers),
index 2c1a8b31c8b4faa8c26bbee6774fe049bf5759d3..ea32e339d815138f37d33aed383168b6a6c421ea 100644 (file)
@@ -535,7 +535,7 @@ run (void *cls,
                                            "didn't start all daemons in reasonable amount of time!!!");
 
   pg = GNUNET_TESTING_daemons_start (cfg,
-                                     peers_left, peers_left,
+                                     peers_left, peers_left, peers_left,
                                      TIMEOUT, &hostkey_callback,
                                      NULL, &peers_started_callback, NULL,
                                      &topology_callback, NULL, NULL);
index 33f3a07378e09c3ececa8d4c3af0cef8b786161b..f1d93fa4690bc50d9194a327d33629ef02f18627 100644 (file)
@@ -281,7 +281,9 @@ run (void *cls,
 
   pg = GNUNET_TESTING_daemons_start (cfg,
                                      peers_left,
-                                     peers_left, TIMEOUT, NULL, NULL,
+                                     peers_left,
+                                     peers_left,
+                                     TIMEOUT, NULL, NULL,
                                      &peers_started_callback, NULL, NULL,
                                      NULL, NULL);
 
index ae96b071cb5b3b3f0508ee2d7aed7dae5f364da0..dc6cb7375784be46633be9c298f057da4f101801 100644 (file)
@@ -153,6 +153,7 @@ run (void *cls,
 #endif
   peers_left = NUM_PEERS;
   pg = GNUNET_TESTING_daemons_start (cfg,
+                                    peers_left,
                                     peers_left,
                                     peers_left,
                                     TIMEOUT,
index 790e4451f00a51f92c781d211d892cc138cffc73..0163a8e5b58c23da32af74641da614d49be687a6 100644 (file)
@@ -80,6 +80,24 @@ struct UNIXMessage
 
 };
 
+struct RetryList
+{
+  /**
+   * Pointer to next element.
+   */
+  struct RetryList *next;
+
+  /**
+   * Pointer to previous element.
+   */
+  struct RetryList *prev;
+
+  /**
+   * The actual retry context.
+   */
+  struct RetrySendContext *retry_ctx;
+};
+
 /**
  * Network format for IPv4 addresses.
  */
@@ -191,6 +209,11 @@ struct RetrySendContext
    * The priority of the message.
    */
   unsigned int priority;
+
+  /**
+   * Entry in the DLL of retry items.
+   */
+  struct RetryList *retry_list_entry;
 };
 
 /**
@@ -342,6 +365,16 @@ struct Plugin
 
 };
 
+/**
+ * Head of retry DLL.
+ */
+static struct RetryList *retry_list_head;
+
+/**
+ * Tail of retry DLL.
+ */
+static struct RetryList *retry_list_tail;
+
 
 /**
  * Disconnect from a remote node.  Clean up session if we have one for this peer
@@ -370,6 +403,22 @@ static int
 unix_transport_server_stop (void *cls)
 {
   struct Plugin *plugin = cls;
+  struct RetryList *pos;
+
+  pos = retry_list_head;
+
+  while(NULL != (pos = retry_list_head))
+    {
+      GNUNET_CONTAINER_DLL_remove(retry_list_head, retry_list_tail, pos);
+      if (GNUNET_SCHEDULER_NO_TASK != pos->retry_ctx->retry_task)
+        {
+          GNUNET_SCHEDULER_cancel(pos->retry_ctx->retry_task);
+        }
+      GNUNET_free(pos->retry_ctx->msg);
+      GNUNET_free(pos->retry_ctx->addr);
+      GNUNET_free(pos->retry_ctx);
+      GNUNET_free(pos);
+    }
 
   if (plugin->select_task != GNUNET_SCHEDULER_NO_TASK)
     {
@@ -428,7 +477,13 @@ void retry_send_message (void *cls,
   struct RetrySendContext *retry_ctx = cls;
 
   if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
-    return;
+    {
+      GNUNET_free(retry_ctx->msg);
+      GNUNET_free(retry_ctx->addr);
+      GNUNET_free(retry_ctx);
+      return;
+    }
+
   unix_real_send (retry_ctx->plugin,
                   retry_ctx,
                   retry_ctx->send_handle,
@@ -489,6 +544,7 @@ unix_real_send (void *cls,
   size_t sbs;
   struct sockaddr_un un;
   size_t slen;
+  struct RetryList *retry_list_entry;
 
   if (send_handle == NULL)
     {
@@ -542,6 +598,7 @@ unix_real_send (void *cls,
     {
       if (incoming_retry_context == NULL)
         {
+          retry_list_entry = GNUNET_malloc(sizeof(struct RetryList));
           retry_ctx = GNUNET_malloc(sizeof(struct RetrySendContext));
           retry_ctx->addr = GNUNET_malloc(addrlen);
           retry_ctx->msg = GNUNET_malloc(msgbuf_size);
@@ -557,6 +614,9 @@ unix_real_send (void *cls,
           retry_ctx->timeout = GNUNET_TIME_relative_to_absolute(timeout);
           memcpy(&retry_ctx->target, target, sizeof(struct GNUNET_PeerIdentity));
           retry_ctx->delay = GNUNET_TIME_UNIT_MILLISECONDS;
+          retry_ctx->retry_list_entry = retry_list_entry;
+          retry_list_entry->retry_ctx = retry_ctx;
+          GNUNET_CONTAINER_DLL_insert(retry_list_head, retry_list_tail, retry_list_entry);
         }
       else
         {
@@ -597,6 +657,8 @@ unix_real_send (void *cls,
 
   if (incoming_retry_context != NULL)
     {
+      GNUNET_CONTAINER_DLL_remove(retry_list_head, retry_list_tail, incoming_retry_context->retry_list_entry);
+      GNUNET_free(incoming_retry_context->retry_list_entry);
       GNUNET_free(incoming_retry_context->msg);
       GNUNET_free(incoming_retry_context->addr);
       GNUNET_free(incoming_retry_context);