X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftest_testbed_api_testbed_run.c;h=45c9f5adf36cf12785fdf87657f7be012797f440;hb=f40acfa927bb605c81c99ed250277d51bf951e25;hp=2559523e69896cddefa7271a55973a37f476c3f1;hpb=cd0023ab2cfba58a08d47ec2c3f287eca926d922;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 2559523e6..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--2012 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,13 +25,13 @@ */ #include "platform.h" -#include "gnunet_common.h" +#include "gnunet_util_lib.h" #include "gnunet_testbed_service.h" /** * Number of peers we want to start */ -#define NUM_PEERS 13 +#define NUM_PEERS 5 /** * The array of peers; we fill this as the peers are given to us by the testbed @@ -46,31 +46,35 @@ 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 */ + GNUNET_SCHEDULER_shutdown (); /* Stop scheduler to shutdown testbed run */ } @@ -78,29 +82,49 @@ 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); } /** - * Task to be executed when peers are ready + * Signature of a main function for a testcase. * - * @param cls NULL - * @param tc the task context + * @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 + * succeeded + * @param links_failed the number of overlay link connection attempts that + * failed */ static void -master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +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 (peers[0], NULL, NULL); + op = GNUNET_TESTBED_peer_stop (NULL, peers[0], NULL, NULL); GNUNET_assert (NULL != op); } @@ -144,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; @@ -152,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, &master_task, 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); } @@ -198,10 +226,12 @@ 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); + GNUNET_asprintf (&config_filename, "test_testbed_api_testbed_run_%s.conf", + testname); } else config_filename = GNUNET_strdup ("test_testbed_api.conf");