clean up for configs
[oweals/gnunet.git] / src / mesh / test_mesh_small.c
index 28d1dba60d9b65a623584d939eb30e24f48b1364..368c07a97e9d370e2d7553abc1f347ac46397623 100644 (file)
@@ -42,7 +42,7 @@
 /**
  * Time to wait for stuff that should be rather fast
  */
-#define SHORT_TIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 20)
+#define SHORT_TIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
 
 /**
  * DIFFERENT TESTS TO RUN
@@ -51,7 +51,6 @@
 #define FORWARD 1
 #define SPEED 3
 #define SPEED_ACK 4
-#define SPEED_NOBUF 6
 #define SPEED_REL 8
 #define P2P_SIGNAL 10
 
@@ -77,11 +76,11 @@ static int ok;
 
  /**
   * Each peer is supposed to generate the following callbacks:
-  * 1 incoming tunnel (@dest)
+  * 1 incoming channel (@dest)
   * 1 connected peer (@orig)
   * 1 received data packet (@dest)
   * 1 received data packet (@orig)
-  * 1 received tunnel destroy (@dest)
+  * 1 received channel destroy (@dest)
   * _________________________________
   * 5 x ok expected per peer
   */
@@ -113,11 +112,6 @@ unsigned int p_ids;
  */
 static int initialized;
 
-/**
- * Peers that have responded
- */
-static int peers_responded;
-
 /**
  * Number of payload packes sent
  */
@@ -169,17 +163,17 @@ static struct GNUNET_MESH_Handle *h1;
 static struct GNUNET_MESH_Handle *h2;
 
 /**
- * Tunnel handle for the root peer
+ * Channel handle for the root peer
  */
-static struct GNUNET_MESH_Tunnel *t;
+static struct GNUNET_MESH_Channel *ch;
 
 /**
- * Tunnel handle for the first leaf peer
+ * Channel handle for the dest peer
  */
-static struct GNUNET_MESH_Tunnel *incoming_t;
+static struct GNUNET_MESH_Channel *incoming_ch;
 
 /**
- * Time we started the data transmission (after tunnel has been established
+ * Time we started the data transmission (after channel has been established
  * and initilized).
  */
 static struct GNUNET_TIME_Absolute start_time;
@@ -197,21 +191,22 @@ show_end_data (void)
   end_time = GNUNET_TIME_absolute_get();
   total_time = GNUNET_TIME_absolute_get_difference(start_time, end_time);
   FPRINTF (stderr, "\nResults of test \"%s\"\n", test_name);
-  FPRINTF (stderr, "Test time %llu ms\n",
-            (unsigned long long) total_time.rel_value);
+  FPRINTF (stderr, "Test time %s\n",
+          GNUNET_STRINGS_relative_time_to_string (total_time,
+                                                  GNUNET_YES));
   FPRINTF (stderr, "Test bandwidth: %f kb/s\n",
-            4 * TOTAL_PACKETS * 1.0 / total_time.rel_value); // 4bytes * ms
+          4 * TOTAL_PACKETS * 1.0 / (total_time.rel_value_us / 1000)); // 4bytes * ms
   FPRINTF (stderr, "Test throughput: %f packets/s\n\n",
-            TOTAL_PACKETS * 1000.0 / total_time.rel_value); // packets * ms
+          TOTAL_PACKETS * 1000.0 / (total_time.rel_value_us / 1000)); // packets * ms
   GAUGER ("MESH", test_name,
-          TOTAL_PACKETS * 1000.0 / total_time.rel_value,
+          TOTAL_PACKETS * 1000.0 / (total_time.rel_value_us / 1000),
           "packets/s");
 }
 
 
 /**
  * Shut down peergroup, clean up.
- * 
+ *
  * @param cls Closure (unused).
  * @param tc Task Context.
  */
@@ -225,7 +220,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 
 /**
  * Disconnect from mesh services af all peers, call shutdown.
- * 
+ *
  * @param cls Closure (unused).
  * @param tc Task Context.
  */
