From: Matthias Wachs Date: Wed, 25 Sep 2013 15:08:57 +0000 (+0000) Subject: new performance tests X-Git-Tag: initial-import-from-subversion-38251~7104 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=65c8a6b16fe22f2b0903c196812b978ad1121bcf;p=oweals%2Fgnunet.git new performance tests --- diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index b8915f1ce..171f475af 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am @@ -70,12 +70,12 @@ TESTING_TESTS = \ test_ats_api_scheduling_destroy_address \ test_ats_api_scheduling_destroy_address_twice \ test_ats_api_scheduling_add_session \ - test_ats_api_scheduling_destroy_session + test_ats_api_scheduling_destroy_session \ + test_ats_api_performance_list_all_addresses \ + test_ats_api_performance_list_peer_addresses # test_ats_api_scheduling_min_bw # test_ats_api_scheduling_check_min_bw_alt # test_ats_api_scheduling_update_address -# test_ats_api_scheduling_destroy_address -# test_ats_api_scheduling_destroy_session # test_ats_api_scheduling_destroy_inbound_connection # test_ats_api_scheduling_block_and_reset # test_ats_normalization_update_quality @@ -83,7 +83,6 @@ TESTING_TESTS = \ # test_ats_simplistic # test_ats_simplistic_switch_networks # test_ats_simplistic_change_preference -# test_ats_api_performance_list_addresses # test_ats_api_performance_address_info # test_ats_api_performance_feedback endif @@ -167,134 +166,142 @@ test_ats_api_scheduling_destroy_session_LDADD = \ $(top_builddir)/src/ats/libgnunetats.la \ $(top_builddir)/src/statistics/libgnunetstatistics.la -#if 0 - -test_ats_api_scheduling_min_bw_SOURCES = \ - test_ats_api_scheduling_min_bw.c test_ats_api_common.c -test_ats_api_scheduling_min_bw_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_api_scheduling_check_min_bw_alt_SOURCES = \ - test_ats_api_scheduling_check_min_bw_alt.c test_ats_api_common.c -test_ats_api_scheduling_check_min_bw_alt_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - - -test_ats_api_scheduling_update_address_SOURCES = \ - test_ats_api_scheduling_update_address.c test_ats_api_common.c -test_ats_api_scheduling_update_address_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_api_scheduling_destroy_inbound_connection_SOURCES = \ - test_ats_api_scheduling_destroy_inbound_connection.c test_ats_api_common.c -test_ats_api_scheduling_destroy_inbound_connection_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_api_scheduling_block_and_reset_SOURCES = \ - test_ats_api_scheduling_block_and_reset.c test_ats_api_common.c -test_ats_api_scheduling_block_and_reset_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - - - -test_ats_api_performance_feedback_SOURCES = \ - test_ats_api_performance_feedback.c -test_ats_api_performance_feedback_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_api_performance_list_addresses_SOURCES = \ - test_ats_api_performance_list_addresses.c -test_ats_api_performance_list_addresses_LDADD = \ +test_ats_api_performance_list_all_addresses_SOURCES = \ + test_ats_api_performance_list_all_addresses.c +test_ats_api_performance_list_all_addresses_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_api_performance_address_info_SOURCES = \ - test_ats_api_performance_address_info.c -test_ats_api_performance_address_info_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/ats/libgnunetats.la - + $(top_builddir)/src/ats/libgnunetats.la \ + $(top_builddir)/src/statistics/libgnunetstatistics.la -test_ats_simplistic_SOURCES = \ - test_ats_simplistic.c test_ats_api_common.c -test_ats_simplistic_LDADD = \ +test_ats_api_performance_list_peer_addresses_SOURCES = \ + test_ats_api_performance_list_peer_addresses.c +test_ats_api_performance_list_peer_addresses_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_simplistic_switch_networks_SOURCES = \ - test_ats_simplistic_switch_networks.c test_ats_api_common.c -test_ats_simplistic_switch_networks_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_simplistic_change_preference_SOURCES = \ - test_ats_simplistic_change_preference.c test_ats_api_common.c -test_ats_simplistic_change_preference_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_change_preference_SOURCES = \ - test_ats_change_preference.c test_ats_api_common.c -test_ats_change_preference_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la + $(top_builddir)/src/ats/libgnunetats.la \ + $(top_builddir)/src/statistics/libgnunetstatistics.la + +#test_ats_api_scheduling_min_bw_SOURCES = \ +# test_ats_api_scheduling_min_bw.c test_ats_api_common.c +#test_ats_api_scheduling_min_bw_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la +# +#test_ats_api_scheduling_check_min_bw_alt_SOURCES = \ +# test_ats_api_scheduling_check_min_bw_alt.c test_ats_api_common.c +#test_ats_api_scheduling_check_min_bw_alt_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + + +#test_ats_api_scheduling_update_address_SOURCES = \ +# test_ats_api_scheduling_update_address.c test_ats_api_common.c +#test_ats_api_scheduling_update_address_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_api_scheduling_destroy_inbound_connection_SOURCES = \ +# test_ats_api_scheduling_destroy_inbound_connection.c test_ats_api_common.c +#test_ats_api_scheduling_destroy_inbound_connection_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_api_scheduling_block_and_reset_SOURCES = \ +# test_ats_api_scheduling_block_and_reset.c test_ats_api_common.c +#test_ats_api_scheduling_block_and_reset_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_api_performance_feedback_SOURCES = \ +# test_ats_api_performance_feedback.c +#test_ats_api_performance_feedback_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/hello/libgnunethello.la \ +# $(top_builddir)/src/ats/libgnunetats.la + + + +#test_ats_api_performance_address_info_SOURCES = \ +# test_ats_api_performance_address_info.c +#test_ats_api_performance_address_info_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/hello/libgnunethello.la \ +# $(top_builddir)/src/ats/libgnunetats.la + + +#test_ats_simplistic_SOURCES = \ +# test_ats_simplistic.c test_ats_api_common.c +#test_ats_simplistic_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/hello/libgnunethello.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_simplistic_switch_networks_SOURCES = \ +# test_ats_simplistic_switch_networks.c test_ats_api_common.c +#test_ats_simplistic_switch_networks_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_simplistic_change_preference_SOURCES = \ +# test_ats_simplistic_change_preference.c test_ats_api_common.c +#test_ats_simplistic_change_preference_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_change_preference_SOURCES = \ +# test_ats_change_preference.c test_ats_api_common.c +#test_ats_change_preference_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la if HAVE_LIBGLPK -test_ats_mlp_SOURCES = \ - $(GN_MLP_SRC) test_ats_mlp.c test_ats_api_common.c gnunet-service-ats_normalization.c -test_ats_mlp_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ - $(top_builddir)/src/ats/libgnunetats.la - -test_ats_mlp_update_SOURCES = \ - $(GN_MLP_SRC) test_ats_mlp_update.c test_ats_api_common.c gnunet-service-ats_normalization.c -test_ats_mlp_update_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ - $(top_builddir)/src/ats/libgnunetats.la - -perf_ats_mlp_SOURCES = \ - $(GN_MLP_SRC) perf_ats_mlp.c test_ats_api_common.c gnunet-service-ats_normalization.c -perf_ats_mlp_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ - $(top_builddir)/src/ats/libgnunetats.la +#test_ats_mlp_SOURCES = \ +# $(GN_MLP_SRC) test_ats_mlp.c test_ats_api_common.c gnunet-service-ats_normalization.c +#test_ats_mlp_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_mlp_update_SOURCES = \ +# $(GN_MLP_SRC) test_ats_mlp_update.c test_ats_api_common.c gnunet-service-ats_normalization.c +#test_ats_mlp_update_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#perf_ats_mlp_SOURCES = \ +# $(GN_MLP_SRC) perf_ats_mlp.c test_ats_api_common.c gnunet-service-ats_normalization.c +#perf_ats_mlp_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la \ +# $(top_builddir)/src/ats/libgnunetats.la endif -test_ats_normalization_update_quality_SOURCES = \ - test_ats_normalization_update_quality.c test_ats_api_common.c -test_ats_normalization_update_quality_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la +#test_ats_normalization_update_quality_SOURCES = \ +# test_ats_normalization_update_quality.c test_ats_api_common.c +#test_ats_normalization_update_quality_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la #endif EXTRA_DIST = \ ats.h \ diff --git a/src/ats/test_ats_api_performance_list_addresses.c b/src/ats/test_ats_api_performance_list_addresses.c deleted file mode 100644 index 4d101662d..000000000 --- a/src/ats/test_ats_api_performance_list_addresses.c +++ /dev/null @@ -1,572 +0,0 @@ -/* - This file is part of GNUnet. - (C) 2010,2011 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 ats/test_ats_api_performance_list_addresses.c - * @brief test performance API's address listing feature - * @author Christian Grothoff - * @author Matthias Wachs - */ -#include "platform.h" -#include "gnunet_ats_service.h" -#include "gnunet_testing_lib.h" -#include "ats.h" - -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) - -static GNUNET_SCHEDULER_TaskIdentifier die_task; - -struct GNUNET_CONFIGURATION_Handle *cfg; - -static struct GNUNET_ATS_SchedulingHandle *atsh; -static struct GNUNET_ATS_PerformanceHandle *ph; -struct GNUNET_ATS_AddressListHandle* phal; - -static int ret; - -struct Address -{ - char *plugin; - size_t plugin_len; - - void *addr; - size_t addr_len; - - struct GNUNET_ATS_Information *ats; - int ats_count; - - void *session; -}; - -struct PeerContext -{ - struct GNUNET_PeerIdentity id; - - struct Address *addr; -}; - - - -static struct PeerContext p[2]; - -static struct Address p0_addresses[2]; -static struct Address p1_addresses[2]; - -struct GNUNET_HELLO_Address p0_ha[2]; -struct GNUNET_HELLO_Address p1_ha[2]; -struct GNUNET_HELLO_Address *s_ha[2]; - -static unsigned int stage = 0; - -static void -end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - die_task = GNUNET_SCHEDULER_NO_TASK; - - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Timeout in stage %u\n", stage); - - if (NULL != atsh) - GNUNET_ATS_scheduling_done (atsh); - if (phal != NULL) - GNUNET_ATS_performance_list_addresses_cancel (phal); - phal = NULL; - if (ph != NULL) - GNUNET_ATS_performance_done (ph); - ph = NULL; - - GNUNET_free_non_null (p0_addresses[0].addr); - GNUNET_free_non_null (p0_addresses[1].addr); - GNUNET_free_non_null (p1_addresses[0].addr); - GNUNET_free_non_null (p1_addresses[1].addr); - - ret = GNUNET_SYSERR; -} - - -static void -end () -{ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutting down\n"); - if (die_task != GNUNET_SCHEDULER_NO_TASK) - { - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_NO_TASK; - } - if (NULL != atsh) - GNUNET_ATS_scheduling_done (atsh); - if (phal != NULL) - GNUNET_ATS_performance_list_addresses_cancel (phal); - phal = NULL; - if (ph != NULL) - GNUNET_ATS_performance_done (ph); - ph = NULL; - - GNUNET_free_non_null (p0_addresses[0].addr); - GNUNET_free_non_null (p0_addresses[1].addr); - GNUNET_free_non_null (p1_addresses[0].addr); - GNUNET_free_non_null (p1_addresses[1].addr); - - ret = 0; -} - -static void -test_performance_api (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); - -void all_active_addresses_peer_cb (void *cls, - const struct GNUNET_HELLO_Address *address, - int active, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) -{ - static int cb = 0; - int fail = GNUNET_NO; - - if (address != NULL) - { - if (0 == memcmp (&address->peer, &p[0].id, - sizeof (struct GNUNET_PeerIdentity))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Did not expected callback for peer 0 address `%s', got address `%s'!\n", - s_ha[0]->address, address->address); - GNUNET_ATS_performance_list_addresses_cancel (phal); - fail = GNUNET_YES; - } - - if (0 == memcmp (&address->peer, &p[1].id, - sizeof (struct GNUNET_PeerIdentity))) - { - if (0 == strcmp(address->address, s_ha[1]->address)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Callback for peer 1 suggested address %s\n", - s_ha[1]->address); - cb ++; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected callback for peer 1 address `%s', got address `%s'!\n", - s_ha[1]->address, address->address); - GNUNET_ATS_performance_list_addresses_cancel (phal); - fail = GNUNET_YES; - } - } - } - if ((address == NULL) || (GNUNET_YES == fail)) - { - phal = NULL; - if ((1 == cb) && (GNUNET_NO == fail)) - { - /* Received all addresses + terminator cb, next stage */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Stage %i: SUCCESS\n", stage); - GNUNET_SCHEDULER_add_now (&test_performance_api, NULL); - return; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %i: FAIL\n", stage); - GNUNET_SCHEDULER_add_now (&end, NULL); - ret = 5; - return; - } - } -} - -void all_active_addresses_cb (void *cls, - const struct GNUNET_HELLO_Address *address, - int active, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) -{ - static int cb = 0; - int fail = GNUNET_NO; - - if (address != NULL) - { - if (0 == memcmp (&address->peer, &p[0].id, - sizeof (struct GNUNET_PeerIdentity))) - { - if (0 == strcmp(address->address, s_ha[0]->address)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Callback for peer 0 suggested address %s\n", - s_ha[0]->address); - cb ++; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected callback for peer 0 address `%s', got address `%s'!\n", - s_ha[0]->address, address->address); - GNUNET_ATS_performance_list_addresses_cancel (phal); - fail = GNUNET_YES; - } - } - - if (0 == memcmp (&address->peer, &p[1].id, - sizeof (struct GNUNET_PeerIdentity))) - { - if (0 == strcmp(address->address, s_ha[1]->address)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Callback for peer 1 suggested address %s\n", - s_ha[1]->address); - cb ++; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected callback for peer 1 address `%s', got address `%s'!\n", - s_ha[1]->address, address->address); - GNUNET_ATS_performance_list_addresses_cancel (phal); - fail = GNUNET_YES; - } - } - } - if ((address == NULL) || (GNUNET_YES == fail)) - { - phal = NULL; - if ((2 == cb) && (GNUNET_NO == fail)) - { - /* Received all addresses + terminator cb, next stage */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Stage %i: SUCCESS\n", stage); - GNUNET_SCHEDULER_add_now (&test_performance_api, NULL); - return; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %i: FAIL\n", stage); - GNUNET_SCHEDULER_add_now (&end, NULL); - ret = 5; - return; - } - } -} - - - -void all_addresses_peer_cb (void *cls, - const struct GNUNET_HELLO_Address *address, - int active, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) -{ - static int cb = 0; - int fail = GNUNET_NO; - - if (address != NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Callback for peer `%s' address `%s'\n", - GNUNET_i2s (&address->peer), address->address); - - if (0 != memcmp (&address->peer, &p[1].id, - sizeof (struct GNUNET_PeerIdentity))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Stage %i: Received address for wrong peer\n", stage); - GNUNET_ATS_performance_list_addresses_cancel (phal); - fail = GNUNET_YES; - ret = 4; - } - cb ++; - } - - if ((NULL == address) || (fail)) - { - phal = NULL; - if ((2 == cb) && (GNUNET_NO == fail)) - { - /* Received all addresses + terminator cb, next stage */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Stage %i: SUCCESS\n", stage); - GNUNET_SCHEDULER_add_now (&test_performance_api, NULL); - return; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %i: FAIL\n", stage); - GNUNET_SCHEDULER_add_now (&end, NULL); - ret = 5; - return; - } - } -} - -void all_addresses_cb (void *cls, - const struct GNUNET_HELLO_Address *address, - int active, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) -{ - static int cb = 0; - - if (address != NULL) - { - if (0 == memcmp (&address->peer, &p[0].id, - sizeof (struct GNUNET_PeerIdentity))) - { - if (0 == strcmp(address->address, p0_addresses[0].addr)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer 0 address 0\n"); - cb |= 1; - } - if (0 == strcmp(address->address, p0_addresses[1].addr)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer 0 address 1\n"); - cb |= 2; - } - } - if (0 == memcmp (&address->peer, &p[1].id, - sizeof (struct GNUNET_PeerIdentity))) - { - if (0 == strcmp(address->address, p1_addresses[0].addr)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer 1 address 0\n"); - cb |= 4; - } - if (0 == strcmp(address->address, p1_addresses[1].addr)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer 1 address 1\n"); - cb |= 8; - } - } - } - else - { - phal = NULL; - if (((1 << 4) - 1) == cb) - { - /* Received all addresses + terminator cb, next stage */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Stage %i: SUCCESS\n", stage); - GNUNET_SCHEDULER_add_now (&test_performance_api, NULL); - return; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %i: FAIL\n", stage); - GNUNET_SCHEDULER_add_now (&end, NULL); - ret = 3; - return; - } - } -} - -static void -test_performance_api (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - if (NULL == ph) - ph = GNUNET_ATS_performance_init (cfg, NULL, NULL); - if (NULL == ph) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to initialize performance handle\n"); - ret = 2; - } - stage++; - switch (stage) { - case 1: /* Get all peers, all addresses */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Run stage 1: \n"); - phal = GNUNET_ATS_performance_list_addresses (ph, - NULL, - GNUNET_YES, - &all_addresses_cb, NULL); - GNUNET_assert (NULL != phal); - break; - case 2: /* Get specific peer, all addresses */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Run stage 2: \n"); - phal = GNUNET_ATS_performance_list_addresses (ph, - &p[1].id, - GNUNET_YES, - &all_addresses_peer_cb, NULL); - GNUNET_assert (NULL != phal); - break; - case 3: /* Get all peers, active addresses */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Run stage 3: \n"); - phal = GNUNET_ATS_performance_list_addresses (ph, - NULL, - GNUNET_NO, - &all_active_addresses_cb, NULL); - GNUNET_assert (NULL != phal); - break; - case 4: /* Get specific peers, active addresses */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Run stage 4: \n"); - phal = GNUNET_ATS_performance_list_addresses (ph, - &p[1].id, - GNUNET_NO, - &all_active_addresses_peer_cb, NULL); - GNUNET_assert (NULL != phal); - break; - default: - /* done */ - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "All tests successful, shutdown... \n"); - GNUNET_SCHEDULER_add_now (&end, NULL); - return; - } -} - - -static void -address_suggest_cb (void *cls, const struct GNUNET_HELLO_Address *address, - struct Session *session, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, - struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) -{ - static int suggest_p0 = GNUNET_NO; - static int suggest_p1 = GNUNET_NO; - static int running = GNUNET_NO; - - if ((GNUNET_NO == suggest_p0) && (0 == memcmp (&address->peer, &p[0].id, - sizeof (struct GNUNET_PeerIdentity)))) - { - suggest_p0 = GNUNET_YES;; - - if (s_ha[0] != NULL) - GNUNET_free (s_ha[0]); - s_ha[0] = GNUNET_HELLO_address_copy (address); - GNUNET_ATS_suggest_address_cancel (atsh, &p[0].id); - } - if ((GNUNET_NO == suggest_p1) && (0 == memcmp (&address->peer, &p[1].id, - sizeof (struct GNUNET_PeerIdentity)))) - { - suggest_p1 = GNUNET_YES; - - if (s_ha[1] != NULL) - GNUNET_free (s_ha[1]); - s_ha[1] = GNUNET_HELLO_address_copy (address); - GNUNET_ATS_suggest_address_cancel (atsh, &p[1].id); - } - - - if ((GNUNET_NO == running) && (GNUNET_YES == suggest_p0) && (GNUNET_YES == suggest_p1)) - { - running = GNUNET_YES; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Have address suggestion for both peers\n"); - GNUNET_SCHEDULER_add_now (&test_performance_api, NULL); - } - -} - - -static void -run (void *cls, - const struct GNUNET_CONFIGURATION_Handle *mycfg, - struct GNUNET_TESTING_Peer *peer) -{ - ret = 1; - cfg = (struct GNUNET_CONFIGURATION_Handle *) mycfg; - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - - - /* set up peer 0 */ - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, - &p[0].id.hashPubKey); - - p0_addresses[0].plugin = "test"; - p0_addresses[0].session = NULL; - p0_addresses[0].addr = GNUNET_strdup ("test_p0_a0"); - p0_addresses[0].addr_len = strlen (p0_addresses[0].addr) + 1; - - p0_ha[0].address = p0_addresses[0].addr; - p0_ha[0].address_length = p0_addresses[0].addr_len; - p0_ha[0].peer = p[0].id; - p0_ha[0].transport_name = p0_addresses[0].plugin; - - p0_addresses[1].plugin = "test"; - p0_addresses[1].session = NULL; - p0_addresses[1].addr = GNUNET_strdup ("test_p0_a1"); - p0_addresses[1].addr_len = strlen(p0_addresses[1].addr) + 1; - - p0_ha[1].address = p0_addresses[1].addr; - p0_ha[1].address_length = p0_addresses[1].addr_len; - p0_ha[1].peer = p[0].id; - p0_ha[1].transport_name = p0_addresses[1].plugin; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer 0: `%s'\n", - GNUNET_i2s (&p[0].id)); - - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, - &p[1].id.hashPubKey); - - p1_addresses[0].plugin = "test"; - p1_addresses[0].session = NULL; - p1_addresses[0].addr = GNUNET_strdup ("test_p1_a0"); - p1_addresses[0].addr_len = strlen(p1_addresses[0].addr) + 1; - - p1_ha[0].address = p1_addresses[0].addr; - p1_ha[0].address_length = p1_addresses[0].addr_len; - p1_ha[0].peer = p[1].id; - p1_ha[0].transport_name = p1_addresses[0].plugin; - - p1_addresses[1].plugin = "test"; - p1_addresses[1].session = NULL; - p1_addresses[1].addr = GNUNET_strdup ("test_p1_a1"); - p1_addresses[1].addr_len = strlen(p1_addresses[1].addr) + 1; - - p1_ha[1].address = p1_addresses[1].addr; - p1_ha[1].address_length = p1_addresses[1].addr_len; - p1_ha[1].peer = p[1].id; - p1_ha[1].transport_name = p1_addresses[1].plugin; - - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer 1: `%s'\n", - GNUNET_i2s (&p[1].id)); - - - /* Add addresses */ - atsh = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL); - if (atsh == NULL) - { - ret = GNUNET_SYSERR; - end (); - return; - } - - GNUNET_ATS_address_add (atsh, &p0_ha[0], NULL, NULL, 0); - GNUNET_ATS_address_add (atsh, &p0_ha[1], NULL, NULL, 0); - - GNUNET_ATS_address_add (atsh, &p1_ha[0], NULL, NULL, 0); - GNUNET_ATS_address_add (atsh, &p1_ha[1], NULL, NULL, 0); - - - GNUNET_ATS_suggest_address (atsh, &p[0].id); - GNUNET_ATS_suggest_address (atsh, &p[1].id); -} - - -int -main (int argc, char *argv[]) -{ - if (0 != GNUNET_TESTING_peer_run ("test_ats_api_performance", - "test_ats_api.conf", - &run, NULL)) - return 1; - return ret; -} - -/* end of file test_ats_api_performance_list_addresses.c */ diff --git a/src/ats/test_ats_api_performance_list_all_addresses.c b/src/ats/test_ats_api_performance_list_all_addresses.c new file mode 100644 index 000000000..679b34883 --- /dev/null +++ b/src/ats/test_ats_api_performance_list_all_addresses.c @@ -0,0 +1,305 @@ +/* + This file is part of GNUnet. + (C) 2010,2011 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 ats/test_ats_api_performance_list_addresses.c + * @brief test performance API's address listing feature + * @author Christian Grothoff + * @author Matthias Wachs + */ +#include "platform.h" +#include "gnunet_ats_service.h" +#include "gnunet_testing_lib.h" +#include "ats.h" + +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) + +static GNUNET_SCHEDULER_TaskIdentifier die_task; + +/** + * Statistics handle + */ +struct GNUNET_STATISTICS_Handle *stats; + +/** + * Configuration handle + */ +struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * ATS scheduling handle + */ +static struct GNUNET_ATS_SchedulingHandle *sched_ats; + +/** + * ATS performance handle + */ +static struct GNUNET_ATS_PerformanceHandle *perf_ats; + +struct GNUNET_ATS_AddressListHandle* phal; + +static int ret; + +struct Address +{ + char *plugin; + size_t plugin_len; + + void *addr; + size_t addr_len; + + struct GNUNET_ATS_Information *ats; + int ats_count; + + void *session; +}; + +struct PeerContext +{ + struct GNUNET_PeerIdentity id; + + struct Address *addr; +}; + +static struct PeerContext p[2]; + +static struct Address p0_addresses[2]; +static struct Address p1_addresses[2]; + +struct GNUNET_HELLO_Address p0_ha[2]; +struct GNUNET_HELLO_Address p1_ha[2]; +struct GNUNET_HELLO_Address *s_ha[2]; + +static void +end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); + +static void +end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); + + +static void +ats_perf_cb (void *cls, + const struct GNUNET_HELLO_Address *address, + int address_active, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + const struct GNUNET_ATS_Information *ats, + uint32_t ats_count) +{ + static int counter = 0; + if (NULL == address) + { + phal = 0; + if (4 == counter) + { + GNUNET_SCHEDULER_add_now (end, NULL); + } + else + { + GNUNET_break (0); + GNUNET_SCHEDULER_add_now (end_badly, NULL); + } + return; + } + counter ++; +} + + +static int +stat_cb(void *cls, const char *subsystem, + const char *name, uint64_t value, + int is_persistent) +{ + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "ATS statistics: `%s' `%s' %llu\n", + subsystem,name, value); + if (4 == value) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "All addresses added, connecting to performance\n"); + if (NULL == (perf_ats = GNUNET_ATS_performance_init (cfg, &ats_perf_cb, NULL))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to connect to performance API\n"); + GNUNET_SCHEDULER_add_now (end_badly, NULL); + } + phal = GNUNET_ATS_performance_list_addresses (perf_ats, NULL, GNUNET_YES, ats_perf_cb, NULL); + } + return GNUNET_OK; +} + +static void +address_suggest_cb (void *cls, const struct GNUNET_HELLO_Address *address, + struct Session *session, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + const struct GNUNET_ATS_Information *atsi, + uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not expect suggestion callback!\n"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; +} + + +static void +end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + die_task = GNUNET_SCHEDULER_NO_TASK; + end ( NULL, NULL); + ret = GNUNET_SYSERR; +} + +static void +end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Shutting down\n"); + if (die_task != GNUNET_SCHEDULER_NO_TASK ) + { + GNUNET_SCHEDULER_cancel (die_task); + die_task = GNUNET_SCHEDULER_NO_TASK; + } + + if (NULL != sched_ats) + { + GNUNET_ATS_scheduling_done (sched_ats); + sched_ats = NULL; + } + + if (phal != NULL ) + { + GNUNET_ATS_performance_list_addresses_cancel (phal); + phal = NULL; + } + + if (perf_ats != NULL ) + { + GNUNET_ATS_performance_done (perf_ats); + perf_ats = NULL; + } + + GNUNET_STATISTICS_watch_cancel (stats, "ats", "# addresses", &stat_cb, NULL); + if (NULL != stats) + { + GNUNET_STATISTICS_destroy (stats, GNUNET_NO); + stats = NULL; + } + + + GNUNET_free_non_null(p0_addresses[0].addr); + GNUNET_free_non_null(p0_addresses[1].addr); + GNUNET_free_non_null(p1_addresses[0].addr); + GNUNET_free_non_null(p1_addresses[1].addr); + + ret = 0; +} + + + +static void +run (void *cls, const struct GNUNET_CONFIGURATION_Handle *mycfg, + struct GNUNET_TESTING_Peer *peer) +{ + ret = 1; + cfg = (struct GNUNET_CONFIGURATION_Handle *) mycfg; + die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL ); + + stats = GNUNET_STATISTICS_create ("ats", cfg); + GNUNET_STATISTICS_watch (stats, "ats", "# addresses", &stat_cb, NULL); + + /* set up peer 0 */ + GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, + &p[0].id.hashPubKey); + + p0_addresses[0].plugin = "test"; + p0_addresses[0].session = NULL; + p0_addresses[0].addr = GNUNET_strdup ("test_p0_a0"); + p0_addresses[0].addr_len = strlen (p0_addresses[0].addr) + 1; + + p0_ha[0].address = p0_addresses[0].addr; + p0_ha[0].address_length = p0_addresses[0].addr_len; + p0_ha[0].peer = p[0].id; + p0_ha[0].transport_name = p0_addresses[0].plugin; + + p0_addresses[1].plugin = "test"; + p0_addresses[1].session = NULL; + p0_addresses[1].addr = GNUNET_strdup ("test_p0_a1"); + p0_addresses[1].addr_len = strlen (p0_addresses[1].addr) + 1; + + p0_ha[1].address = p0_addresses[1].addr; + p0_ha[1].address_length = p0_addresses[1].addr_len; + p0_ha[1].peer = p[0].id; + p0_ha[1].transport_name = p0_addresses[1].plugin; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Created peer 0: `%s'\n", + GNUNET_i2s (&p[0].id)); + + GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, + &p[1].id.hashPubKey); + + p1_addresses[0].plugin = "test"; + p1_addresses[0].session = NULL; + p1_addresses[0].addr = GNUNET_strdup ("test_p1_a0"); + p1_addresses[0].addr_len = strlen (p1_addresses[0].addr) + 1; + + p1_ha[0].address = p1_addresses[0].addr; + p1_ha[0].address_length = p1_addresses[0].addr_len; + p1_ha[0].peer = p[1].id; + p1_ha[0].transport_name = p1_addresses[0].plugin; + + p1_addresses[1].plugin = "test"; + p1_addresses[1].session = NULL; + p1_addresses[1].addr = GNUNET_strdup ("test_p1_a1"); + p1_addresses[1].addr_len = strlen (p1_addresses[1].addr) + 1; + + p1_ha[1].address = p1_addresses[1].addr; + p1_ha[1].address_length = p1_addresses[1].addr_len; + p1_ha[1].peer = p[1].id; + p1_ha[1].transport_name = p1_addresses[1].plugin; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Created peer 1: `%s'\n", + GNUNET_i2s (&p[1].id)); + + /* Add addresses */ + sched_ats = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL ); + if (sched_ats == NULL ) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not setup peer!\n"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; + } + + GNUNET_ATS_address_add (sched_ats, &p0_ha[0], NULL, NULL, 0); + GNUNET_ATS_address_add (sched_ats, &p0_ha[1], NULL, NULL, 0); + + GNUNET_ATS_address_add (sched_ats, &p1_ha[0], NULL, NULL, 0); + GNUNET_ATS_address_add (sched_ats, &p1_ha[1], NULL, NULL, 0); +} + +int +main (int argc, char *argv[]) +{ + if (0 + != GNUNET_TESTING_peer_run ("test_ats_api_performance", + "test_ats_api.conf", &run, NULL )) + return 1; + return ret; +} + +/* end of file test_ats_api_performance_list_addresses.c */ diff --git a/src/ats/test_ats_api_performance_list_peer_addresses.c b/src/ats/test_ats_api_performance_list_peer_addresses.c new file mode 100644 index 000000000..b27600175 --- /dev/null +++ b/src/ats/test_ats_api_performance_list_peer_addresses.c @@ -0,0 +1,314 @@ +/* + This file is part of GNUnet. + (C) 2010,2011 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 ats/test_ats_api_performance_list_addresses.c + * @brief test performance API's address listing feature + * @author Christian Grothoff + * @author Matthias Wachs + */ +#include "platform.h" +#include "gnunet_ats_service.h" +#include "gnunet_testing_lib.h" +#include "ats.h" + +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) + +static GNUNET_SCHEDULER_TaskIdentifier die_task; + +/** + * Statistics handle + */ +struct GNUNET_STATISTICS_Handle *stats; + +/** + * Configuration handle + */ +struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * ATS scheduling handle + */ +static struct GNUNET_ATS_SchedulingHandle *sched_ats; + +/** + * ATS performance handle + */ +static struct GNUNET_ATS_PerformanceHandle *perf_ats; + +struct GNUNET_ATS_AddressListHandle* phal; + +static int ret; + +struct Address +{ + char *plugin; + size_t plugin_len; + + void *addr; + size_t addr_len; + + struct GNUNET_ATS_Information *ats; + int ats_count; + + void *session; +}; + +struct PeerContext +{ + struct GNUNET_PeerIdentity id; + + struct Address *addr; +}; + +static struct PeerContext p[2]; + +static struct Address p0_addresses[2]; +static struct Address p1_addresses[2]; + +struct GNUNET_HELLO_Address p0_ha[2]; +struct GNUNET_HELLO_Address p1_ha[2]; +struct GNUNET_HELLO_Address *s_ha[2]; + +static void +end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); + +static void +end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); + + +static void +ats_perf_cb (void *cls, + const struct GNUNET_HELLO_Address *address, + int address_active, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + const struct GNUNET_ATS_Information *ats, + uint32_t ats_count) +{ + static int counter = 0; + if (NULL == address) + { + phal = 0; + if (2 == counter) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Done!\n"); + GNUNET_SCHEDULER_add_now (end, NULL); + } + else + { + GNUNET_break (0); + GNUNET_SCHEDULER_add_now (end_badly, NULL); + } + return; + } + else + { + if (0 != memcmp (&address->peer, &p[0].id, sizeof (p[0].id))) + { + GNUNET_break (0); + GNUNET_SCHEDULER_add_now (end_badly, NULL); + } + } + counter ++; +} + + +static int +stat_cb(void *cls, const char *subsystem, + const char *name, uint64_t value, + int is_persistent) +{ + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "ATS statistics: `%s' `%s' %llu\n", + subsystem,name, value); + if (4 == value) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "All addresses added, connecting to performance\n"); + if (NULL == (perf_ats = GNUNET_ATS_performance_init (cfg, &ats_perf_cb, NULL))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to connect to performance API\n"); + GNUNET_SCHEDULER_add_now (end_badly, NULL); + } + phal = GNUNET_ATS_performance_list_addresses (perf_ats, &p[0].id, GNUNET_YES, ats_perf_cb, NULL); + } + return GNUNET_OK; +} + +static void +address_suggest_cb (void *cls, const struct GNUNET_HELLO_Address *address, + struct Session *session, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + const struct GNUNET_ATS_Information *atsi, + uint32_t ats_count) +{ + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not expect suggestion callback!\n"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; +} + + +static void +end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + die_task = GNUNET_SCHEDULER_NO_TASK; + end ( NULL, NULL); + ret = GNUNET_SYSERR; +} + +static void +end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Shutting down\n"); + if (die_task != GNUNET_SCHEDULER_NO_TASK ) + { + GNUNET_SCHEDULER_cancel (die_task); + die_task = GNUNET_SCHEDULER_NO_TASK; + } + + if (NULL != sched_ats) + { + GNUNET_ATS_scheduling_done (sched_ats); + sched_ats = NULL; + } + + if (phal != NULL ) + { + GNUNET_ATS_performance_list_addresses_cancel (phal); + phal = NULL; + } + + if (perf_ats != NULL ) + { + GNUNET_ATS_performance_done (perf_ats); + perf_ats = NULL; + } + + GNUNET_STATISTICS_watch_cancel (stats, "ats", "# addresses", &stat_cb, NULL); + if (NULL != stats) + { + GNUNET_STATISTICS_destroy (stats, GNUNET_NO); + stats = NULL; + } + + + GNUNET_free_non_null(p0_addresses[0].addr); + GNUNET_free_non_null(p0_addresses[1].addr); + GNUNET_free_non_null(p1_addresses[0].addr); + GNUNET_free_non_null(p1_addresses[1].addr); + + ret = 0; +} + + + +static void +run (void *cls, const struct GNUNET_CONFIGURATION_Handle *mycfg, + struct GNUNET_TESTING_Peer *peer) +{ + ret = 1; + cfg = (struct GNUNET_CONFIGURATION_Handle *) mycfg; + die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL ); + + stats = GNUNET_STATISTICS_create ("ats", cfg); + GNUNET_STATISTICS_watch (stats, "ats", "# addresses", &stat_cb, NULL); + + /* set up peer 0 */ + GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, + &p[0].id.hashPubKey); + + p0_addresses[0].plugin = "test"; + p0_addresses[0].session = NULL; + p0_addresses[0].addr = GNUNET_strdup ("test_p0_a0"); + p0_addresses[0].addr_len = strlen (p0_addresses[0].addr) + 1; + + p0_ha[0].address = p0_addresses[0].addr; + p0_ha[0].address_length = p0_addresses[0].addr_len; + p0_ha[0].peer = p[0].id; + p0_ha[0].transport_name = p0_addresses[0].plugin; + + p0_addresses[1].plugin = "test"; + p0_addresses[1].session = NULL; + p0_addresses[1].addr = GNUNET_strdup ("test_p0_a1"); + p0_addresses[1].addr_len = strlen (p0_addresses[1].addr) + 1; + + p0_ha[1].address = p0_addresses[1].addr; + p0_ha[1].address_length = p0_addresses[1].addr_len; + p0_ha[1].peer = p[0].id; + p0_ha[1].transport_name = p0_addresses[1].plugin; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Created peer 0: `%s'\n", + GNUNET_i2s (&p[0].id)); + + GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, + &p[1].id.hashPubKey); + + p1_addresses[0].plugin = "test"; + p1_addresses[0].session = NULL; + p1_addresses[0].addr = GNUNET_strdup ("test_p1_a0"); + p1_addresses[0].addr_len = strlen (p1_addresses[0].addr) + 1; + + p1_ha[0].address = p1_addresses[0].addr; + p1_ha[0].address_length = p1_addresses[0].addr_len; + p1_ha[0].peer = p[1].id; + p1_ha[0].transport_name = p1_addresses[0].plugin; + + p1_addresses[1].plugin = "test"; + p1_addresses[1].session = NULL; + p1_addresses[1].addr = GNUNET_strdup ("test_p1_a1"); + p1_addresses[1].addr_len = strlen (p1_addresses[1].addr) + 1; + + p1_ha[1].address = p1_addresses[1].addr; + p1_ha[1].address_length = p1_addresses[1].addr_len; + p1_ha[1].peer = p[1].id; + p1_ha[1].transport_name = p1_addresses[1].plugin; + + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Created peer 1: `%s'\n", + GNUNET_i2s (&p[1].id)); + + /* Add addresses */ + sched_ats = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL ); + if (sched_ats == NULL ) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not setup peer!\n"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; + } + + GNUNET_ATS_address_add (sched_ats, &p0_ha[0], NULL, NULL, 0); + GNUNET_ATS_address_add (sched_ats, &p0_ha[1], NULL, NULL, 0); + + GNUNET_ATS_address_add (sched_ats, &p1_ha[0], NULL, NULL, 0); + GNUNET_ATS_address_add (sched_ats, &p1_ha[1], NULL, NULL, 0); +} + +int +main (int argc, char *argv[]) +{ + if (0 + != GNUNET_TESTING_peer_run ("test_ats_api_performance", + "test_ats_api.conf", &run, NULL )) + return 1; + return ret; +} + +/* end of file test_ats_api_performance_list_addresses.c */