diff options
Diffstat (limited to 'src/testing/test_testing_new_peerstartup.c')
-rw-r--r-- | src/testing/test_testing_new_peerstartup.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/testing/test_testing_new_peerstartup.c b/src/testing/test_testing_new_peerstartup.c new file mode 100644 index 0000000..203df2f --- /dev/null +++ b/src/testing/test_testing_new_peerstartup.c @@ -0,0 +1,161 @@ +/* + This file is part of GNUnet + (C) 2008, 2009, 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 testing/test_testing_new_peerstartup.c + * @brief test case for testing peer startup and shutdown using new testing + * library + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "gnunet_configuration_lib.h" +#include "gnunet_os_lib.h" +#include "gnunet_testing_lib-new.h" + +#define LOG(kind,...) \ + GNUNET_log (kind, __VA_ARGS__) + +#define TIME_REL_SEC(sec) \ + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, sec) + +/** + * The testing context + */ +struct TestingContext +{ + /** + * The testing system + */ + struct GNUNET_TESTING_System *system; + + /** + * The peer which has been started by the testing system + */ + struct GNUNET_TESTING_Peer *peer; + + /** + * The running configuration of the peer + */ + struct GNUNET_CONFIGURATION_Handle *cfg; +}; + + +/** + * Task for shutdown + * + * @param cls the testing context + * @param tc the tast context + */ +static void +do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct TestingContext *test_ctx = cls; + + GNUNET_assert (GNUNET_OK == GNUNET_TESTING_peer_stop (test_ctx->peer)); + GNUNET_TESTING_peer_destroy (test_ctx->peer); + GNUNET_CONFIGURATION_destroy (test_ctx->cfg); + GNUNET_TESTING_hostkeys_unload (test_ctx->system); + GNUNET_TESTING_system_destroy (test_ctx->system, GNUNET_YES); + GNUNET_free (test_ctx); +} + + +/** + * Main point of test execution + */ +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct GNUNET_TESTING_System *system; + struct GNUNET_TESTING_Peer *peer; + struct GNUNET_CONFIGURATION_Handle *new_cfg; + struct TestingContext *test_ctx; + char *data_dir; + char *hostkeys_file; + char *emsg; + char *_tmpdir; + char *tmpdir; +#ifdef MINGW + char *tmpdir_w; +#endif + + struct GNUNET_PeerIdentity id; + + _tmpdir = getenv ("TMP"); + if (NULL == _tmpdir) + _tmpdir = getenv ("TEMP"); + if (NULL == _tmpdir) + _tmpdir = getenv ("TMPDIR"); + if (NULL == _tmpdir) + _tmpdir = "/tmp"; + GNUNET_asprintf (&tmpdir, "%s/%s", _tmpdir, "test-gnunet-testing_new-XXXXXX"); +#ifdef MINGW + tmpdir_w = GNUNET_malloc (MAX_PATH + 1); + GNUNET_assert (ERROR_SUCCESS == plibc_conv_to_win_path (tmpdir, tmpdir_w)); + GNUNET_free (tmpdir); + tmpdir = tmpdir_w; + //GNUNET_assert (0 == _mktemp_s (tmpdir, strlen (tmpdir) + 1)); +#else + GNUNET_assert (mkdtemp (tmpdir) == tmpdir); +#endif + /* LOG (GNUNET_ERROR_TYPE_ERROR, */ + /* "Temporary directory: %s\n", tmpdir); */ + system = GNUNET_TESTING_system_create (tmpdir, + "localhost"); + GNUNET_assert (NULL != system); + GNUNET_free (tmpdir); + data_dir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR); + GNUNET_asprintf (&hostkeys_file, "%s/testing_hostkeys.dat", data_dir); + GNUNET_free (data_dir); + GNUNET_assert (GNUNET_OK == + GNUNET_TESTING_hostkeys_load (system, hostkeys_file)); + GNUNET_free (hostkeys_file); + new_cfg = GNUNET_CONFIGURATION_dup (cfg); + emsg = NULL; + peer = GNUNET_TESTING_peer_configure (system, new_cfg, 0, &id, &emsg); + GNUNET_assert (NULL != peer); + GNUNET_assert (NULL == emsg); + GNUNET_assert (GNUNET_OK == GNUNET_TESTING_peer_start (peer)); + test_ctx = GNUNET_malloc (sizeof (struct TestingContext)); + test_ctx->system = system; + test_ctx->peer = peer; + test_ctx->cfg = new_cfg; + GNUNET_SCHEDULER_add_delayed (TIME_REL_SEC (5), + &do_shutdown, test_ctx); + +} + + +int main (int argc, char *argv[]) +{ + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + + if (GNUNET_OK != + GNUNET_PROGRAM_run (argc, argv, + "test_testing_new_peerstartup", + "test case for peerstartup using new testing library", + options, &run, NULL)) + return 1; + return 0; +} |