@@ -243,15 +238,15 @@ disconnect_mesh_peers (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   {
     GNUNET_TESTBED_operation_done (t_op[i]);
   }
-  if (NULL != t)
+  if (NULL != ch)
   {
-    GNUNET_MESH_tunnel_destroy (t);
-    t = NULL;
+    GNUNET_MESH_channel_destroy (ch);
+    ch = NULL;
   }
-  if (NULL != incoming_t)
+  if (NULL != incoming_ch)
   {
-    GNUNET_MESH_tunnel_destroy (incoming_t);
-    incoming_t = NULL;
+    GNUNET_MESH_channel_destroy (incoming_ch);
+    incoming_ch = NULL;
   }
   GNUNET_MESH_TEST_cleanup (test_ctx);
   if (GNUNET_SCHEDULER_NO_TASK != shutdown_handle)
@@ -264,7 +259,7 @@ disconnect_mesh_peers (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 
 /**
  * Abort test: schedule disconnect and shutdown immediately
- * 
+ *
  * @param line Line in the code the abort is requested from (__LINE__).
  */
 static void
@@ -280,11 +275,11 @@ abort_test (long line)
 
 /**
  * Transmit ready callback.
- * 
+ *
  * @param cls Closure (message type).
  * @param size Size of the tranmist buffer.
  * @param buf Pointer to the beginning of the buffer.
- * 
+ *
  * @return Number of bytes written to buf.
  */
 static size_t
@@ -293,7 +288,7 @@ tmt_rdy (void *cls, size_t size, void *buf);
 
 /**
  * Task to schedule a new data transmission.
- * 
+ *
  * @param cls Closure (peer #).
  * @param tc Task Context.
  */
@@ -301,7 +296,7 @@ static void
 data_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_MESH_TransmitHandle *th;
-  struct GNUNET_MESH_Tunnel *tunnel;
+  struct GNUNET_MESH_Channel *channel;
 
   if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
     return;
@@ -309,13 +304,13 @@ data_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n");
   if (GNUNET_YES == test_backwards)
   {
-    tunnel = incoming_t;
+    channel = incoming_ch;
   }
   else
   {
-    tunnel = t;
+    channel = ch;
   }
-  th = GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
+  th = GNUNET_MESH_notify_transmit_ready (channel, GNUNET_NO,
                                           GNUNET_TIME_UNIT_FOREVER_REL,
                                           size_payload, &tmt_rdy, (void *) 1L);
   if (NULL == th)
@@ -356,11 +351,11 @@ tmt_rdy (void *cls, size_t size, void *buf)
   uint32_t *data;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              " tmt_rdy called\n");
+              "tmt_rdy called, filling buffer\n");
   if (size < size_payload || NULL == buf)
   {
-    GNUNET_break (0);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+    GNUNET_break (ok >= ok_goal - 2);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "size %u, buf %p, data_sent %u, data_received %u\n",
                 size,
                 buf,
@@ -372,7 +367,12 @@ tmt_rdy (void *cls, size_t size, void *buf)
   msg->type = htons ((long) cls);
   data = (uint32_t *) &msg[1];
   *data = htonl (data_sent);
-  if (SPEED == test && GNUNET_YES == initialized)
+  if (GNUNET_NO == initialized)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "sending initializer\n");
+  }
+  else if (SPEED == test)
   {
     data_sent++;
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -381,9 +381,10 @@ tmt_rdy (void *cls, size_t size, void *buf)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               " Scheduling packet %d\n", data_sent + 1);
-      GNUNET_SCHEDULER_add_now(&data_task, NULL);
+      GNUNET_SCHEDULER_add_now (&data_task, NULL);
     }
   }
+
   return size_payload;
 }
 
@@ -392,14 +393,15 @@ tmt_rdy (void *cls, size_t size, void *buf)
  * Function is called whenever a message is received.
  *
  * @param cls closure (set from GNUNET_MESH_connect)
- * @param tunnel connection to the other end
- * @param tunnel_ctx place to store local state associated with the tunnel
+ * @param channel connection to the other end
+ * @param channel_ctx place to store local state associated with the channel
  * @param message the actual message
  * @return GNUNET_OK to keep the connection open,
  *         GNUNET_SYSERR to close it (signal serious error)
  */
 int
-data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
+data_callback (void *cls, struct GNUNET_MESH_Channel *channel,
+               void **channel_ctx,
                const struct GNUNET_MessageHeader *message)
 {
   long client = (long) cls;
@@ -408,7 +410,7 @@ data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
 
   ok++;
 
-  GNUNET_MESH_receive_done (tunnel);
+  GNUNET_MESH_receive_done (channel);
 
   if ((ok % 20) == 0)
   {
@@ -425,13 +427,11 @@ data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
   {
   case 0L:
     GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Root client got a message!\n");
-    peers_responded++;
     break;
   case 4L:
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Leaf client %li got a message.\n",
                 client);
-    client = 4L;
     break;
   default:
     GNUNET_assert (0);
@@ -461,14 +461,14 @@ data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
     }
   }
 
