Merge "p2p: clear event queue before running continuous tests" into qt-dev
diff --git a/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric.proto b/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric.proto
index f4cabb0..7984c7c 100644
--- a/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric.proto
+++ b/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric.proto
@@ -3,6 +3,8 @@
    directory:
    $ protoc -I=. --python_out=. telephony_metric.proto
 
+   Be sure that you are compiling with protoc 3.4.0
+
    More info can be found at:
    https://developers.google.com/protocol-buffers/docs/pythontutorial
 */
@@ -14,6 +16,8 @@
 message TelephonyVoiceTestResult {
 
   enum CallResult {
+    UNAVAILABLE_NETWORK_TYPE = -2;
+    CALL_SETUP_FAILURE = -1;
     SUCCESS = 0;
     INITIATE_FAILED = 1;
     NO_RING_EVENT_OR_ANSWER_FAILED = 2;
diff --git a/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric_pb2.py b/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric_pb2.py
index 27c6e6d..7a6c2ca 100644
--- a/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric_pb2.py
+++ b/acts/framework/acts/test_utils/tel/loggers/protos/telephony_metric_pb2.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: telephony_metric.proto
 
@@ -8,6 +7,7 @@
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -19,8 +19,7 @@
   name='telephony_metric.proto',
   package='wireless.android.platform.testing.telephony.metrics',
   syntax='proto2',
-  serialized_options=None,
-  serialized_pb=_b('\n\x16telephony_metric.proto\x12\x33wireless.android.platform.testing.telephony.metrics\"\xae\x04\n\x18TelephonyVoiceTestResult\x12h\n\x06result\x18\x01 \x01(\x0e\x32X.wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult.CallResult\x12\x1f\n\x17\x63\x61ll_setup_time_latency\x18\x02 \x01(\x02\"\x86\x03\n\nCallResult\x12\x0b\n\x07SUCCESS\x10\x00\x12\x13\n\x0fINITIATE_FAILED\x10\x01\x12\"\n\x1eNO_RING_EVENT_OR_ANSWER_FAILED\x10\x02\x12\x14\n\x10NO_CALL_ID_FOUND\x10\x03\x12.\n*CALL_STATE_NOT_ACTIVE_DURING_ESTABLISHMENT\x10\x04\x12/\n+AUDIO_STATE_NOT_INCALL_DURING_ESTABLISHMENT\x10\x05\x12*\n&AUDIO_STATE_NOT_INCALL_AFTER_CONNECTED\x10\x06\x12\x31\n-CALL_DROP_OR_WRONG_STATE_DURING_ESTABLISHMENT\x10\x07\x12,\n(CALL_DROP_OR_WRONG_STATE_AFTER_CONNECTED\x10\x08\x12\x14\n\x10\x43\x41LL_HANGUP_FAIL\x10\t\x12\x18\n\x14\x43\x41LL_ID_CLEANUP_FAIL\x10\n\"|\n\x1aTelephonyVoiceStressResult\x12^\n\x07results\x18\x01 \x03(\x0b\x32M.wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult')
+  serialized_pb=_b('\n\x16telephony_metric.proto\x12\x33wireless.android.platform.testing.telephony.metrics\"\xf6\x04\n\x18TelephonyVoiceTestResult\x12h\n\x06result\x18\x01 \x01(\x0e\x32X.wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult.CallResult\x12\x1f\n\x17\x63\x61ll_setup_time_latency\x18\x02 \x01(\x02\"\xce\x03\n\nCallResult\x12%\n\x18UNAVAILABLE_NETWORK_TYPE\x10\xfe\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12\x43\x41LL_SETUP_FAILURE\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x0b\n\x07SUCCESS\x10\x00\x12\x13\n\x0fINITIATE_FAILED\x10\x01\x12\"\n\x1eNO_RING_EVENT_OR_ANSWER_FAILED\x10\x02\x12\x14\n\x10NO_CALL_ID_FOUND\x10\x03\x12.\n*CALL_STATE_NOT_ACTIVE_DURING_ESTABLISHMENT\x10\x04\x12/\n+AUDIO_STATE_NOT_INCALL_DURING_ESTABLISHMENT\x10\x05\x12*\n&AUDIO_STATE_NOT_INCALL_AFTER_CONNECTED\x10\x06\x12\x31\n-CALL_DROP_OR_WRONG_STATE_DURING_ESTABLISHMENT\x10\x07\x12,\n(CALL_DROP_OR_WRONG_STATE_AFTER_CONNECTED\x10\x08\x12\x14\n\x10\x43\x41LL_HANGUP_FAIL\x10\t\x12\x18\n\x14\x43\x41LL_ID_CLEANUP_FAIL\x10\n\"|\n\x1aTelephonyVoiceStressResult\x12^\n\x07results\x18\x01 \x03(\x0b\x32M.wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult')
 )
 
 
@@ -32,54 +31,62 @@
   file=DESCRIPTOR,
   values=[
     _descriptor.EnumValueDescriptor(
-      name='SUCCESS', index=0, number=0,
-      serialized_options=None,
+      name='UNAVAILABLE_NETWORK_TYPE', index=0, number=-2,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='INITIATE_FAILED', index=1, number=1,
-      serialized_options=None,
+      name='CALL_SETUP_FAILURE', index=1, number=-1,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='NO_RING_EVENT_OR_ANSWER_FAILED', index=2, number=2,
-      serialized_options=None,
+      name='SUCCESS', index=2, number=0,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='NO_CALL_ID_FOUND', index=3, number=3,
-      serialized_options=None,
+      name='INITIATE_FAILED', index=3, number=1,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_STATE_NOT_ACTIVE_DURING_ESTABLISHMENT', index=4, number=4,
-      serialized_options=None,
+      name='NO_RING_EVENT_OR_ANSWER_FAILED', index=4, number=2,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='AUDIO_STATE_NOT_INCALL_DURING_ESTABLISHMENT', index=5, number=5,
-      serialized_options=None,
+      name='NO_CALL_ID_FOUND', index=5, number=3,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='AUDIO_STATE_NOT_INCALL_AFTER_CONNECTED', index=6, number=6,
-      serialized_options=None,
+      name='CALL_STATE_NOT_ACTIVE_DURING_ESTABLISHMENT', index=6, number=4,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_DROP_OR_WRONG_STATE_DURING_ESTABLISHMENT', index=7, number=7,
-      serialized_options=None,
+      name='AUDIO_STATE_NOT_INCALL_DURING_ESTABLISHMENT', index=7, number=5,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_DROP_OR_WRONG_STATE_AFTER_CONNECTED', index=8, number=8,
-      serialized_options=None,
+      name='AUDIO_STATE_NOT_INCALL_AFTER_CONNECTED', index=8, number=6,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_HANGUP_FAIL', index=9, number=9,
-      serialized_options=None,
+      name='CALL_DROP_OR_WRONG_STATE_DURING_ESTABLISHMENT', index=9, number=7,
+      options=None,
       type=None),
     _descriptor.EnumValueDescriptor(
-      name='CALL_ID_CLEANUP_FAIL', index=10, number=10,
-      serialized_options=None,
+      name='CALL_DROP_OR_WRONG_STATE_AFTER_CONNECTED', index=10, number=8,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='CALL_HANGUP_FAIL', index=11, number=9,
+      options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='CALL_ID_CLEANUP_FAIL', index=12, number=10,
+      options=None,
       type=None),
   ],
   containing_type=None,
-  serialized_options=None,
+  options=None,
   serialized_start=248,
-  serialized_end=638,
+  serialized_end=710,
 )
 _sym_db.RegisterEnumDescriptor(_TELEPHONYVOICETESTRESULT_CALLRESULT)
 
