From 3159294233a4b5eecb3cd6ae8ca6a4b1b00acdf2 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Wed, 5 Dec 2012 15:57:26 +0000 Subject: [PATCH] test rewrite --- src/ats/Makefile.am | 132 +++++++------ src/ats/gnunet-service-ats_addresses.c | 6 +- src/ats/test_ats_api_scheduling_add_address.c | 179 ++++++++++-------- src/ats/test_ats_api_scheduling_init.c | 20 +- 4 files changed, 184 insertions(+), 153 deletions(-) diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index 74aa0c5f1..bcaafdda8 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am @@ -59,15 +59,15 @@ gnunet_service_ats_DEPENDENCIES = \ check_PROGRAMS = \ test_ats_api_scheduling_init \ - test_ats_api_scheduling_add_address \ - test_ats_api_scheduling \ - test_ats_api_scheduling_destroy_address \ - test_ats_api_scheduling_destroy_session \ - test_ats_api_reset_backoff \ - test_ats_api_performance \ - $(GN_MLP_TEST) \ - $(GN_MLP_TEST_AVG) \ - $(GN_MLP_PERF) + test_ats_api_scheduling_add_address +# test_ats_api_scheduling \ +# test_ats_api_scheduling_destroy_address \ +# test_ats_api_scheduling_destroy_session \ +# test_ats_api_reset_backoff \ +# test_ats_api_performance \ +# $(GN_MLP_TEST) \ +# $(GN_MLP_TEST_AVG) \ +# $(GN_MLP_PERF) # test_ats_api_scheduling_get_type # test_ats_api_bandwidth_consumption @@ -75,33 +75,6 @@ if ENABLE_TEST_RUN TESTS = $(check_PROGRAMS) endif -if HAVE_LIBGLPK -test_ats_mlp_SOURCES = \ - $(GN_MLP_SRC) \ - test_ats_mlp.c -test_ats_mlp_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la - -test_ats_mlp_averaging_SOURCES = \ - $(GN_MLP_SRC) \ - test_ats_mlp_averaging.c -test_ats_mlp_averaging_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la - -perf_ats_mlp_SOURCES = \ - $(GN_MLP_SRC) \ - perf_ats_mlp.c -perf_ats_mlp_LDADD = \ - $(GN_LIBGLPK) \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la -endif - - test_ats_api_scheduling_init_SOURCES = \ test_ats_api_scheduling_init.c test_ats_api_scheduling_init_LDADD = \ @@ -109,21 +82,46 @@ test_ats_api_scheduling_init_LDADD = \ $(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_mlp_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la +#test_ats_mlp_averaging_SOURCES = \ +# $(GN_MLP_SRC) \ +# test_ats_mlp_averaging.c +#test_ats_mlp_averaging_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la -test_ats_api_scheduling_SOURCES = \ - test_ats_api_scheduling.c -test_ats_api_scheduling_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la +#perf_ats_mlp_SOURCES = \ +# $(GN_MLP_SRC) \ +# perf_ats_mlp.c +#perf_ats_mlp_LDADD = \ +# $(GN_LIBGLPK) \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/statistics/libgnunetstatistics.la +endif -test_ats_api_reset_backoff_SOURCES = \ - test_ats_api_reset_backoff.c -test_ats_api_reset_backoff_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_api_scheduling_SOURCES = \ +# test_ats_api_scheduling.c +#test_ats_api_scheduling_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la + +#test_ats_api_reset_backoff_SOURCES = \ +# test_ats_api_reset_backoff.c +#test_ats_api_reset_backoff_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la test_ats_api_scheduling_add_address_SOURCES = \ test_ats_api_scheduling_add_address.c @@ -132,19 +130,19 @@ test_ats_api_scheduling_add_address_LDADD = \ $(top_builddir)/src/testing/libgnunettesting.la \ $(top_builddir)/src/ats/libgnunetats.la -test_ats_api_scheduling_destroy_address_SOURCES = \ - test_ats_api_scheduling_destroy_address.c -test_ats_api_scheduling_destroy_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_address_SOURCES = \ +# test_ats_api_scheduling_destroy_address.c +#test_ats_api_scheduling_destroy_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_session_SOURCES = \ - test_ats_api_scheduling_destroy_session.c -test_ats_api_scheduling_destroy_session_LDADD = \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/ats/libgnunetats.la +#test_ats_api_scheduling_destroy_session_SOURCES = \ +# test_ats_api_scheduling_destroy_session.c +#test_ats_api_scheduling_destroy_session_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/testing/libgnunettesting.la \ +# $(top_builddir)/src/ats/libgnunetats.la #test_ats_api_scheduling_get_type_SOURCES = \ # test_ats_api_scheduling_get_type.c @@ -165,13 +163,13 @@ test_ats_api_scheduling_destroy_session_LDADD = \ # $(top_builddir)/src/util/libgnunetutil.la \ # $(top_builddir)/src/ats/libgnunetats.la -test_ats_api_performance_SOURCES = \ - test_ats_api_performance.c -test_ats_api_performance_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_SOURCES = \ +# test_ats_api_performance.c +#test_ats_api_performance_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 EXTRA_DIST = \ ats.h \ diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index b1b9a4e9f..d4cf01b82 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c @@ -484,9 +484,10 @@ GAS_addresses_add (const struct GNUNET_PeerIdentity *peer, "Added already existing address for peer `%s' `%s' %p with new session %u\n", GNUNET_i2s (peer), plugin_name, session_id); GNUNET_break (0); + return; } - /* We have a base address with out an session, update this address */ + /* We have an address without an session, update this address */ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updated existing address for peer `%s' %p with new session %u\n", GNUNET_i2s (peer), old, session_id); @@ -661,13 +662,10 @@ GAS_addresses_destroy (const struct GNUNET_PeerIdentity *peer, return; } - GNUNET_break (0 < strlen (plugin_name)); aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, session_id); - GNUNET_CONTAINER_multihashmap_get_multiple (handle->addresses, &peer->hashPubKey, &destroy_by_session_id, aa); - free_address (aa); } diff --git a/src/ats/test_ats_api_scheduling_add_address.c b/src/ats/test_ats_api_scheduling_add_address.c index 7b9c0282b..fdabbbe29 100644 --- a/src/ats/test_ats_api_scheduling_add_address.c +++ b/src/ats/test_ats_api_scheduling_add_address.c @@ -27,39 +27,33 @@ #include "gnunet_ats_service.h" #include "gnunet_testing_lib-new.h" #include "ats.h" - -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) +#include "test_ats_api_common.h" static GNUNET_SCHEDULER_TaskIdentifier die_task; -static struct GNUNET_ATS_SchedulingHandle *ats; - -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; +/** + * Scheduling handle + */ +static struct GNUNET_ATS_SchedulingHandle *sched_ats; - struct Address *addr; -}; +/** + * Performance handle + */ +static struct GNUNET_ATS_PerformanceHandle *perf_ats; +/** + * Return value + */ +static int ret; -static struct Address test_addr; +/** + * Test address + */ +static struct Test_Address test_addr; +/** + * Test peer + */ static struct PeerContext p; @@ -67,8 +61,11 @@ static void end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { die_task = GNUNET_SCHEDULER_NO_TASK; - if (ats != NULL) - GNUNET_ATS_scheduling_done (ats); + + if (sched_ats != NULL) + GNUNET_ATS_scheduling_done (sched_ats); + if (perf_ats != NULL) + GNUNET_ATS_performance_done (perf_ats); ret = GNUNET_SYSERR; } @@ -82,34 +79,51 @@ end () GNUNET_SCHEDULER_cancel (die_task); die_task = GNUNET_SCHEDULER_NO_TASK; } - GNUNET_ATS_scheduling_done (ats); + + GNUNET_ATS_scheduling_done (sched_ats); + sched_ats = NULL; + GNUNET_ATS_performance_done (perf_ats); + perf_ats = NULL; ret = 0; } - -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) +void address_callback (void *cls, + const struct + GNUNET_HELLO_Address * + address, + struct + GNUNET_BANDWIDTH_Value32NBO + bandwidth_out, + struct + GNUNET_BANDWIDTH_Value32NBO + bandwidth_in, + const struct + GNUNET_ATS_Information * + ats, uint32_t ats_count) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ATS suggests address `%s'\n", - GNUNET_i2s (&address->peer)); - - GNUNET_assert (0 == - memcmp (&address->peer, &p.id, - sizeof (struct GNUNET_PeerIdentity))); - GNUNET_assert (0 == strcmp (address->transport_name, test_addr.plugin)); - GNUNET_assert (address->address_length == test_addr.addr_len); - GNUNET_assert (0 == - memcmp (address->address, test_addr.plugin, - address->address_length)); - GNUNET_assert (test_addr.session == session); - - ret = 0; - + static int counter = 0; + if (NULL != address) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received callback for peer `%s'\n", + GNUNET_i2s (&address->peer)); + if (0 < counter) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Too many callbacks!\n"); + ret = 1; + } + else if ((0 == memcmp (&address->peer, &p.id, sizeof (struct GNUNET_PeerIdentity))) && + (0 == strcmp (address->transport_name, test_addr.plugin)) && + (address->address_length == test_addr.addr_len) && + (0 == memcmp (address->address, test_addr.plugin, address->address_length))) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for correct address `%s'\n", + GNUNET_i2s (&address->peer)); + ret = 0; + } + counter ++; + return; + } + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received last callback, shutdown\n"); GNUNET_SCHEDULER_add_now (&end, NULL); } @@ -119,24 +133,39 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_TESTING_Peer *peer) { - struct GNUNET_HELLO_Address address0; - - ret = GNUNET_SYSERR; + struct GNUNET_HELLO_Address hello_address; die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - ats = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL); - if (ats == NULL) + /* Connect to ATS scheduling */ + sched_ats = GNUNET_ATS_scheduling_init (cfg, NULL, NULL); + if (sched_ats == NULL) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not connect to ATS scheduling!\n"); + ret = 1; + end (); + return; + } + + /* Connect to ATS performance */ + perf_ats = GNUNET_ATS_performance_init (cfg, NULL, NULL); + if (perf_ats == NULL) { - ret = GNUNET_SYSERR; + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not connect to ATS performance!\n"); + ret = 1; end (); return; } - /* set up peer */ - GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, - &p.id.hashPubKey); + /* Set up peer */ + if (GNUNET_SYSERR == GNUNET_CRYPTO_hash_from_string(PEERID, &p.id.hashPubKey)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not setup peer!\n"); + ret = GNUNET_SYSERR; + end (); + return; + } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", - GNUNET_i2s (&p.id)); + GNUNET_i2s_full(&p.id)); test_addr.plugin = "test"; test_addr.session = NULL; @@ -144,25 +173,13 @@ run (void *cls, test_addr.addr_len = 4; /* Adding address without session */ - address0.peer = p.id; - address0.transport_name = test_addr.plugin; - address0.address = test_addr.addr; - address0.address_length = test_addr.addr_len; - GNUNET_ATS_address_add (ats, &address0, test_addr.session, NULL, 0); - - test_addr.session = &test_addr; - /* Update address with session */ - GNUNET_ATS_address_add (ats, &address0, test_addr.session, NULL, 0); - - /* Update address with session */ - test_addr.session = &address0; - GNUNET_assert (GNUNET_OK == GNUNET_ATS_address_add (ats, &address0, test_addr.session, NULL, 0)); - GNUNET_log_skip (2, GNUNET_NO); - GNUNET_assert (GNUNET_SYSERR == GNUNET_ATS_address_add (ats, &address0, test_addr.session, NULL, 0)); - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requesting peer `%s'\n", - GNUNET_i2s (&p.id)); - GNUNET_ATS_suggest_address (ats, &p.id); + hello_address.peer = p.id; + hello_address.transport_name = test_addr.plugin; + hello_address.address = test_addr.addr; + hello_address.address_length = test_addr.addr_len; + GNUNET_ATS_address_add (sched_ats, &hello_address, test_addr.session, NULL, 0); + + GNUNET_ATS_performance_list_addresses (perf_ats, &p.id, GNUNET_YES, address_callback, NULL); } diff --git a/src/ats/test_ats_api_scheduling_init.c b/src/ats/test_ats_api_scheduling_init.c index aef11804b..da4da5d8c 100644 --- a/src/ats/test_ats_api_scheduling_init.c +++ b/src/ats/test_ats_api_scheduling_init.c @@ -43,6 +43,11 @@ static void end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { die_task = GNUNET_SCHEDULER_NO_TASK; + if (GNUNET_SCHEDULER_NO_TASK != wait_task) + { + GNUNET_SCHEDULER_cancel (wait_task); + wait_task = GNUNET_SCHEDULER_NO_TASK; + } if (ats != NULL) { GNUNET_ATS_scheduling_done (ats); @@ -65,6 +70,19 @@ end_badly_now () static void delay (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { + static int v_delay = 5; + static int v_cur = 0; + + if (v_cur < v_delay) + { + wait_task = GNUNET_SCHEDULER_NO_TASK; + wait_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &delay, NULL); + fprintf (stderr,"."); + v_cur ++; + return; + } + + fprintf (stderr,"\n"); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown ATS\n"); GNUNET_ATS_scheduling_done (ats); ats = NULL; @@ -106,7 +124,7 @@ run (void *cls, return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Waiting for %llu sec\n", (long long unsigned int) DELAY.rel_value); - wait_task = GNUNET_SCHEDULER_add_delayed (DELAY, &delay, NULL); + wait_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &delay, NULL); } -- 2.25.1