-  if (client == expected_target_client) // Normally 3 or 4
+  if (client == expected_target_client) // Normally 4
   {
     data_received++;
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 " received data %u\n", data_received);
     if (SPEED != test || (ok_goal - 2) == ok)
     {
-      GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
+      GNUNET_MESH_notify_transmit_ready (channel, GNUNET_NO,
                                          GNUNET_TIME_UNIT_FOREVER_REL,
                                          size_payload, &tmt_rdy, (void *) 1L);
       return GNUNET_OK;
@@ -486,7 +486,7 @@ data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
       data_ack++;
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               " received ack %u\n", data_ack);
-      GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
+      GNUNET_MESH_notify_transmit_ready (channel, GNUNET_NO,
                                          GNUNET_TIME_UNIT_FOREVER_REL,
                                          size_payload, &tmt_rdy, (void *) 1L);
       if (data_ack < TOTAL_PACKETS && SPEED != test)
@@ -497,13 +497,13 @@ data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
     }
     if (test == P2P_SIGNAL)
     {
-      GNUNET_MESH_tunnel_destroy (incoming_t);
-      incoming_t = NULL;
+      GNUNET_MESH_channel_destroy (incoming_ch);
+      incoming_ch = NULL;
     }
     else
     {
-      GNUNET_MESH_tunnel_destroy (t);
-      t = NULL;
+      GNUNET_MESH_channel_destroy (ch);
+      ch = NULL;
     }
   }
 
@@ -529,32 +529,33 @@ static struct GNUNET_MESH_MessageHandler handlers[] = {
 
 
 /**
- * Method called whenever another peer has added us to a tunnel
+ * Method called whenever another peer has added us to a channel
  * the other peer initiated.
  *
  * @param cls Closure.
- * @param tunnel New handle to the tunnel.
- * @param initiator Peer that started the tunnel.
- * @param port Port this tunnels is connected to.
- * @return Initial tunnel context for the tunnel
+ * @param channel New handle to the channel.
+ * @param initiator Peer that started the channel.
+ * @param port Port this channel is connected to.
+ * @param options channel option flags
+ * @return Initial channel context for the channel
  *         (can be NULL -- that's not an error).
  */
 static void *
-incoming_tunnel (void *cls, struct GNUNET_MESH_Tunnel *tunnel,
+incoming_channel (void *cls, struct GNUNET_MESH_Channel *channel,
                  const struct GNUNET_PeerIdentity *initiator,
-                 uint32_t port)
+                 uint32_t port, enum GNUNET_MESH_ChannelOption options)
 {
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Incoming tunnel from %s to peer %d\n",
+              "Incoming channel from %s to peer %d\n",
               GNUNET_i2s (initiator), (long) cls);
   ok++;
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, " ok: %d\n", ok);
   if ((long) cls == 4L)
-    incoming_t = tunnel;
+    incoming_ch = channel;
   else
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Incoming tunnel for unknown client %lu\n", (long) cls);
+                "Incoming channel for unknown client %lu\n", (long) cls);
     GNUNET_break(0);
   }
   if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
@@ -569,31 +570,37 @@ incoming_tunnel (void *cls, struct GNUNET_MESH_Tunnel *tunnel,
 }
 
 /**
- * Function called whenever an inbound tunnel is destroyed.  Should clean up
+ * Function called whenever an inbound channel is destroyed.  Should clean up
  * any associated state.
  *
  * @param cls closure (set from GNUNET_MESH_connect)
- * @param tunnel connection to the other end (henceforth invalid)
- * @param tunnel_ctx place where local state associated
- *                   with the tunnel is stored
+ * @param channel connection to the other end (henceforth invalid)
+ * @param channel_ctx place where local state associated
+ *                   with the channel is stored
  */
 static void
-tunnel_cleaner (void *cls, const struct GNUNET_MESH_Tunnel *tunnel,
-                void *tunnel_ctx)
+channel_cleaner (void *cls, const struct GNUNET_MESH_Channel *channel,
+                 void *channel_ctx)
 {
   long i = (long) cls;
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Incoming tunnel disconnected at peer %d\n",
+              "Incoming channel disconnected at peer %d\n",
               i);
   if (4L == i)
   {
     ok++;
-    incoming_t = NULL;
+    GNUNET_break (channel == incoming_ch);
+    incoming_ch = NULL;
   }
