X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftestbed%2Ftest_testbed_api_controllerlink.c;h=6c1a24f9c53a2d35118138e9ed412c0418a79da0;hb=6e599264ad13e8fc105493d74d7c11d46f8739ed;hp=471ab3a94c3ec0d1dd63b49d2f056e9ff4b00eb6;hpb=acb2568116de77fcac08ab1ac8b4df81a886f4be;p=oweals%2Fgnunet.git diff --git a/src/testbed/test_testbed_api_controllerlink.c b/src/testbed/test_testbed_api_controllerlink.c index 471ab3a94..6c1a24f9c 100644 --- a/src/testbed/test_testbed_api_controllerlink.c +++ b/src/testbed/test_testbed_api_controllerlink.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet - (C) 2008--2013 Christian Grothoff (and other contributing authors) + Copyright (C) 2008--2013 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 3, 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 */ /** @@ -45,14 +45,12 @@ /** * Generic logging shortcut */ -#define LOG(kind,...) \ - GNUNET_log (kind, __VA_ARGS__) +#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) /** * Debug logging shorthand */ -#define LOG_DEBUG(...) \ - LOG(GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) +#define LOG_DEBUG(...) LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) /** * Different stages in testing @@ -244,7 +242,7 @@ static struct GNUNET_CONFIGURATION_Handle *cfg3; /** * Abort task */ -static GNUNET_SCHEDULER_TaskIdentifier abort_task; +static struct GNUNET_SCHEDULER_Task *abort_task; /** * Operation handle for linking controllers @@ -274,17 +272,17 @@ static struct GNUNET_TESTBED_Peer *master_peer; /** * The handle for whether a host is habitable or not */ -struct GNUNET_TESTBED_HostHabitableCheckHandle *hc_handle; +static struct GNUNET_TESTBED_HostHabitableCheckHandle *hc_handle; /** * The task handle for the delay task */ -GNUNET_SCHEDULER_TaskIdentifier delay_task_id; +static struct GNUNET_SCHEDULER_Task *delay_task_id; /** * Event mask */ -uint64_t event_mask; +static uint64_t event_mask; /** * Global testing status @@ -294,15 +292,18 @@ static enum Stage result; /** * shortcut to exit during failure */ -#define FAIL_TEST(cond) do { \ - if (!(cond)) { \ - GNUNET_break(0); \ - if (GNUNET_SCHEDULER_NO_TASK != abort_task) \ - GNUNET_SCHEDULER_cancel (abort_task); \ - abort_task = GNUNET_SCHEDULER_NO_TASK; \ - GNUNET_SCHEDULER_add_now (do_shutdown, NULL); \ - return; \ - } \ +#define FAIL_TEST(cond) \ + do \ + { \ + if (! (cond)) \ + { \ + GNUNET_break (0); \ + if (NULL != abort_task) \ + GNUNET_SCHEDULER_cancel (abort_task); \ + abort_task = NULL; \ + GNUNET_SCHEDULER_shutdown (); \ + return; \ + } \ } while (0) @@ -310,20 +311,24 @@ static enum Stage result; * Shutdown nicely * * @param cls NULL - * @param tc the task context */ static void -do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_shutdown (void *cls) { - if (GNUNET_SCHEDULER_NO_TASK != abort_task) + if (NULL != abort_task) GNUNET_SCHEDULER_cancel (abort_task); - if (GNUNET_SCHEDULER_NO_TASK != delay_task_id) + if (NULL != delay_task_id) { GNUNET_SCHEDULER_cancel (delay_task_id); - delay_task_id = GNUNET_SCHEDULER_NO_TASK; + delay_task_id = NULL; } if (NULL != hc_handle) GNUNET_TESTBED_is_host_habitable_cancel (hc_handle); + if (NULL != op) + { + GNUNET_TESTBED_operation_done (op); + op = NULL; + } if (NULL != mc) GNUNET_TESTBED_controller_disconnect (mc); if (NULL != cp) @@ -349,14 +354,13 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * abort task to run on test timed out * * @param cls NULL - * @param tc the task context */ static void -do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_abort (void *cls) { - LOG (GNUNET_ERROR_TYPE_WARNING, "Aborting\n"); - abort_task = GNUNET_SCHEDULER_NO_TASK; - do_shutdown (cls, tc); + LOG (GNUNET_ERROR_TYPE_WARNING, "Aborting in stage %d\n", result); + abort_task = NULL; + GNUNET_SCHEDULER_shutdown (); } @@ -369,7 +373,7 @@ do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) static void do_abort_now (void *cls) { - if (GNUNET_SCHEDULER_NO_TASK != abort_task) + if (NULL != abort_task) GNUNET_SCHEDULER_cancel (abort_task); abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL); } @@ -392,9 +396,9 @@ registration_cont (void *cls, const char *emsg); * @return */ static void -delay_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +delay_task (void *cls) { - delay_task_id = GNUNET_SCHEDULER_NO_TASK; + delay_task_id = NULL; switch (result) { case SLAVE2_PEER_CREATE_SUCCESS: @@ -447,12 +451,12 @@ peer_create_cb (void *cls, struct GNUNET_TESTBED_Peer *peer, const char *emsg) result = SLAVE2_PEER_CREATE_SUCCESS; slave2_peer = peer; GNUNET_TESTBED_operation_done (op); - delay_task_id = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 1), - &delay_task, - NULL); - break; + op = NULL; + delay_task_id = GNUNET_SCHEDULER_add_delayed ( + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1), + &delay_task, + NULL); + return; case SLAVE3_STARTED: result = SLAVE3_PEER_CREATE_SUCCESS; slave3_peer = peer; @@ -518,6 +522,7 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) FAIL_TEST (event->details.peer_start.host == host); FAIL_TEST (event->details.peer_start.peer == master_peer); GNUNET_TESTBED_operation_done (op); + op = NULL; result = MASTER_PEER_START_SUCCESS; slave = GNUNET_TESTBED_host_create_with_id (1, "127.0.0.1", NULL, cfg, 0); FAIL_TEST (NULL != slave); @@ -548,8 +553,8 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) result = SLAVE3_PEER_START_SUCCESS; sleep (1); LOG_DEBUG ("**************************************\n"); - op = GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, slave2_peer, - slave3_peer); + op = + GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, slave2_peer, slave3_peer); FAIL_TEST (NULL != op); break; case SLAVE3_PEER_START_SUCCESS: @@ -560,10 +565,10 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) result = SLAVE2_SLAVE3_PEERS_CONNECTED; GNUNET_TESTBED_operation_done (op); op = NULL; - delay_task_id = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task, - NULL); + delay_task_id = GNUNET_SCHEDULER_add_delayed ( + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1), + &delay_task, + NULL); break; case SLAVE1_PEER_STOP_SUCCESS: FAIL_TEST (GNUNET_TESTBED_ET_PEER_START == event->type); @@ -571,8 +576,8 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) FAIL_TEST (event->details.peer_start.peer == slave2_peer); GNUNET_TESTBED_operation_done (op); result = SLAVE2_PEER_START_SUCCESS; - op = GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, master_peer, - slave2_peer); + op = + GNUNET_TESTBED_overlay_connect (mc, NULL, NULL, master_peer, slave2_peer); break; case SLAVE2_PEER_START_SUCCESS: FAIL_TEST (NULL != event); @@ -582,10 +587,10 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) result = MASTER_SLAVE2_PEERS_CONNECTED; GNUNET_TESTBED_operation_done (op); op = NULL; - delay_task_id = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 1), &delay_task, - NULL); + delay_task_id = GNUNET_SCHEDULER_add_delayed ( + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1), + &delay_task, + NULL); break; case SLAVE2_SLAVE3_PEERS_CONNECTED: FAIL_TEST (GNUNET_TESTBED_ET_PEER_STOP == event->type); @@ -624,7 +629,6 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) case SLAVE3_REGISTERED: check_operation_success (event); GNUNET_TESTBED_operation_done (op); - op = NULL; result = SLAVE3_STARTED; op = GNUNET_TESTBED_peer_create (mc, slave3, cfg, peer_create_cb, NULL); FAIL_TEST (NULL != op); @@ -644,9 +648,7 @@ controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event) result = SUCCESS; GNUNET_TESTBED_operation_done (op); op = NULL; - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 1), &do_shutdown, - NULL); + GNUNET_SCHEDULER_shutdown (); break; default: FAIL_TEST (0); @@ -707,7 +709,8 @@ registration_cont (void *cls, const char *emsg) * GNUNET_TESTBED_controller_stop() shouldn't be called in this case */ static void -status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, +status_cb (void *cls, + const struct GNUNET_CONFIGURATION_Handle *config, int status) { switch (result) @@ -719,8 +722,10 @@ status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, event_mask |= (1L << GNUNET_TESTBED_ET_PEER_STOP); event_mask |= (1L << GNUNET_TESTBED_ET_CONNECT); event_mask |= (1L << GNUNET_TESTBED_ET_OPERATION_FINISHED); - mc = GNUNET_TESTBED_controller_connect (host, event_mask, - &controller_cb, NULL); + mc = GNUNET_TESTBED_controller_connect (host, + event_mask, + &controller_cb, + NULL); FAIL_TEST (NULL != mc); result = MASTER_STARTED; op = GNUNET_TESTBED_peer_create (mc, host, cfg, peer_create_cb, NULL); @@ -735,34 +740,34 @@ status_cb (void *cls, const struct GNUNET_CONFIGURATION_Handle *config, /** - * Callbacks of this type are called by GNUNET_TESTBED_is_host_habitable to + * Callbacks of this type are called by #GNUNET_TESTBED_is_host_habitable to * inform whether the given host is habitable or not. The Handle returned by * GNUNET_TESTBED_is_host_habitable() is invalid after this callback is called * * @param cls NULL * @param host the host whose status is being reported; will be NULL if the host * given to GNUNET_TESTBED_is_host_habitable() is NULL - * @param status GNUNET_YES if it is habitable; GNUNET_NO if not + * @param status #GNUNET_YES if it is habitable; #GNUNET_NO if not */ static void -host_habitable_cb (void *cls, const struct GNUNET_TESTBED_Host *_host, +host_habitable_cb (void *cls, + const struct GNUNET_TESTBED_Host *_host, int status) { hc_handle = NULL; if (GNUNET_NO == status) { - (void) PRINTF ("%s", + (void) printf ("%s", "Unable to run the test as this system is not configured " "to use password less SSH logins to localhost.\n" "Skipping test\n"); GNUNET_SCHEDULER_cancel (abort_task); - abort_task = GNUNET_SCHEDULER_NO_TASK; - (void) GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + abort_task = NULL; + GNUNET_SCHEDULER_shutdown (); result = SKIP; return; } - cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, status_cb, - NULL); + cp = GNUNET_TESTBED_controller_start ("127.0.0.1", host, status_cb, NULL); } @@ -770,37 +775,40 @@ host_habitable_cb (void *cls, const struct GNUNET_TESTBED_Host *_host, * Main run function. * * @param cls NULL - * @param args arguments passed to GNUNET_PROGRAM_run + * @param args arguments passed to #GNUNET_PROGRAM_run() * @param cfgfile the path to configuration file * @param cfg the configuration file handle */ static void -run (void *cls, char *const *args, const char *cfgfile, +run (void *cls, + char *const *args, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *config) { cfg = GNUNET_CONFIGURATION_dup (config); host = GNUNET_TESTBED_host_create (NULL, NULL, cfg, 0); FAIL_TEST (NULL != host); - if (NULL == - (hc_handle = - GNUNET_TESTBED_is_host_habitable (host, config, &host_habitable_cb, - NULL))) + if (NULL == (hc_handle = GNUNET_TESTBED_is_host_habitable (host, + config, + &host_habitable_cb, + NULL))) { GNUNET_TESTBED_host_destroy (host); GNUNET_CONFIGURATION_destroy (cfg); cfg = NULL; host = NULL; - (void) PRINTF ("%s", + (void) printf ("%s", "Unable to run the test as this system is not configured " "to use password less SSH logins to localhost.\n" "Marking test as successful\n"); result = SKIP; return; } - abort_task = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_MINUTES, 5), &do_abort, - NULL); + abort_task = GNUNET_SCHEDULER_add_delayed ( + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5), + &do_abort, + NULL); + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); } @@ -810,20 +818,21 @@ run (void *cls, char *const *args, const char *cfgfile, int main (int argc, char **argv) { - char *const argv2[] = { "test_testbed_api_controllerlink", - "-c", "test_testbed_api.conf", - NULL - }; - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; + char *const argv2[] = {"test_testbed_api_controllerlink", + "-c", + "test_testbed_api.conf", + NULL}; + struct GNUNET_GETOPT_CommandLineOption options[] = {GNUNET_GETOPT_OPTION_END}; int ret; result = INIT; - ret = - GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, - "test_testbed_api_controllerlink", "nohelp", options, - &run, NULL); + ret = GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, + argv2, + "test_testbed_api_controllerlink", + "nohelp", + options, + &run, + NULL); if (GNUNET_OK != ret) return 1; switch (result) @@ -831,7 +840,7 @@ main (int argc, char **argv) case SUCCESS: return 0; case SKIP: - return 77; /* Mark test as skipped */ + return 77; /* Mark test as skipped */ default: return 1; }