REST: nothing triggers rest
[oweals/gnunet.git] / src / ats / test_ats_lib.c
index 9a972612450fac8936f21314e8a95dc1f4d1f9f7..33597e6787a9b98f8bd051bc21d3446d37bb9090 100644 (file)
@@ -1,21 +1,21 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2010-2015 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2010-2015 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 /**
  * @file ats/test_ats_lib.c
@@ -36,7 +36,7 @@ struct AddressSuggestData
   /**
    * Which session were we given?
    */
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
 
   /**
    * What address was assigned?
@@ -166,7 +166,7 @@ free_asd (void *cls,
                  GNUNET_CONTAINER_multipeermap_remove (p2asd,
                                                        key,
                                                        asd));
-  GNUNET_free (asd->address);
+  GNUNET_free_non_null (asd->address);
   GNUNET_free (asd);
   return GNUNET_OK;
 }
@@ -279,11 +279,9 @@ find_address_information (const struct GNUNET_HELLO_Address *addr)
  * Task run to terminate the testcase.
  *
  * @param cls NULL
- * @param tc unused
  */
 static void
-end (void *cls,
-     const struct GNUNET_SCHEDULER_TaskContext *tc)
+end (void *cls)
 {
   if (0 != ret)
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -335,11 +333,9 @@ end (void *cls,
  * Main interpreter loop. Runs the steps of the test.
  *
  * @param cls NULL
- * @param tc unused
  */
 static void
-interpreter (void *cls,
-             const struct GNUNET_SCHEDULER_TaskContext *tc);
+interpreter (void *cls);
 
 
 /**
@@ -368,7 +364,7 @@ make_peer (uint32_t pid,
   memset (pk,
           (int) pid,
           sizeof (struct GNUNET_PeerIdentity));
-  memcpy (pk,
+  GNUNET_memcpy (pk,
           &pid,
           sizeof (uint32_t));
 }
@@ -404,10 +400,10 @@ make_address (uint32_t pid,
 /**
  * Our dummy sessions.
  */
-struct Session
+struct GNUNET_ATS_Session
 {
   /**
-   * Field to avoid `0 == sizeof(struct Session)`.
+   * Field to avoid `0 == sizeof(struct GNUNET_ATS_Session)`.
    */
   unsigned int non_empty;
 };
@@ -419,10 +415,10 @@ struct Session
  * @param i which session number to return
  * @return NULL if @a i is 0, otherwise a pointer unique to @a i
  */
-static struct Session *
+static struct GNUNET_ATS_Session *
 make_session (unsigned int i)
 {
-  struct Session *baseptr = NULL;
+  struct GNUNET_ATS_Session *baseptr = NULL;
 
   if (0 == i)
     return NULL;
@@ -544,17 +540,17 @@ reservation_cb (void *cls,
   cmd->details.reserve_bandwidth.rc = NULL;
   make_peer (cmd->details.reserve_bandwidth.pid,
              &pid);
-  GNUNET_assert (0 == memcmp (peer,
-                              &pid,
-                              sizeof (struct GNUNET_PeerIdentity)));
+  GNUNET_assert (0 == GNUNET_memcmp (peer,
+                              &pid));
   switch (cmd->details.reserve_bandwidth.expected_result)
   {
   case GNUNET_OK:
     if (amount != cmd->details.reserve_bandwidth.amount)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Unexpectedly failed to reserve %d bytes with delay %s!\n",
+                  "Unexpectedly failed to reserve %d/%d bytes with delay %s!\n",
                   (int) amount,
+                  (int) cmd->details.reserve_bandwidth.amount,
                   GNUNET_STRINGS_relative_time_to_string (res_delay,
                                                           GNUNET_YES));
       GNUNET_break (0);
@@ -567,7 +563,7 @@ reservation_cb (void *cls,
                    (0 != res_delay.rel_value_us) );
     break;
   case GNUNET_SYSERR:
-    if ( (amount != cmd->details.reserve_bandwidth.amount) ||
+    if ( (amount != 0) ||
          (0 == res_delay.rel_value_us) )
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -590,11 +586,9 @@ reservation_cb (void *cls,
  * Main interpreter loop. Runs the steps of the test.
  *
  * @param cls NULL
- * @param tc unused
  */
 static void
-interpreter (void *cls,
-             const struct GNUNET_SCHEDULER_TaskContext *tc)
+interpreter (void *cls)
 
 {
   struct Command *cmd;
@@ -617,7 +611,7 @@ interpreter (void *cls,
     case CMD_ADD_ADDRESS:
       {
         struct GNUNET_HELLO_Address *addr;
-        struct Session *session;
+        struct GNUNET_ATS_Session *session;
 
         addr = make_address (cmd->details.add_address.pid,
                              cmd->details.add_address.addr_num,
@@ -670,7 +664,7 @@ interpreter (void *cls,
         if (NULL == asd)
           return;
         if (GNUNET_NO == asd->active)
-          return;
+          return; /* last suggestion was to disconnect, wait longer */
         done = GNUNET_YES;
         if (NULL != cmd->details.await_address_suggestion.add_label)
         {
@@ -702,9 +696,10 @@ interpreter (void *cls,
                    &pid);
         asd = find_address_suggestion (&pid);
         if (NULL == asd)
-          return;
-        if (GNUNET_NO == asd->active)
-          return;
+          return; /* odd, no suggestion at all yet!? */
+        if (GNUNET_YES == asd->active)
+          return; /* last suggestion was to activate, wait longer */
+        /* last suggestion was to deactivate, condition satisfied! */
         off++;
         break;
       }
@@ -716,7 +711,8 @@ interpreter (void *cls,
                    &pid);
         cmd->details.request_connection_start.csh
           = GNUNET_ATS_connectivity_suggest (con_ats,
-                                             &pid);
+                                             &pid,
+                                             1);
         off++;
         break;
       }
@@ -753,9 +749,11 @@ interpreter (void *cls,
         else
           cmp = &update->details.update_address.properties;
         if ( (NULL != aid) &&
-             (0 == memcmp (cmp,
-                           &aid->properties,
-                           sizeof (struct GNUNET_ATS_Properties))) )
+             (cmp->delay.rel_value_us == aid->properties.delay.rel_value_us) &&
+             (cmp->utilization_out == aid->properties.utilization_out) &&
+             (cmp->utilization_in == aid->properties.utilization_in) &&
+             (cmp->distance == aid->properties.distance) &&
+             (cmp->scope == aid->properties.scope) )
         {
           off++;
           break;
@@ -777,7 +775,7 @@ interpreter (void *cls,
     case CMD_ADD_SESSION:
       {
         struct Command *add;
-        struct Session *session;
+        struct GNUNET_ATS_Session *session;
 
         add = find_command (CMD_ADD_ADDRESS,
                             cmd->details.add_session.add_label);
@@ -792,7 +790,7 @@ interpreter (void *cls,
       {
         struct Command *add_address;
         struct Command *add_session;
-        struct Session *session;
+        struct GNUNET_ATS_Session *session;
 
         add_session = find_command (CMD_ADD_SESSION,
                                     cmd->details.del_session.add_session_label);
@@ -858,6 +856,12 @@ interpreter (void *cls,
                                           cmd);
         return;
       }
+    case CMD_SLEEP:
+      off++;
+      interpreter_task = GNUNET_SCHEDULER_add_delayed (cmd->details.sleep.delay,
+                                                       &interpreter,
+                                                       NULL);
+      return;
     } /* end switch */
   } /* end while(1) */
 }
@@ -881,7 +885,7 @@ static void
 address_suggest_cb (void *cls,
                     const struct GNUNET_PeerIdentity *peer,
                     const struct GNUNET_HELLO_Address *address,
-                    struct Session *session,
+                    struct GNUNET_ATS_Session *session,
                     struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
                     struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 {
@@ -929,7 +933,8 @@ address_suggest_cb (void *cls,
   asd->address = NULL;
   if (NULL != address)
     asd->address = GNUNET_HELLO_address_copy (address);
-  run_interpreter ();
+  if (NULL == interpreter_task)
+    run_interpreter ();
 }
 
 
@@ -983,7 +988,8 @@ address_information_cb (void *cls,
   aid->bandwidth_out = bandwidth_out;
   aid->bandwidth_in = bandwidth_in;
   aid->properties = *prop;
-  run_interpreter ();
+  if (NULL == interpreter_task)
+    run_interpreter ();
 }