X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftest_transport_api_blacklisting.c;h=76780a48a621186f37fccf1a5945cdd264d3781b;hb=5a7cef0202631204485cbcb1e36671e4321a936f;hp=8e5e147253e6105d03fa19631750540a83ac17de;hpb=9a6e5853d2e563ae4baf5e90fccec267a1e1fe0b;p=oweals%2Fgnunet.git diff --git a/src/transport/test_transport_api_blacklisting.c b/src/transport/test_transport_api_blacklisting.c index 8e5e14725..76780a48a 100644 --- a/src/transport/test_transport_api_blacklisting.c +++ b/src/transport/test_transport_api_blacklisting.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2009, 2010, 2011, 2016 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,146 +14,192 @@ 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. */ /** - * @file transport/transport_api_blacklisting.c + * @file transport/test_transport_api_blacklisting.c * @brief test for the blacklisting API * @author Matthias Wachs - * + * @author Christian Grothoff */ #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_EXTRA_LOGGING -#define VERBOSE_ARM GNUNET_EXTRA_LOGGING +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) -#define START_ARM GNUNET_YES +static struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc; -/** - * How long until we give up on transmitting the message? - */ -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 120) +static int connected; -/** - * How long until we give up on transmitting the message? - */ -#define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) +static int blacklist_request_p1; -#define MTYPE 12345 +static int blacklist_request_p2; -static int ok; +static struct GNUNET_TRANSPORT_Blacklist *blacklist_p1; -struct GNUNET_TRANSPORT_Blacklist * blacklist; +static struct GNUNET_TRANSPORT_Blacklist *blacklist_p2; -static GNUNET_SCHEDULER_TaskIdentifier die_task; - -#if VERBOSE -#define OKPP do { ok++; FPRINTF (stderr, "Now at stage %u at %s:%u\n", ok, __FILE__, __LINE__); } while (0) -#else -#define OKPP do { ok++; } while (0) -#endif +static struct GNUNET_SCHEDULER_Task *shutdown_task; static void -end () +end (void *cls) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping\n"); - - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - - ok = 0; + shutdown_task = NULL; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Stopping\n"); + if ((GNUNET_YES == blacklist_request_p1) && + (GNUNET_YES == blacklist_request_p2) && + (GNUNET_NO == connected) ) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Peers were never connected, success\n"); + ccc->global_ret = GNUNET_OK; + } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Peers were not connected, fail\n"); + ccc->global_ret = GNUNET_SYSERR; + } + GNUNET_SCHEDULER_shutdown (); } + static void -end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +custom_shutdown (void *cls) { - die_task = GNUNET_SCHEDULER_NO_TASK; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail!\n"); - - ok = GNUNET_SYSERR; + if (NULL != shutdown_task) + { + GNUNET_SCHEDULER_cancel (shutdown_task); + shutdown_task = NULL; + } + if (NULL != blacklist_p1) + { + GNUNET_TRANSPORT_blacklist_cancel (blacklist_p1); + blacklist_p1 = NULL; + } + if (NULL != blacklist_p2) + { + GNUNET_TRANSPORT_blacklist_cancel (blacklist_p2); + blacklist_p2 = NULL; + } } -int blacklist_cb (void *cls, - const struct - GNUNET_PeerIdentity * pid) +static void +notify_receive (void *cls, + struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver, + const struct GNUNET_PeerIdentity *sender, + const struct GNUNET_TRANSPORT_TESTING_TestMessage *message) { - return GNUNET_YES; + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Unexpectedly even received the message despite blacklist\n"); + connected = GNUNET_YES; + GNUNET_SCHEDULER_cancel (shutdown_task); + end (NULL); } + static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *cfg) +notify_connect (void *cls, + struct GNUNET_TRANSPORT_TESTING_PeerContext *me, + const struct GNUNET_PeerIdentity *other) { - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - - blacklist = GNUNET_TRANSPORT_blacklist (cfg, - &blacklist_cb, - NULL); - - GNUNET_assert (blacklist != NULL); - - GNUNET_TRANSPORT_blacklist_cancel (blacklist); - - end (); + GNUNET_TRANSPORT_TESTING_log_connect (cls, + me, + other); + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Peers connected despite blacklist!\n"); + connected = GNUNET_YES; /* this test now failed */ + GNUNET_SCHEDULER_cancel (shutdown_task); + end (NULL); } static int -check () +blacklist_cb (void *cls, + const struct GNUNET_PeerIdentity *pid) { - static char *const argv[] = { "test-transport-api-blacklisting", - "-c", - "test_transport_api_data.conf", -#if VERBOSE - "-L", "DEBUG", -#endif - NULL - }; - static struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - -#if WRITECONFIG - setTransportOptions ("test_transport_api_data.conf"); -#endif + struct GNUNET_TRANSPORT_TESTING_PeerContext *p = cls; + int res = GNUNET_SYSERR; + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Peer %u: Blacklist request for peer `%s'\n", + p->no, + GNUNET_i2s (pid)); + + if (p == ccc->p[0]) + { + blacklist_request_p1 = GNUNET_YES; + res = GNUNET_OK; + } + if (p == ccc->p[1]) + { + blacklist_request_p2 = GNUNET_YES; + res = GNUNET_SYSERR; + } + + if ( (GNUNET_YES == blacklist_request_p2) && + (GNUNET_YES == blacklist_request_p1) && + (NULL == shutdown_task) ) + { + shutdown_task + = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 3), + &end, + NULL); + } + return res; +} - ok = 1; - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, "test-transport-api-blacklisting", - "nohelp", options, &run, &ok); - return ok; +static void +start_blacklist (void *cls) +{ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Starting blacklists\n"); + blacklist_p1 = GNUNET_TRANSPORT_blacklist (ccc->p[0]->cfg, + &blacklist_cb, + ccc->p[0]); + GNUNET_assert (NULL != blacklist_p1); + blacklist_p2 = GNUNET_TRANSPORT_blacklist (ccc->p[1]->cfg, + &blacklist_cb, + ccc->p[1]); + GNUNET_assert (NULL != blacklist_p2); } + int -main (int argc, char *argv[]) +main (int argc, + char *argv[]) { - int ret; - - GNUNET_log_setup ("test-transport-api-blacklisting", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif - NULL); - - ret = check (); + struct GNUNET_TRANSPORT_TESTING_SendClosure sc = { + .num_messages = 1 + }; + struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext my_ccc = { + .pre_connect_task = &start_blacklist, + .connect_continuation = &GNUNET_TRANSPORT_TESTING_simple_send, + .connect_continuation_cls = &sc, + .config_file = "test_transport_api_data.conf", + .rec = ¬ify_receive, + .nc = ¬ify_connect, + .nd = &GNUNET_TRANSPORT_TESTING_log_disconnect, + .shutdown_task = &custom_shutdown, + .timeout = TIMEOUT, + .bi_directional = GNUNET_YES + }; - return ret; + ccc = &my_ccc; + if (GNUNET_OK != + GNUNET_TRANSPORT_TESTING_main (2, + &GNUNET_TRANSPORT_TESTING_connect_check, + ccc)) + return 1; + return 0; } + /* end of transport_api_blacklisting.c */