@@ -94,17 +101,17 @@
     _descriptor.FieldDescriptor(
       name='result', full_name='wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult.result', index=0,
       number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
+      has_default_value=False, default_value=-2,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      options=None),
     _descriptor.FieldDescriptor(
       name='call_setup_time_latency', full_name='wireless.android.platform.testing.telephony.metrics.TelephonyVoiceTestResult.call_setup_time_latency', index=1,
       number=2, type=2, cpp_type=6, label=1,
       has_default_value=False, default_value=float(0),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      options=None),
   ],
   extensions=[
   ],
@@ -112,14 +119,14 @@
   enum_types=[
     _TELEPHONYVOICETESTRESULT_CALLRESULT,
   ],
-  serialized_options=None,
+  options=None,
   is_extendable=False,
   syntax='proto2',
   extension_ranges=[],
   oneofs=[
   ],
   serialized_start=80,
-  serialized_end=638,
+  serialized_end=710,
 )
 
 
@@ -136,21 +143,21 @@
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      options=None),
   ],
   extensions=[
   ],
   nested_types=[],
   enum_types=[
   ],
-  serialized_options=None,
+  options=None,
   is_extendable=False,
   syntax='proto2',
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=640,
-  serialized_end=764,
+  serialized_start=712,
+  serialized_end=836,
 )
 
 _TELEPHONYVOICETESTRESULT.fields_by_name['result'].enum_type = _TELEPHONYVOICETESTRESULT_CALLRESULT
