X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fats%2Ftest_ats_simplistic_change_preference.c;h=d5dbe9f9ac36d688f7d4862e8af50a806f967dff;hb=056f559d916d785164f40e63ca56c153ea0e9ebe;hp=ecde45825d824856f32561da47789a3092c91ca1;hpb=69f4cbdda8969ba3325f831d93b6e21660f1a276;p=oweals%2Fgnunet.git diff --git a/src/ats/test_ats_simplistic_change_preference.c b/src/ats/test_ats_simplistic_change_preference.c index ecde45825..d5dbe9f9a 100644 --- a/src/ats/test_ats_simplistic_change_preference.c +++ b/src/ats/test_ats_simplistic_change_preference.c @@ -26,18 +26,20 @@ */ /** * @file ats/test_ats_simplistic_change_preference.c - * @brief test for changing preferences in ats simplistic solver + * @brief test for changing preferences in ats proportional solver * @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" #include "test_ats_api_common.h" #define DEBUG_ATS_INFO GNUNET_NO +#define SLEEP GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) + static GNUNET_SCHEDULER_TaskIdentifier die_task; /** @@ -45,6 +47,12 @@ static GNUNET_SCHEDULER_TaskIdentifier die_task; */ static struct GNUNET_ATS_SchedulingHandle *sched_ats; +/** + * Scheduling handle + */ +static struct GNUNET_ATS_PerformanceHandle *perf_ats; + + /** * Return value */ @@ -99,6 +107,8 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (sched_ats != NULL) GNUNET_ATS_scheduling_done (sched_ats); + if (perf_ats != NULL) + GNUNET_ATS_performance_done (perf_ats); free_test_address (&test_addr[0]); ret = GNUNET_SYSERR; } @@ -113,6 +123,8 @@ end () GNUNET_SCHEDULER_cancel (die_task); die_task = GNUNET_SCHEDULER_NO_TASK; } + GNUNET_ATS_performance_done (perf_ats); + perf_ats = NULL; GNUNET_ATS_scheduling_done (sched_ats); sched_ats = NULL; free_test_address (&test_addr[0]); @@ -134,20 +146,23 @@ address_suggest_cb (void *cls, const struct GNUNET_HELLO_Address *address, { if (GNUNET_OK == compare_addresses (address, session, &test_hello_address[0], test_session[0])) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage 0: Callback with correct address `%s'\n", + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage %u: Callback with correct address `%s'\n", + stage, GNUNET_i2s (&address->peer)); ret = 0; } else { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage 0: Callback with invalid address `%s'\n", + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage %u: Callback with invalid address `%s'\n", + stage, GNUNET_i2s (&address->peer)); ret = 1; } if (GNUNET_OK != compare_ats(atsi, ats_count, test_ats_info, test_ats_count)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage 0: Callback with incorrect ats info \n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %u: Callback with incorrect ats info \n", + stage); ret = 1; } @@ -177,94 +192,76 @@ address_suggest_cb (void *cls, const struct GNUNET_HELLO_Address *address, GNUNET_SCHEDULER_add_now (&end, NULL); return; } - p[0].bw_out_assigned = bw_out; - p[0].bw_in_assigned = bw_in; + stage ++; - /* Add a 2nd address */ - /* 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 with session */ - test_session[1] = &test_addr[1]; - create_test_address (&test_addr[1], "test1", test_session[1], "test1", strlen ("test1") + 1); - test_hello_address[1].peer = p[1].id; - test_hello_address[1].transport_name = test_addr[1].plugin; - test_hello_address[1].address = test_addr[1].addr; - test_hello_address[1].address_length = test_addr[1].addr_len; - GNUNET_ATS_address_add (sched_ats, &test_hello_address[1], test_session[1], test_ats_info, test_ats_count); + GNUNET_ATS_suggest_address_cancel (sched_ats, &p[0].id); + GNUNET_ATS_suggest_address (sched_ats, &p[1].id); + return; } if (1 == stage) { - /* Expecting callback for address[0] with updated quota and no callback for address[1]*/ - if (GNUNET_OK == compare_addresses (address, session, &test_hello_address[0], test_session[0])) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage 1: Callback with correct address `%s'\n", - GNUNET_i2s (&address->peer)); - ret = 0; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage 1: Callback with invalid address `%s'\n", - GNUNET_i2s (&address->peer)); - ret = 1; - } - - if (GNUNET_OK != compare_ats(atsi, ats_count, test_ats_info, test_ats_count)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage 1: Callback with incorrect ats info \n"); + if (GNUNET_OK == compare_addresses (address, session, &test_hello_address[1], test_session[1])) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage %u: Callback with correct address `%s'\n", + stage, + GNUNET_i2s (&address->peer)); + ret = 0; + } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stage %u: Callback with invalid address `%s'\n", + stage, + GNUNET_i2s (&address->peer)); ret = 1; - } - - if (bw_in > wan_quota_in) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN inbound quota %u bigger than allowed quota %llu \n", - bw_in, wan_quota_in); - ret = 1; - } - else if (p[0].bw_in_assigned > bw_in) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN inbound quota %u bigger than last quota %llu \n", - bw_in, p[0].bw_in_assigned); - ret = 1; - } - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Suggested WAN inbound quota %u, allowed quota %llu \n", + } + + if (GNUNET_OK != compare_ats(atsi, ats_count, test_ats_info, test_ats_count)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Stage %u: Callback with incorrect ats info \n", + stage); + ret = 1; + } + + if (bw_in > wan_quota_in) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN inbound quota %u bigger than allowed quota %llu \n", bw_in, wan_quota_in); + ret = 1; + } + else + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Suggested WAN inbound quota %u, allowed quota %llu \n", + bw_in, wan_quota_in); - if (bw_out > wan_quota_out) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN outbound quota %u bigger than allowed quota %llu \n", - bw_out, wan_quota_out); - ret = 1; - } - else if (p[0].bw_out_assigned > bw_out) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN inbound quota %u bigger than last quota %llu \n", - bw_out, p[0].bw_out_assigned); - ret = 1; - } - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Suggested WAN outbound quota %u, allowed quota %llu \n", + if (bw_out > wan_quota_out) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Suggested WAN outbound quota %u bigger than allowed quota %llu \n", bw_out, wan_quota_out); + ret = 1; + } + else + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Suggested WAN outbound quota %u, allowed quota %llu \n", + bw_out, wan_quota_out); - if (1 == ret) - { - GNUNET_ATS_suggest_address_cancel (sched_ats, &p[1].id); - GNUNET_SCHEDULER_add_now (&end, NULL); - return; - } - stage ++; - - GNUNET_ATS_suggest_address_cancel (sched_ats, &p[1].id); + if (1 == ret) + { + GNUNET_ATS_suggest_address_cancel (sched_ats, &p[0].id); GNUNET_SCHEDULER_add_now (&end, NULL); return; + } + + stage ++; + GNUNET_ATS_suggest_address_cancel (sched_ats, &p[1].id); + GNUNET_SCHEDULER_add_now (&end, NULL); + + return; } +} +static void +sleep_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_ATS_suggest_address (sched_ats, &p[0].id); } static void @@ -321,6 +318,15 @@ run (void *cls, return; } + perf_ats = GNUNET_ATS_performance_init (cfg, NULL, NULL); + if (perf_ats == NULL) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not connect to ATS performance!\n"); + ret = 1; + end (); + return; + } + /* Set up peer 0 */ if (GNUNET_SYSERR == GNUNET_CRYPTO_hash_from_string(PEERID0, &p[0].id.hashPubKey)) { @@ -335,7 +341,8 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", GNUNET_i2s(&p[0].id)); - /* Set up peer 1*/ + + /* Set up peer 0 */ if (GNUNET_SYSERR == GNUNET_CRYPTO_hash_from_string(PEERID1, &p[1].id.hashPubKey)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not setup peer!\n"); @@ -365,14 +372,42 @@ run (void *cls, test_hello_address[0].address_length = test_addr[0].addr_len; GNUNET_ATS_address_add (sched_ats, &test_hello_address[0], test_session[0], test_ats_info, test_ats_count); - GNUNET_ATS_suggest_address (sched_ats, &p[0].id); + + /* Adding address with session */ + test_session[1] = &test_addr[1]; + create_test_address (&test_addr[1], "test1", test_session[1], "test1", strlen ("test1") + 1); + test_hello_address[1].peer = p[1].id; + test_hello_address[1].transport_name = test_addr[0].plugin; + test_hello_address[1].address = test_addr[0].addr; + test_hello_address[1].address_length = test_addr[0].addr_len; + GNUNET_ATS_address_add (sched_ats, &test_hello_address[1], test_session[1], test_ats_info, test_ats_count); + + + /* Change bandwidth preference */ + GNUNET_ATS_performance_change_preference (perf_ats, + &p[0].id, + GNUNET_ATS_PREFERENCE_BANDWIDTH,(double) 1000, GNUNET_ATS_PREFERENCE_END); + GNUNET_ATS_performance_change_preference (perf_ats, + &p[1].id, + GNUNET_ATS_PREFERENCE_BANDWIDTH,(double) 1000, GNUNET_ATS_PREFERENCE_END); + + + /* Change latency preference */ + + GNUNET_ATS_performance_change_preference (perf_ats, + &p[0].id, + GNUNET_ATS_PREFERENCE_LATENCY,(double) 10, GNUNET_ATS_PREFERENCE_END); + GNUNET_ATS_performance_change_preference (perf_ats, + &p[1].id, + GNUNET_ATS_PREFERENCE_LATENCY,(double) 100, GNUNET_ATS_PREFERENCE_END); + GNUNET_SCHEDULER_add_delayed (SLEEP, &sleep_task, NULL); } int main (int argc, char *argv[]) { - if (0 != GNUNET_TESTING_peer_run ("test_ats_simplististic", + if (0 != GNUNET_TESTING_peer_run ("test_ats_simplistic_change_preference", "test_ats_api.conf", &run, NULL)) return 1;