print warning messages about hostkey file
[oweals/gnunet.git] / src / testing / test_testing_topology.c
index 36ccad6c957614cebc0c3e5fcf15116c996cff66..0e64f93aa5ac22af5f487432bd0b45330020fee4 100644 (file)
@@ -26,7 +26,7 @@
 #include "gnunet_core_service.h"
 #include "gnunet_os_lib.h"
 
-#define VERBOSE GNUNET_NO
+#define VERBOSE GNUNET_YES
 
 #define DELAY_FOR_LOGGING GNUNET_NO
 
@@ -142,6 +142,12 @@ struct TestMessageContext
   /* Identifier for this message, so we don't disconnect other peers! */
   uint32_t uid;
 
+  /* Has peer1 been notified already of a connection to peer2? */
+  int peer1notified;
+
+  /* Has the core of peer2 been connected already? */
+  int peer2connected;
+
   /* Task for disconnecting cores, allow task to be cancelled on shutdown */
   GNUNET_SCHEDULER_TaskIdentifier disconnect_task;
 
@@ -273,6 +279,7 @@ disconnect_cores (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   total_server_connections -= 2;
 }
 
+#if DO_STATS
 static void
 stats_finished (void *cls, int result)
 {
@@ -300,6 +307,7 @@ stats_print (void *cls,
               GNUNET_i2s (peer), subsystem, name, value);
   return GNUNET_OK;
 }
+#endif
 
 static void
 topology_cb (void *cls,
@@ -325,9 +333,11 @@ topology_cb (void *cls,
         {
           fprintf (outfile, "}\n");
           fclose (outfile);
+#if DO_STATS
           GNUNET_TESTING_get_statistics (pg, &stats_finished, &stats_print,
                                          NULL);
-          //GNUNET_SCHEDULER_add_now (&finish_testing, NULL);
+#endif
+          GNUNET_SCHEDULER_add_now (&finish_testing, NULL);
         }
     }
 }
@@ -364,6 +374,7 @@ process_mtype (void *cls,
 #endif
 
   total_messages_received++;
+
 #if VERBOSE > 1
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Received message from `%4s', type %d.\n", GNUNET_i2s (peer),
@@ -491,33 +502,89 @@ init_notify_peer2 (void *cls,
 {
   struct TestMessageContext *pos = cls;
 
+  total_server_connections++;
+
+  pos->peer2connected = GNUNET_YES;
+  if (pos->peer1notified == GNUNET_YES) /* Peer 1 has been notified of connection to peer 2 */
+    {
 #if VERBOSE > 1
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Core connection to `%4s' established, scheduling message send\n",
-              GNUNET_i2s (my_identity));
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Scheduling message send to peer `%s' from peer `%s' (init_notify_peer2)\n",
+                  GNUNET_i2s (my_identity), GNUNET_h2s(&pos->peer1->id.hashPubKey));
 #endif
-  total_server_connections++;
+      if (NULL == GNUNET_CORE_notify_transmit_ready (pos->peer1handle,
+                                                     0,
+                                                     TIMEOUT,
+                                                     &pos->peer2->id,
+                                                     sizeof (struct
+                                                             GNUNET_TestMessage),
+                                                     &transmit_ready, pos))
+        {
+          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                      "RECEIVED NULL when asking core (1) for transmission to peer `%4s'\n",
+                      GNUNET_i2s (&pos->peer2->id));
+          transmit_ready_failed++;
+        }
+      else
+        {
+          transmit_ready_scheduled++;
+        }
+    }
+}
 
