X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fats%2Ftest_ats_api_scheduling_add_address.c;h=21bf14102b998983229baf3c6ab4366c8f216372;hb=46a1afa089ec0cd8086f37afdb4ef5afe21b6330;hp=29dd33c71e8f79febf560402f2551df2189277c4;hpb=8e6c69b6322f9d3f3f2a32040431a3b056302132;p=oweals%2Fgnunet.git diff --git a/src/ats/test_ats_api_scheduling_add_address.c b/src/ats/test_ats_api_scheduling_add_address.c index 29dd33c71..21bf14102 100644 --- a/src/ats/test_ats_api_scheduling_add_address.c +++ b/src/ats/test_ats_api_scheduling_add_address.c @@ -19,100 +19,125 @@ */ /** * @file ats/test_ats_api_scheduling_add_address.c - * @brief test adding addresses in automatic transport selection scheduling API + * @brief adding addresses with scheduling API * @author Christian Grothoff * @author Matthias Wachs */ #include "platform.h" #include "gnunet_ats_service.h" -#include "gnunet_testing_lib-new.h" +#include "gnunet_testing_lib.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 GNUNET_STATISTICS_Handle *stats; -struct Address -{ - char *plugin; - size_t plugin_len; - - void *addr; - size_t addr_len; +/** + * Scheduling handle + */ +static struct GNUNET_ATS_SchedulingHandle *sched_ats; - struct GNUNET_ATS_Information *ats; - int ats_count; +/** + * Return value + */ +static int ret; - void *session; -}; +/** + * Test address + */ +static struct Test_Address test_addr; -struct PeerContext -{ - struct GNUNET_PeerIdentity id; +/** + * Test peer + */ +static struct PeerContext p; - struct Address *addr; -}; +/** + * HELLO address + */ +struct GNUNET_HELLO_Address test_hello_address; +/** + * Session + */ +static void *test_session; -static struct Address test_addr; +/** + * Test ats info + */ +struct GNUNET_ATS_Information test_ats_info[2]; -static struct PeerContext p; +/** + * Test ats count + */ +uint32_t test_ats_count; -static struct GNUNET_ATS_Information atsi; +static void end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); -static void -end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +static int +stat_cb(void *cls, const char *subsystem, + const char *name, uint64_t value, + int is_persistent) { - die_task = GNUNET_SCHEDULER_NO_TASK; - if (ats != NULL) - GNUNET_ATS_scheduling_done (ats); - ret = GNUNET_SYSERR; + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "ATS statistics: `%s' `%s' %llu\n", + subsystem,name, value); + if (1 == value) + { + GNUNET_SCHEDULER_add_now (&end, NULL); + } + return GNUNET_OK; } static void -end () +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; } - GNUNET_ATS_scheduling_done (ats); + + if (NULL != sched_ats) + { + GNUNET_ATS_scheduling_done (sched_ats); + sched_ats = NULL; + } + + GNUNET_STATISTICS_watch_cancel (stats, "ats", "# addresses", &stat_cb, NULL); + if (NULL != stats) + { + GNUNET_STATISTICS_destroy (stats, GNUNET_NO); + stats = NULL; + } + + free_test_address (&test_addr); + ret = 0; } +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 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, + const struct GNUNET_ATS_Information *atsi, 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; - GNUNET_SCHEDULER_add_now (&end, NULL); } @@ -121,56 +146,58 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_TESTING_Peer *peer) { - struct GNUNET_HELLO_Address address0; - - ret = GNUNET_SYSERR; die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - ats = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL); + stats = GNUNET_STATISTICS_create ("ats", cfg); + GNUNET_STATISTICS_watch (stats, "ats", "# addresses", &stat_cb, NULL); - if (ats == NULL) + + /* Connect to ATS scheduling */ + sched_ats = GNUNET_ATS_scheduling_init (cfg, &address_suggest_cb, NULL); + if (sched_ats == NULL) { - ret = GNUNET_SYSERR; - end (); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not connect to ATS scheduling!\n"); + ret = 1; + GNUNET_SCHEDULER_add_now (&end, NULL); 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(PEERID0, &p.id.hashPubKey)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not setup peer!\n"); + ret = GNUNET_SYSERR; + GNUNET_SCHEDULER_add_now (&end, NULL); + return; + } + GNUNET_assert (0 == strcmp (PEERID0, GNUNET_i2s_full (&p.id))); + 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; - test_addr.addr = GNUNET_strdup ("test"); - test_addr.addr_len = 4; + /* Prepare ATS Information */ + test_ats_info[0].type = htonl (GNUNET_ATS_NETWORK_TYPE); + test_ats_info[0].value = htonl(GNUNET_ATS_NET_WAN); + test_ats_info[1].type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE); + test_ats_info[1].value = htonl(1); + test_ats_count = 2; /* 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); + test_session = NULL; + create_test_address (&test_addr, "test", test_session, "test", strlen ("test") + 1); + test_hello_address.peer = p.id; + test_hello_address.transport_name = test_addr.plugin; + test_hello_address.address = test_addr.addr; + test_hello_address.address_length = test_addr.addr_len; + + /* Adding address */ + GNUNET_ATS_address_add (sched_ats, &test_hello_address, test_session, test_ats_info, test_ats_count); } int main (int argc, char *argv[]) { + ret = 0; if (0 != GNUNET_TESTING_peer_run ("test_ats_api_scheduling_add_address", "test_ats_api.conf", &run, NULL))