REST/NAMESTORE: rework API
[oweals/gnunet.git] / src / arm / test_gnunet_service_arm.c
index 7f5256a932f573e5375875802347ccd34e89504e..55903c4990661d8797e942cf798076e59b190bda 100644 (file)
@@ -1,21 +1,21 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2009, 2014 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009, 2014 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 arm/test_gnunet_service_arm.c
@@ -38,6 +38,7 @@
 
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
 
+
 static int ret = 1;
 
 static int resolved_ok;
@@ -46,12 +47,13 @@ static int asked_for_a_list;
 
 static struct GNUNET_ARM_Handle *arm;
 
+static const char hostname[] = "www.gnu.org"; /* any domain should do */
+
 
 static void
-trigger_disconnect (void *cls,
-                    const struct GNUNET_SCHEDULER_TaskContext *tc)
+trigger_disconnect (void *cls)
 {
-  GNUNET_ARM_disconnect_and_free (arm);
+  GNUNET_ARM_disconnect (arm);
   arm = NULL;
 }
 
@@ -59,14 +61,16 @@ trigger_disconnect (void *cls,
 static void
 arm_stop_cb (void *cls,
             enum GNUNET_ARM_RequestStatus status,
-            const char *servicename,
             enum GNUNET_ARM_Result result)
 {
   GNUNET_break (status == GNUNET_ARM_REQUEST_SENT_OK);
   GNUNET_break (result == GNUNET_ARM_RESULT_STOPPED);
   if (result != GNUNET_ARM_RESULT_STOPPED)
+  {
+    GNUNET_break (0);
     ret = 4;
-  GNUNET_SCHEDULER_add_now (trigger_disconnect, NULL);
+  }
+  GNUNET_SCHEDULER_add_now (&trigger_disconnect, NULL);
 }
 
 
@@ -95,31 +99,39 @@ service_list (void *cls,
   }
 
  stop_arm:
-  GNUNET_ARM_request_service_stop (arm, "arm", TIMEOUT,
-                                   &arm_stop_cb, NULL);
+  GNUNET_ARM_request_service_stop (arm,
+                                   "arm",
+                                   &arm_stop_cb,
+                                   NULL);
 }
 
 
 static void
-hostNameResolveCB (void *cls,
-                   const struct sockaddr *addr,
-                   socklen_t addrlen)
+hostname_resolve_cb (void *cls,
+                     const struct sockaddr *addr,
+                     socklen_t addrlen)
 {
-  if ((ret == 0) || (ret == 4) || (resolved_ok == 1))
+  if ((0 == ret) || (4 == ret) || (1 == resolved_ok))
     return;
   if (NULL == addr)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Name not resolved!\n");
+                "Failed to resolve hostname!\n");
+    GNUNET_break (0);
     ret = 3;
-    GNUNET_ARM_request_service_stop (arm, "arm", TIMEOUT,
-                                     &arm_stop_cb, NULL);
+    GNUNET_ARM_request_service_stop (arm,
+                                     "arm",
+                                     &arm_stop_cb,
+                                     NULL);
+    return;
   }
-  else if (asked_for_a_list == 0)
+  if (0 == asked_for_a_list)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Resolved hostname, now checking the service list\n");
-    GNUNET_ARM_request_service_list (arm, TIMEOUT, service_list, NULL);
+    GNUNET_ARM_request_service_list (arm,
+                                     &service_list,
+                                     NULL);
     asked_for_a_list = 1;
     resolved_ok = 1;
   }
@@ -129,24 +141,28 @@ hostNameResolveCB (void *cls,
 static void
 arm_start_cb (void *cls,
              enum GNUNET_ARM_RequestStatus status,
-             const char *servicename,
              enum GNUNET_ARM_Result result)
 {
   GNUNET_break (status == GNUNET_ARM_REQUEST_SENT_OK);
   GNUNET_break (result == GNUNET_ARM_RESULT_STARTING);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Trying to resolve our own hostname!\n");
+              "Trying to resolve a hostname via the resolver service!\n");
   /* connect to the resolver service */
   if (NULL ==
-      GNUNET_RESOLVER_hostname_resolve (AF_UNSPEC, TIMEOUT,
-                                        &hostNameResolveCB, NULL))
+      GNUNET_RESOLVER_ip_get (hostname,
+                             AF_UNSPEC,
+                             TIMEOUT,
+                             &hostname_resolve_cb,
+                             NULL))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-        "Unable initiate connection to resolver service\n");
+                "Unable initiate connection to resolver service\n");
+    GNUNET_break (0);
     ret = 2;
     GNUNET_ARM_request_service_stop (arm,
-                                     "arm", TIMEOUT,
-                                     &arm_stop_cb, NULL);
+                                     "arm",
+                                     &arm_stop_cb,
+                                     NULL);
   }
 }
 