-  if (NULL == GNUNET_CORE_notify_transmit_ready (pos->peer1handle,
-                                                 0,
-                                                 TIMEOUT,
-                                                 &pos->peer2->id,
-                                                 sizeof (struct
-                                                         GNUNET_TestMessage),
-                                                 &transmit_ready, pos))
+/**
+ * Method called whenever a given peer connects.
+ *
+ * @param cls closure
+ * @param peer peer identity this notification is about
+ * @param atsi performance data for the connection
+ */
+static void connect_notify_peers (void *cls,
+                                  const struct
+                                  GNUNET_PeerIdentity *peer,
+                                  const struct GNUNET_TRANSPORT_ATS_Information *atsi)
+{
+  struct TestMessageContext *pos = cls;
+
+  if (0 == memcmp(peer, &pos->peer2->id, sizeof(struct GNUNET_PeerIdentity)))
     {
+      pos->peer1notified = GNUNET_YES;
+#if VERBOSE > 1
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "RECEIVED NULL when asking core (1) for transmission to peer `%4s'\n",
-                  GNUNET_i2s (&pos->peer2->id));
-      transmit_ready_failed++;
+                "Peer `%s' notified of connection to peer `%s'\n",
+                GNUNET_i2s (&pos->peer1->id), GNUNET_h2s(&peer->hashPubKey));
+#endif
     }
   else
+    return;
+
+  if (pos->peer2connected == GNUNET_YES) /* Already connected and notified of connection, send message! */
     {
-      transmit_ready_scheduled++;
+#if VERBOSE > 1
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Scheduling message send to peer `%s' from peer `%s' (init_notify_peer2)\n",
+                GNUNET_i2s (&pos->peer2->id), GNUNET_h2s(&pos->peer1->id.hashPubKey));
+#endif
+      if (NULL == GNUNET_CORE_notify_transmit_ready (pos->peer1handle,
+                                                     0,
+                                                     TIMEOUT,
+                                                     &pos->peer2->id,
+                                                     sizeof (struct
+                                                             GNUNET_TestMessage),
+                                                     &transmit_ready, pos))
+        {
+          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                      "RECEIVED NULL when asking core (1) for transmission to peer `%4s'\n",
+                      GNUNET_i2s (&pos->peer2->id));
+          transmit_ready_failed++;
+        }
+      else
+        {
+          transmit_ready_scheduled++;
+        }
     }
 }
 
-
 static void
 init_notify_peer1 (void *cls,
                    struct GNUNET_CORE_Handle *server,
@@ -585,7 +652,7 @@ send_test_messages (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
                                           1,
                                           pos,
                                           &init_notify_peer1,
-                                          NULL, NULL,
+                                          &connect_notify_peers, NULL,
                                           NULL,
                                           NULL,
                                           GNUNET_NO, NULL, GNUNET_NO,
@@ -639,7 +706,7 @@ topology_callback (void *cls,
 #endif
       total_connections++;
 #if VERBOSE > 1
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "connected peer %s to peer %s\n",
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "connected peer %s to peer %s\n",
                   first_daemon->shortname, second_daemon->shortname);
 #endif
       temp_context = GNUNET_malloc (sizeof (struct TestMessageContext));
@@ -748,18 +815,19 @@ connect_topology ()
                                          connect_topology_option,
                                          connect_topology_option_modifier,
                                          &topology_creation_finished, NULL);
-#if VERBOSE > 1
+#if VERBOSE
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "Have %d expected connections\n", expected_connections);
 #endif
     }
 
   GNUNET_SCHEDULER_cancel (die_task);
-  if (expected_connections == GNUNET_SYSERR)
+  if (expected_connections < 1)
     {
       die_task =
         GNUNET_SCHEDULER_add_now (&end_badly,
                                   "from connect topology (bad return)");
+      return;
     }
 
   die_task = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT,
@@ -1117,7 +1185,7 @@ main (int argc, char *argv[])
   char *binary_start_pos;
   char *our_binary_name;
 
-  binary_start_pos = rindex (argv[0], '/');
+  binary_start_pos = strchr (argv[0], '/');
   GNUNET_assert (binary_start_pos != NULL);
   topology_string = strstr (binary_start_pos, "_topology");
   GNUNET_assert (topology_string != NULL);