-  else if (0L == i && P2P_SIGNAL == test)
+  else if (0L == i)
   {
-    ok ++;
+    if (P2P_SIGNAL == test)
+    {
+      ok ++;
+    }
+    GNUNET_break (channel == ch);
+    ch = NULL;
   }
   else
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -613,18 +620,17 @@ tunnel_cleaner (void *cls, const struct GNUNET_MESH_Tunnel *tunnel,
 
 /**
  * START THE TESTCASE ITSELF, AS WE ARE CONNECTED TO THE MESH SERVICES.
- * 
+ *
  * Testcase continues when the root receives confirmation of connected peers,
  * on callback funtion ch.
- * 
+ *
  * @param cls Closure (unsued).
  * @param tc Task Context.
  */
 static void
 do_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  int buf;
-  int rel;
+  enum GNUNET_MESH_ChannelOption flags;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test_task\n");
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "add peer 2\n");
@@ -635,34 +641,25 @@ do_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   {
     GNUNET_SCHEDULER_cancel (disconnect_task);
   }
-  if (SPEED_NOBUF == test)
-  {
-    test = SPEED;
-    buf = GNUNET_NO;
-  }
-  else
-    buf = GNUNET_YES;
 
+  flags = GNUNET_MESH_OPTION_DEFAULT;
   if (SPEED_REL == test)
   {
     test = SPEED;
-    rel = GNUNET_YES;
+    flags |= GNUNET_MESH_OPTION_RELIABLE;
   }
-  else
-    rel = GNUNET_NO;
-  t = GNUNET_MESH_tunnel_create (h1, NULL, p_id[1], 1, buf, rel);
+  ch = GNUNET_MESH_channel_create (h1, NULL, p_id[1], 1, flags);
 
   disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
                                                   &disconnect_mesh_peers,
                                                   (void *) __LINE__);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Sending data initializer...\n");
-  peers_responded = 0;
   data_ack = 0;
   data_received = 0;
   data_sent = 0;
-  GNUNET_MESH_notify_transmit_ready (t, GNUNET_NO,
-                                     GNUNET_TIME_UNIT_FOREVER_REL, 
+  GNUNET_MESH_notify_transmit_ready (ch, GNUNET_NO,
+                                     GNUNET_TIME_UNIT_FOREVER_REL,
                                      size_payload, &tmt_rdy, (void *) 1L);
 }
 
@@ -769,10 +766,10 @@ main (int argc, char *argv[])
   else if (strstr (argv[0], "_small_speed_ack") != NULL)
   {
    /* Each peer is supposed to generate the following callbacks:
-    * 1 incoming tunnel (@dest)
+    * 1 incoming channel (@dest)
     * TOTAL_PACKETS received data packet (@dest)
     * TOTAL_PACKETS received data packet (@orig)
-    * 1 received tunnel destroy (@dest)
+    * 1 received channel destroy (@dest)
     * _________________________________
     * 5 x ok expected per peer
     */
@@ -784,21 +781,16 @@ main (int argc, char *argv[])
   else if (strstr (argv[0], "_small_speed") != NULL)
   {
    /* Each peer is supposed to generate the following callbacks:
-    * 1 incoming tunnel (@dest)
+    * 1 incoming channel (@dest)
     * 1 initial packet (@dest)
     * TOTAL_PACKETS received data packet (@dest)
     * 1 received data packet (@orig)
-    * 1 received tunnel destroy (@dest)
+    * 1 received channel destroy (@dest)
     * _________________________________
     */
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SPEED\n");
     ok_goal = TOTAL_PACKETS + 4;
-    if (strstr (argv[0], "_nobuf") != NULL)
-    {
-      test = SPEED_NOBUF;
-      test_name = "speed nobuf";
-    }
-    else if (strstr (argv[0], "_reliable") != NULL)
+    if (strstr (argv[0], "_reliable") != NULL)
     {
       test = SPEED_REL;
       test_name = "speed reliable";
@@ -836,8 +828,8 @@ main (int argc, char *argv[])
                         5,
                         &tmain,
                         NULL, /* tmain cls */
-                        &incoming_tunnel,
-                        &tunnel_cleaner,
+                        &incoming_channel,
+                        &channel_cleaner,
                         handlers,
                         ports);