@@ -157,26 +173,14 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  char *armconfig;
-
-  if (NULL != cfgfile)
-  {
-    if (GNUNET_OK !=
-        GNUNET_CONFIGURATION_get_value_filename (c, "arm", "CONFIG",
-                                                 &armconfig))
-    {
-      GNUNET_CONFIGURATION_set_value_string ((struct GNUNET_CONFIGURATION_Handle *) c,
-                                             "arm", "CONFIG",
-                                             cfgfile);
-    }
-    else
-      GNUNET_free (armconfig);
-  }
-  arm = GNUNET_ARM_connect (c, NULL, NULL);
-  GNUNET_ARM_request_service_start (arm, "arm",
+  arm = GNUNET_ARM_connect (c,
+                            NULL,
+                            NULL);
+  GNUNET_ARM_request_service_start (arm,
+                                    "arm",
                                     GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-                                    START_TIMEOUT,
-                                    &arm_start_cb, NULL);
+                                    &arm_start_cb,
+                                    NULL);
 }
 
 
@@ -185,30 +189,62 @@ main (int argc, char *av[])
 {
   static char *const argv[] = {
     "test-gnunet-service-arm",
-    "-c", "test_arm_api_data.conf",
+    "-c",
+    "test_arm_api_data.conf",
     NULL
   };
   static struct GNUNET_GETOPT_CommandLineOption options[] = {
     GNUNET_GETOPT_OPTION_END
   };
-  char hostname[GNUNET_OS_get_hostname_max_length () + 1];
 
-  if (0 != gethostname (hostname, sizeof (hostname) - 1))
+  /* trigger DNS lookup */
+#if HAVE_GETADDRINFO
+  {
+    struct addrinfo *ai;
+    int ret;
+
+    if (0 != (ret = getaddrinfo (hostname, NULL, NULL, &ai)))
+    {
+      FPRINTF (stderr,
+               "Failed to resolve `%s', testcase not run.\n",
+               hostname);
+      return 77;
+    }
+    freeaddrinfo (ai);
+  }
+#elif HAVE_GETHOSTBYNAME2
   {
-    GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                         "gethostname");
-    FPRINTF (stderr,
-             "%s",
-             "Failed to determine my own hostname, testcase not run.\n");
-    return 0;
+    struct hostent *host;
+
+    host = gethostbyname2 (hostname, AF_INET);
+    if (NULL == host)
+      host = gethostbyname2 (hostname, AF_INET6);
+    if (NULL == host)
+      {
+        FPRINTF (stderr,
+                 "Failed to resolve `%s', testcase not run.\n",
+                 hostname);
+        return 77;
+      }
   }
-  if (NULL == gethostbyname (hostname))
+#elif HAVE_GETHOSTBYNAME
   {
-    FPRINTF (stderr,
-             "Failed to resolve my hostname `%s', testcase not run.\n",
-             hostname);
-    return 0;
+    struct hostent *host;
+
+    host = gethostbyname (hostname);
+    if (NULL == host)
+      {
+        FPRINTF (stderr,
+                 "Failed to resolve `%s', testcase not run.\n",
+                 hostname);
+        return 77;
+      }
   }
+#else
+  FPRINTF (stderr,
+           "libc fails to have resolver function, testcase not run.\n");
+  return 77;
+#endif
   GNUNET_log_setup ("test-gnunet-service-arm",
                    "WARNING",
                    NULL);
@@ -217,6 +253,12 @@ main (int argc, char *av[])
                                    argv, "test-gnunet-service-arm",
                                    "nohelp", options,
                                     &run, NULL));
+  if (0 != ret)
+  {
+    fprintf (stderr,
+             "Test failed with error code %d\n",
+             ret);
+  }
   return ret;
 }