-svn ignore
[oweals/gnunet.git] / src / arm / test_arm_api.c
index fbd90583eedaa4c9c78efcb3892aa940f8d6454d..086cfc25850da8376167d5111b7d2c0293d3a1f0 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2009 Christian Grothoff (and other contributing authors)
+     (C) 2009, 2011 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      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 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
 
 #define START_ARM GNUNET_YES
 
 
 #define START_ARM GNUNET_YES
 
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
+#define START_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 1500)
 
 
-static struct GNUNET_SCHEDULER_Handle *sched;
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15)
 
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
+static struct GNUNET_ARM_Handle *arm;
+
 static int ok = 1;
 
 static int ok = 1;
 
+static void
+arm_stopped (void *cls,  enum GNUNET_ARM_ProcessStatus success)
+{
+  GNUNET_break (success == GNUNET_ARM_PROCESS_DOWN);
+  if (success != GNUNET_ARM_PROCESS_DOWN)
+    ok = 3;
+  else if (ok == 1)
+    ok = 0;
+}
+
+
+static void
+arm_notify_stop (void *cls, enum GNUNET_ARM_ProcessStatus success)
+{
+  GNUNET_break (success == GNUNET_ARM_PROCESS_DOWN);
+#if START_ARM
+  GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL);
+#endif
+}
+
+
 static void
 dns_notify (void *cls, const struct sockaddr *addr, socklen_t addrlen)
 {
   if (addr == NULL)
     {
 static void
 dns_notify (void *cls, const struct sockaddr *addr, socklen_t addrlen)
 {
   if (addr == NULL)
     {
-      GNUNET_assert (ok == 0);
-#if START_ARM
-      GNUNET_ARM_stop_service ("arm", cfg, sched, TIMEOUT, NULL, NULL);
-#endif
+      if (ok != 0)
+       {
+         GNUNET_break (0);
+         ok = 2;
+       }
+      GNUNET_ARM_stop_service (arm, "resolver", TIMEOUT, &arm_notify_stop,
+                              NULL);
       return;
     }
       return;
     }
-  GNUNET_assert (addr != NULL);
+  GNUNET_break (addr != NULL);
   ok = 0;
 }
 
 
 static void
   ok = 0;
 }
 
 
 static void
-resolver_notify (void *cls, int success)
+resolver_notify (void *cls, enum GNUNET_ARM_ProcessStatus success)
 {
 {
-  GNUNET_assert (success == GNUNET_YES);
-  sleep (1);                    /* FIXME: that we need to do this is a problem... */
-  GNUNET_RESOLVER_ip_get (sched,
-                          cfg,
-                          "localhost", AF_INET, TIMEOUT, &dns_notify, NULL);
+  if (success != GNUNET_ARM_PROCESS_STARTING)
+    {
+      GNUNET_break (0);
+      ok = 2;
+#if START_ARM
+      GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL);
+#endif
+      return;
+    }
+  GNUNET_RESOLVER_ip_get ("localhost", AF_INET, TIMEOUT, &dns_notify, NULL);
 }
 
 }
 
+
 static void
 static void
-arm_notify (void *cls, int success)
+arm_notify (void *cls, enum GNUNET_ARM_ProcessStatus success)
 {
 {
-  GNUNET_assert (success == GNUNET_YES);
+  if (success != GNUNET_ARM_PROCESS_STARTING)
+    {
+      GNUNET_break (0);
+      ok = 2;
 #if START_ARM
 #if START_ARM
-  sleep (1);                    /* FIXME: that we need to do this is a problem... */
+      GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL);
 #endif
 #endif
-  GNUNET_ARM_start_service ("resolver",
-                            cfg, sched, TIMEOUT, &resolver_notify, NULL);
+    }
+  GNUNET_ARM_start_service (arm, "resolver", START_TIMEOUT, &resolver_notify,
+                           NULL);
 }
 
 
 static void
 }
 
 
 static void
-task (void *cls,
-      struct GNUNET_SCHEDULER_Handle *s,
-      char *const *args,
-      const char *cfgfile,
+task (void *cls, char *const *args, const char *cfgfile,
       const struct GNUNET_CONFIGURATION_Handle *c)
 {
   cfg = c;
       const struct GNUNET_CONFIGURATION_Handle *c)
 {
   cfg = c;
-  sched = s;
+  arm = GNUNET_ARM_connect (cfg, NULL);
 #if START_ARM
 #if START_ARM
-  GNUNET_ARM_start_service ("arm", cfg, sched, TIMEOUT, &arm_notify, NULL);
+  GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL);
 #else
   arm_notify (NULL, GNUNET_YES);
 #endif
 #else
   arm_notify (NULL, GNUNET_YES);
 #endif
@@ -113,10 +146,9 @@ check ()
     GNUNET_GETOPT_OPTION_END
   };
   GNUNET_assert (GNUNET_OK ==
     GNUNET_GETOPT_OPTION_END
   };
   GNUNET_assert (GNUNET_OK ==
-                 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
-                                     argv,
-                                     "test-arm-api",
-                                     "nohelp", options, &task, NULL));
+                GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
+                                    argv, "test-arm-api", "nohelp", options,
+                                    &task, NULL));
   return ok;
 }
 
   return ok;
 }
 
@@ -128,11 +160,11 @@ main (int argc, char *argv[])
 
   GNUNET_log_setup ("test-arm-api",
 #if VERBOSE
 
   GNUNET_log_setup ("test-arm-api",
 #if VERBOSE
-                    "DEBUG",
+                   "DEBUG",
 #else
 #else
-                    "WARNING",
+                   "WARNING",
 #endif
 #endif
-                    NULL);
+                   NULL);
   ret = check ();
 
   return ret;
   ret = check ();
 
   return ret;