diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-06-27 13:48:21 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-06-27 13:48:21 +0000 |
commit | beae62bfc73edc1784efbcbb8efd74c07a057865 (patch) | |
tree | 953a0890b0d2bbdea5427e57fa91c72ffee2b018 /src/conversation | |
parent | 9db237899dd8db104328221e6911fcbbf9d0f3cf (diff) | |
download | gnunet-beae62bfc73edc1784efbcbb8efd74c07a057865.tar.gz gnunet-beae62bfc73edc1784efbcbb8efd74c07a057865.zip |
handle failures more gracefully in test
Diffstat (limited to 'src/conversation')
-rw-r--r-- | src/conversation/conversation_api_call.c | 26 | ||||
-rw-r--r-- | src/conversation/test_conversation_api.c | 20 | ||||
-rw-r--r-- | src/conversation/test_conversation_api_twocalls.c | 37 |
3 files changed, 62 insertions, 21 deletions
diff --git a/src/conversation/conversation_api_call.c b/src/conversation/conversation_api_call.c index 728b495b3..ad83288b9 100644 --- a/src/conversation/conversation_api_call.c +++ b/src/conversation/conversation_api_call.c | |||
@@ -154,7 +154,7 @@ struct GNUNET_CONVERSATION_Call | |||
154 | * @param call call to reconnect | 154 | * @param call call to reconnect |
155 | */ | 155 | */ |
156 | static void | 156 | static void |
157 | reconnect_call (struct GNUNET_CONVERSATION_Call *call); | 157 | fail_call (struct GNUNET_CONVERSATION_Call *call); |
158 | 158 | ||
159 | 159 | ||
160 | /** | 160 | /** |
@@ -198,11 +198,11 @@ handle_call_suspend (void *cls, | |||
198 | { | 198 | { |
199 | case CS_LOOKUP: | 199 | case CS_LOOKUP: |
200 | GNUNET_break (0); | 200 | GNUNET_break (0); |
201 | reconnect_call (call); | 201 | fail_call (call); |
202 | break; | 202 | break; |
203 | case CS_RINGING: | 203 | case CS_RINGING: |
204 | GNUNET_break_op (0); | 204 | GNUNET_break_op (0); |
205 | reconnect_call (call); | 205 | fail_call (call); |
206 | break; | 206 | break; |
207 | case CS_SUSPENDED_CALLER: | 207 | case CS_SUSPENDED_CALLER: |
208 | call->state = CS_SUSPENDED_BOTH; | 208 | call->state = CS_SUSPENDED_BOTH; |
@@ -243,11 +243,11 @@ handle_call_resume (void *cls, | |||
243 | { | 243 | { |
244 | case CS_LOOKUP: | 244 | case CS_LOOKUP: |
245 | GNUNET_break (0); | 245 | GNUNET_break (0); |
246 | reconnect_call (call); | 246 | fail_call (call); |
247 | break; | 247 | break; |
248 | case CS_RINGING: | 248 | case CS_RINGING: |
249 | GNUNET_break_op (0); | 249 | GNUNET_break_op (0); |
250 | reconnect_call (call); | 250 | fail_call (call); |
251 | break; | 251 | break; |
252 | case CS_SUSPENDED_CALLER: | 252 | case CS_SUSPENDED_CALLER: |
253 | GNUNET_break_op (0); | 253 | GNUNET_break_op (0); |
@@ -292,7 +292,7 @@ handle_call_picked_up (void *cls, | |||
292 | { | 292 | { |
293 | case CS_LOOKUP: | 293 | case CS_LOOKUP: |
294 | GNUNET_break (0); | 294 | GNUNET_break (0); |
295 | reconnect_call (call); | 295 | fail_call (call); |
296 | break; | 296 | break; |
297 | case CS_RINGING: | 297 | case CS_RINGING: |
298 | call->state = CS_ACTIVE; | 298 | call->state = CS_ACTIVE; |
@@ -308,7 +308,7 @@ handle_call_picked_up (void *cls, | |||
308 | case CS_SUSPENDED_BOTH: | 308 | case CS_SUSPENDED_BOTH: |
309 | case CS_ACTIVE: | 309 | case CS_ACTIVE: |
310 | GNUNET_break (0); | 310 | GNUNET_break (0); |
311 | reconnect_call (call); | 311 | fail_call (call); |
312 | break; | 312 | break; |
313 | case CS_SHUTDOWN: | 313 | case CS_SHUTDOWN: |
314 | GNUNET_CONVERSATION_call_stop (call); | 314 | GNUNET_CONVERSATION_call_stop (call); |
@@ -335,7 +335,7 @@ handle_call_hangup (void *cls, | |||
335 | { | 335 | { |
336 | case CS_LOOKUP: | 336 | case CS_LOOKUP: |
337 | GNUNET_break (0); | 337 | GNUNET_break (0); |
338 | reconnect_call (call); | 338 | fail_call (call); |
339 | break; | 339 | break; |
340 | case CS_RINGING: | 340 | case CS_RINGING: |
341 | case CS_SUSPENDED_CALLER: | 341 | case CS_SUSPENDED_CALLER: |
@@ -386,11 +386,11 @@ handle_call_audio (void *cls, | |||
386 | { | 386 | { |
387 | case CS_LOOKUP: | 387 | case CS_LOOKUP: |
388 | GNUNET_break (0); | 388 | GNUNET_break (0); |
389 | reconnect_call (call); | 389 | fail_call (call); |
390 | break; | 390 | break; |
391 | case CS_RINGING: | 391 | case CS_RINGING: |
392 | GNUNET_break (0); | 392 | GNUNET_break (0); |
393 | reconnect_call (call); | 393 | fail_call (call); |
394 | break; | 394 | break; |
395 | case CS_SUSPENDED_CALLER: | 395 | case CS_SUSPENDED_CALLER: |
396 | /* can happen: we suspended, other peer did not yet | 396 | /* can happen: we suspended, other peer did not yet |
@@ -482,17 +482,17 @@ call_error_handler (void *cls, | |||
482 | } | 482 | } |
483 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 483 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
484 | _("Connection to conversation service lost, trying to reconnect\n")); | 484 | _("Connection to conversation service lost, trying to reconnect\n")); |
485 | reconnect_call (call); | 485 | fail_call (call); |
486 | } | 486 | } |
487 | 487 | ||
488 | 488 | ||
489 | /** | 489 | /** |
490 | * The call got disconnected, reconnect to the service. | 490 | * The call got disconnected, destroy the handle. |
491 | * | 491 | * |
492 | * @param call call to reconnect | 492 | * @param call call to reconnect |
493 | */ | 493 | */ |
494 | static void | 494 | static void |
495 | reconnect_call (struct GNUNET_CONVERSATION_Call *call) | 495 | fail_call (struct GNUNET_CONVERSATION_Call *call) |
496 | { | 496 | { |
497 | if (CS_ACTIVE == call->state) | 497 | if (CS_ACTIVE == call->state) |
498 | { | 498 | { |
diff --git a/src/conversation/test_conversation_api.c b/src/conversation/test_conversation_api.c index f8159115b..fd9327805 100644 --- a/src/conversation/test_conversation_api.c +++ b/src/conversation/test_conversation_api.c | |||
@@ -67,9 +67,9 @@ static GNUNET_MICROPHONE_RecordedDataCallback call_rdc; | |||
67 | 67 | ||
68 | static void *call_rdc_cls; | 68 | static void *call_rdc_cls; |
69 | 69 | ||
70 | static struct GNUNET_SCHEDULER_Task * phone_task; | 70 | static struct GNUNET_SCHEDULER_Task *phone_task; |
71 | 71 | ||
72 | static struct GNUNET_SCHEDULER_Task * call_task; | 72 | static struct GNUNET_SCHEDULER_Task *call_task; |
73 | 73 | ||
74 | 74 | ||
75 | static void | 75 | static void |
@@ -347,11 +347,14 @@ phone_event_handler (void *cls, | |||
347 | case GNUNET_CONVERSATION_EC_PHONE_HUNG_UP: | 347 | case GNUNET_CONVERSATION_EC_PHONE_HUNG_UP: |
348 | GNUNET_break (caller == active_caller); | 348 | GNUNET_break (caller == active_caller); |
349 | active_caller = NULL; | 349 | active_caller = NULL; |
350 | ok = 0; | 350 | if (1 == ok) |
351 | ok = 0; | ||
351 | GNUNET_SCHEDULER_shutdown (); | 352 | GNUNET_SCHEDULER_shutdown (); |
352 | break; | 353 | break; |
353 | default: | 354 | default: |
354 | fprintf (stderr, "Unexpected phone code: %d\n", code); | 355 | fprintf (stderr, |
356 | "Unexpected phone code: %d\n", | ||
357 | code); | ||
355 | break; | 358 | break; |
356 | } | 359 | } |
357 | } | 360 | } |
@@ -376,12 +379,21 @@ call_event_handler (void *cls, | |||
376 | case GNUNET_CONVERSATION_EC_CALL_GNS_FAIL: | 379 | case GNUNET_CONVERSATION_EC_CALL_GNS_FAIL: |
377 | case GNUNET_CONVERSATION_EC_CALL_HUNG_UP: | 380 | case GNUNET_CONVERSATION_EC_CALL_HUNG_UP: |
378 | call = NULL; | 381 | call = NULL; |
382 | ok = 2; | ||
383 | GNUNET_break (0); | ||
379 | fprintf (stderr, "Unexpected call code: %d\n", code); | 384 | fprintf (stderr, "Unexpected call code: %d\n", code); |
380 | break; | 385 | break; |
381 | case GNUNET_CONVERSATION_EC_CALL_SUSPENDED: | 386 | case GNUNET_CONVERSATION_EC_CALL_SUSPENDED: |
382 | case GNUNET_CONVERSATION_EC_CALL_RESUMED: | 387 | case GNUNET_CONVERSATION_EC_CALL_RESUMED: |
388 | GNUNET_break (0); | ||
389 | fprintf (stderr, "Unexpected call code: %d\n", code); | ||
390 | ok = 2; | ||
391 | break; | ||
383 | case GNUNET_CONVERSATION_EC_CALL_ERROR: | 392 | case GNUNET_CONVERSATION_EC_CALL_ERROR: |
393 | GNUNET_break (0); | ||
384 | fprintf (stderr, "Unexpected call code: %d\n", code); | 394 | fprintf (stderr, "Unexpected call code: %d\n", code); |
395 | call = NULL; | ||
396 | ok = 2; | ||
385 | break; | 397 | break; |
386 | } | 398 | } |
387 | } | 399 | } |
diff --git a/src/conversation/test_conversation_api_twocalls.c b/src/conversation/test_conversation_api_twocalls.c index 17a12eb4f..2e2a73e3f 100644 --- a/src/conversation/test_conversation_api_twocalls.c +++ b/src/conversation/test_conversation_api_twocalls.c | |||
@@ -73,7 +73,9 @@ static GNUNET_MICROPHONE_RecordedDataCallback phone_rdc; | |||
73 | 73 | ||
74 | static void *phone_rdc_cls; | 74 | static void *phone_rdc_cls; |
75 | 75 | ||
76 | static struct GNUNET_SCHEDULER_Task * phone_task; | 76 | static struct GNUNET_SCHEDULER_Task *phone_task; |
77 | |||
78 | static struct GNUNET_SCHEDULER_Task *timeout_task; | ||
77 | 79 | ||
78 | /** | 80 | /** |
79 | * Variable for recognizing caller1 | 81 | * Variable for recognizing caller1 |
@@ -338,14 +340,33 @@ static struct GNUNET_MICROPHONE_Handle phone_mic = { | |||
338 | 340 | ||
339 | 341 | ||
340 | /** | 342 | /** |
341 | * Signature of the main function of a task. | 343 | * Function run on timeout. |
342 | * | 344 | * |
343 | * @param cls closure | 345 | * @param cls closure |
344 | */ | 346 | */ |
345 | static void | 347 | static void |
346 | end_test (void *cls) | 348 | end_test (void *cls) |
347 | { | 349 | { |
350 | timeout_task = NULL; | ||
351 | fprintf (stderr, | ||
352 | "Timeout!\n"); | ||
348 | GNUNET_SCHEDULER_shutdown (); | 353 | GNUNET_SCHEDULER_shutdown (); |
354 | } | ||
355 | |||
356 | |||
357 | /** | ||
358 | * Function run on shutdown. | ||
359 | * | ||
360 | * @param cls closure | ||
361 | */ | ||
362 | static void | ||
363 | do_shutdown (void *cls) | ||
364 | { | ||
365 | if (NULL != timeout_task) | ||
366 | { | ||
367 | GNUNET_SCHEDULER_cancel (timeout_task); | ||
368 | timeout_task = NULL; | ||
369 | } | ||
349 | if (NULL != op) | 370 | if (NULL != op) |
350 | { | 371 | { |
351 | GNUNET_IDENTITY_cancel (op); | 372 | GNUNET_IDENTITY_cancel (op); |
@@ -485,6 +506,11 @@ call_event_handler (void *cls, | |||
485 | break; | 506 | break; |
486 | case GNUNET_CONVERSATION_EC_CALL_ERROR: | 507 | case GNUNET_CONVERSATION_EC_CALL_ERROR: |
487 | GNUNET_break (0); | 508 | GNUNET_break (0); |
509 | if (0 == strcmp (cid, "call1")) | ||
510 | call1 = NULL; | ||
511 | else | ||
512 | call2 = NULL; | ||
513 | GNUNET_SCHEDULER_shutdown (); | ||
488 | break; | 514 | break; |
489 | } | 515 | } |
490 | } | 516 | } |
@@ -592,8 +618,11 @@ run (void *cls, | |||
592 | struct GNUNET_TESTING_Peer *peer) | 618 | struct GNUNET_TESTING_Peer *peer) |
593 | { | 619 | { |
594 | cfg = c; | 620 | cfg = c; |
595 | GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test, | 621 | timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, |
596 | NULL); | 622 | &end_test, |
623 | NULL); | ||
624 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, | ||
625 | NULL); | ||
597 | id = GNUNET_IDENTITY_connect (cfg, | 626 | id = GNUNET_IDENTITY_connect (cfg, |
598 | &identity_cb, | 627 | &identity_cb, |
599 | NULL); | 628 | NULL); |