aboutsummaryrefslogtreecommitdiff
path: root/src/cadet/test_cadet.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-01-02 01:22:04 +0100
committerChristian Grothoff <christian@grothoff.org>2018-01-02 01:22:04 +0100
commit18a677a335becdb59d22cc60a04253268ed2ecd6 (patch)
tree4e474339f8479c389b66a72407bafb76093fa7f8 /src/cadet/test_cadet.c
parent04ff2b8f3b3b499e56a878b2d9166f03f7610784 (diff)
downloadgnunet-18a677a335becdb59d22cc60a04253268ed2ecd6.tar.gz
gnunet-18a677a335becdb59d22cc60a04253268ed2ecd6.zip
fix issue with sending BROKEN timeouts early due to wrong timeout calculation
Diffstat (limited to 'src/cadet/test_cadet.c')
-rw-r--r--src/cadet/test_cadet.c100
1 files changed, 65 insertions, 35 deletions
diff --git a/src/cadet/test_cadet.c b/src/cadet/test_cadet.c
index bc4414054..5cc9706d7 100644
--- a/src/cadet/test_cadet.c
+++ b/src/cadet/test_cadet.c
@@ -274,12 +274,20 @@ show_end_data (void)
274 274
275 end_time = GNUNET_TIME_absolute_get (); 275 end_time = GNUNET_TIME_absolute_get ();
276 total_time = GNUNET_TIME_absolute_get_difference (start_time, end_time); 276 total_time = GNUNET_TIME_absolute_get_difference (start_time, end_time);
277 FPRINTF (stderr, "\nResults of test \"%s\"\n", test_name); 277 FPRINTF (stderr,
278 FPRINTF (stderr, "Test time %s\n", 278 "\nResults of test \"%s\"\n",
279 test_name);
280 FPRINTF (stderr,
281 "Test time %s\n",
279 GNUNET_STRINGS_relative_time_to_string (total_time, GNUNET_YES)); 282 GNUNET_STRINGS_relative_time_to_string (total_time, GNUNET_YES));
280 FPRINTF (stderr, "Test bandwidth: %f kb/s\n", 4 * total_packets * 1.0 / (total_time.rel_value_us / 1000)); // 4bytes * ms 283 FPRINTF (stderr,
281 FPRINTF (stderr, "Test throughput: %f packets/s\n\n", total_packets * 1000.0 / (total_time.rel_value_us / 1000)); // packets * ms 284 "Test bandwidth: %f kb/s\n",
282 GAUGER ("CADET", test_name, 285 4 * total_packets * 1.0 / (total_time.rel_value_us / 1000)); // 4bytes * ms
286 FPRINTF (stderr,
287 "Test throughput: %f packets/s\n\n",
288 total_packets * 1000.0 / (total_time.rel_value_us / 1000)); // packets * ms
289 GAUGER ("CADET",
290 test_name,
283 total_packets * 1000.0 / (total_time.rel_value_us / 1000), 291 total_packets * 1000.0 / (total_time.rel_value_us / 1000),
284 "packets/s"); 292 "packets/s");
285} 293}
@@ -295,13 +303,12 @@ static void
295disconnect_cadet_peers (void *cls) 303disconnect_cadet_peers (void *cls)
296{ 304{
297 long line = (long) cls; 305 long line = (long) cls;
298 unsigned int i;
299 306
300 disconnect_task = NULL; 307 disconnect_task = NULL;
301 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 308 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
302 "disconnecting cadet service of peers, called from line %ld\n", 309 "disconnecting cadet service of peers, called from line %ld\n",
303 line); 310 line);
304 for (i = 0; i < 2; i++) 311 for (unsigned int i = 0; i < 2; i++)
305 { 312 {
306 GNUNET_TESTBED_operation_done (t_op[i]); 313 GNUNET_TESTBED_operation_done (t_op[i]);
307 } 314 }
@@ -329,7 +336,8 @@ disconnect_cadet_peers (void *cls)
329static void 336static void
330shutdown_task (void *cls) 337shutdown_task (void *cls)
331{ 338{
332 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n"); 339 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
340 "Ending test.\n");
333 if (NULL != send_next_msg_task) 341 if (NULL != send_next_msg_task)
334 { 342 {
335 GNUNET_SCHEDULER_cancel (send_next_msg_task); 343 GNUNET_SCHEDULER_cancel (send_next_msg_task);
@@ -344,7 +352,8 @@ shutdown_task (void *cls)
344 { 352 {
345 GNUNET_SCHEDULER_cancel (disconnect_task); 353 GNUNET_SCHEDULER_cancel (disconnect_task);
346 disconnect_task = 354 disconnect_task =
347 GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, (void *) __LINE__); 355 GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
356 (void *) __LINE__);
348 } 357 }
349} 358}
350 359
@@ -359,10 +368,14 @@ shutdown_task (void *cls)
359 * operation has executed successfully. 368 * operation has executed successfully.
360 */ 369 */
361static void 370static void
362stats_cont (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg) 371stats_cont (void *cls,
372 struct GNUNET_TESTBED_Operation *op,
373 const char *emsg)
363{ 374{
364 GNUNET_log (GNUNET_ERROR_TYPE_INFO, " KA sent: %u, KA received: %u\n", 375 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
365 ka_sent, ka_received); 376 "KA sent: %u, KA received: %u\n",
377 ka_sent,
378 ka_received);
366 if ((KEEPALIVE == test) && ((ka_sent < 2) || (ka_sent > ka_received + 1))) 379 if ((KEEPALIVE == test) && ((ka_sent < 2) || (ka_sent > ka_received + 1)))
367 { 380 {
368 GNUNET_break (0); 381 GNUNET_break (0);
@@ -372,7 +385,8 @@ stats_cont (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg)
372 385
373 if (NULL != disconnect_task) 386 if (NULL != disconnect_task)
374 GNUNET_SCHEDULER_cancel (disconnect_task); 387 GNUNET_SCHEDULER_cancel (disconnect_task);
375 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, cls); 388 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
389 cls);
376} 390}
377 391
378 392
@@ -443,7 +457,6 @@ gather_stats_and_exit (void *cls)
443} 457}
444 458
445 459
446
447/** 460/**
448 * Abort test: schedule disconnect and shutdown immediately 461 * Abort test: schedule disconnect and shutdown immediately
449 * 462 *
@@ -455,9 +468,12 @@ abort_test (long line)
455 if (NULL != disconnect_task) 468 if (NULL != disconnect_task)
456 { 469 {
457 GNUNET_SCHEDULER_cancel (disconnect_task); 470 GNUNET_SCHEDULER_cancel (disconnect_task);
458 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Aborting test from %ld\n", line); 471 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
472 "Aborting test from %ld\n",
473 line);
459 disconnect_task = 474 disconnect_task =
460 GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, (void *) line); 475 GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
476 (void *) line);
461 } 477 }
462} 478}
463 479
@@ -579,7 +595,7 @@ reschedule_timeout_task (long line)
579 if (NULL != disconnect_task) 595 if (NULL != disconnect_task)
580 { 596 {
581 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 597 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
582 " reschedule timeout every 10 messages\n"); 598 "reschedule timeout every 10 messages\n");
583 GNUNET_SCHEDULER_cancel (disconnect_task); 599 GNUNET_SCHEDULER_cancel (disconnect_task);
584 disconnect_task = GNUNET_SCHEDULER_add_delayed (short_time, 600 disconnect_task = GNUNET_SCHEDULER_add_delayed (short_time,
585 &gather_stats_and_exit, 601 &gather_stats_and_exit,
@@ -613,7 +629,8 @@ check_data (void *cls, const struct GNUNET_MessageHeader *message)
613 * @param message the actual message 629 * @param message the actual message
614 */ 630 */
615static void 631static void
616handle_data (void *cls, const struct GNUNET_MessageHeader *message) 632handle_data (void *cls,
633 const struct GNUNET_MessageHeader *message)
617{ 634{
618 struct CadetTestChannelWrapper *ch = cls; 635 struct CadetTestChannelWrapper *ch = cls;
619 struct GNUNET_CADET_Channel *channel = ch->ch; 636 struct GNUNET_CADET_Channel *channel = ch->ch;
@@ -778,19 +795,21 @@ connect_handler (void *cls, struct GNUNET_CADET_Channel *channel,
778 * @param channel Connection to the other end (henceforth invalid). 795 * @param channel Connection to the other end (henceforth invalid).
779 */ 796 */
780static void 797static void
781disconnect_handler (void *cls, const struct GNUNET_CADET_Channel *channel) 798disconnect_handler (void *cls,
799 const struct GNUNET_CADET_Channel *channel)
782{ 800{
783 struct CadetTestChannelWrapper *ch_w = cls; 801 struct CadetTestChannelWrapper *ch_w = cls;
784 802
785 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Channel disconnected\n"); 803 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
804 "Channel disconnected at %d\n",
805 ok);
786 GNUNET_assert (ch_w->ch == channel); 806 GNUNET_assert (ch_w->ch == channel);
787 if (channel == incoming_ch) 807 if (channel == incoming_ch)
788 { 808 {
789 ok++; 809 ok++;
790 incoming_ch = NULL; 810 incoming_ch = NULL;
791 } 811 }
792 else if (outgoing_ch == channel 812 else if (outgoing_ch == channel)
793 )
794 { 813 {
795 if (P2P_SIGNAL == test) 814 if (P2P_SIGNAL == test)
796 { 815 {
@@ -799,14 +818,15 @@ disconnect_handler (void *cls, const struct GNUNET_CADET_Channel *channel)
799 outgoing_ch = NULL; 818 outgoing_ch = NULL;
800 } 819 }
801 else 820 else
802 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Unknown channel! %p\n", channel); 821 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
803 GNUNET_log (GNUNET_ERROR_TYPE_INFO, " ok: %d\n", ok); 822 "Unknown channel! %p\n",
804 823 channel);
805 if (NULL != disconnect_task) 824 if (NULL != disconnect_task)
806 { 825 {
807 GNUNET_SCHEDULER_cancel (disconnect_task); 826 GNUNET_SCHEDULER_cancel (disconnect_task);
808 disconnect_task = 827 disconnect_task =
809 GNUNET_SCHEDULER_add_now (&gather_stats_and_exit, (void *) __LINE__); 828 GNUNET_SCHEDULER_add_now (&gather_stats_and_exit,
829 (void *) __LINE__);
810 } 830 }
811} 831}
812 832
@@ -887,25 +907,34 @@ start_test (void *cls)
887 * NULL if the operation is successfull 907 * NULL if the operation is successfull
888 */ 908 */
889static void 909static void
890pi_cb (void *cls, struct GNUNET_TESTBED_Operation *op, 910pi_cb (void *cls,
891 const struct GNUNET_TESTBED_PeerInformation *pinfo, const char *emsg) 911 struct GNUNET_TESTBED_Operation *op,
912 const struct GNUNET_TESTBED_PeerInformation *pinfo,
913 const char *emsg)
892{ 914{
893 long i = (long) cls; 915 long i = (long) cls;
894 916
895 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ID callback for %ld\n", i); 917 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
896 918 "ID callback for %ld\n",
897 if ((NULL == pinfo) || (NULL != emsg)) 919 i);
920 if ( (NULL == pinfo) ||
921 (NULL != emsg) )
898 { 922 {
899 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "pi_cb: %s\n", emsg); 923 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
924 "pi_cb: %s\n",
925 emsg);
900 abort_test (__LINE__); 926 abort_test (__LINE__);
901 return; 927 return;
902 } 928 }
903 p_id[i] = pinfo->result.id; 929 p_id[i] = pinfo->result.id;
904 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " id: %s\n", GNUNET_i2s (p_id[i])); 930 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
931 "id: %s\n",
932 GNUNET_i2s (p_id[i]));
905 p_ids++; 933 p_ids++;
906 if (p_ids < 2) 934 if (p_ids < 2)
907 return; 935 return;
908 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got all IDs, starting test\n"); 936 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
937 "Got all IDs, starting test\n");
909 test_task = GNUNET_SCHEDULER_add_now (&start_test, NULL); 938 test_task = GNUNET_SCHEDULER_add_now (&start_test, NULL);
910} 939}
911 940
@@ -937,7 +966,8 @@ tmain (void *cls,
937 disconnect_task = GNUNET_SCHEDULER_add_delayed (short_time, 966 disconnect_task = GNUNET_SCHEDULER_add_delayed (short_time,
938 &disconnect_cadet_peers, 967 &disconnect_cadet_peers,
939 (void *) __LINE__); 968 (void *) __LINE__);
940 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); 969 GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
970 NULL);
941 t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0], 971 t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0],
942 GNUNET_TESTBED_PIT_IDENTITY, 972 GNUNET_TESTBED_PIT_IDENTITY,
943 &pi_cb, 973 &pi_cb,