diff --git a/acts/framework/acts/test_utils/tel/tel_voice_utils.py b/acts/framework/acts/test_utils/tel/tel_voice_utils.py
index 4e400b2..f5a85c7 100644
--- a/acts/framework/acts/test_utils/tel/tel_voice_utils.py
+++ b/acts/framework/acts/test_utils/tel/tel_voice_utils.py
@@ -195,10 +195,10 @@
         ensure_phones_idle(log, ads)
         if phone_a_idle_func and not phone_a_idle_func(log, phone_a):
             phone_a.log.error("Phone A Failed to Reselect")
-            return False
+            return TelResultWrapper(CallResult('CALL_SETUP_FAILURE'))
         if phone_b_idle_func and not phone_b_idle_func(log, phone_b):
             phone_b.log.error("Phone B Failed to Reselect")
-            return False
+            return TelResultWrapper(CallResult('CALL_SETUP_FAILURE'))
 
         # TODO: b/26337871 Need to use proper API to check phone registered.
         time.sleep(WAIT_TIME_BETWEEN_REG_AND_CALL)
@@ -324,8 +324,8 @@
             This is optional, default is WAIT_TIME_IN_CALL
 
     Returns:
-        True: if call sequence succeed.
-        False: for errors
+        TelResultWrapper which will evaluate as False if error.
+
     """
     ads = [phone_a, phone_b]
 
@@ -340,15 +340,16 @@
          phone_a_in_call_check_func),
     ]
 
+    tel_result = TelResultWrapper(CallResult('SUCCESS'))
     for param in call_params:
         # Make sure phones are idle.
         ensure_phones_idle(log, ads)
         if phone_a_idle_func and not phone_a_idle_func(log, phone_a):
             phone_a.log.error("Phone A Failed to Reselect")
-            return False
+            return TelResultWrapper(CallResult('CALL_SETUP_FAILURE'))
         if phone_b_idle_func and not phone_b_idle_func(log, phone_b):
             phone_b.log.error("Phone B Failed to Reselect")
-            return False
+            return TelResultWrapper(CallResult('CALL_SETUP_FAILURE'))
 
         # TODO: b/26337871 Need to use proper API to check phone registered.
         time.sleep(WAIT_TIME_BETWEEN_REG_AND_CALL)
@@ -356,12 +357,13 @@
         # Make call.
         log.info("---> Call test: %s to %s <---", param[0].serial,
                  param[1].serial)
-        if not call_setup_teardown(
-                log, *param, wait_time_in_call=wait_time_in_call):
+        tel_result = call_setup_teardown(
+                log, *param, wait_time_in_call=wait_time_in_call)
+        if not tel_result:
             log.error("Call Iteration Failed")
-            return False
+            break
 
-    return True
+    return tel_result
 
 
 def phone_setup_iwlan(log,
diff --git a/acts/tests/google/tel/live/TelLiveVoiceTest.py b/acts/tests/google/tel/live/TelLiveVoiceTest.py
index 76418ef..d16640f 100644
--- a/acts/tests/google/tel/live/TelLiveVoiceTest.py
+++ b/acts/tests/google/tel/live/TelLiveVoiceTest.py
@@ -21,6 +21,7 @@
 
 from acts import signals
 from acts.test_decorators import test_tracker_info
+from acts.test_utils.tel.loggers.protos.telephony_metric_pb2 import TelephonyVoiceTestResult
 from acts.test_utils.tel.loggers.telephony_metric_logger import TelephonyMetricLogger
 from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
 from acts.test_utils.tel.tel_data_utils import wifi_cell_switching
@@ -49,6 +50,7 @@
     call_voicemail_erase_all_pending_voicemail
 from acts.test_utils.tel.tel_test_utils import active_file_download_task
 from acts.utils import adb_shell_ping
+from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state
 from acts.test_utils.tel.tel_test_utils import ensure_network_generation
 from acts.test_utils.tel.tel_test_utils import get_mobile_data_usage
 from acts.test_utils.tel.tel_test_utils import hangup_call
@@ -66,7 +68,6 @@
 from acts.test_utils.tel.tel_test_utils import wait_for_state
 from acts.test_utils.tel.tel_test_utils import start_youtube_video
 from acts.test_utils.tel.tel_test_utils import set_wifi_to_default
-from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state
 from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_1x
 from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_2g
 from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g
@@ -95,6 +96,7 @@
 DEFAULT_LONG_DURATION_CALL_TOTAL_DURATION = 1 * 60 * 60  # default value 1 hour
 DEFAULT_PING_DURATION = 120  # in seconds
 
+CallResult = TelephonyVoiceTestResult.CallResult.Value
 
 class TelLiveVoiceTest(TelephonyBaseTest):
     def __init__(self, controllers):
@@ -120,8 +122,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -129,10 +131,16 @@
                  (phone_setup_voice_general, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(self.log, ads[0], None, None, ads[1],
+        result = two_phone_call_short_seq(self.log, ads[0], None, None, ads[1],
                                         None, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @TelephonyBaseTest.tel_test_wrap
     @test_tracker_info(uuid="69faeb84-3830-47c0-ad80-dc657381a83b")
@@ -144,8 +152,8 @@
         3. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         4. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -153,10 +161,16 @@
                  (phone_setup_voice_general, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(self.log, ads[1], None, None, ads[0],
+        result = two_phone_call_short_seq(self.log, ads[1], None, None, ads[0],
                                         None, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="b2de097b-70e1-4242-b555-c1aa0a5acd8c")
     @TelephonyBaseTest.tel_test_wrap
@@ -168,8 +182,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -177,12 +191,18 @@
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="3c7f5a09-0177-4469-9994-cd5e7dd7c7fe")
     @TelephonyBaseTest.tel_test_wrap
@@ -318,8 +338,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -327,11 +347,17 @@
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="38096fdb-324a-4ce0-8836-8bbe713cffc2")
     @TelephonyBaseTest.tel_test_wrap
@@ -343,8 +369,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -352,11 +378,17 @@
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(self.log, ads[0], phone_idle_volte,
+        result = two_phone_call_short_seq(self.log, ads[0], phone_idle_volte,
                                         None, ads[1], phone_idle_csfb,
                                         is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="82f9515d-a52b-4dec-93a5-997ffdbca76c")
     @TelephonyBaseTest.tel_test_wrap
@@ -370,25 +402,33 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Make Sure PhoneB is CDMA phone.
         if ads[1].droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA:
             self.log.error(
                 "PhoneB not cdma phone, can not csfb 1x. Stop test.")
-            return False
+            self.tel_logger.set_result(CallResult("UNAVAILABLE_NETWORK_TYPE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "PhoneB not cdma, cannot csfb 1x."})
 
         tasks = [(phone_setup_volte, (self.log, ads[0])), (phone_setup_csfb,
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_csfb, is_phone_in_call_1x, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="2e57fad6-5eaf-4e7d-8353-8aa6f4c52776")
     @TelephonyBaseTest.tel_test_wrap
@@ -402,25 +442,33 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Make Sure PhoneB is GSM phone.
         if ads[1].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM:
             self.log.error(
                 "PhoneB not gsm phone, can not csfb wcdma. Stop test.")
-            return False
+            self.tel_logger.set_result(CallResult("UNAVAILABLE_NETWORK_TYPE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "PhoneB not gsm, cannot csfb wcdma."})
 
         tasks = [(phone_setup_volte, (self.log, ads[0])), (phone_setup_csfb,
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
-            self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.log.error("Phone Failed to Setup Properly")
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Setup Properly"})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="4bab759f-7610-4cec-893c-0a8aed95f70c")
     @TelephonyBaseTest.tel_test_wrap
@@ -432,8 +480,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -441,11 +489,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="b394cdc5-d88d-4659-8a26-0e58fde69974")
     @TelephonyBaseTest.tel_test_wrap
@@ -459,24 +513,32 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Make Sure PhoneB is CDMA phone.
         if ads[1].droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA:
             self.log.error("PhoneB not cdma phone, can not 3g 1x. Stop test.")
-            return False
+            self.tel_logger.set_result(CallResult("UNAVAILABLE_NETWORK_TYPE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "PhoneB not cdma phone, can not 3g 1x."})
 
         tasks = [(phone_setup_volte, (self.log, ads[0])),
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_3g, is_phone_in_call_1x, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="b39a74a9-2a89-4c0b-ac4e-71ed9317bd75")
     @TelephonyBaseTest.tel_test_wrap
@@ -490,25 +552,33 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Make Sure PhoneB is GSM phone.
         if ads[1].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM:
             self.log.error(
                 "PhoneB not gsm phone, can not 3g wcdma. Stop test.")
-            return False
+            self.tel_logger.set_result(CallResult('UNAVAILABLE_NETWORK_TYPE'))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "PhoneB not gsm phone, can not 3g wcdma."})
 
         tasks = [(phone_setup_volte, (self.log, ads[0])),
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "PhoneB not gsm phone, can not 3g wcdma."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_3g, is_phone_in_call_wcdma, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="573bbcf1-6cbd-4084-9cb7-e14fb6c9521e")
     @TelephonyBaseTest.tel_test_wrap
@@ -520,8 +590,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -529,11 +599,17 @@
                  (phone_setup_voice_2g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_2g, is_phone_in_call_2g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     def _call_epdg_to_epdg_wfc(self, ads, apm_mode, wfc_mode, wifi_ssid,
                                wifi_pwd):
@@ -628,8 +704,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = [self.android_devices[0], self.android_devices[1]]
         tasks = [(phone_setup_iwlan_cellular_preferred,
@@ -640,11 +716,17 @@
                    self.wifi_network_pass))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], None, is_phone_in_call_not_iwlan, ads[1], None,
             is_phone_in_call_not_iwlan, None, WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="0d63c250-d9e7-490c-8c48-0a6afbad5f88")
     @TelephonyBaseTest.tel_test_wrap
@@ -707,8 +789,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         tasks = [(phone_setup_iwlan,
@@ -717,12 +799,18 @@
                  (phone_setup_volte, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="6e0630a9-63b2-4ea1-8ec9-6560f001905c")
     @TelephonyBaseTest.tel_test_wrap
@@ -734,8 +822,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         tasks = [(phone_setup_iwlan,
@@ -744,12 +832,18 @@
                  (phone_setup_volte, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="51077985-2229-491f-9a54-1ff53871758c")
     @TelephonyBaseTest.tel_test_wrap
@@ -761,8 +855,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         tasks = [(phone_setup_iwlan,
@@ -771,12 +865,18 @@
                  (phone_setup_volte, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="fff9edcd-1ace-4f2d-a09b-06f3eea56cca")
     @TelephonyBaseTest.tel_test_wrap
@@ -788,8 +888,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         tasks = [(phone_setup_iwlan,
@@ -798,12 +898,18 @@
                  (phone_setup_volte, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="8591554e-4e38-406c-97bf-8921d5329c47")
     @TelephonyBaseTest.tel_test_wrap
@@ -815,8 +921,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+             TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -827,11 +933,17 @@
                  (phone_setup_csfb, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="9711888d-5b1e-4d05-86e9-98f94f46098b")
     @TelephonyBaseTest.tel_test_wrap
@@ -843,8 +955,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -855,11 +967,17 @@
                  (phone_setup_csfb, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="902c96a4-858f-43ff-bd56-6d7d27004320")
     @TelephonyBaseTest.tel_test_wrap
@@ -871,8 +989,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -883,11 +1001,17 @@
                  (phone_setup_csfb, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="362a5396-ebda-4706-a73a-d805e5028fd7")
     @TelephonyBaseTest.tel_test_wrap
@@ -899,8 +1023,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -911,11 +1035,17 @@
                  (phone_setup_csfb, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="647bb859-46bc-4e3e-b6ab-7944d3bbcc26")
     @TelephonyBaseTest.tel_test_wrap
@@ -927,8 +1057,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -939,11 +1069,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="3688ea1f-a52d-4a35-9df4-d5ed0985e49b")
     @TelephonyBaseTest.tel_test_wrap
@@ -955,8 +1091,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -967,11 +1103,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="f4efc821-fbaf-4ec2-b89b-5a47354344f0")
     @TelephonyBaseTest.tel_test_wrap
@@ -983,8 +1125,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -995,11 +1137,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="2b1345b7-3b62-44bd-91ad-9c5a4925b0e1")
     @TelephonyBaseTest.tel_test_wrap
@@ -1011,8 +1159,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -1023,11 +1171,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="7b3fea22-114a-442e-aa12-dde3b6001681")
     @TelephonyBaseTest.tel_test_wrap
@@ -1039,8 +1193,8 @@
         3. Call from PhoneA to PhoneB, accept on PhoneA, hang up on PhoneA.
         4. Call from PhoneA to PhoneB, accept on PhoneA, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -1049,11 +1203,17 @@
                                                           (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_csfb, is_phone_in_call_csfb, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="91d751ea-40c8-4ffc-b9d3-03d0ad0902bd")
     @TelephonyBaseTest.tel_test_wrap
@@ -1066,7 +1226,7 @@
         4. Call from PhoneA to PhoneB, accept on PhoneA, hang up on PhoneB.
 
         Raises:
-            TestFailure if not success..
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -1075,7 +1235,9 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
         result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_3g, is_phone_in_call_3g, ads[1],
@@ -1083,7 +1245,7 @@
         self.tel_logger.set_result(result.result_value)
         if not result:
             raise signals.TestFailure("Failed",
-                extras={"fail_reason":str(result.result_value)})
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="df57c481-010a-4d21-a5c1-5116917871b2")
     @TelephonyBaseTest.tel_test_wrap
@@ -1097,8 +1259,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -1106,12 +1268,18 @@
                                                            (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_volte, is_phone_in_call_volte, ads[1],
             phone_idle_volte, is_phone_in_call_volte, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="b0712d8a-71cf-405f-910c-8592da082660")
     @TelephonyBaseTest.tel_test_wrap
@@ -1125,8 +1293,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -1138,12 +1306,18 @@
                    self.wifi_network_ssid, self.wifi_network_pass))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_iwlan, is_phone_in_call_iwlan, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="a7293d6c-0fdb-4842-984a-e4c6395fd41d")
     @TelephonyBaseTest.tel_test_wrap
@@ -1157,8 +1331,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -1170,12 +1344,18 @@
                    self.wifi_network_ssid, self.wifi_network_pass))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_iwlan, is_phone_in_call_iwlan, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="029af2a7-aba4-406b-9095-b32da57a7cdb")
     @TelephonyBaseTest.tel_test_wrap
@@ -1189,8 +1369,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -1202,12 +1382,18 @@
                    self.wifi_network_ssid, self.wifi_network_pass))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_iwlan, is_phone_in_call_iwlan, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="3c751d79-7159-4407-a63c-96f835dd6cb0")
     @TelephonyBaseTest.tel_test_wrap
@@ -1221,8 +1407,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -1234,12 +1420,18 @@
                    self.wifi_network_ssid, self.wifi_network_pass))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan, ads[1],
             phone_idle_iwlan, is_phone_in_call_iwlan, None,
             WAIT_TIME_IN_CALL_FOR_IMS)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="9deab765-e2da-4826-bae8-ba8755551a1b")
     @TelephonyBaseTest.tel_test_wrap
@@ -1253,8 +1445,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -1263,11 +1455,17 @@
                                                           (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_csfb, is_phone_in_call_csfb, ads[1],
             phone_idle_csfb, is_phone_in_call_csfb, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="54768178-818f-4126-9e50-4f49e43a6fd3")
     @TelephonyBaseTest.tel_test_wrap
@@ -1281,8 +1479,8 @@
         5. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         6. Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         # Turn OFF WiFi for Phone B
@@ -1291,11 +1489,17 @@
                  (phone_setup_voice_3g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_3g, is_phone_in_call_3g, ads[1],
             phone_idle_3g, is_phone_in_call_3g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="")
     @TelephonyBaseTest.tel_test_wrap
@@ -2641,8 +2845,8 @@
         Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -2650,11 +2854,17 @@
                  (phone_setup_voice_2g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_short_seq(
+        result = two_phone_call_short_seq(
             self.log, ads[0], phone_idle_2g, is_phone_in_call_2g, ads[1],
             phone_idle_2g, is_phone_in_call_2g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="947f3178-735b-4ac2-877c-a06a94972457")
     @TelephonyBaseTest.tel_test_wrap
@@ -2668,8 +2878,8 @@
         Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneB.
         Call from PhoneB to PhoneA, accept on PhoneA, hang up on PhoneA.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
 
@@ -2677,11 +2887,16 @@
                  (phone_setup_voice_2g, (self.log, ads[1]))]
         if not multithread_func(self.log, tasks):
             self.log.error("Phone Failed to Set Up Properly.")
-            return False
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-        return two_phone_call_long_seq(
+        result = two_phone_call_long_seq(
             self.log, ads[0], phone_idle_2g, is_phone_in_call_2g, ads[1],
             phone_idle_2g, is_phone_in_call_2g, None)
+        self.tel_logger.set_result(result.result_value)
+        if not result:
+            raise signals.TestFailure("Failed",
+                extras={"fail_reason": str(result.result_value)})
 
     @test_tracker_info(uuid="d109df55-ac2f-493f-9324-9be1d3d7d6d3")
     @TelephonyBaseTest.tel_test_wrap
@@ -3743,8 +3958,8 @@
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         5. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure is not success.
         """
         ads = self.android_devices
         try:
