aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-06-20 22:16:25 +0000
committerChristian Grothoff <christian@grothoff.org>2016-06-20 22:16:25 +0000
commitf6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65 (patch)
tree96dedaab7217465eb6ad952beebd3e5d92ae92e1 /src/ats-tests
parent019338425afc502fc25aeb1896f404a6c0087a2e (diff)
downloadgnunet-f6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65.tar.gz
gnunet-f6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65.zip
fix ATS testcase
Diffstat (limited to 'src/ats-tests')
-rw-r--r--src/ats-tests/ats-testing-experiment.c2
-rw-r--r--src/ats-tests/ats-testing-log.c17
-rw-r--r--src/ats-tests/ats-testing.c65
-rw-r--r--src/ats-tests/ats-testing.h62
-rw-r--r--src/ats-tests/perf_ats.c182
5 files changed, 194 insertions, 134 deletions
diff --git a/src/ats-tests/ats-testing-experiment.c b/src/ats-tests/ats-testing-experiment.c
index b8da23df9..110a48043 100644
--- a/src/ats-tests/ats-testing-experiment.c
+++ b/src/ats-tests/ats-testing-experiment.c
@@ -639,7 +639,7 @@ GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
639 639
640 640
641struct Experiment * 641struct Experiment *
642GNUNET_ATS_TEST_experimentation_load (char *filename) 642GNUNET_ATS_TEST_experimentation_load (const char *filename)
643{ 643{
644 struct Experiment *e; 644 struct Experiment *e;
645 struct GNUNET_CONFIGURATION_Handle *cfg; 645 struct GNUNET_CONFIGURATION_Handle *cfg;
diff --git a/src/ats-tests/ats-testing-log.c b/src/ats-tests/ats-testing-log.c
index 87af31f5f..2442a8249 100644
--- a/src/ats-tests/ats-testing-log.c
+++ b/src/ats-tests/ats-testing-log.c
@@ -227,7 +227,7 @@ struct LoggingHandle
227 /** 227 /**
228 * Logging task 228 * Logging task
229 */ 229 */
230 struct GNUNET_SCHEDULER_Task * log_task; 230 struct GNUNET_SCHEDULER_Task *log_task;
231 231
232 /** 232 /**
233 * Reference to perf_ats' masters 233 * Reference to perf_ats' masters
@@ -236,7 +236,7 @@ struct LoggingHandle
236 int num_slaves; 236 int num_slaves;
237 int running; 237 int running;
238 int verbose; 238 int verbose;
239 char *name; 239 const char *name;
240 struct GNUNET_TIME_Relative frequency; 240 struct GNUNET_TIME_Relative frequency;
241 241
242 /** 242 /**
@@ -419,11 +419,12 @@ write_bw_gnuplot_script (char * fn, struct LoggingPeer *lp, char **fs, int slave
419 419
420void 420void
421GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, 421GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l,
422 char *experiment_name, int plots) 422 const char *experiment_name,
423 int plots)
423{ 424{
424 struct GNUNET_DISK_FileHandle *f[l->num_slaves]; 425 struct GNUNET_DISK_FileHandle *f[l->num_slaves];
425 struct GNUNET_DISK_FileHandle *f_m; 426 struct GNUNET_DISK_FileHandle *f_m;
426 char *tmp_exp_name; 427 const char *tmp_exp_name;
427 char *filename_master; 428 char *filename_master;
428 char *filename_slaves[l->num_slaves]; 429 char *filename_slaves[l->num_slaves];
429 char *data; 430 char *data;
@@ -878,11 +879,15 @@ GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l)
878 */ 879 */
879struct LoggingHandle * 880struct LoggingHandle *
880GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, 881GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency,
881 char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves, 882 const char *testname,
882 int verbose) 883 struct BenchmarkPeer *masters,
884 int num_masters,
885 int num_slaves,
886 int verbose)
883{ 887{
884 struct LoggingHandle *l; 888 struct LoggingHandle *l;
885 int c_m; 889 int c_m;
890
886 GNUNET_log(GNUNET_ERROR_TYPE_INFO, 891 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
887 _("Start logging `%s'\n"), testname); 892 _("Start logging `%s'\n"), testname);
888 893
diff --git a/src/ats-tests/ats-testing.c b/src/ats-tests/ats-testing.c
index 24d464424..c894f4445 100644
--- a/src/ats-tests/ats-testing.c
+++ b/src/ats-tests/ats-testing.c
@@ -66,7 +66,6 @@ do_shutdown (void *cls)
66 int c_op; 66 int c_op;
67 struct BenchmarkPeer *p; 67 struct BenchmarkPeer *p;
68 68
69 top->shutdown_task = NULL;
70 top->state.benchmarking = GNUNET_NO; 69 top->state.benchmarking = GNUNET_NO;
71 70
72 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n")); 71 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n"));
@@ -379,7 +378,8 @@ test_recv_cb (void *cls,
379 378
380 379
381static void * 380static void *
382transport_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) 381transport_connect_adapter (void *cls,
382 const struct GNUNET_CONFIGURATION_Handle *cfg)
383{ 383{
384 struct BenchmarkPeer *me = cls; 384 struct BenchmarkPeer *me = cls;
385 385
@@ -390,6 +390,7 @@ transport_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *
390 return me->th; 390 return me->th;
391} 391}
392 392
393
393static void 394static void
394transport_disconnect_adapter (void *cls, void *op_result) 395transport_disconnect_adapter (void *cls, void *op_result)
395{ 396{
@@ -401,8 +402,9 @@ transport_disconnect_adapter (void *cls, void *op_result)
401 402
402 403
403static void 404static void
404connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op, 405connect_completion_callback (void *cls,
405 const char *emsg) 406 struct GNUNET_TESTBED_Operation *op,
407 const char *emsg)
406{ 408{
407 struct TestbedConnectOperation *cop = cls; 409 struct TestbedConnectOperation *cop = cls;
408 static int ops = 0; 410 static int ops = 0;
@@ -410,8 +412,9 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op,
410 if (NULL == emsg) 412 if (NULL == emsg)
411 { 413 {
412 GNUNET_log(GNUNET_ERROR_TYPE_INFO, 414 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
413 _("Connected master [%u] with slave [%u]\n"), cop->master->no, 415 _("Connected master [%u] with slave [%u]\n"),
414 cop->slave->no); 416 cop->master->no,
417 cop->slave->no);
415 } 418 }
416 else 419 else
417 { 420 {
@@ -419,9 +422,7 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op,
419 _("Failed to connect master peer [%u] with slave [%u]\n"), 422 _("Failed to connect master peer [%u] with slave [%u]\n"),
420 cop->master->no, cop->slave->no); 423 cop->master->no, cop->slave->no);
421 GNUNET_break(0); 424 GNUNET_break(0);
422 if (NULL != top->shutdown_task) 425 GNUNET_SCHEDULER_shutdown ();
423 GNUNET_SCHEDULER_cancel (top->shutdown_task);
424 top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL );
425 } 426 }
426 GNUNET_TESTBED_operation_done (op); 427 GNUNET_TESTBED_operation_done (op);
427 ops++; 428 ops++;
@@ -436,6 +437,7 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op,
436 } 437 }
437} 438}
438 439
440
439static void 441static void
440do_connect_peers (void *cls) 442do_connect_peers (void *cls)
441{ 443{
@@ -470,9 +472,7 @@ do_connect_peers (void *cls)
470 _("Could not connect master [%u] and slave [%u]\n"), p->no, 472 _("Could not connect master [%u] and slave [%u]\n"), p->no,
471 top->sps[c_s].no); 473 top->sps[c_s].no);
472 GNUNET_break(0); 474 GNUNET_break(0);
473 if (NULL != top->shutdown_task) 475 GNUNET_SCHEDULER_shutdown ();
474 GNUNET_SCHEDULER_cancel (top->shutdown_task);
475 top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL );
476 return; 476 return;
477 } 477 }
478 } 478 }
@@ -481,17 +481,19 @@ do_connect_peers (void *cls)
481 481
482 482
483static void 483static void
484comm_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op, 484comm_connect_completion_cb (void *cls,
485 void *ca_result, const char *emsg) 485 struct GNUNET_TESTBED_Operation *op,
486 void *ca_result,
487 const char *emsg)
486{ 488{
487 static int comm_done = 0; 489 static int comm_done = 0;
490
488 if ((NULL != emsg) || (NULL == ca_result)) 491 if ((NULL != emsg) || (NULL == ca_result))
489 { 492 {
490 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initialization failed, shutdown\n")); 493 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
494 "Initialization failed, shutdown\n");
491 GNUNET_break(0); 495 GNUNET_break(0);
492 if (NULL != top->shutdown_task) 496 GNUNET_SCHEDULER_shutdown ();
493 GNUNET_SCHEDULER_cancel (top->shutdown_task);
494 top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL );
495 return; 497 return;
496 } 498 }
497 comm_done++; 499 comm_done++;
@@ -505,6 +507,7 @@ comm_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
505 } 507 }
506} 508}
507 509
510
508static void 511static void
509do_comm_connect (void *cls) 512do_comm_connect (void *cls)
510{ 513{
@@ -631,11 +634,10 @@ ats_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
631 634
632 if ((NULL != emsg) || (NULL == ca_result)) 635 if ((NULL != emsg) || (NULL == ca_result))
633 { 636 {
634 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initialization failed, shutdown\n")); 637 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
638 "Initialization failed, shutdown\n");
635 GNUNET_break(0); 639 GNUNET_break(0);
636 if (NULL != top->shutdown_task) 640 GNUNET_SCHEDULER_shutdown ();
637 GNUNET_SCHEDULER_cancel (top->shutdown_task);
638 top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL );
639 return; 641 return;
640 } 642 }
641 op_done++; 643 op_done++;
@@ -721,15 +723,18 @@ main_run (void *cls, struct GNUNET_TESTBED_RunHandle *h,
721{ 723{
722 int c_m; 724 int c_m;
723 int c_s; 725 int c_s;
726
724 GNUNET_assert(NULL == cls); 727 GNUNET_assert(NULL == cls);
725 GNUNET_assert(top->num_masters + top->num_slaves == num_peers); 728 GNUNET_assert(top->num_masters + top->num_slaves == num_peers);
726 GNUNET_assert(NULL != peers_); 729 GNUNET_assert(NULL != peers_);
727 730
728 top->shutdown_task = GNUNET_SCHEDULER_add_delayed ( 731 GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
729 GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown, top); 732 top);
730 733
731 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Setting up %u masters and %u slaves\n", 734 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
732 top->num_masters, top->num_slaves); 735 "Setting up %u masters and %u slaves\n",
736 top->num_masters,
737 top->num_slaves);
733 738
734 /* Setup master peers */ 739 /* Setup master peers */
735 for (c_m = 0; c_m < top->num_masters; c_m++) 740 for (c_m = 0; c_m < top->num_masters; c_m++)
@@ -791,9 +796,8 @@ main_run (void *cls, struct GNUNET_TESTBED_RunHandle *h,
791 */ 796 */
792static void 797static void
793controller_event_cb (void *cls, 798controller_event_cb (void *cls,
794 const struct GNUNET_TESTBED_EventInformation *event) 799 const struct GNUNET_TESTBED_EventInformation *event)
795{ 800{
796 struct GNUNET_ATS_TEST_Topology *top = cls;
797 switch (event->type) 801 switch (event->type)
798 { 802 {
799 case GNUNET_TESTBED_ET_CONNECT: 803 case GNUNET_TESTBED_ET_CONNECT:
@@ -802,11 +806,11 @@ controller_event_cb (void *cls,
802 break; 806 break;
803 default: 807 default:
804 GNUNET_break(0); 808 GNUNET_break(0);
805 GNUNET_SCHEDULER_cancel (top->shutdown_task); 809 GNUNET_SCHEDULER_shutdown ();
806 top->shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL );
807 } 810 }
808} 811}
809 812
813
810struct BenchmarkPeer * 814struct BenchmarkPeer *
811GNUNET_ATS_TEST_get_peer (int src) 815GNUNET_ATS_TEST_get_peer (int src)
812{ 816{
@@ -815,6 +819,7 @@ GNUNET_ATS_TEST_get_peer (int src)
815 return &top->mps[src]; 819 return &top->mps[src];
816} 820}
817 821
822
818struct BenchmarkPartner * 823struct BenchmarkPartner *
819GNUNET_ATS_TEST_get_partner (int src, int dest) 824GNUNET_ATS_TEST_get_partner (int src, int dest)
820{ 825{
diff --git a/src/ats-tests/ats-testing.h b/src/ats-tests/ats-testing.h
index 74da0f78c..b2a4d13e6 100644
--- a/src/ats-tests/ats-testing.h
+++ b/src/ats-tests/ats-testing.h
@@ -377,14 +377,9 @@ struct BenchmarkState
377struct GNUNET_ATS_TEST_Topology 377struct GNUNET_ATS_TEST_Topology
378{ 378{
379 /** 379 /**
380 * Shutdown task
381 */
382 struct GNUNET_SCHEDULER_Task * shutdown_task;
383
384 /**
385 * Progress task 380 * Progress task
386 */ 381 */
387 struct GNUNET_SCHEDULER_Task * progress_task; 382 struct GNUNET_SCHEDULER_Task *progress_task;
388 383
389 /** 384 /**
390 * Test result 385 * Test result
@@ -544,8 +539,9 @@ extern struct GNUNET_CONFIGURATION_Handle *cfg;
544 */ 539 */
545void 540void
546GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, 541GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
547 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb, 542 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb,
548 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb); 543 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb);
544
549 545
550/** 546/**
551 * Load an experiment from a file 547 * Load an experiment from a file
@@ -554,7 +550,7 @@ GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
554 * @return the Experiment or NULL on failure 550 * @return the Experiment or NULL on failure
555 */ 551 */
556struct Experiment * 552struct Experiment *
557GNUNET_ATS_TEST_experimentation_load (char *filename); 553GNUNET_ATS_TEST_experimentation_load (const char *filename);
558 554
559 555
560/** 556/**
@@ -606,7 +602,8 @@ GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg);
606 * Stop all traffic generators 602 * Stop all traffic generators
607 */ 603 */
608void 604void
609GNUNET_ATS_TEST_generate_traffic_stop_all (); 605GNUNET_ATS_TEST_generate_traffic_stop_all (void);
606
610 607
611/** 608/**
612 * Generate between the source master and the partner and set preferences with a 609 * Generate between the source master and the partner and set preferences with a
@@ -635,8 +632,9 @@ GNUNET_ATS_TEST_generate_preferences_start (struct BenchmarkPeer *src,
635void 632void
636GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg); 633GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg);
637 634
635
638void 636void
639GNUNET_ATS_TEST_generate_preferences_stop_all (); 637GNUNET_ATS_TEST_generate_preferences_stop_all (void);
640 638
641/* 639/*
642 * Logging related functions 640 * Logging related functions
@@ -655,8 +653,12 @@ GNUNET_ATS_TEST_generate_preferences_stop_all ();
655 */ 653 */
656struct LoggingHandle * 654struct LoggingHandle *
657GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, 655GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency,
658 char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves, 656 const char *testname,
659 int verbose); 657 struct BenchmarkPeer *masters,
658 int num_masters,
659 int num_slaves,
660 int verbose);
661
660 662
661/** 663/**
662 * Stop logging 664 * Stop logging
@@ -666,6 +668,7 @@ GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency,
666void 668void
667GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l); 669GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l);
668 670
671
669/** 672/**
670 * Stop logging 673 * Stop logging
671 * 674 *
@@ -674,6 +677,7 @@ GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l);
674void 677void
675GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l); 678GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l);
676 679
680
677/** 681/**
678 * Log all data now 682 * Log all data now
679 * 683 *
@@ -688,22 +692,25 @@ GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l);
688 * 692 *
689 * @param l logging handle to use 693 * @param l logging handle to use
690 * @param test_name name of the current test 694 * @param test_name name of the current test
691 * @param plots create gnuplots: GNUNET_YES or GNUNET_NO 695 * @param plots create gnuplots: #GNUNET_YES or #GNUNET_NO
692 */ 696 */
693void 697void
694GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, 698GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l,
695 char *test_name, int plots); 699 const char *test_name,
700 int plots);
696 701
697/* 702
703/**
698 * Topology related functions 704 * Topology related functions
699 */ 705 */
700
701struct BenchmarkPeer * 706struct BenchmarkPeer *
702GNUNET_ATS_TEST_get_peer (int src); 707GNUNET_ATS_TEST_get_peer (int src);
703 708
709
704struct BenchmarkPartner * 710struct BenchmarkPartner *
705GNUNET_ATS_TEST_get_partner (int src, int dest); 711GNUNET_ATS_TEST_get_partner (int src, int dest);
706 712
713
707/** 714/**
708 * Create a topology for ats testing 715 * Create a topology for ats testing
709 * 716 *
@@ -711,21 +718,23 @@ GNUNET_ATS_TEST_get_partner (int src, int dest);
711 * @param cfg_file configuration file to use for the peers 718 * @param cfg_file configuration file to use for the peers
712 * @param num_slaves number of slaves 719 * @param num_slaves number of slaves
713 * @param num_masters number of masters 720 * @param num_masters number of masters
714 * @param test_core connect to CORE service (GNUNET_YES) or transport (GNUNET_NO) 721 * @param test_core connect to CORE service (#GNUNET_YES) or transport (#GNUNET_NO)
715 * @param done_cb function to call when topology is setup 722 * @param done_cb function to call when topology is setup
716 * @param done_cb_cls cls for callback 723 * @param done_cb_cls cls for callback
717 * @param transport_recv_cb callback to call when data are received 724 * @param transport_recv_cb callback to call when data are received
718 * @param log_request_cb callback to call when logging is required 725 * @param log_request_cb callback to call when logging is required
719 */ 726 */
720void 727void
721GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file, 728GNUNET_ATS_TEST_create_topology (char *name,
722 unsigned int num_slaves, 729 char *cfg_file,
723 unsigned int num_masters, 730 unsigned int num_slaves,
724 int test_core, 731 unsigned int num_masters,
725 GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb, 732 int test_core,
726 void *done_cb_cls, 733 GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb,
727 GNUNET_TRANSPORT_ReceiveCallback recv_cb, 734 void *done_cb_cls,
728 GNUNET_ATS_TEST_LogRequest ats_perf_cb); 735 GNUNET_TRANSPORT_ReceiveCallback recv_cb,
736 GNUNET_ATS_TEST_LogRequest ats_perf_cb);
737
729 738
730/** 739/**
731 * Shutdown topology 740 * Shutdown topology
@@ -733,4 +742,5 @@ GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file,
733void 742void
734GNUNET_ATS_TEST_shutdown_topology (void); 743GNUNET_ATS_TEST_shutdown_topology (void);
735 744
745
736/* end of file ats-testing.h */ 746/* end of file ats-testing.h */
diff --git a/src/ats-tests/perf_ats.c b/src/ats-tests/perf_ats.c
index 4c22043e5..0e4056a6c 100644
--- a/src/ats-tests/perf_ats.c
+++ b/src/ats-tests/perf_ats.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V. 3 Copyright (C) 2010-2013, 2016 GNUnet e.V.
4 4
5 GNUnet is free software; you can redistribute it and/or modify 5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published 6 it under the terms of the GNU General Public License as published
@@ -43,15 +43,16 @@
43#define TESTNAME_PREFIX "perf_ats_" 43#define TESTNAME_PREFIX "perf_ats_"
44#define DEFAULT_SLAVES_NUM 2 44#define DEFAULT_SLAVES_NUM 2
45#define DEFAULT_MASTERS_NUM 1 45#define DEFAULT_MASTERS_NUM 1
46
46/** 47/**
47 * Shutdown task 48 * timeout task
48 */ 49 */
49static struct GNUNET_SCHEDULER_Task * shutdown_task; 50static struct GNUNET_SCHEDULER_Task *timeout_task;
50 51
51/** 52/**
52 * Progress task 53 * Progress task
53 */ 54 */
54static struct GNUNET_SCHEDULER_Task * progress_task; 55static struct GNUNET_SCHEDULER_Task *progress_task;
55 56
56/** 57/**
57 * Test result 58 * Test result
@@ -63,7 +64,8 @@ static int result;
63 */ 64 */
64static int logging; 65static int logging;
65 66
66/**Test core (GNUNET_YES) or transport (GNUNET_NO) 67/**
68 * Test core (#GNUNET_YES) or transport (#GNUNET_NO)
67 */ 69 */
68static int test_core; 70static int test_core;
69 71
@@ -119,6 +121,7 @@ static struct BenchmarkPeer *sps;
119 121
120static struct LoggingHandle *l; 122static struct LoggingHandle *l;
121 123
124
122static void 125static void
123evaluate () 126evaluate ()
124{ 127{
@@ -138,6 +141,8 @@ evaluate ()
138 for (c_m = 0; c_m < num_masters; c_m++) 141 for (c_m = 0; c_m < num_masters; c_m++)
139 { 142 {
140 mp = &mps[c_m]; 143 mp = &mps[c_m];
144 if (NULL == mp)
145 continue;
141 fprintf (stderr, 146 fprintf (stderr,
142 _("Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n"), 147 _("Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n"),
143 mp->no, mp->total_bytes_sent / 1024, duration, 148 mp->no, mp->total_bytes_sent / 1024, duration,
@@ -148,7 +153,8 @@ evaluate ()
148 for (c_s = 0; c_s < num_slaves; c_s++) 153 for (c_s = 0; c_s < num_slaves; c_s++)
149 { 154 {
150 p = &mp->partners[c_s]; 155 p = &mp->partners[c_s];
151 156 if (NULL == p)
157 continue;
152 kb_sent_sec = 0; 158 kb_sent_sec = 0;
153 kb_recv_sec = 0; 159 kb_recv_sec = 0;
154 kb_sent_percent = 0.0; 160 kb_sent_percent = 0.0;
@@ -168,19 +174,20 @@ evaluate ()
168 if (1000 * p->messages_sent > 0) 174 if (1000 * p->messages_sent > 0)
169 rtt = p->total_app_rtt / (1000 * p->messages_sent); 175 rtt = p->total_app_rtt / (1000 * p->messages_sent);
170 fprintf (stderr, 176 fprintf (stderr,
171 "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f %%), received %u KiB/s (%.2f %%)\n", 177 "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f %%), received %u KiB/s (%.2f %%)\n",
172 (mp->pref_partner == p->dest) ? '*' : ' ', 178 (mp->pref_partner == p->dest) ? '*' : ' ',
173 mp->no, p->dest->no, 179 mp->no, p->dest->no,
174 kb_sent_sec, kb_sent_percent, 180 kb_sent_sec, kb_sent_percent,
175 kb_recv_sec, kb_recv_percent); 181 kb_recv_sec, kb_recv_percent);
176 fprintf (stderr, 182 fprintf (stderr,
177 "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n", 183 "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n",
178 (mp->pref_partner == p->dest) ? '*' : ' ', 184 (mp->pref_partner == p->dest) ? '*' : ' ',
179 mp->no, p->dest->no, rtt); 185 mp->no, p->dest->no, rtt);
180 } 186 }
181 } 187 }
182} 188}
183 189
190
184/** 191/**
185 * Shutdown nicely 192 * Shutdown nicely
186 * 193 *
@@ -189,37 +196,55 @@ evaluate ()
189static void 196static void
190do_shutdown (void *cls) 197do_shutdown (void *cls)
191{ 198{
192
193 if (GNUNET_YES == logging) 199 if (GNUNET_YES == logging)
194 GNUNET_ATS_TEST_logging_clean_up(l); 200 GNUNET_ATS_TEST_logging_clean_up(l);
195 201 if (NULL != timeout_task)
196 shutdown_task = NULL; 202 {
203 GNUNET_SCHEDULER_cancel (timeout_task);
204 timeout_task = NULL;
205 }
197 if (NULL != progress_task) 206 if (NULL != progress_task)
198 { 207 {
199 fprintf (stderr, "0\n"); 208 fprintf (stderr, "0\n");
200 GNUNET_SCHEDULER_cancel (progress_task); 209 GNUNET_SCHEDULER_cancel (progress_task);
210 progress_task = NULL;
201 } 211 }
202 progress_task = NULL; 212 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
213 "Benchmarking done\n");
214 GNUNET_ATS_TEST_shutdown_topology ();
215}
203 216
204 evaluate ();
205 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n"));
206 217
207 GNUNET_ATS_TEST_shutdown_topology(); 218/**
219 * Shutdown nicely
220 *
221 * @param cls NULL
222 */
223static void
224do_timeout (void *cls)
225{
226 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
227 "Terminating with timeout\n");
228 timeout_task = NULL;
229 evaluate ();
230 GNUNET_SCHEDULER_shutdown ();
208} 231}
209 232
210 233
211static void 234static void
212print_progress () 235print_progress (void *cls)
213{ 236{
214 static int calls; 237 static int calls;
215 progress_task = NULL;
216 238
217 fprintf (stderr, "%llu..", 239 progress_task = NULL;
218 (long long unsigned) perf_duration.rel_value_us / (1000 * 1000) - calls); 240 fprintf (stderr,
241 "%llu..",
242 (long long unsigned) perf_duration.rel_value_us / (1000 * 1000) - calls);
219 calls++; 243 calls++;
220 244
221 progress_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 245 progress_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
222 &print_progress, NULL ); 246 &print_progress,
247 NULL);
223} 248}
224 249
225 250
@@ -240,56 +265,65 @@ ats_pref_task (void *cls)
240 &ats_pref_task, cls); 265 &ats_pref_task, cls);
241} 266}
242 267
268
243static void 269static void
244start_benchmark() 270start_benchmark (void *cls)
245{ 271{
246 int c_m; 272 int c_m;
247 int c_s; 273 int c_s;
248 274
249 GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking start\n")); 275 progress_task = GNUNET_SCHEDULER_add_now (&print_progress,
250 276 NULL);
251 if (NULL != shutdown_task)
252 GNUNET_SCHEDULER_cancel(shutdown_task);
253 shutdown_task = GNUNET_SCHEDULER_add_delayed(perf_duration, &do_shutdown,
254 NULL );
255
256 progress_task = GNUNET_SCHEDULER_add_now(&print_progress, NULL );
257 277
258 GNUNET_log(GNUNET_ERROR_TYPE_INFO, 278 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
259 "Topology connected, start benchmarking...\n"); 279 "Topology connected, start benchmarking...\n");
260 280
261 /* Start sending test messages */ 281 /* Start sending test messages */
262 for (c_m = 0; c_m < num_masters; c_m++) 282 for (c_m = 0; c_m < num_masters; c_m++)
283 {
284 for (c_s = 0; c_s < num_slaves; c_s++)
263 { 285 {
264 for (c_s = 0; c_s < num_slaves; c_s++) 286 GNUNET_ATS_TEST_generate_traffic_start (&mps[c_m],
265 { 287 &mps[c_m].partners[c_s],
266 GNUNET_ATS_TEST_generate_traffic_start (&mps[c_m], &mps[c_m].partners[c_s], 288 GNUNET_ATS_TEST_TG_LINEAR,
267 GNUNET_ATS_TEST_TG_LINEAR, UINT32_MAX, UINT32_MAX, 289 UINT32_MAX,
268 GNUNET_TIME_UNIT_MINUTES, GNUNET_TIME_UNIT_FOREVER_REL); 290 UINT32_MAX,
269 } 291 GNUNET_TIME_UNIT_MINUTES,
270 if (pref_val != GNUNET_ATS_PREFERENCE_END) 292 GNUNET_TIME_UNIT_FOREVER_REL);
271 mps[c_m].ats_task = GNUNET_SCHEDULER_add_now(&ats_pref_task, &mps[c_m]);
272 } 293 }
294 if (pref_val != GNUNET_ATS_PREFERENCE_END)
295 mps[c_m].ats_task = GNUNET_SCHEDULER_add_now (&ats_pref_task,
296 &mps[c_m]);
297 }
273 298
274 if (GNUNET_YES == logging) 299 if (GNUNET_YES == logging)
275 l = GNUNET_ATS_TEST_logging_start (log_frequency, testname, mps, 300 l = GNUNET_ATS_TEST_logging_start (log_frequency,
276 num_masters, num_slaves, GNUNET_NO); 301 testname, mps,
302 num_masters, num_slaves,
303 GNUNET_NO);
277} 304}
278 305
306
279static void 307static void
280do_benchmark (void *cls, struct BenchmarkPeer *masters, struct BenchmarkPeer *slaves) 308do_benchmark (void *cls,
309 struct BenchmarkPeer *masters,
310 struct BenchmarkPeer *slaves)
281{ 311{
282 mps = masters; 312 mps = masters;
283 sps = slaves; 313 sps = slaves;
284 314 GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
285 GNUNET_SCHEDULER_add_now(&start_benchmark, NULL); 315 NULL);
316 timeout_task = GNUNET_SCHEDULER_add_delayed (perf_duration,
317 &do_timeout,
318 NULL);
319 progress_task = GNUNET_SCHEDULER_add_now (&start_benchmark,
320 NULL);
286} 321}
287 322
288 323
289
290
291static struct BenchmarkPartner * 324static struct BenchmarkPartner *
292find_partner (struct BenchmarkPeer *me, const struct GNUNET_PeerIdentity * peer) 325find_partner (struct BenchmarkPeer *me,
326 const struct GNUNET_PeerIdentity *peer)
293{ 327{
294 int c_m; 328 int c_m;
295 GNUNET_assert (NULL != me); 329 GNUNET_assert (NULL != me);
@@ -307,20 +341,23 @@ find_partner (struct BenchmarkPeer *me, const struct GNUNET_PeerIdentity * peer)
307 return NULL; 341 return NULL;
308} 342}
309 343
344
310static void 345static void
311test_recv_cb (void *cls, 346test_recv_cb (void *cls,
312 const struct GNUNET_PeerIdentity * peer, 347 const struct GNUNET_PeerIdentity * peer,
313 const struct GNUNET_MessageHeader * message) 348 const struct GNUNET_MessageHeader * message)
314{ 349{
315 350
316} 351}
317 352
318 353
319static void 354static void
320log_request_cb (void *cls, const struct GNUNET_HELLO_Address *address, 355log_request_cb (void *cls,
321 int address_active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, 356 const struct GNUNET_HELLO_Address *address,
322 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, 357 int address_active,
323 const struct GNUNET_ATS_Properties *ats) 358 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
359 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
360 const struct GNUNET_ATS_Properties *ats)
324{ 361{
325 struct BenchmarkPeer *me = cls; 362 struct BenchmarkPeer *me = cls;
326 struct BenchmarkPartner *p; 363 struct BenchmarkPartner *p;
@@ -341,12 +378,13 @@ log_request_cb (void *cls, const struct GNUNET_HELLO_Address *address,
341 p->bandwidth_in = ntohl (bandwidth_in.value__); 378 p->bandwidth_in = ntohl (bandwidth_in.value__);
342 p->bandwidth_out = ntohl (bandwidth_out.value__); 379 p->bandwidth_out = ntohl (bandwidth_out.value__);
343 380
344 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%s [%u] received ATS information for peers `%s'\n", 381 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
345 (GNUNET_YES == p->me->master) ? "Master" : "Slave", 382 "%s [%u] received ATS information for peers `%s'\n",
346 p->me->no, 383 (GNUNET_YES == p->me->master) ? "Master" : "Slave",
347 GNUNET_i2s (&p->dest->id)); 384 p->me->no,
385 GNUNET_i2s (&p->dest->id));
348 386
349 GNUNET_free(peer_id); 387 GNUNET_free (peer_id);
350 if (NULL != l) 388 if (NULL != l)
351 GNUNET_ATS_TEST_logging_now (l); 389 GNUNET_ATS_TEST_logging_now (l);
352} 390}
@@ -534,7 +572,8 @@ main (int argc, char *argv[])
534 572
535 if (num_slaves < num_masters) 573 if (num_slaves < num_masters)
536 { 574 {
537 fprintf (stderr, "Number of master peers is lower than slaves! exit...\n"); 575 fprintf (stderr,
576 "Number of master peers is lower than slaves! exit...\n");
538 GNUNET_free(test_name); 577 GNUNET_free(test_name);
539 GNUNET_free(solver); 578 GNUNET_free(solver);
540 GNUNET_free(pref_str); 579 GNUNET_free(pref_str);
@@ -545,13 +584,14 @@ main (int argc, char *argv[])
545 /** 584 /**
546 * Setup the topology 585 * Setup the topology
547 */ 586 */
548 GNUNET_ATS_TEST_create_topology ("perf-ats", conf_name, 587 GNUNET_ATS_TEST_create_topology ("perf-ats",
549 num_slaves, num_masters, 588 conf_name,
550 test_core, 589 num_slaves, num_masters,
551 &do_benchmark, 590 test_core,
552 NULL, 591 &do_benchmark,
553 &test_recv_cb, 592 NULL,
554 &log_request_cb); 593 &test_recv_cb,
594 &log_request_cb);
555 595
556 return result; 596 return result;
557} 597}