X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fhostlist%2Ftest_gnunet_daemon_hostlist.c;h=1bcf4e86abd596a9603c823e5ae7f50250d3e5be;hb=f5f5a9f680df2cebe6435ec87650cb3cb6e3ef6e;hp=9e808fc58790194d930043969a76a3c37a717f5d;hpb=0d0886cc467bf46358245ea0d8a66638daa969a0;p=oweals%2Fgnunet.git diff --git a/src/hostlist/test_gnunet_daemon_hostlist.c b/src/hostlist/test_gnunet_daemon_hostlist.c index 9e808fc58..1bcf4e86a 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist.c +++ b/src/hostlist/test_gnunet_daemon_hostlist.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet - (C) 2009 Christian Grothoff (and other contributing authors) + Copyright (C) 2009, 2016 GNUnet e.V. - 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 - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file hostlist/test_gnunet_daemon_hostlist.c @@ -26,10 +26,8 @@ #include "gnunet_util_lib.h" #include "gnunet_arm_service.h" #include "gnunet_transport_service.h" - -#define VERBOSE GNUNET_NO - -#define START_ARM GNUNET_YES +#include "gnunet_transport_core_service.h" +#include "gnunet_transport_hello_service.h" /** @@ -39,19 +37,15 @@ static int ok; -static struct GNUNET_SCHEDULER_Handle *sched; +static struct GNUNET_SCHEDULER_Task *timeout_task; -static GNUNET_SCHEDULER_TaskIdentifier timeout_task; - struct PeerContext { struct GNUNET_CONFIGURATION_Handle *cfg; - struct GNUNET_TRANSPORT_Handle *th; + struct GNUNET_TRANSPORT_CoreHandle *th; struct GNUNET_MessageHeader *hello; - struct GNUNET_ARM_Handle *arm; -#if START_ARM - pid_t arm_pid; -#endif + struct GNUNET_TRANSPORT_HelloGetHandle *ghh; + struct GNUNET_OS_Process *arm_proc; }; static struct PeerContext p1; @@ -60,31 +54,42 @@ static struct PeerContext p2; static void -clean_up (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +clean_up (void *cls) { - if (p1.th != NULL) + if (NULL != p1.th) + { + if (NULL != p1.ghh) { - GNUNET_TRANSPORT_disconnect (p1.th); - p1.th = NULL; + GNUNET_TRANSPORT_hello_get_cancel (p1.ghh); + p1.ghh = NULL; } - if (p2.th != NULL) + GNUNET_TRANSPORT_core_disconnect (p1.th); + p1.th = NULL; + } + if (NULL != p2.th) + { + if (NULL != p2.ghh) { - GNUNET_TRANSPORT_disconnect (p2.th); - p2.th = NULL; + GNUNET_TRANSPORT_hello_get_cancel (p2.ghh); + p2.ghh = NULL; } - GNUNET_SCHEDULER_shutdown (sched); + GNUNET_TRANSPORT_core_disconnect (p2.th); + p2.th = NULL; + } + GNUNET_SCHEDULER_shutdown (); } + /** * Timeout, give up. */ static void -timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +timeout_error (void *cls) { - timeout_task = GNUNET_SCHEDULER_NO_TASK; + timeout_task = NULL; GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Timeout trying to connect peers, test failed.\n"); - clean_up (NULL, tc); + "Timeout trying to connect peers, test failed.\n"); + clean_up (NULL); } @@ -94,112 +99,110 @@ timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * * @param cls closure * @param peer the peer that connected - * @param latency current latency of the connection - * @param distance in overlay hops, as given by transport plugin + * @param mq message queue to send messages to the peer */ -static void +static void * notify_connect (void *cls, - const struct GNUNET_PeerIdentity * peer, - struct GNUNET_TIME_Relative latency, - unsigned int distance) + const struct GNUNET_PeerIdentity *peer, + struct GNUNET_MQ_Handle *mq) { - if (peer == NULL) - return; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected, shutting down.\n"); ok = 0; - if (timeout_task != GNUNET_SCHEDULER_NO_TASK) - { - GNUNET_SCHEDULER_cancel (sched, - timeout_task); - timeout_task = GNUNET_SCHEDULER_NO_TASK; - } - GNUNET_SCHEDULER_add_now (sched, - &clean_up, NULL); + if (NULL != timeout_task) + { + GNUNET_SCHEDULER_cancel (timeout_task); + timeout_task = NULL; + } + GNUNET_SCHEDULER_add_now (&clean_up, + NULL); + return NULL; } static void process_hello (void *cls, - const struct GNUNET_MessageHeader *message) + const struct GNUNET_MessageHeader *message) { struct PeerContext *p = cls; - GNUNET_TRANSPORT_get_hello_cancel (p->th, &process_hello, p); + GNUNET_TRANSPORT_hello_get_cancel (p->ghh); + p->ghh = NULL; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Received HELLO, starting hostlist service.\n"); - GNUNET_ARM_start_services (p->cfg, sched, "hostlist", NULL); + "Received HELLO, starting hostlist service.\n"); } static void -setup_peer (struct PeerContext *p, const char *cfgname) +setup_peer (struct PeerContext *p, + const char *cfgname) { + char *binary; + + binary = GNUNET_OS_get_libexec_binary_path ("gnunet-service-arm"); p->cfg = GNUNET_CONFIGURATION_create (); -#if START_ARM - p->arm_pid = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", - "gnunet-service-arm", -#if VERBOSE - "-L", "DEBUG", -#endif - "-c", cfgname, NULL); -#endif - GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); - GNUNET_ARM_start_services (p->cfg, sched, "core", NULL); - p->th = GNUNET_TRANSPORT_connect (sched, p->cfg, p, NULL, - ¬ify_connect, NULL); - GNUNET_assert (p->th != NULL); - GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p); + p->arm_proc = + GNUNET_OS_start_process (GNUNET_YES, + GNUNET_OS_INHERIT_STD_OUT_AND_ERR, + NULL, + NULL, + NULL, + binary, + "gnunet-service-arm", + "-c", + cfgname, + NULL); + GNUNET_assert (GNUNET_OK == + GNUNET_CONFIGURATION_load (p->cfg, + cfgname)); + p->th = GNUNET_TRANSPORT_core_connect (p->cfg, + NULL, + NULL, + p, + ¬ify_connect, + NULL, + NULL); + GNUNET_assert (NULL != p->th); + p->ghh = GNUNET_TRANSPORT_hello_get (p->cfg, + GNUNET_TRANSPORT_AC_ANY, + &process_hello, + p); + GNUNET_free (binary); } static void -waitpid_task (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +waitpid_task (void *cls) { struct PeerContext *p = cls; -#if START_ARM GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Killing ARM process.\n"); - if (0 != PLIBC_KILL (p->arm_pid, SIGTERM)) - GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); - if (GNUNET_OS_process_wait(p->arm_pid) != GNUNET_OK) - GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); + if (0 != GNUNET_OS_process_kill (p->arm_proc, + GNUNET_TERM_SIG)) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, + "kill"); + if (GNUNET_OK != + GNUNET_OS_process_wait (p->arm_proc)) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, + "waitpid"); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "ARM process %u stopped\n", p->arm_pid); -#endif + "ARM process %u stopped\n", + GNUNET_OS_process_get_pid (p->arm_proc)); + GNUNET_OS_process_destroy (p->arm_proc); + p->arm_proc = NULL; GNUNET_CONFIGURATION_destroy (p->cfg); } -static void -stop_cb (void *cls, - int success) -{ - struct PeerContext *p = cls; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - success - ? "ARM stopped core service\n" - : "ARM failed to stop core service\n"); - GNUNET_ARM_disconnect (p->arm); - p->arm = NULL; - /* make sure this runs after all other tasks are done */ - GNUNET_SCHEDULER_add_delayed (sched, - GNUNET_TIME_UNIT_SECONDS, - &waitpid_task, p); -} - - static void stop_arm (struct PeerContext *p) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Asking ARM to stop core service\n"); - p->arm = GNUNET_ARM_connect (p->cfg, sched, NULL); - GNUNET_ARM_stop_service (p->arm, "core", GNUNET_TIME_UNIT_SECONDS, - &stop_cb, p); + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, + &waitpid_task, + p); } @@ -207,7 +210,7 @@ stop_arm (struct PeerContext *p) * Try again to connect to transport service. */ static void -shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +shutdown_task (void *cls) { stop_arm (&p1); stop_arm (&p2); @@ -216,36 +219,30 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, - const char *cfgfile, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { GNUNET_assert (ok == 1); ok++; - sched = s; - timeout_task = GNUNET_SCHEDULER_add_delayed (sched, - GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, - 15), + timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL); - GNUNET_SCHEDULER_add_delayed (sched, - GNUNET_TIME_UNIT_FOREVER_REL, - &shutdown_task, - NULL); - setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf"); - setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf"); + GNUNET_SCHEDULER_add_shutdown (&shutdown_task, + NULL); + setup_peer (&p1, + "test_gnunet_daemon_hostlist_peer1.conf"); + setup_peer (&p2, + "test_gnunet_daemon_hostlist_peer2.conf"); } static int check () { - char *const argv[] = { "test-gnunet-daemon-hostlist", + char *const argv[] = { + "test-gnunet-daemon-hostlist", "-c", "test_gnunet_daemon_hostlist_data.conf", -#if VERBOSE - "-L", "DEBUG", -#endif NULL }; struct GNUNET_GETOPT_CommandLineOption options[] = { @@ -253,8 +250,12 @@ check () }; ok = 1; GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, - argv, "test-gnunet-daemon-hostlist", - "nohelp", options, &run, &ok); + argv, + "test-gnunet-daemon-hostlist", + "nohelp", + options, + &run, + &ok); return ok; } @@ -262,22 +263,25 @@ check () int main (int argc, char *argv[]) { - int ret; - GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1"); - GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-2"); + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_peer1.conf", + "GNUNET_TEST_HOME"); + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_peer2.conf", + "GNUNET_TEST_HOME"); + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_data.conf", + "GNUNET_TEST_HOME"); GNUNET_log_setup ("test-gnunet-daemon-hostlist", -#if VERBOSE - "DEBUG", -#else "WARNING", -#endif NULL); ret = check (); - GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-1"); - GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-hostlist-peer-2"); - return ret; + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_peer1.conf", + "GNUNET_TEST_HOME"); + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_peer2.conf", + "GNUNET_TEST_HOME"); + GNUNET_DISK_purge_cfg_dir ("test_gnunet_daemon_hostlist_data.conf", + "GNUNET_TEST_HOME"); + return ret; } /* end of test_gnunet_daemon_hostlist.c */