even longer timeout, still timing out on hostkey generation (sparcbot)
[oweals/gnunet.git] / src / peerinfo / test_peerinfo_api.c
index 4cbbb7bf618565ff96a04e0aba9daeeb14f14add..34655c8936553f1bb9b79b7ae0e04b2dfdcaf9eb 100644 (file)
@@ -4,7 +4,7 @@
 
      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
 #include "gnunet_peerinfo_service.h"
 #include "gnunet_program_lib.h"
 #include "gnunet_time_lib.h"
+#include "peerinfo.h"
 
+static struct GNUNET_SCHEDULER_Handle *sched;
+
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+static struct GNUNET_PEERINFO_IteratorContext *ic;
+
+static struct GNUNET_PEERINFO_Handle *h;
+
+static unsigned int retries;
 
 static int
 check_it (void *cls,
           const char *tname,
           struct GNUNET_TIME_Absolute expiration,
-          const void *addr, size_t addrlen)
+          const void *addr, uint16_t addrlen)
 {
   unsigned int *agc = cls;
 
@@ -54,23 +64,72 @@ check_it (void *cls,
 }
 
 
+static size_t
+address_generator (void *cls, size_t max, void *buf)
+{
+  size_t *agc = cls;
+  size_t ret;
+
+  if (0 == *agc)
+    return 0;
+  ret = GNUNET_HELLO_add_address ("peerinfotest",
+                                  GNUNET_TIME_relative_to_absolute
+                                  (GNUNET_TIME_UNIT_HOURS), "Address", *agc,
+                                  buf, max);
+  (*agc)--;
+  return ret;
+}
+
+
+static void
+add_peer ()
+{
+  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
+  struct GNUNET_PeerIdentity pid;
+  struct GNUNET_HELLO_Message *h2;
+  size_t agc;
+
+  agc = 2;
+  memset (&pkey, 32, sizeof (pkey));
+  GNUNET_CRYPTO_hash (&pkey, sizeof (pkey), &pid.hashPubKey);
+  h2 = GNUNET_HELLO_create (&pkey, &address_generator, &agc);
+  GNUNET_PEERINFO_add_peer (h, h2);
+  GNUNET_free (h2);
+
+}
+
+
 static void
 process (void *cls,
          const struct GNUNET_PeerIdentity *peer,
-         const struct GNUNET_HELLO_Message *hello, uint32_t trust)
+         const struct GNUNET_HELLO_Message *hello)
 {
   int *ok = cls;
   unsigned int agc;
 
   if (peer == NULL)
     {
+      ic = NULL;
+      if ( (3 == *ok) &&
+          (retries < 50) )
+       {
+         /* try again */
+         retries++;      
+         add_peer ();
+         ic = GNUNET_PEERINFO_iterate (h,
+                                       NULL,
+                                       GNUNET_TIME_relative_multiply
+                                       (GNUNET_TIME_UNIT_SECONDS, 15), 
+                                       &process, cls);
+         return;
+       }
       GNUNET_assert (peer == NULL);
       GNUNET_assert (2 == *ok);
-      GNUNET_assert (trust == 0);
+      GNUNET_PEERINFO_disconnect (h);
+      h = NULL;
       *ok = 0;
       return;
     }
-
   if (hello != NULL)
     {
       GNUNET_assert (3 == *ok);
@@ -82,48 +141,23 @@ process (void *cls,
 }
 
 
-static size_t
-address_generator (void *cls, size_t max, void *buf)
-{
-  size_t *agc = cls;
-  size_t ret;
-
-  if (0 == *agc)
-    return 0;
-  ret = GNUNET_HELLO_add_address ("peerinfotest",
-                                  GNUNET_TIME_relative_to_absolute
-                                  (GNUNET_TIME_UNIT_HOURS), "Address", *agc,
-                                  buf, max);
-  (*agc)--;
-  return ret;
-}
-
-
 static void
 run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *sched,
+     struct GNUNET_SCHEDULER_Handle *s,
      char *const *args,
      const char *cfgfile, 
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
+     const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  struct GNUNET_HELLO_Message *hello;
-  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
-  size_t agc;
-  struct GNUNET_PeerIdentity pid;
-
-  memset (&pkey, 32, sizeof (pkey));
-  GNUNET_CRYPTO_hash (&pkey, sizeof (pkey), &pid.hashPubKey);
-  agc = 2;
-  hello = GNUNET_HELLO_create (&pkey, &address_generator, &agc);
-  GNUNET_assert (hello != NULL);
-  GNUNET_PEERINFO_add_peer (cfg, sched, &pid, hello);
-  GNUNET_PEERINFO_iterate (cfg,
-                           sched,
-                           NULL,
-                           0,
-                           GNUNET_TIME_relative_multiply
-                           (GNUNET_TIME_UNIT_SECONDS, 15), &process, cls);
-  GNUNET_free (hello);
+  sched = s;
+  cfg = c;
+  h = GNUNET_PEERINFO_connect (sched, cfg);
+  GNUNET_assert (h != NULL);
+  add_peer ();
+  ic = GNUNET_PEERINFO_iterate (h,
+                               NULL,
+                               GNUNET_TIME_relative_multiply
+                               (GNUNET_TIME_UNIT_SECONDS, 15),
+                               &process, cls);
 }
 
 
@@ -143,7 +177,7 @@ check ()
   struct GNUNET_GETOPT_CommandLineOption options[] = {
     GNUNET_GETOPT_OPTION_END
   };
-  pid = GNUNET_OS_start_process ("gnunet-service-peerinfo",
+  pid = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-peerinfo",
                                  "gnunet-service-peerinfo",
 #if DEBUG_PEERINFO
                                  "-L", "DEBUG",
@@ -167,8 +201,15 @@ main (int argc, char *argv[])
 {
   int ret = 0;
 
+  GNUNET_log_setup ("test_peerinfo_api",
+#if DEBUG_PEERINFO
+                    "DEBUG",
+#else
+                    "WARNING",
+#endif
+                    NULL);
   ret = check ();
-  GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-peerinfo");
+  GNUNET_DISK_directory_remove ("/tmp/test-gnunet-peerinfo");
   return ret;
 }