handle failures more gracefully in test
authorChristian Grothoff <christian@grothoff.org>
Mon, 27 Jun 2016 13:48:21 +0000 (13:48 +0000)
committerChristian Grothoff <christian@grothoff.org>
Mon, 27 Jun 2016 13:48:21 +0000 (13:48 +0000)
src/conversation/conversation_api_call.c
src/conversation/test_conversation_api.c
src/conversation/test_conversation_api_twocalls.c

index 728b495b37ae57c9c91b6905db74971557880f76..ad83288b933f6361d783abce2c594d8ebfe9b059 100644 (file)
@@ -154,7 +154,7 @@ struct GNUNET_CONVERSATION_Call
  * @param call call to reconnect
  */
 static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call);
+fail_call (struct GNUNET_CONVERSATION_Call *call);
 
 
 /**
@@ -198,11 +198,11 @@ handle_call_suspend (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break_op (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     call->state = CS_SUSPENDED_BOTH;
@@ -243,11 +243,11 @@ handle_call_resume (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break_op (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     GNUNET_break_op (0);
@@ -292,7 +292,7 @@ handle_call_picked_up (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     call->state = CS_ACTIVE;
@@ -308,7 +308,7 @@ handle_call_picked_up (void *cls,
   case CS_SUSPENDED_BOTH:
   case CS_ACTIVE:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SHUTDOWN:
     GNUNET_CONVERSATION_call_stop (call);
@@ -335,7 +335,7 @@ handle_call_hangup (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
   case CS_SUSPENDED_CALLER:
@@ -386,11 +386,11 @@ handle_call_audio (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     /* can happen: we suspended, other peer did not yet
@@ -482,17 +482,17 @@ call_error_handler (void *cls,
   }
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               _("Connection to conversation service lost, trying to reconnect\n"));
-  reconnect_call (call);
+  fail_call (call);
 }
 
 
 /**
- * The call got disconnected, reconnect to the service.
+ * The call got disconnected, destroy the handle.
  *
  * @param call call to reconnect
  */
 static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call)
+fail_call (struct GNUNET_CONVERSATION_Call *call)
 {
   if (CS_ACTIVE == call->state)
   {
index f8159115b27284237de35c72290804f31c840be5..fd9327805276c345b09045af17b0c1ab7fffe4e6 100644 (file)
@@ -67,9 +67,9 @@ static GNUNET_MICROPHONE_RecordedDataCallback call_rdc;
 
 static void *call_rdc_cls;
 
-static struct GNUNET_SCHEDULER_Task * phone_task;
+static struct GNUNET_SCHEDULER_Task *phone_task;
 
-static struct GNUNET_SCHEDULER_Task * call_task;
+static struct GNUNET_SCHEDULER_Task *call_task;
 
 
 static void
@@ -347,11 +347,14 @@ phone_event_handler (void *cls,
   case GNUNET_CONVERSATION_EC_PHONE_HUNG_UP:
     GNUNET_break (caller == active_caller);
     active_caller = NULL;
-    ok = 0;
+    if (1 == ok)
+      ok = 0;
     GNUNET_SCHEDULER_shutdown ();
     break;
   default:
-    fprintf (stderr, "Unexpected phone code: %d\n", code);
+    fprintf (stderr,
+             "Unexpected phone code: %d\n",
+             code);
     break;
   }
 }
@@ -376,12 +379,21 @@ call_event_handler (void *cls,
   case GNUNET_CONVERSATION_EC_CALL_GNS_FAIL:
   case GNUNET_CONVERSATION_EC_CALL_HUNG_UP:
     call = NULL;
+    ok = 2;
+    GNUNET_break (0);
     fprintf (stderr, "Unexpected call code: %d\n", code);
     break;
   case GNUNET_CONVERSATION_EC_CALL_SUSPENDED:
   case GNUNET_CONVERSATION_EC_CALL_RESUMED:
+    GNUNET_break (0);
+    fprintf (stderr, "Unexpected call code: %d\n", code);
+    ok = 2;
+    break;
   case GNUNET_CONVERSATION_EC_CALL_ERROR:
+    GNUNET_break (0);
     fprintf (stderr, "Unexpected call code: %d\n", code);
+    call = NULL;
+    ok = 2;
     break;
   }
 }
index 17a12eb4f35821a3ad1d90878810bbb2970ed3f5..2e2a73e3fc1cb35fde17fb8ce19ef589d7de8149 100644 (file)
@@ -73,7 +73,9 @@ static GNUNET_MICROPHONE_RecordedDataCallback phone_rdc;
 
 static void *phone_rdc_cls;
 
-static struct GNUNET_SCHEDULER_Task * phone_task;
+static struct GNUNET_SCHEDULER_Task *phone_task;
+
+static struct GNUNET_SCHEDULER_Task *timeout_task;
 
 /**
  * Variable for recognizing caller1
@@ -338,14 +340,33 @@ static struct GNUNET_MICROPHONE_Handle phone_mic = {
 
 
 /**
- * Signature of the main function of a task.
+ * Function run on timeout.
  *
  * @param cls closure
  */
 static void
 end_test (void *cls)
 {
+  timeout_task = NULL;
+  fprintf (stderr,
+           "Timeout!\n");
   GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Function run on shutdown.
+ *
+ * @param cls closure
+ */
+static void
+do_shutdown (void *cls)
+{
+  if (NULL != timeout_task)
+  {
+    GNUNET_SCHEDULER_cancel (timeout_task);
+    timeout_task = NULL;
+  }
   if (NULL != op)
   {
     GNUNET_IDENTITY_cancel (op);
@@ -485,6 +506,11 @@ call_event_handler (void *cls,
     break;
   case GNUNET_CONVERSATION_EC_CALL_ERROR:
     GNUNET_break (0);
+    if (0 == strcmp (cid, "call1"))
+      call1 = NULL;
+    else
+      call2 = NULL;
+    GNUNET_SCHEDULER_shutdown ();
     break;
   }
 }
@@ -592,8 +618,11 @@ run (void *cls,
      struct GNUNET_TESTING_Peer *peer)
 {
   cfg = c;
-  GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test,
-                                NULL);
+  timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+                                               &end_test,
+                                               NULL);
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                 NULL);
   id = GNUNET_IDENTITY_connect (cfg,
                                 &identity_cb,
                                 NULL);