aboutsummaryrefslogtreecommitdiff
path: root/src/cadet/test_cadet.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-04-30 08:17:37 +0000
committerChristian Grothoff <christian@grothoff.org>2016-04-30 08:17:37 +0000
commit95f9076a2139f5fb042b944a0658b6cda2fa35db (patch)
treeb0826a2a1dcf812e6b4450fe6b05d47cd53ae49d /src/cadet/test_cadet.c
parent7746f68db77b9ca3c4aaca24ab2ce5253461240b (diff)
downloadgnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.tar.gz
gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.zip
implementing new scheduler shutdown semantics
Diffstat (limited to 'src/cadet/test_cadet.c')
-rw-r--r--src/cadet/test_cadet.c118
1 files changed, 53 insertions, 65 deletions
diff --git a/src/cadet/test_cadet.c b/src/cadet/test_cadet.c
index 39bfc5fed..b3ded1bdf 100644
--- a/src/cadet/test_cadet.c
+++ b/src/cadet/test_cadet.c
@@ -144,17 +144,17 @@ struct GNUNET_CADET_TEST_Context *test_ctx;
144/** 144/**
145 * Task called to disconnect peers. 145 * Task called to disconnect peers.
146 */ 146 */
147static struct GNUNET_SCHEDULER_Task * disconnect_task; 147static struct GNUNET_SCHEDULER_Task *disconnect_task;
148 148
149/** 149/**
150 * Task To perform tests 150 * Task To perform tests
151 */ 151 */
152static struct GNUNET_SCHEDULER_Task * test_task; 152static struct GNUNET_SCHEDULER_Task *test_task;
153 153
154/** 154/**
155 * Task called to shutdown test. 155 * Task runnining #data_task().
156 */ 156 */
157static struct GNUNET_SCHEDULER_Task * shutdown_handle; 157static struct GNUNET_SCHEDULER_Task *data_job;
158 158
159/** 159/**
160 * Cadet handle for the root peer 160 * Cadet handle for the root peer
@@ -230,6 +230,7 @@ get_expected_target ()
230 return peers_requested - 1; 230 return peers_requested - 1;
231} 231}
232 232
233
233/** 234/**
234 * Show the results of the test (banwidth acheived) and log them to GAUGER 235 * Show the results of the test (banwidth acheived) and log them to GAUGER
235 */ 236 */
@@ -256,20 +257,6 @@ show_end_data (void)
256 257
257 258
258/** 259/**
259 * Shut down peergroup, clean up.
260 *
261 * @param cls Closure (unused).
262 * @param tc Task Context.
263 */
264static void
265shutdown_task (void *cls)
266{
267 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n");
268 shutdown_handle = NULL;
269}
270
271
272/**
273 * Disconnect from cadet services af all peers, call shutdown. 260 * Disconnect from cadet services af all peers, call shutdown.
274 * 261 *
275 * @param cls Closure (line number from which termination was requested). 262 * @param cls Closure (line number from which termination was requested).
@@ -280,18 +267,11 @@ disconnect_cadet_peers (void *cls)
280{ 267{
281 long line = (long) cls; 268 long line = (long) cls;
282 unsigned int i; 269 unsigned int i;
283 const struct GNUNET_SCHEDULER_TaskContext *tc;
284 270
285 tc = GNUNET_SCHEDULER_get_task_context ();
286 if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
287 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
288 "disconnecting cadet peers due to SHUTDOWN! called from %ld\n",
289 line);
290 else
291 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
292 "disconnecting cadet service of peers, called from line %ld\n",
293 line);
294 disconnect_task = NULL; 271 disconnect_task = NULL;
272 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
273 "disconnecting cadet service of peers, called from line %ld\n",
274 line);
295 for (i = 0; i < 2; i++) 275 for (i = 0; i < 2; i++)
296 { 276 {
297 GNUNET_TESTBED_operation_done (t_op[i]); 277 GNUNET_TESTBED_operation_done (t_op[i]);
@@ -317,15 +297,39 @@ disconnect_cadet_peers (void *cls)
317 incoming_ch = NULL; 297 incoming_ch = NULL;
318 } 298 }
319 GNUNET_CADET_TEST_cleanup (test_ctx); 299 GNUNET_CADET_TEST_cleanup (test_ctx);
320 if (NULL != shutdown_handle) 300 GNUNET_SCHEDULER_shutdown ();
301}
302
303
304/**
305 * Shut down peergroup, clean up.
306 *
307 * @param cls Closure (unused).
308 * @param tc Task Context.
309 */
310static void
311shutdown_task (void *cls)
312{
313 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n");
314 if (NULL != data_job)
321 { 315 {
322 GNUNET_SCHEDULER_cancel (shutdown_handle); 316 GNUNET_SCHEDULER_cancel (data_job);
317 data_job = NULL;
318 }
319 if (NULL != test_task)
320 {
321 GNUNET_SCHEDULER_cancel (test_task);
322 test_task = NULL;
323 }
324 if (NULL != disconnect_task)
325 {
326 GNUNET_SCHEDULER_cancel (disconnect_task);
327 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
328 (void *) __LINE__);
323 } 329 }
324 shutdown_handle = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
325} 330}
326 331
327 332
328
329/** 333/**
330 * Stats callback. Finish the stats testbed operation and when all stats have 334 * Stats callback. Finish the stats testbed operation and when all stats have
331 * been iterated, shutdown the test. 335 * been iterated, shutdown the test.
@@ -346,8 +350,8 @@ stats_cont (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg)
346 350
347 if (NULL != disconnect_task) 351 if (NULL != disconnect_task)
348 GNUNET_SCHEDULER_cancel (disconnect_task); 352 GNUNET_SCHEDULER_cancel (disconnect_task);
349 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, cls); 353 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
350 354 cls);
351} 355}
352 356
353 357
@@ -393,19 +397,11 @@ static void
393gather_stats_and_exit (void *cls) 397gather_stats_and_exit (void *cls)
394{ 398{
395 long l = (long) cls; 399 long l = (long) cls;
396 const struct GNUNET_SCHEDULER_TaskContext *tc;
397 400
398 disconnect_task = NULL; 401 disconnect_task = NULL;
399 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "gathering statistics from line %d\n", l); 402 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
400 tc = GNUNET_SCHEDULER_get_task_context (); 403 "gathering statistics from line %d\n",
401 if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0) 404 l);
402 {
403 disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers,
404 (void *) __LINE__);
405 return;
406 }
407
408
409 if (NULL != ch) 405 if (NULL != ch)
410 { 406 {
411 if (NULL != th) 407 if (NULL != th)
@@ -463,14 +459,10 @@ data_task (void *cls)
463{ 459{
464 struct GNUNET_CADET_Channel *channel; 460 struct GNUNET_CADET_Channel *channel;
465 static struct GNUNET_CADET_TransmitHandle **pth; 461 static struct GNUNET_CADET_TransmitHandle **pth;
466 const struct GNUNET_SCHEDULER_TaskContext *tc;
467 long src; 462 long src;
468 463
464 data_job = NULL;
469 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n"); 465 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n");
470 tc = GNUNET_SCHEDULER_get_task_context ();
471 if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
472 return;
473
474 if (GNUNET_YES == test_backwards) 466 if (GNUNET_YES == test_backwards)
475 { 467 {
476 channel = incoming_ch; 468 channel = incoming_ch;
@@ -499,17 +491,16 @@ data_task (void *cls)
499 if (0 == i) 491 if (0 == i)
500 { 492 {
501 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, " in 1 ms\n"); 493 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, " in 1 ms\n");
502 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, 494 data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
503 &data_task, (void *) 1L); 495 &data_task, (void *) 1L);
504 } 496 }
505 else 497 else
506 { 498 {
507 i++; 499 i++;
508 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "in %u ms\n", i); 500 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "in %u ms\n", i);
509 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply ( 501 data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS,
510 GNUNET_TIME_UNIT_MILLISECONDS, 502 i),
511 i), 503 &data_task, (void *) i);
512 &data_task, (void *) i);
513 } 504 }
514 } 505 }
515} 506}
@@ -574,7 +565,7 @@ tmt_rdy (void *cls, size_t size, void *buf)
574 { 565 {
575 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " Scheduling message %d\n", 566 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " Scheduling message %d\n",
576 counter + 1); 567 counter + 1);
577 GNUNET_SCHEDULER_add_now (&data_task, NULL); 568 data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL);
578 } 569 }
579 } 570 }
580 571
@@ -661,7 +652,7 @@ data_callback (void *cls, struct GNUNET_CADET_Channel *channel,
661 if (SPEED == test) 652 if (SPEED == test)
662 { 653 {
663 GNUNET_assert (peers_requested - 1 == client); 654 GNUNET_assert (peers_requested - 1 == client);
664 GNUNET_SCHEDULER_add_now (&data_task, NULL); 655 data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL);
665 return GNUNET_OK; 656 return GNUNET_OK;
666 } 657 }
667 } 658 }
@@ -842,17 +833,14 @@ static void
842do_test (void *cls) 833do_test (void *cls)
843{ 834{
844 enum GNUNET_CADET_ChannelOption flags; 835 enum GNUNET_CADET_ChannelOption flags;
845 const struct GNUNET_SCHEDULER_TaskContext *tc;
846
847 tc = GNUNET_SCHEDULER_get_task_context ();
848 if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
849 return;
850 836
837 test_task = NULL;
851 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "do_test\n"); 838 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "do_test\n");
852 839
853 if (NULL != disconnect_task) 840 if (NULL != disconnect_task)
854 { 841 {
855 GNUNET_SCHEDULER_cancel (disconnect_task); 842 GNUNET_SCHEDULER_cancel (disconnect_task);
843 disconnect_task = NULL;
856 } 844 }
857 845
858 flags = GNUNET_CADET_OPTION_DEFAULT; 846 flags = GNUNET_CADET_OPTION_DEFAULT;
@@ -880,6 +868,7 @@ do_test (void *cls)
880 &tmt_rdy, (void *) 0L); 868 &tmt_rdy, (void *) 0L);
881} 869}
882 870
871
883/** 872/**
884 * Callback to be called when the requested peer information is available 873 * Callback to be called when the requested peer information is available
885 * 874 *
@@ -942,8 +931,7 @@ tmain (void *cls,
942 disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME, 931 disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
943 &disconnect_cadet_peers, 932 &disconnect_cadet_peers,
944 (void *) __LINE__); 933 (void *) __LINE__);
945 shutdown_handle = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 934 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
946 &shutdown_task, NULL);
947 t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0], 935 t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0],
948 GNUNET_TESTBED_PIT_IDENTITY, 936 GNUNET_TESTBED_PIT_IDENTITY,
949 &pi_cb, (void *) 0L); 937 &pi_cb, (void *) 0L);