X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftest_testbed_api_testbed_run.c;h=45c9f5adf36cf12785fdf87657f7be012797f440;hb=f40acfa927bb605c81c99ed250277d51bf951e25;hp=293e77bafd197779382709290028a324a6d06c65;hpb=468fea92f64d600ed635c417d91a235535098372;p=oweals%2Fgnunet.git diff --git a/src/testbed/test_testbed_api_testbed_run.c b/src/testbed/test_testbed_api_testbed_run.c index 293e77baf..45c9f5adf 100644 --- a/src/testbed/test_testbed_api_testbed_run.c +++ b/src/testbed/test_testbed_api_testbed_run.c @@ -1,6 +1,6 @@ /* 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 @@ -14,8 +14,8 @@ 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. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -25,7 +25,7 @@ */ #include "platform.h" -#include "gnunet_common.h" +#include "gnunet_util_lib.h" #include "gnunet_testbed_service.h" /** @@ -46,29 +46,33 @@ static struct GNUNET_TESTBED_Operation *op; /** * Abort task identifier */ -static GNUNET_SCHEDULER_TaskIdentifier abort_task; +static struct GNUNET_SCHEDULER_Task * abort_task; /** * Current peer id */ -unsigned int peer_id; +static unsigned int peer_id; /** * Testing result */ static int result; +/** + * Should we wait forever after testbed is initialized? + */ +static int wait_forever; + /** * 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); GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */ } @@ -78,13 +82,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) { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n"); - abort_task = GNUNET_SCHEDULER_NO_TASK; + abort_task = NULL; + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Test timed out -- Aborting\n"); GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); } @@ -93,6 +97,7 @@ do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * Signature of a main function for a testcase. * * @param cls closure + * @param h the run handle * @param num_peers number of peers in 'peers' * @param peers_ handle to peers run in the testbed * @param links_succeeded the number of overlay link connection attempts that @@ -101,12 +106,23 @@ do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * failed */ static void -test_master (void *cls, unsigned int num_peers, +test_master (void *cls, + struct GNUNET_TESTBED_RunHandle *h, + unsigned int num_peers, struct GNUNET_TESTBED_Peer **peers_, unsigned int links_succeeded, unsigned int links_failed) { result = GNUNET_OK; + if (GNUNET_YES == wait_forever) + { + if (NULL == abort_task) + return; /* abort already scheduled */ + GNUNET_SCHEDULER_cancel (abort_task); + abort_task = NULL; + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); + return; + } GNUNET_assert (NULL != peers[0]); op = GNUNET_TESTBED_peer_stop (NULL, peers[0], NULL, NULL); GNUNET_assert (NULL != op); @@ -152,7 +168,9 @@ controller_event_cb (void *cls, * @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) { uint64_t event_mask; @@ -160,11 +178,13 @@ run (void *cls, char *const *args, const char *cfgfile, event_mask = 0; event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START); event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP); - GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask, &controller_event_cb, - NULL, &test_master, NULL); + GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask, + &controller_event_cb, NULL, + &test_master, NULL); abort_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 300), &do_abort, + (GNUNET_TIME_UNIT_SECONDS, 300), + &do_abort, NULL); } @@ -206,7 +226,9 @@ main (int argc, char **argv) GNUNET_break (0); /* Windows with no .exe? */ } #endif - if (0 != strcmp ("run", testname)) + if (0 == strcmp ("waitforever", testname)) + wait_forever = GNUNET_YES; + if ( (GNUNET_YES != wait_forever) && (0 != strcmp ("run", testname)) ) { GNUNET_asprintf (&config_filename, "test_testbed_api_testbed_run_%s.conf", testname);