aboutsummaryrefslogtreecommitdiff
path: root/src/testing/test_testing_new_peerstartup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/testing/test_testing_new_peerstartup.c')
-rw-r--r--src/testing/test_testing_new_peerstartup.c161
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;
+}