From ebfd3a019674280bb14fb3ac52f1f8ebd057ea35 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Mon, 2 Jul 2012 11:02:31 +0000 Subject: [PATCH] - new test --- src/transport/Makefile.am | 10 + .../test_transport_testing_startstop.c | 193 ++++++++++++++++++ src/transport/transport-testing.c | 7 +- 3 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 src/transport/test_transport_testing_startstop.c diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am index 24984a957..0090d3aca 100644 --- a/src/transport/Makefile.am +++ b/src/transport/Makefile.am @@ -252,6 +252,7 @@ libgnunet_plugin_transport_https_la_CPPFLAGS = \ check_PROGRAMS = \ + test_transport_testing_startstop \ test_transport_testing \ test_transport_startonly \ test_transport_api_blacklisting \ @@ -296,6 +297,7 @@ check_PROGRAMS = \ if ENABLE_TEST_RUN TESTS = \ + test_transport_testing_startstop \ test_transport_testing \ test_transport_startonly \ test_transport_api_blacklisting \ @@ -339,6 +341,14 @@ TESTS = \ $(WLAN_UREL_TEST) endif +test_transport_testing_startstop_SOURCES = \ + test_transport_testing_startstop.c +test_transport_testing_startstop_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/hello/libgnunethello.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la + test_transport_testing_SOURCES = \ test_transport_testing.c test_transport_testing_LDADD = \ diff --git a/src/transport/test_transport_testing_startstop.c b/src/transport/test_transport_testing_startstop.c new file mode 100644 index 000000000..2d035ca70 --- /dev/null +++ b/src/transport/test_transport_testing_startstop.c @@ -0,0 +1,193 @@ +/* + This file is part of GNUnet. + (C) 2009, 2010 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 transport/test_transport_testing_startstop.c + * @brief test case for transport testing library: + * start the peer, get the HELLO message and stop the peer + * + */ +#include "platform.h" +#include "gnunet_common.h" +#include "gnunet_hello_lib.h" +#include "gnunet_getopt_lib.h" +#include "gnunet_os_lib.h" +#include "gnunet_program_lib.h" +#include "gnunet_scheduler_lib.h" +#include "gnunet_transport_service.h" +#include "transport.h" +#include "transport-testing.h" + +#define VERBOSE GNUNET_NO + +#define VERBOSE_ARM GNUNET_NO + +#define START_ARM GNUNET_YES + +/** + * How long until we give up on transmitting the message? + */ +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) + +GNUNET_SCHEDULER_TaskIdentifier timeout_task; + +static struct PeerContext *p; + +//static GNUNET_TRANSPORT_TESTING_ConnectRequest cc; + +struct GNUNET_TRANSPORT_TESTING_handle *tth; + +static int ret = 0; + +static void +end () +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); + + if (timeout_task != GNUNET_SCHEDULER_NO_TASK) + GNUNET_SCHEDULER_cancel (timeout_task); + + if (NULL != p) + GNUNET_TRANSPORT_TESTING_stop_peer (tth, p); + GNUNET_TRANSPORT_TESTING_done (tth); +} + +static void +end_badly () +{ + timeout_task = GNUNET_SCHEDULER_NO_TASK; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); + + if (p != NULL) + GNUNET_TRANSPORT_TESTING_stop_peer (tth, p); + + GNUNET_TRANSPORT_TESTING_done (tth); + + ret = GNUNET_SYSERR; +} + +#if 0 +static void +testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) +{ + char *ps = GNUNET_strdup (GNUNET_i2s (&p1->id)); + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Peer %u (`%4s') connected to peer %u (`%s')!\n", p1->no, ps, + p2->no, GNUNET_i2s (&p2->id)); + GNUNET_free (ps); + GNUNET_SCHEDULER_add_now (&end, NULL); +} + + +static void +notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_ATS_Information *ats, uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' connected \n", + GNUNET_i2s (peer)); + connected++; +} + +static void +notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' disconnected \n", + GNUNET_i2s (peer)); +} + +static void +notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_MessageHeader *message, + const struct GNUNET_ATS_Information *ats, uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving\n"); +} + + + +void +start_cb (struct PeerContext *p, void *cls) +{ + static int started; + + started++; + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n", p->no, + GNUNET_i2s (&p->id)); + + if (started != 2) + return; + + char *sender_c = GNUNET_strdup (GNUNET_i2s (&p->id)); + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n", + p->no, sender_c, p2->no, GNUNET_i2s (&p2->id)); + GNUNET_free (sender_c); + + cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p, p2, &testing_connect_cb, + NULL); +} +#endif + +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + tth = GNUNET_TRANSPORT_TESTING_init (); + GNUNET_assert (NULL != tth); + + timeout_task = + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &end_badly, NULL); + + GNUNET_SCHEDULER_add_now (&end, NULL); +} + +int +main (int argc, char *argv[]) +{ + GNUNET_log_setup ("test_transport_testing_startstop", +#if VERBOSE + "DEBUG", +#else + "WARNING", +#endif + NULL); + + char *const argv_1[] = { "test_transport_testing", + "-c", + "test_transport_api_data.conf", +#if VERBOSE + "-L", "DEBUG", +#endif + NULL + }; + + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + + GNUNET_PROGRAM_run ((sizeof (argv_1) / sizeof (char *)) - 1, argv_1, + "test_transport_testing_startstop", "nohelp", options, &run, &ret); + + return ret; +} + +/* end of test_transport_testing_startstop.c */ diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index 8f75c8109..b3c3a9399 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c @@ -633,7 +633,12 @@ GNUNET_TRANSPORT_TESTING_init () /* Init testing the testing lib */ tth->tl_system = GNUNET_TESTING_system_create ("transport-testing", "127.0.0.1"); - + if (NULL == tth->tl_system) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to initialize testing library!\n")); + GNUNET_free (tth); + return NULL; + } tth->hostkey_data = NULL; const char *hostkeys_file = "../../contrib/testing_hostkeys.dat"; -- 2.25.1