cancel existing last_control_qe handle before scheduling a new one, always
[oweals/gnunet.git] / src / cadet / test_cadet.c
index df279d72adef71a84e5d5d1107a0a29e95c2af9c..f2e639e7a5726c7795a88c111fb13e0b2aea68bf 100644 (file)
@@ -19,7 +19,8 @@
 */
 /**
  * @file cadet/test_cadet.c
- *
+ * @author Bart Polot
+ * @author Christian Grothoff
  * @brief Test for the cadet service: retransmission of traffic.
  */
 #include <stdio.h>
@@ -218,6 +219,11 @@ static unsigned int ka_sent;
  */
 static unsigned int ka_received;
 
+/**
+ * How many messages were dropped by CADET because of full buffers?
+ */
+static unsigned int msg_dropped;
+
 
 /**
  * Get the client number considered as the "target" or "receiver", depending on
@@ -345,15 +351,21 @@ shutdown_task (void *cls)
  *          operation has executed successfully.
  */
 static void
-stats_cont (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg)
+stats_cont (void *cls,
+            struct GNUNET_TESTBED_Operation *op,
+            const char *emsg)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               " KA sent: %u, KA received: %u\n",
-              ka_sent, ka_received);
+              ka_sent,
+              ka_received);
   if ( (KEEPALIVE == test) &&
        ( (ka_sent < 2) ||
          (ka_sent > ka_received + 1)) )
+  {
+    GNUNET_break (0);
     ok--;
+  }
   GNUNET_TESTBED_operation_done (stats_op);
 
   if (NULL != disconnect_task)
@@ -384,6 +396,8 @@ stats_iterator (void *cls,
 {
   static const char *s_sent = "# keepalives sent";
   static const char *s_recv = "# keepalives received";
+  static const char *rdrops = "# messages dropped due to full buffer";
+  static const char *cdrops = "# messages dropped due to slow client";
   uint32_t i;
 
   i = GNUNET_TESTBED_get_index (peer);
@@ -395,9 +409,12 @@ stats_iterator (void *cls,
               (unsigned long long) value);
   if (0 == strncmp (s_sent, name, strlen (s_sent)) && 0 == i)
     ka_sent = value;
-
   if (0 == strncmp(s_recv, name, strlen (s_recv)) && peers_requested - 1 == i)
     ka_received = value;
+  if (0 == strncmp(rdrops, name, strlen (rdrops)))
+    msg_dropped += value;
+  if (0 == strncmp(cdrops, name, strlen (cdrops)))
+    msg_dropped += value;
 
   return GNUNET_OK;
 }
@@ -429,7 +446,7 @@ gather_stats_and_exit (void *cls)
   }
   stats_op = GNUNET_TESTBED_get_statistics (peers_running, testbed_peers,
                                             "cadet", NULL,
-                                            stats_iterator, stats_cont, cls);
+                                            &stats_iterator, stats_cont, cls);
 }
 
 
@@ -807,8 +824,9 @@ incoming_channel (void *cls,
   else
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Incoming channel for unknown client %lu\n", (long) cls);
-    GNUNET_break(0);
+                "Incoming channel for unexpected peer #%lu\n",
+                (long) cls);
+    GNUNET_break (0);
   }
   if (NULL != disconnect_task)
   {
@@ -1128,8 +1146,10 @@ main (int argc, char *argv[])
                         &channel_cleaner,
                         handlers,
                         ports);
+  if (NULL != strstr (argv[0], "_reliable"))
+    msg_dropped = 0; /* dropped should be retransmitted */
 
-  if (ok_goal > ok)
+  if (ok_goal > ok - msg_dropped)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "FAILED! (%d/%d)\n", ok, ok_goal);