@@ -3760,11 +3975,17 @@
                      (phone_setup_voice_3g, (self.log, ads[1]))]
             if not multithread_func(self.log, tasks):
                 self.log.error("Phone Failed to Set Up Properly.")
-                return False
+                self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+                raise signals.TestFailure("Failed",
+                    extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-            return two_phone_call_short_seq(
+            result = two_phone_call_short_seq(
                 self.log, ads[0], phone_idle_iwlan, is_phone_in_call_iwlan,
                 ads[1], phone_idle_3g, is_phone_in_call_3g, None)
+            self.tel_logger.set_result(result.result_value)
+            if not result:
+                raise signals.TestFailure("Failed",
+                    extras={"fail_reason": str(result.result_value)})
         finally:
             remove_mobile_data_usage_limit(ads[0], subscriber_id)
 
@@ -3779,8 +4000,8 @@
         4. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneA.
         5. Call from PhoneA to PhoneB, accept on PhoneB, hang up on PhoneB.
 
-        Returns:
-            True if pass; False if fail.
+        Raises:
+            TestFailure if not success.
         """
         ads = self.android_devices
         try:
@@ -3792,12 +4013,18 @@
                      (phone_setup_volte, (self.log, ads[1]))]
             if not multithread_func(self.log, tasks):
                 self.log.error("Phone Failed to Set Up Properly.")
-                return False
+                self.tel_logger.set_result(CallResult("CALL_SETUP_FAILURE"))
+                raise signals.TestFailure("Failed",
+                    extras={"fail_reason": "Phone Failed to Set Up Properly."})
 
-            return two_phone_call_short_seq(
+            result = two_phone_call_short_seq(
                 self.log, ads[0], phone_idle_volte, is_phone_in_call_volte,
                 ads[1], phone_idle_volte, is_phone_in_call_volte, None,
                 WAIT_TIME_IN_CALL_FOR_IMS)
+            self.tel_logger.set_result(result.result_value)
+            if not result:
+                raise signals.TestFailure("Failed",
+                    extras={"fail_reason": str(result.result_value)})
         finally:
             remove_mobile_data_usage_limit(ads[0], subscriber_id)