From 1cc4422321ddec369d7ff8843ca4fbec8d61e68f Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Thu, 26 Sep 2013 11:33:37 +0000 Subject: new solver specific test --- src/ats/Makefile.am | 10 +- src/ats/test_ats_solver_add_address.c | 164 +++++++++++++++++++++++++++++- src/ats/test_ats_solver_default.conf | 7 ++ src/ats/test_ats_solver_mlp.conf | 2 + src/ats/test_ats_solver_proportional.conf | 2 + src/ats/test_ats_solver_ril.conf | 2 + 6 files changed, 182 insertions(+), 5 deletions(-) create mode 100644 src/ats/test_ats_solver_default.conf (limited to 'src') diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index b6032aede..8883baf87 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am @@ -224,7 +224,8 @@ test_ats_api_performance_monitor_initial_callback_LDADD = \ # solver tests test_ats_solver_add_address_proportional_SOURCES = \ - test_ats_solver_add_address.c + test_ats_solver_add_address.c \ + test_ats_api_common.c test_ats_api_common.h test_ats_solver_add_address_proportional_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ @@ -234,7 +235,8 @@ test_ats_solver_add_address_proportional_LDADD = \ if HAVE_LIBGLPK test_ats_solver_add_address_mlp_SOURCES = \ - test_ats_solver_add_address.c + test_ats_solver_add_address.c \ + test_ats_api_common.c test_ats_api_common.h test_ats_solver_add_address_mlp_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ @@ -244,7 +246,8 @@ test_ats_solver_add_address_mlp_LDADD = \ endif test_ats_solver_add_address_ril_SOURCES = \ - test_ats_solver_add_address.c + test_ats_solver_add_address.c \ + test_ats_api_common.c test_ats_api_common.h test_ats_solver_add_address_ril_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ @@ -375,6 +378,7 @@ EXTRA_DIST = \ ats.h \ test_ats_api.conf \ test_ats_mlp.conf \ + test_ats_solver_default.conf \ test_ats_solver_proportional.conf \ test_ats_solver_mlp.conf \ test_ats_solver_ril.conf diff --git a/src/ats/test_ats_solver_add_address.c b/src/ats/test_ats_solver_add_address.c index 34d20398b..3dd88fd60 100644 --- a/src/ats/test_ats_solver_add_address.c +++ b/src/ats/test_ats_solver_add_address.c @@ -33,20 +33,180 @@ #include "gnunet_util_lib.h" #include "gnunet_testbed_service.h" #include "gnunet_ats_service.h" +#include "test_ats_api_common.h" /** - * Result + * Timeout task + */ +static GNUNET_SCHEDULER_TaskIdentifier die_task; + +/** + * Statistics handle + */ +struct GNUNET_STATISTICS_Handle *stats; + +/** + * Scheduling handle + */ +static struct GNUNET_ATS_SchedulingHandle *sched_ats; + +/** + * Return value */ static int ret; +/** + * Test address + */ +static struct Test_Address test_addr; + +/** + * Test peer + */ +static struct PeerContext p; + +/** + * HELLO address + */ +struct GNUNET_HELLO_Address test_hello_address; + +/** + * Session + */ +static void *test_session; + +/** + * Test ats info + */ +struct GNUNET_ATS_Information test_ats_info[2]; + +/** + * Test ats count + */ +uint32_t test_ats_count; + + +static int +stat_cb(void *cls, const char *subsystem, const char *name, uint64_t value, + int is_persistent); + +static void +end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Done!\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; + } + + 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 *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 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 (1 == value) + { + GNUNET_SCHEDULER_add_now (&end, NULL); + } + return GNUNET_OK; +} static void run (void *cls, const struct GNUNET_CONFIGURATION_Handle *mycfg, struct GNUNET_TESTING_Peer *peer) { - ret = 0; + die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); + stats = GNUNET_STATISTICS_create ("ats", mycfg); + GNUNET_STATISTICS_watch (stats, "ats", "# addresses", &stat_cb, NULL); + + + /* Connect to ATS scheduling */ + sched_ats = GNUNET_ATS_scheduling_init (mycfg, &address_suggest_cb, NULL); + if (sched_ats == NULL) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not connect to ATS scheduling!\n"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; + } + + /* 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"); + GNUNET_SCHEDULER_add_now (&end_badly, NULL); + return; + } + GNUNET_assert (0 == strcmp (PEERID0, GNUNET_i2s_full (&p.id))); + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created peer `%s'\n", + GNUNET_i2s_full(&p.id)); + + /* 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 */ + 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[]) { diff --git a/src/ats/test_ats_solver_default.conf b/src/ats/test_ats_solver_default.conf new file mode 100644 index 000000000..46187d163 --- /dev/null +++ b/src/ats/test_ats_solver_default.conf @@ -0,0 +1,7 @@ +[arm] +PORT = 12001 +DEFAULTSERVICES = ats +UNIXPATH = /tmp/test-ats-scheduling-arm.sock + +[transport] +AUTOSTART = NO diff --git a/src/ats/test_ats_solver_mlp.conf b/src/ats/test_ats_solver_mlp.conf index a640e942d..64dadefbf 100644 --- a/src/ats/test_ats_solver_mlp.conf +++ b/src/ats/test_ats_solver_mlp.conf @@ -1,3 +1,5 @@ +@INLINE@ test_ats_solver_default.conf + [ats] #PREFIX = valgrind --leak-check=yes MODE = MLP diff --git a/src/ats/test_ats_solver_proportional.conf b/src/ats/test_ats_solver_proportional.conf index 1b5914434..407dbcb1c 100644 --- a/src/ats/test_ats_solver_proportional.conf +++ b/src/ats/test_ats_solver_proportional.conf @@ -1,3 +1,5 @@ +@INLINE@ test_ats_solver_default.conf + [ats] #PREFIX = valgrind --leak-check=yes MODE = PROPORTIONAL diff --git a/src/ats/test_ats_solver_ril.conf b/src/ats/test_ats_solver_ril.conf index b3f5d9b67..74421728e 100644 --- a/src/ats/test_ats_solver_ril.conf +++ b/src/ats/test_ats_solver_ril.conf @@ -1,3 +1,5 @@ +@INLINE@ test_ats_solver_default.conf + [ats] #PREFIX = valgrind --leak-check=yes MODE = RIL -- cgit v1.2.3