X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Farm%2Ftest_arm_api.c;h=086cfc25850da8376167d5111b7d2c0293d3a1f0;hb=07120d4c0d2ca7d54d20c85e936763675b832c98;hp=fbd90583eedaa4c9c78efcb3892aa940f8d6454d;hpb=7bc466bbdb8b64cac68c5ee59eb7ab6b9d85c420;p=oweals%2Fgnunet.git diff --git a/src/arm/test_arm_api.c b/src/arm/test_arm_api.c index fbd90583e..086cfc258 100644 --- a/src/arm/test_arm_api.c +++ b/src/arm/test_arm_api.c @@ -1,10 +1,10 @@ /* 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 - 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 @@ -34,63 +34,96 @@ #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 struct GNUNET_ARM_Handle *arm; + 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) { - 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; } - GNUNET_assert (addr != NULL); + GNUNET_break (addr != NULL); 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 -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 - sleep (1); /* FIXME: that we need to do this is a problem... */ + GNUNET_ARM_stop_service (arm, "arm", TIMEOUT, &arm_stopped, NULL); #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 -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; - sched = s; + arm = GNUNET_ARM_connect (cfg, NULL); #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 @@ -113,10 +146,9 @@ check () 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; } @@ -128,11 +160,11 @@ main (int argc, char *argv[]) GNUNET_log_setup ("test-arm-api", #if VERBOSE - "DEBUG", + "DEBUG", #else - "WARNING", + "WARNING", #endif - NULL); + NULL); ret = check (); return ret;