X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fpeerinfo%2Fperf_peerinfo_api.c;h=840c85c1bb97db9a439c0b69d5bff53bb87a49d6;hb=f2d31fb82a314dcf6819dd494ff4a11e4f871c4e;hp=3a3213350619acec47db0c51c571d552b5491c40;hpb=7d6e6b045a300cf753e685bc18ec0b1e264d1a25;p=oweals%2Fgnunet.git diff --git a/src/peerinfo/perf_peerinfo_api.c b/src/peerinfo/perf_peerinfo_api.c index 3a3213350..840c85c1b 100644 --- a/src/peerinfo/perf_peerinfo_api.c +++ b/src/peerinfo/perf_peerinfo_api.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2004, 2009, 2010 Christian Grothoff (and other contributing authors) + Copyright (C) 2004, 2009, 2010, 2017 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,13 +14,15 @@ 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 peerinfo/perf_peerinfo_api.c - * @brief testcase for peerinfo_api.c, hopefully hammer the peerinfo service + * @brief testcase for peerinfo_api.c, hopefully hammer the peerinfo service, + * this performance test adds up to 5000 peers with one address each and checks + * over how many peers it can iterate before receiving a timeout after 5 seconds * @author Nathan Evans */ @@ -32,8 +34,6 @@ #include "peerinfo.h" #include -#define START_SERVICE 1 - #define NUM_REQUESTS 5000 static struct GNUNET_PEERINFO_IteratorContext *ic[NUM_REQUESTS]; @@ -44,9 +44,36 @@ static unsigned int numpeers; static struct GNUNET_PeerIdentity pid; +static struct GNUNET_SCHEDULER_Task *tt; + + +static void +do_shutdown (void *cls) +{ + if (NULL != tt) + { + GNUNET_SCHEDULER_cancel (tt); + tt = NULL; + } + for (unsigned int i = 0; i < NUM_REQUESTS; i++) + if (NULL != ic[i]) + GNUNET_PEERINFO_iterate_cancel (ic[i]); + GNUNET_PEERINFO_disconnect (h); + h = NULL; +} + + +static void +do_timeout (void *cls) +{ + tt = NULL; + GNUNET_SCHEDULER_shutdown (); +} + static int -check_it (void *cls, const struct GNUNET_HELLO_Address *address, +check_it (void *cls, + const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration) { return GNUNET_OK; @@ -85,23 +112,34 @@ add_peer (size_t i) struct GNUNET_HELLO_Message *h2; memset (&pid, i, sizeof (pid)); - h2 = GNUNET_HELLO_create (&pid.public_key, &address_generator, &i, GNUNET_NO); + h2 = GNUNET_HELLO_create (&pid.public_key, + &address_generator, + &i, + GNUNET_NO); GNUNET_PEERINFO_add_peer (h, h2, NULL, NULL); GNUNET_free (h2); } static void -process (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_HELLO_Message *hello, const char *err_msg) +process (void *cls, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_HELLO_Message *hello, + const char *err_msg) { - if (NULL != peer) - { - numpeers++; - if (0 && (hello != NULL)) - GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &check_it, NULL); + struct GNUNET_PEERINFO_IteratorContext **icp = cls; + if (NULL == peer) + { + *icp = NULL; + return; } + numpeers++; + if (0 && (NULL != hello) ) + GNUNET_HELLO_iterate_addresses (hello, + GNUNET_NO, + &check_it, + NULL); } @@ -110,32 +148,43 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_TESTING_Peer *peer) { - size_t i; - h = GNUNET_PEERINFO_connect (cfg); GNUNET_assert (h != NULL); - for (i = 0; i < NUM_REQUESTS; i++) + for (unsigned int i = 0; i < NUM_REQUESTS; i++) { add_peer (i); - ic[i] = - GNUNET_PEERINFO_iterate (h, GNUNET_YES, NULL, - GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 30), &process, cls); + ic[i] = GNUNET_PEERINFO_iterate (h, + GNUNET_YES, + NULL, + &process, + &ic[i]); } + tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, + 5), + &do_timeout, + NULL); + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, + NULL); } int -main (int argc, char *argv[]) +main (int argc, + char *argv[]) { if (0 != GNUNET_TESTING_service_run ("perf-gnunet-peerinfo", "peerinfo", "test_peerinfo_api_data.conf", &run, NULL)) return 1; - FPRINTF (stderr, "Received %u/%u calls before timeout\n", numpeers, + FPRINTF (stderr, + "Received %u/%u calls before timeout\n", + numpeers, NUM_REQUESTS * NUM_REQUESTS / 2); - GAUGER ("PEERINFO", "Peerinfo lookups", numpeers / 30, "peers/s"); + GAUGER ("PEERINFO", + "Peerinfo lookups", + numpeers / 5, + "peers/s"); return 0; }