X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_service.c;h=2c5ee467274ef24274fca127976451ce5bdfb22f;hb=34f34474b6137233d6700d4599f42257e8208af2;hp=078be7a41cc83cd6eb292c9c79b83c97e0f5a43e;hpb=b70a00756b53bbbbd008ead49c8bf00474807a00;p=oweals%2Fgnunet.git diff --git a/src/util/test_service.c b/src/util/test_service.c index 078be7a41..2c5ee4672 100644 --- a/src/util/test_service.c +++ b/src/util/test_service.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + Copyright (C) 2009, 2013 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 @@ -20,21 +20,17 @@ /** * @file util/test_service.c * @brief tests for service.c + * @author Christian Grothoff */ #include "platform.h" -#include "gnunet_common.h" -#include "gnunet_client_lib.h" -#include "gnunet_getopt_lib.h" -#include "gnunet_program_lib.h" -#include "gnunet_service_lib.h" -#include "gnunet_scheduler_lib.h" -#include "gnunet_time_lib.h" +#include "gnunet_util_lib.h" -#define VERBOSE GNUNET_NO - #define PORT 12435 +/** + * Message type we use for testing. + */ #define MY_TYPE 256 static struct GNUNET_SERVICE_Context *sctx; @@ -44,11 +40,40 @@ static int ok = 1; static struct GNUNET_CLIENT_Connection *client; +static void +do_stop (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + if (NULL != client) + { + GNUNET_CLIENT_disconnect (client); + client = NULL; + } + if (NULL != sctx) + { + GNUNET_SERVICE_stop (sctx); + sctx = NULL; + } + else + { + GNUNET_SCHEDULER_shutdown (); + } +} + + static size_t build_msg (void *cls, size_t size, void *buf) { struct GNUNET_MessageHeader *msg = buf; + if (size < sizeof (struct GNUNET_MessageHeader)) + { + /* timeout */ + GNUNET_break (0); + GNUNET_SCHEDULER_add_now (&do_stop, NULL); + ok = 1; + return 0; + } + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client connected, transmitting\n"); GNUNET_assert (size >= sizeof (struct GNUNET_MessageHeader)); msg->type = htons (MY_TYPE); @@ -58,12 +83,12 @@ build_msg (void *cls, size_t size, void *buf) static void -ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +ready (void *cls, + int result) { const struct GNUNET_CONFIGURATION_Handle *cfg = cls; - - GNUNET_assert (0 != (tc->reason & GNUNET_SCHEDULER_REASON_PREREQ_DONE)); + GNUNET_assert (GNUNET_YES == result); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Service confirmed running\n"); client = GNUNET_CLIENT_connect ("test_service", cfg); GNUNET_assert (client != NULL); @@ -76,24 +101,14 @@ ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) } -static void -do_stop (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - GNUNET_CLIENT_disconnect (client); - GNUNET_SERVICE_stop (sctx); -} - - static void recv_cb (void *cls, struct GNUNET_SERVER_Client *sc, const struct GNUNET_MessageHeader *message) { + GNUNET_assert (NULL != message); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving client message...\n"); GNUNET_SERVER_receive_done (sc, GNUNET_OK); - if (sctx != NULL) - GNUNET_SCHEDULER_add_now (&do_stop, NULL); - else - GNUNET_SCHEDULER_shutdown (); + GNUNET_SCHEDULER_add_now (&do_stop, NULL); ok = 0; } @@ -127,29 +142,25 @@ check () "test_service", "-c", "test_service_data.conf", - "-L", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif NULL }; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting service\n"); GNUNET_assert (GNUNET_OK == - GNUNET_SERVICE_run (5, argv, "test_service", + GNUNET_SERVICE_run (3, argv, "test_service", GNUNET_SERVICE_OPTION_NONE, &runner, &ok)); GNUNET_assert (0 == ok); return ok; } + static void -ready6 (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +ready6 (void *cls, + int result) { const struct GNUNET_CONFIGURATION_Handle *cfg = cls; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "V6 ready\n"); - GNUNET_assert (0 != (tc->reason & GNUNET_SCHEDULER_REASON_PREREQ_DONE)); + GNUNET_assert (GNUNET_YES == result); client = GNUNET_CLIENT_connect ("test_service6", cfg); GNUNET_assert (client != NULL); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "V6 client connected\n"); @@ -159,6 +170,7 @@ ready6 (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) &build_msg, NULL); } + static void runner6 (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *cfg) @@ -169,6 +181,7 @@ runner6 (void *cls, struct GNUNET_SERVER_Handle *server, &ready6, (void *) cfg); } + /** * Main method, starts scheduler with task1, * checks that "ok" is correct at the end. @@ -180,17 +193,11 @@ check6 () "test_service6", "-c", "test_service_data.conf", - "-L", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif NULL }; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting v6 service\n"); GNUNET_assert (GNUNET_OK == - GNUNET_SERVICE_run (5, argv, "test_service6", + GNUNET_SERVICE_run (3, argv, "test_service6", GNUNET_SERVICE_OPTION_NONE, &runner6, &ok)); GNUNET_assert (0 == ok); @@ -198,7 +205,6 @@ check6 () } - static void start_stop_main (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) @@ -220,12 +226,6 @@ check_start_stop () "test-service-program", "-c", "test_service_data.conf", - "-L", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif NULL }; const struct GNUNET_GETOPT_CommandLineOption options[] = { @@ -234,7 +234,7 @@ check_start_stop () int ret = 1; GNUNET_assert (GNUNET_OK == - GNUNET_PROGRAM_run (5, argv, "test-service-program", "no help", + GNUNET_PROGRAM_run (3, argv, "test-service-program", "no help", options, &start_stop_main, &ret)); GNUNET_break (0 == ret); @@ -249,15 +249,10 @@ main (int argc, char *argv[]) struct GNUNET_NETWORK_Handle *s = NULL; GNUNET_log_setup ("test-service", -#if VERBOSE - "DEBUG", -#else "WARNING", -#endif NULL); ret += check (); ret += check (); - // FIXME #ifndef MINGW s = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0); @@ -280,7 +275,6 @@ main (int argc, char *argv[]) ret += check6 (); } ret += check_start_stop (); - return ret; }