From 768cf4d37944fceb336ceb09aa85e2ae87e7a612 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Sat, 1 Sep 2012 15:42:42 +0000 Subject: [PATCH] tests for testbed_test_run and some fixes --- src/testbed/Makefile.am | 7 ++ src/testbed/test_testbed_api_test.c | 93 ++++++++++++++++++++++ src/testbed/test_testbed_api_testbed_run.c | 38 ++++----- src/testbed/testbed_api_test.c | 18 ++--- src/testbed/testbed_api_testbed.c | 2 + 5 files changed, 130 insertions(+), 28 deletions(-) create mode 100644 src/testbed/test_testbed_api_test.c diff --git a/src/testbed/Makefile.am b/src/testbed/Makefile.am index 2e07afee7..a865e468f 100644 --- a/src/testbed/Makefile.am +++ b/src/testbed/Makefile.am @@ -74,6 +74,7 @@ check_PROGRAMS = \ test_testbed_api \ test_testbed_api_operations \ test_testbed_api_testbed_run \ + test_testbed_api_test \ test_gnunet_helper_testbed if ENABLE_TEST_RUN @@ -126,6 +127,12 @@ test_testbed_api_testbed_run_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ libgnunettestbed.la +test_testbed_api_test_SOURCES = \ + test_testbed_api_test.c +test_testbed_api_test_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + libgnunettestbed.la + test_gnunet_helper_testbed_SOURCES = \ test_gnunet_helper_testbed.c test_gnunet_helper_testbed_LDADD = \ diff --git a/src/testbed/test_testbed_api_test.c b/src/testbed/test_testbed_api_test.c new file mode 100644 index 000000000..83d18ce0c --- /dev/null +++ b/src/testbed/test_testbed_api_test.c @@ -0,0 +1,93 @@ +/* + This file is part of GNUnet + (C) 2008--2012 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 + by the Free Software Foundation; either version 3, 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. + + 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. +*/ + +/** + * @file src/testbed/test_testbed_api_test.c + * @brief testing cases for testing high level testbed api helper functions + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "gnunet_common.h" +#include "gnunet_testbed_service.h" + +/** + * Number of peers we want to start + */ +#define NUM_PEERS 25 + +/** + * Testing result + */ +static int result; + + +/** + * Shutdown nicely + * + * @param cls NULL + * @param tc the task context + */ +static void +do_shutdown (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_SCHEDULER_shutdown (); +} + + +/** + * Signature of a main function for a testcase. + * + * @param cls closure + * @param num_peers number of peers in 'peers' + * @param peers handle to peers run in the testbed + */ +static void +test_master (void *cls, unsigned int num_peers, + struct GNUNET_TESTBED_Peer **peers) +{ + unsigned int peer; + + GNUNET_assert (NULL == cls); + GNUNET_assert (NUM_PEERS == num_peers); + GNUNET_assert (NULL != peers); + for (peer = 0; peer < num_peers; peer++) + GNUNET_assert (NULL != peers[peer]); + result = GNUNET_OK; + /* Artificial delay for shutdown */ + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &do_shutdown, NULL); +} + + +/** + * Main function + */ +int +main (int argc, char **argv) +{ + result = GNUNET_SYSERR; + GNUNET_TESTBED_test_run ("test_testbed_api_test", "test_testbed_api.conf", + NUM_PEERS, &test_master, NULL); + if (GNUNET_OK != result) + return 1; + return 0; +} + +/* end of test_testbed_api_test.c */ diff --git a/src/testbed/test_testbed_api_testbed_run.c b/src/testbed/test_testbed_api_testbed_run.c index 2a7c77af0..8aee8d6cc 100644 --- a/src/testbed/test_testbed_api_testbed_run.c +++ b/src/testbed/test_testbed_api_testbed_run.c @@ -1,22 +1,22 @@ /* - This file is part of GNUnet - (C) 2008--2012 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 - by the Free Software Foundation; either version 3, 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. - - 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. - */ + This file is part of GNUnet + (C) 2008--2012 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 + by the Free Software Foundation; either version 3, 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. + + 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. +*/ /** * @file testbed/test_testbed_api_testbed_run.c @@ -191,3 +191,5 @@ main (int argc, char **argv) return 1; return 0; } + +/* end of test_testbed_api_testbed_run.c */ diff --git a/src/testbed/testbed_api_test.c b/src/testbed/testbed_api_test.c index 0b3844011..1d49e706d 100644 --- a/src/testbed/testbed_api_test.c +++ b/src/testbed/testbed_api_test.c @@ -42,7 +42,7 @@ struct TestRunContext * Closure for test master */ void *test_master_cls; - + /** * Number of peers to start */ @@ -76,7 +76,7 @@ controller_event_cb (void *cls, return; GNUNET_assert (GNUNET_TESTBED_ET_PEER_START == event->type); GNUNET_assert (NULL == rc->peers[rc->peer_cnt]); - GNUNET_assert (NULL != event->details.peer_start.peer); + GNUNET_assert (NULL != event->details.peer_start.peer); rc->peers[rc->peer_cnt++] = event->details.peer_start.peer; } @@ -91,7 +91,7 @@ static void master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct TestRunContext *rc = cls; - + GNUNET_assert (rc->peer_cnt == rc->num_peers); rc->test_master (rc->test_master_cls, rc->num_peers, rc->peers); } @@ -111,8 +111,8 @@ run (void *cls, char *const *args, const char *cfgfile, { struct TestRunContext *rc = cls; - GNUNET_TESTBED_run (NULL, config, rc->num_peers, 0, &controller_event_cb, - rc, &master_task, rc); + GNUNET_TESTBED_run (NULL, config, rc->num_peers, 0, &controller_event_cb, rc, + &master_task, rc); } @@ -155,7 +155,7 @@ GNUNET_TESTBED_test_run (const char *testname, const char *cfg_filename, GNUNET_GETOPT_OPTION_END }; struct TestRunContext *rc; - + argv2[0] = GNUNET_strdup (testname); argv2[2] = GNUNET_strdup (cfg_filename); GNUNET_assert (NULL != test_master); @@ -163,14 +163,12 @@ GNUNET_TESTBED_test_run (const char *testname, const char *cfg_filename, (num_peers * sizeof (struct GNUNET_TESTBED_Peer *))); rc->test_master = test_master; rc->test_master_cls = test_master_cls; - rc->num_peers = rc->num_peers; + rc->num_peers = num_peers; (void) GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, - "testname", "nohelp", options, &run, rc); + testname, "nohelp", options, &run, rc); GNUNET_free (rc); GNUNET_free (argv2[0]); GNUNET_free (argv2[2]); } - - /* end of testbed_api_test.c */ diff --git a/src/testbed/testbed_api_testbed.c b/src/testbed/testbed_api_testbed.c index d841caab3..06cba2850 100644 --- a/src/testbed/testbed_api_testbed.c +++ b/src/testbed/testbed_api_testbed.c @@ -481,6 +481,8 @@ GNUNET_TESTBED_run (const char *host_filename, struct RunContext *rc; event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START); + event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP); + event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED); rc = GNUNET_malloc (sizeof (struct RunContext)); GNUNET_break (NULL == host_filename); /* Currently we do not support host * files */ -- 2.25.1