diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-12-25 14:07:10 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-12-25 14:07:10 +0100 |
commit | 92d278e49fff3d202e827a78b2e58f3ca9e2b6ec (patch) | |
tree | f38aeddeb3a235d73c9ddff4bb368498e27311a5 /src/transport/test_communicator_basic.c | |
parent | 6e489113f724f19d683963be0382d61291a5bef9 (diff) | |
download | gnunet-92d278e49fff3d202e827a78b2e58f3ca9e2b6ec.tar.gz gnunet-92d278e49fff3d202e827a78b2e58f3ca9e2b6ec.zip |
allow multiple iterations, more code cleanup
Diffstat (limited to 'src/transport/test_communicator_basic.c')
-rw-r--r-- | src/transport/test_communicator_basic.c | 193 |
1 files changed, 117 insertions, 76 deletions
diff --git a/src/transport/test_communicator_basic.c b/src/transport/test_communicator_basic.c index 0bca5f695..5d69b21b3 100644 --- a/src/transport/test_communicator_basic.c +++ b/src/transport/test_communicator_basic.c | |||
@@ -43,6 +43,8 @@ | |||
43 | 43 | ||
44 | static struct GNUNET_SCHEDULER_Task *to_task; | 44 | static struct GNUNET_SCHEDULER_Task *to_task; |
45 | 45 | ||
46 | static struct GNUNET_SCHEDULER_Task *active_task; | ||
47 | |||
46 | static int queue_est = GNUNET_NO; | 48 | static int queue_est = GNUNET_NO; |
47 | 49 | ||
48 | static struct GNUNET_PeerIdentity peer_id[NUM_PEERS]; | 50 | static struct GNUNET_PeerIdentity peer_id[NUM_PEERS]; |
@@ -70,7 +72,11 @@ static struct GNUNET_TRANSPORT_TESTING_TransportCommunicatorQueue *my_tc; | |||
70 | 72 | ||
71 | #define BURST_PACKETS 5000 | 73 | #define BURST_PACKETS 5000 |
72 | 74 | ||
73 | #define BURST_RUNS 1 | 75 | #define FIXME_DEAD_BURST_RUNS 1 |
76 | |||
77 | #define TOTAL_ITERATIONS 10 | ||
78 | |||
79 | static unsigned int iterations_left = TOTAL_ITERATIONS; | ||
74 | 80 | ||
75 | #define SHORT_BURST_WINDOW \ | 81 | #define SHORT_BURST_WINDOW \ |
76 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,2) | 82 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,2) |
@@ -98,6 +104,7 @@ static uint64_t avg_latency = 0; | |||
98 | 104 | ||
99 | static struct GNUNET_TIME_Relative duration; | 105 | static struct GNUNET_TIME_Relative duration; |
100 | 106 | ||
107 | |||
101 | static void | 108 | static void |
102 | communicator_available_cb (void *cls, | 109 | communicator_available_cb (void *cls, |
103 | struct | 110 | struct |
@@ -172,9 +179,10 @@ queue_create_reply_cb (void *cls, | |||
172 | static char* | 179 | static char* |
173 | make_payload (size_t payload_size) | 180 | make_payload (size_t payload_size) |
174 | { | 181 | { |
175 | char *payload = GNUNET_malloc (payload_size); | ||
176 | struct GNUNET_TIME_Absolute ts; | 182 | struct GNUNET_TIME_Absolute ts; |
177 | struct GNUNET_TIME_AbsoluteNBO ts_n; | 183 | struct GNUNET_TIME_AbsoluteNBO ts_n; |
184 | char *payload = GNUNET_malloc (payload_size); | ||
185 | |||
178 | GNUNET_assert (payload_size >= 8); // So that out timestamp fits | 186 | GNUNET_assert (payload_size >= 8); // So that out timestamp fits |
179 | ts = GNUNET_TIME_absolute_get (); | 187 | ts = GNUNET_TIME_absolute_get (); |
180 | ts_n = GNUNET_TIME_absolute_hton (ts); | 188 | ts_n = GNUNET_TIME_absolute_hton (ts); |
@@ -187,11 +195,11 @@ make_payload (size_t payload_size) | |||
187 | static void | 195 | static void |
188 | latency_timeout (void *cls) | 196 | latency_timeout (void *cls) |
189 | { | 197 | { |
198 | to_task = NULL; | ||
190 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 199 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
191 | "Latency too high. Test failed. (Phase: %d. Received: %lu\n", | 200 | "Latency too high. Test failed. (Phase: %d. Received: %lu\n", |
192 | phase, num_received); | 201 | phase, num_received); |
193 | ret = 2; | 202 | ret = 2; |
194 | to_task = NULL; | ||
195 | GNUNET_SCHEDULER_shutdown (); | 203 | GNUNET_SCHEDULER_shutdown (); |
196 | } | 204 | } |
197 | 205 | ||
@@ -201,23 +209,24 @@ size_test (void *cls) | |||
201 | { | 209 | { |
202 | char *payload; | 210 | char *payload; |
203 | 211 | ||
204 | phase = TP_SIZE_CHECK; | 212 | active_task = NULL; |
205 | if (ack < 64000) // Leave some room for our protocol. | 213 | GNUNET_assert (TP_SIZE_CHECK == phase); |
206 | { | 214 | if (ack >= 64000) |
207 | payload = make_payload (ack); | 215 | return; /* Leave some room for our protocol, so not 2^16 exactly */ |
208 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, | 216 | payload = make_payload (ack); |
209 | payload, | 217 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, |
210 | ack); | 218 | payload, |
211 | GNUNET_free (payload); | 219 | ack); |
212 | ack += 5; | 220 | GNUNET_free (payload); |
213 | num_sent++; | 221 | ack += 5; |
214 | if (NULL == to_task) | 222 | num_sent++; |
215 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 223 | if (NULL == to_task) |
216 | &latency_timeout, | 224 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
217 | NULL); | 225 | &latency_timeout, |
218 | if (ack < 64000) | 226 | NULL); |
219 | GNUNET_SCHEDULER_add_now (&size_test, NULL); | 227 | if (ack < 64000) |
220 | } | 228 | active_task = GNUNET_SCHEDULER_add_now (&size_test, |
229 | NULL); | ||
221 | } | 230 | } |
222 | 231 | ||
223 | 232 | ||
@@ -226,25 +235,21 @@ long_test (void *cls) | |||
226 | { | 235 | { |
227 | char *payload; | 236 | char *payload; |
228 | 237 | ||
229 | if (num_sent < BURST_PACKETS) | 238 | active_task = NULL; |
230 | { | 239 | payload = make_payload (LONG_MESSAGE_SIZE); |
231 | payload = make_payload (LONG_MESSAGE_SIZE); | 240 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, |
232 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, | 241 | payload, |
233 | payload, | 242 | LONG_MESSAGE_SIZE); |
234 | LONG_MESSAGE_SIZE); | 243 | num_sent++; |
235 | num_sent++; | 244 | GNUNET_free (payload); |
236 | GNUNET_free (payload); | 245 | if (NULL == to_task) |
237 | if (NULL == to_task) | 246 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
238 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 247 | &latency_timeout, |
239 | &latency_timeout, | 248 | NULL); |
240 | NULL); | 249 | if (num_sent == BURST_PACKETS) |
241 | |||
242 | GNUNET_SCHEDULER_add_now (&long_test, NULL); | ||
243 | // if (num_sent == BURST_PACKETS) | ||
244 | // GNUNET_SCHEDULER_add_delayed (LONG_BURST_WINDOW, | ||
245 | // &long_test, NULL); | ||
246 | return; | 250 | return; |
247 | } | 251 | active_task = GNUNET_SCHEDULER_add_now (&long_test, |
252 | NULL); | ||
248 | } | 253 | } |
249 | 254 | ||
250 | 255 | ||
@@ -252,26 +257,22 @@ static void | |||
252 | short_test (void *cls) | 257 | short_test (void *cls) |
253 | { | 258 | { |
254 | char *payload; | 259 | char *payload; |
255 | if (num_sent < BURST_PACKETS) | 260 | |
256 | { | 261 | active_task = NULL; |
257 | payload = make_payload (SHORT_MESSAGE_SIZE); | 262 | payload = make_payload (SHORT_MESSAGE_SIZE); |
258 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, | 263 | GNUNET_TRANSPORT_TESTING_transport_communicator_send (my_tc, |
259 | payload, | 264 | payload, |
260 | SHORT_MESSAGE_SIZE); | 265 | SHORT_MESSAGE_SIZE); |
261 | num_sent++; | 266 | num_sent++; |
262 | GNUNET_free (payload); | 267 | GNUNET_free (payload); |
263 | if (NULL == to_task) | 268 | if (NULL == to_task) |
264 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 269 | to_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
265 | &latency_timeout, | 270 | &latency_timeout, |
266 | NULL); | 271 | NULL); |
267 | 272 | if (num_sent >= BURST_PACKETS) | |
268 | GNUNET_SCHEDULER_add_now (&short_test, NULL); | 273 | return; |
269 | /*if (num_sent == BURST_PACKETS) | 274 | active_task = GNUNET_SCHEDULER_add_now (&short_test, |
270 | { | 275 | NULL); |
271 | GNUNET_SCHEDULER_add_delayed (SHORT_BURST_WINDOW, | ||
272 | &short_test, NULL); | ||
273 | return; | ||
274 | }*/} | ||
275 | } | 276 | } |
276 | 277 | ||
277 | 278 | ||
@@ -299,7 +300,9 @@ add_queue_cb (void *cls, | |||
299 | start_short = GNUNET_TIME_absolute_get (); | 300 | start_short = GNUNET_TIME_absolute_get (); |
300 | my_tc = tc_queue; | 301 | my_tc = tc_queue; |
301 | phase = TP_BURST_SHORT; | 302 | phase = TP_BURST_SHORT; |
302 | GNUNET_SCHEDULER_add_now (&short_test, tc_queue); | 303 | GNUNET_assert (NULL == active_task); |
304 | active_task = GNUNET_SCHEDULER_add_now (&short_test, | ||
305 | NULL); | ||
303 | } | 306 | } |
304 | 307 | ||
305 | 308 | ||
@@ -371,10 +374,13 @@ incoming_message_cb (void *cls, | |||
371 | num_sent = 0; | 374 | num_sent = 0; |
372 | avg_latency = 0; | 375 | avg_latency = 0; |
373 | num_received = 0; | 376 | num_received = 0; |
374 | GNUNET_SCHEDULER_cancel (to_task); | 377 | if (NULL != to_task) |
375 | to_task = NULL; | 378 | { |
376 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &long_test, | 379 | GNUNET_SCHEDULER_cancel (to_task); |
377 | NULL); | 380 | to_task = NULL; |
381 | } | ||
382 | active_task = GNUNET_SCHEDULER_add_now (&long_test, | ||
383 | NULL); | ||
378 | } | 384 | } |
379 | break; | 385 | break; |
380 | } | 386 | } |
@@ -408,10 +414,13 @@ incoming_message_cb (void *cls, | |||
408 | num_received = 0; | 414 | num_received = 0; |
409 | num_sent = 0; | 415 | num_sent = 0; |
410 | avg_latency = 0; | 416 | avg_latency = 0; |
411 | GNUNET_SCHEDULER_cancel (to_task); | 417 | if (NULL != to_task) |
412 | to_task = NULL; | 418 | { |
413 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &size_test, | 419 | GNUNET_SCHEDULER_cancel (to_task); |
414 | NULL); | 420 | to_task = NULL; |
421 | } | ||
422 | active_task = GNUNET_SCHEDULER_add_now (&size_test, | ||
423 | NULL); | ||
415 | } | 424 | } |
416 | break; | 425 | break; |
417 | } | 426 | } |
@@ -428,18 +437,30 @@ incoming_message_cb (void *cls, | |||
428 | (unsigned long) num_received, | 437 | (unsigned long) num_received, |
429 | (unsigned long) num_sent, | 438 | (unsigned long) num_sent, |
430 | (unsigned long long) avg_latency); | 439 | (unsigned long long) avg_latency); |
440 | num_received = 0; | ||
441 | num_sent = 0; | ||
442 | avg_latency = 0; | ||
443 | if (NULL != to_task) | ||
444 | { | ||
445 | GNUNET_SCHEDULER_cancel (to_task); | ||
446 | to_task = NULL; | ||
447 | } | ||
448 | iterations_left--; | ||
449 | if (0 != iterations_left) | ||
450 | { | ||
451 | phase = TP_BURST_SHORT; | ||
452 | active_task = GNUNET_SCHEDULER_add_now (&short_test, | ||
453 | NULL); | ||
454 | break; | ||
455 | } | ||
431 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 456 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
432 | "Finished\n"); | 457 | "Finished\n"); |
433 | GNUNET_SCHEDULER_cancel (to_task); | ||
434 | to_task = NULL; | ||
435 | GNUNET_SCHEDULER_shutdown (); | 458 | GNUNET_SCHEDULER_shutdown (); |
436 | // Finished! | ||
437 | // } | ||
438 | } | 459 | } |
439 | break; | 460 | break; |
440 | } | 461 | } |
441 | } | 462 | } |
442 | // Reset timeout | 463 | /* Reset timeout */ |
443 | if (NULL != to_task) | 464 | if (NULL != to_task) |
444 | { | 465 | { |
445 | GNUNET_SCHEDULER_cancel (to_task); | 466 | GNUNET_SCHEDULER_cancel (to_task); |
@@ -450,6 +471,22 @@ incoming_message_cb (void *cls, | |||
450 | } | 471 | } |
451 | 472 | ||
452 | 473 | ||
474 | static void | ||
475 | do_shutdown (void *cls) | ||
476 | { | ||
477 | if (NULL != to_task) | ||
478 | { | ||
479 | GNUNET_SCHEDULER_cancel (to_task); | ||
480 | to_task = NULL; | ||
481 | } | ||
482 | if (NULL != active_task) | ||
483 | { | ||
484 | GNUNET_SCHEDULER_cancel (active_task); | ||
485 | active_task = NULL; | ||
486 | } | ||
487 | } | ||
488 | |||
489 | |||
453 | /** | 490 | /** |
454 | * @brief Main function called by the scheduler | 491 | * @brief Main function called by the scheduler |
455 | * | 492 | * |
@@ -474,6 +511,8 @@ run (void *cls) | |||
474 | &incoming_message_cb, | 511 | &incoming_message_cb, |
475 | cfg_peers_name[i]); /* cls */ | 512 | cfg_peers_name[i]); /* cls */ |
476 | } | 513 | } |
514 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, | ||
515 | NULL); | ||
477 | } | 516 | } |
478 | 517 | ||
479 | 518 | ||
@@ -487,11 +526,13 @@ main (int argc, | |||
487 | 526 | ||
488 | ret = 1; | 527 | ret = 1; |
489 | communicator_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); | 528 | communicator_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); |
490 | GNUNET_asprintf (&communicator_binary, "gnunet-communicator-%s", | 529 | GNUNET_asprintf (&communicator_binary, |
530 | "gnunet-communicator-%s", | ||
491 | communicator_name); | 531 | communicator_name); |
492 | if (GNUNET_OK != GNUNET_log_setup ("test_communicator_basic", | 532 | if (GNUNET_OK != |
493 | "DEBUG", | 533 | GNUNET_log_setup ("test_communicator_basic", |
494 | "test_communicator_basic.log")) | 534 | "DEBUG", |
535 | NULL)) | ||
495 | { | 536 | { |
496 | fprintf (stderr, "Unable to setup log\n"); | 537 | fprintf (stderr, "Unable to setup log\n"); |
497 | GNUNET_break (0); | 538 | GNUNET_break (0); |