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 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;
}
+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);
}
-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,
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);
+ cfg = c;
+ h = GNUNET_PEERINFO_connect (cfg);
+ GNUNET_assert (h != NULL);
+ add_peer ();
+ ic = GNUNET_PEERINFO_iterate (h,
+ NULL,
+ GNUNET_TIME_relative_multiply
+ (GNUNET_TIME_UNIT_SECONDS, 15),
+ &process, cls);
}
check ()
{
int ok = 3;
- pid_t pid;
+ struct GNUNET_OS_Process *proc;
char *const argv[] = { "test-peerinfo-api",
"-c",
"test_peerinfo_api_data.conf",
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
- pid = GNUNET_OS_start_process ("gnunet-service-peerinfo",
+ proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-peerinfo",
"gnunet-service-peerinfo",
#if DEBUG_PEERINFO
"-L", "DEBUG",
GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
argv, "test-peerinfo-api", "nohelp",
options, &run, &ok);
- if (0 != PLIBC_KILL (pid, SIGTERM))
+ if (0 != GNUNET_OS_process_kill (proc, SIGTERM))
{
GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
ok = 1;
}
- GNUNET_OS_process_wait(pid);
+ GNUNET_OS_process_wait (proc);
+ GNUNET_OS_process_close (proc);
+ proc = NULL;
return ok;
}
{
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;
}