1#!/usr/bin/env python3.4
2#
3#   Copyright 2016 - Google
4#
5#   Licensed under the Apache License, Version 2.0 (the "License");
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an "AS IS" BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16"""
17    Test Script for Live Network Telephony Conference Call
18"""
19
20import time
21from acts.test_decorators import test_tracker_info
22from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
23from acts.test_utils.tel.tel_defines import CALL_CAPABILITY_MANAGE_CONFERENCE
24from acts.test_utils.tel.tel_defines import CALL_CAPABILITY_MERGE_CONFERENCE
25from acts.test_utils.tel.tel_defines import CALL_CAPABILITY_SWAP_CONFERENCE
26from acts.test_utils.tel.tel_defines import CALL_PROPERTY_CONFERENCE
27from acts.test_utils.tel.tel_defines import CALL_STATE_ACTIVE
28from acts.test_utils.tel.tel_defines import CALL_STATE_HOLDING
29from acts.test_utils.tel.tel_defines import CARRIER_VZW
30from acts.test_utils.tel.tel_defines import GEN_3G
31from acts.test_utils.tel.tel_defines import RAT_3G
32from acts.test_utils.tel.tel_defines import PHONE_TYPE_CDMA
33from acts.test_utils.tel.tel_defines import PHONE_TYPE_GSM
34from acts.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING
35from acts.test_utils.tel.tel_defines import WAIT_TIME_IN_CALL
36from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_ONLY
37from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
38from acts.test_utils.tel.tel_test_utils import call_reject
39from acts.test_utils.tel.tel_test_utils import call_setup_teardown
40from acts.test_utils.tel.tel_test_utils import \
41    ensure_network_generation_for_subscription
42from acts.test_utils.tel.tel_test_utils import get_call_uri
43from acts.test_utils.tel.tel_test_utils import get_phone_number
44from acts.test_utils.tel.tel_test_utils import hangup_call
45from acts.test_utils.tel.tel_test_utils import is_uri_equivalent
46from acts.test_utils.tel.tel_test_utils import multithread_func
47from acts.test_utils.tel.tel_test_utils import num_active_calls
48from acts.test_utils.tel.tel_test_utils import set_call_state_listen_level
49from acts.test_utils.tel.tel_test_utils import setup_sim
50from acts.test_utils.tel.tel_test_utils import verify_incall_state
51from acts.test_utils.tel.tel_test_utils import wait_and_answer_call
52from acts.test_utils.tel.tel_voice_utils import get_cep_conference_call_id
53from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_1x
54from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_2g
55from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g
56from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb
57from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_iwlan
58from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
59from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_wcdma
60from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_2g
61from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_3g
62from acts.test_utils.tel.tel_voice_utils import phone_setup_csfb
63from acts.test_utils.tel.tel_voice_utils import phone_setup_iwlan
64from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_general
65from acts.test_utils.tel.tel_voice_utils import phone_setup_volte
66from acts.test_utils.tel.tel_voice_utils import swap_calls
67
68
69class TelLiveVoiceConfTest(TelephonyBaseTest):
70
71    # Note: Currently Conference Call do not verify voice.
72    # So even if test cases passed, does not necessarily means
73    # conference call functionality is working.
74    # Need to add code to check for voice.
75
76    def __init__(self, controllers):
77        TelephonyBaseTest.__init__(self, controllers)
78
79        self.wifi_network_ssid = self.user_params["wifi_network_ssid"]
80
81        try:
82            self.wifi_network_pass = self.user_params["wifi_network_pass"]
83        except KeyError:
84            self.wifi_network_pass = None
85
86    """ Private Test Utils """
87
88    def _get_expected_call_state(self, ad):
89        if ad.model in ("sailfish", "marlin") and "vzw" in [
90                sub["operator"] for sub in ad.cfg["subscription"].values()
91        ]:
92            return CALL_STATE_ACTIVE
93        return CALL_STATE_HOLDING
94
95    def _hangup_call(self, ad, device_description='Device'):
96        if not hangup_call(self.log, ad):
97            ad.log.error("Failed to hang up on %s", device_description)
98            return False
99        return True
100
101    def _three_phone_call_mo_add_mo(self, ads, phone_setups, verify_funcs):
102        """Use 3 phones to make MO calls.
103
104        Call from PhoneA to PhoneB, accept on PhoneB.
105        Call from PhoneA to PhoneC, accept on PhoneC.
106
107        Args:
108            ads: list of ad object.
109                The list should have three objects.
110            phone_setups: list of phone setup functions.
111                The list should have three objects.
112            verify_funcs: list of phone call verify functions.
113                The list should have three objects.
114
115        Returns:
116            If success, return 'call_AB' id in PhoneA.
117            if fail, return None.
118        """
119
120        class _CallException(Exception):
121            pass
122
123        try:
124            verify_func_a, verify_func_b, verify_func_c = verify_funcs
125            tasks = []
126            for ad, setup_func in zip(ads, phone_setups):
127                if setup_func is not None:
128                    tasks.append((setup_func, (self.log, ad)))
129            if tasks != [] and not multithread_func(self.log, tasks):
130                self.log.error("Phone Failed to Set Up Properly.")
131                raise _CallException("Setup failed.")
132            for ad in ads:
133                ad.droid.telecomCallClearCallList()
134                if num_active_calls(self.log, ad) != 0:
135                    ad.log.error("Phone Call List is not empty.")
136                    raise _CallException("Clear call list failed.")
137
138            self.log.info("Step1: Call From PhoneA to PhoneB.")
139            if not call_setup_teardown(
140                    self.log,
141                    ads[0],
142                    ads[1],
143                    ad_hangup=None,
144                    verify_caller_func=verify_func_a,
145                    verify_callee_func=verify_func_b):
146                raise _CallException("PhoneA call PhoneB failed.")
147
148            calls = ads[0].droid.telecomCallGetCallIds()
149            ads[0].log.info("Calls in PhoneA %s", calls)
150            if num_active_calls(self.log, ads[0]) != 1:
151                raise _CallException("Call list verify failed.")
152            call_ab_id = calls[0]
153
154            self.log.info("Step2: Call From PhoneA to PhoneC.")
155            if not call_setup_teardown(
156                    self.log,
157                    ads[0],
158                    ads[2],
159                    ad_hangup=None,
160                    verify_caller_func=verify_func_a,
161                    verify_callee_func=verify_func_c):
162                raise _CallException("PhoneA call PhoneC failed.")
163            if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]],
164                                       True):
165                raise _CallException("Not All phones are in-call.")
166
167        except _CallException:
168            return None
169
170        return call_ab_id
171
172    def _three_phone_call_mo_add_mt(self, ads, phone_setups, verify_funcs):
173        """Use 3 phones to make MO call and MT call.
174
175        Call from PhoneA to PhoneB, accept on PhoneB.
176        Call from PhoneC to PhoneA, accept on PhoneA.
177
178        Args:
179            ads: list of ad object.
180                The list should have three objects.
181            phone_setups: list of phone setup functions.
182                The list should have three objects.
183            verify_funcs: list of phone call verify functions.
184                The list should have three objects.
185
186        Returns:
187            If success, return 'call_AB' id in PhoneA.
188            if fail, return None.
189        """
190
191        class _CallException(Exception):
192            pass
193
194        try:
195            verify_func_a, verify_func_b, verify_func_c = verify_funcs
196            tasks = []
197            for ad, setup_func in zip(ads, phone_setups):
198                if setup_func is not None:
199                    tasks.append((setup_func, (self.log, ad)))
200            if tasks != [] and not multithread_func(self.log, tasks):
201                self.log.error("Phone Failed to Set Up Properly.")
202                raise _CallException("Setup failed.")
203            for ad in ads:
204                ad.droid.telecomCallClearCallList()
205                if num_active_calls(self.log, ad) != 0:
206                    ad.log.error("Phone Call List is not empty.")
207                    raise _CallException("Clear call list failed.")
208
209            self.log.info("Step1: Call From PhoneA to PhoneB.")
210            if not call_setup_teardown(
211                    self.log,
212                    ads[0],
213                    ads[1],
214                    ad_hangup=None,
215                    verify_caller_func=verify_func_a,
216                    verify_callee_func=verify_func_b):
217                raise _CallException("PhoneA call PhoneB failed.")
218
219            calls = ads[0].droid.telecomCallGetCallIds()
220            ads[0].log.info("Calls in PhoneA %s", calls)
221            if num_active_calls(self.log, ads[0]) != 1:
222                raise _CallException("Call list verify failed.")
223            call_ab_id = calls[0]
224
225            self.log.info("Step2: Call From PhoneC to PhoneA.")
226            if not call_setup_teardown(
227                    self.log,
228                    ads[2],
229                    ads[0],
230                    ad_hangup=None,
231                    verify_caller_func=verify_func_c,
232                    verify_callee_func=verify_func_a):
233                raise _CallException("PhoneA call PhoneC failed.")
234            if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]],
235                                       True):
236                raise _CallException("Not All phones are in-call.")
237
238        except _CallException:
239            return None
240
241        return call_ab_id
242
243    def _three_phone_call_mo_add_mt_reject(self, ads, verify_funcs, reject):
244        """Use 3 phones to make MO call and MT call.
245
246        Call from PhoneA to PhoneB, accept on PhoneB.
247        Call from PhoneC to PhoneA. PhoneA receive incoming call.
248            if reject is True, then reject the call on PhoneA.
249            if reject if False, then just ignore the incoming call on PhoneA.
250
251        Args:
252            ads: list of ad object.
253                The list should have three objects.
254            verify_funcs: list of phone call verify functions for
255                PhoneA and PhoneB. The list should have two objects.
256
257        Returns:
258            True if no error happened.
259        """
260
261        class _CallException(Exception):
262            pass
263
264        try:
265            verify_func_a, verify_func_b = verify_funcs
266            self.log.info("Step1: Call From PhoneA to PhoneB.")
267            if not call_setup_teardown(
268                    self.log,
269                    ads[0],
270                    ads[1],
271                    ad_hangup=None,
272                    verify_caller_func=verify_func_a,
273                    verify_callee_func=verify_func_b):
274                raise _CallException("PhoneA call PhoneB failed.")
275
276            self.log.info("Step2: Call From PhoneC to PhoneA then decline.")
277            if not call_reject(self.log, ads[2], ads[0], reject):
278                raise _CallException("PhoneC call PhoneA then decline failed.")
279            time.sleep(WAIT_TIME_IN_CALL)
280            if not verify_incall_state(self.log, [ads[0], ads[1]], True):
281                raise _CallException("PhoneA and PhoneB are not in call.")
282
283        except _CallException:
284            return False
285
286        return True
287
288    def _three_phone_call_mt_add_mt(self, ads, phone_setups, verify_funcs):
289        """Use 3 phones to make MT call and MT call.
290
291        Call from PhoneB to PhoneA, accept on PhoneA.
292        Call from PhoneC to PhoneA, accept on PhoneA.
293
294        Args:
295            ads: list of ad object.
296                The list should have three objects.
297            phone_setups: list of phone setup functions.
298                The list should have three objects.
299            verify_funcs: list of phone call verify functions.
300                The list should have three objects.
301
302        Returns:
303            If success, return 'call_AB' id in PhoneA.
304            if fail, return None.
305        """
306
307        class _CallException(Exception):
308            pass
309
310        try:
311            verify_func_a, verify_func_b, verify_func_c = verify_funcs
312            tasks = []
313            for ad, setup_func in zip(ads, phone_setups):
314                if setup_func is not None:
315                    tasks.append((setup_func, (self.log, ad)))
316            if tasks != [] and not multithread_func(self.log, tasks):
317                self.log.error("Phone Failed to Set Up Properly.")
318                raise _CallException("Setup failed.")
319            for ad in ads:
320                ad.droid.telecomCallClearCallList()
321                if num_active_calls(self.log, ad) != 0:
322                    ad.log.error("Phone Call List is not empty.")
323                    raise _CallException("Clear call list failed.")
324
325            self.log.info("Step1: Call From PhoneB to PhoneA.")
326            if not call_setup_teardown(
327                    self.log,
328                    ads[1],
329                    ads[0],
330                    ad_hangup=None,
331                    verify_caller_func=verify_func_b,
332                    verify_callee_func=verify_func_a):
333                raise _CallException("PhoneB call PhoneA failed.")
334
335            calls = ads[0].droid.telecomCallGetCallIds()
336            ads[0].log.info("Calls in PhoneA %s", calls)
337            if num_active_calls(self.log, ads[0]) != 1:
338                raise _CallException("Call list verify failed.")
339            call_ab_id = calls[0]
340
341            self.log.info("Step2: Call From PhoneC to PhoneA.")
342            if not call_setup_teardown(
343                    self.log,
344                    ads[2],
345                    ads[0],
346                    ad_hangup=None,
347                    verify_caller_func=verify_func_c,
348                    verify_callee_func=verify_func_a):
349                raise _CallException("PhoneA call PhoneC failed.")
350            if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]],
351                                       True):
352                raise _CallException("Not All phones are in-call.")
353
354        except _CallException:
355            return None
356
357        return call_ab_id
358
359    def _test_1x_mo_mo_add(self):
360        """Test multi call feature in 1x call.
361
362        PhoneA (1x) call PhoneB, accept on PhoneB.
363        PhoneA (1x) call PhoneC, accept on PhoneC.
364
365        Returns:
366            call_ab_id, call_ac_id, call_conf_id if succeed;
367            None, None, None if failed.
368
369        """
370        ads = self.android_devices
371
372        # make sure PhoneA is CDMA phone before proceed.
373        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
374            ads[0].log.error("not CDMA phone, abort this 1x test.")
375            return None, None, None
376
377        call_ab_id = self._three_phone_call_mo_add_mo(
378            [ads[0], ads[1], ads[2]], [
379                phone_setup_voice_3g, phone_setup_voice_general,
380                phone_setup_voice_general
381            ], [is_phone_in_call_1x, None, None])
382        if call_ab_id is None:
383            self.log.error("Failed to get call_ab_id")
384            return None, None, None
385
386        calls = ads[0].droid.telecomCallGetCallIds()
387        ads[0].log.info("Calls in PhoneA %s", calls)
388        if num_active_calls(self.log, ads[0]) != 3:
389            return None, None, None
390        for call_id in calls:
391            if (CALL_CAPABILITY_MERGE_CONFERENCE in ads[0]
392                    .droid.telecomCallGetCapabilities(call_id)):
393                call_conf_id = call_id
394            elif call_id != call_ab_id:
395                call_ac_id = call_id
396
397        return call_ab_id, call_ac_id, call_conf_id
398
399    def _test_1x_mo_mt_add_swap_x(self, num_swaps):
400        """Test multi call feature in 1x call.
401
402        PhoneA (1x) call PhoneB, accept on PhoneB.
403        PhoneC call PhoneA (1x), accept on PhoneA.
404        Swap active call on PhoneA.(N times)
405
406        Returns:
407            call_ab_id, call_ac_id, call_conf_id if succeed;
408            None, None, None if failed.
409
410        """
411        ads = self.android_devices
412
413        # make sure PhoneA is CDMA phone before proceed.
414        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
415            ads[0].log.error("not CDMA phone, abort this 1x test.")
416            return None, None, None
417
418        call_ab_id = self._three_phone_call_mo_add_mt(
419            [ads[0], ads[1], ads[2]], [
420                phone_setup_voice_3g, phone_setup_voice_general,
421                phone_setup_voice_general
422            ], [is_phone_in_call_1x, None, None])
423        if call_ab_id is None:
424            self.log.error("Failed to get call_ab_id")
425            return None, None, None
426
427        call_conf_id = None
428        calls = ads[0].droid.telecomCallGetCallIds()
429        ads[0].log.info("Calls in PhoneA %s", calls)
430        if num_active_calls(self.log, ads[0]) != 3:
431            return None, None, None
432        for call_id in calls:
433            if (CALL_CAPABILITY_SWAP_CONFERENCE in ads[0]
434                    .droid.telecomCallGetCapabilities(call_id)):
435                call_conf_id = call_id
436            elif call_id != call_ab_id:
437                call_ac_id = call_id
438
439        if num_swaps > 0:
440            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
441            if not swap_calls(
442                    self.log,
443                    ads,
444                    call_ab_id,
445                    call_ac_id,
446                    num_swaps,
447                    check_call_status=False):
448                self.log.error("Swap test failed.")
449                return None, None, None
450
451        return call_ab_id, call_ac_id, call_conf_id
452
453    def _test_1x_mt_mt_add_swap_x(self, num_swaps):
454        """Test multi call feature in 1x call.
455
456        PhoneB call PhoneA (1x), accept on PhoneA.
457        PhoneC call PhoneA (1x), accept on PhoneA.
458        Swap active call on PhoneA.(N times)
459
460        Returns:
461            call_ab_id, call_ac_id, call_conf_id if succeed;
462            None, None, None if failed.
463
464        """
465        ads = self.android_devices
466
467        # make sure PhoneA is CDMA phone before proceed.
468        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
469            ads[0].log.error("not CDMA phone, abort this 1x test.")
470            return None, None, None
471
472        call_ab_id = self._three_phone_call_mt_add_mt(
473            [ads[0], ads[1], ads[2]], [
474                phone_setup_voice_3g, phone_setup_voice_general,
475                phone_setup_voice_general
476            ], [is_phone_in_call_1x, None, None])
477        if call_ab_id is None:
478            self.log.error("Failed to get call_ab_id")
479            return None, None, None
480
481        call_conf_id = None
482        calls = ads[0].droid.telecomCallGetCallIds()
483        ads[0].log.info("Calls in PhoneA %s", calls)
484        if num_active_calls(self.log, ads[0]) != 3:
485            return None, None, None
486        for call_id in calls:
487            if (CALL_CAPABILITY_SWAP_CONFERENCE in ads[0]
488                    .droid.telecomCallGetCapabilities(call_id)):
489                call_conf_id = call_id
490            elif call_id != call_ab_id:
491                call_ac_id = call_id
492
493        if num_swaps > 0:
494            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
495            if not swap_calls(
496                    self.log,
497                    ads,
498                    call_ab_id,
499                    call_ac_id,
500                    num_swaps,
501                    check_call_status=False):
502                self.log.error("Swap test failed.")
503                return None, None, None
504
505        return call_ab_id, call_ac_id, call_conf_id
506
507    def _test_1x_multi_call_drop_from_participant(self, host, first_drop_ad,
508                                                  second_drop_ad):
509        """Test private function to drop call from participant in 1x multi call.
510
511        Host(1x) is in multi call scenario with first_drop_ad and second_drop_ad.
512        Drop call on first_drop_ad.
513        Verify call continues between host and second_drop_ad.
514        Drop call on second_drop_ad and verify host also ends.
515
516        Args:
517            host: android device object for multi-call/conference-call host.
518            first_drop_ad: android device object for call participant, end call
519                on this participant first.
520            second_drop_ad: android device object for call participant, end call
521                on this participant second.
522
523        Returns:
524            True if no error happened. Otherwise False.
525        """
526        self.log.info("Drop 1st call.")
527        if not self._hangup_call(first_drop_ad):
528            return False
529        time.sleep(WAIT_TIME_IN_CALL)
530        calls = host.droid.telecomCallGetCallIds()
531        host.log.info("Calls list: %s", calls)
532        if num_active_calls(self.log, host) != 3:
533            return False
534        if not verify_incall_state(self.log, [host, second_drop_ad], True):
535            return False
536        if not verify_incall_state(self.log, [first_drop_ad], False):
537            return False
538
539        self.log.info("Drop 2nd call.")
540        if not self._hangup_call(second_drop_ad):
541            return False
542        time.sleep(WAIT_TIME_IN_CALL)
543        if not verify_incall_state(
544                self.log, [host, second_drop_ad, first_drop_ad], False):
545            return False
546        return True
547
548    def _test_1x_multi_call_drop_from_host(self, host, active_participant_ad,
549                                           held_participant_ad):
550        """Test private function to drop call from host in 1x multi call.
551
552        Host(1x) is in multi call scenario with first_drop_ad and second_drop_ad.
553        Drop call on host. Then active_participant_ad should ends as well.
554        Host should receive a call back from held_participant_ad. Answer on host.
555        Drop call on host. Then verify held_participant_ad ends as well.
556
557        Args:
558            host: android device object for multi-call/conference-call host.
559            active_participant_ad: android device object for the current active
560                call participant.
561            held_participant_ad: android device object for the current held
562                call participant.
563
564        Returns:
565            True if no error happened. Otherwise False.
566        """
567        self.log.info("Drop current call on Host.")
568        if not self._hangup_call(host, "Host"):
569            return False
570        if not wait_and_answer_call(self.log, host,
571                                    get_phone_number(self.log,
572                                                     held_participant_ad)):
573            self.log.error("Did not receive call back.")
574            return False
575        time.sleep(WAIT_TIME_IN_CALL)
576        if not verify_incall_state(self.log, [host, held_participant_ad],
577                                   True):
578            return False
579        if not verify_incall_state(self.log, [active_participant_ad], False):
580            return False
581
582        self.log.info("Drop current call on Host.")
583        if not self._hangup_call(host, "Host"):
584            return False
585        time.sleep(WAIT_TIME_IN_CALL)
586        if not verify_incall_state(
587                self.log, [host, held_participant_ad, active_participant_ad],
588                False):
589            return False
590        return True
591
592    def _test_1x_conf_call_drop_from_host(self, host, participant_list):
593        """Test private function to drop call from host in 1x conference call.
594
595        Host(1x) is in conference call scenario with phones in participant_list.
596        End call on host. Then all phones in participant_list should end call.
597
598        Args:
599            host: android device object for multi-call/conference-call host.
600            participant_list: android device objects list for all other
601                participants in multi-call/conference-call.
602
603        Returns:
604            True if no error happened. Otherwise False.
605        """
606        self.log.info("Drop conference call on Host.")
607        if not self._hangup_call(host, "Host"):
608            return False
609        time.sleep(WAIT_TIME_IN_CALL)
610        if not verify_incall_state(self.log, [host], False):
611            return False
612        if not verify_incall_state(self.log, participant_list, False):
613            return False
614        return True
615
616    def _test_1x_merge_conference(self, host, participant_list, call_conf_id):
617        """Test private function to merge to conference in 1x multi call scenario.
618
619        Host(1x) is in multi call scenario with phones in participant_list.
620        Merge to conference on host.
621        Verify merge succeed.
622
623        Args:
624            host: android device object for multi-call/conference-call host.
625            participant_list: android device objects list for all other
626                participants in multi-call/conference-call.
627            call_conf_id: conference call id in host android device object.
628
629        Returns:
630            True if no error happened. Otherwise False.
631        """
632        host.droid.telecomCallMergeToConf(call_conf_id)
633        time.sleep(WAIT_TIME_IN_CALL)
634        calls = host.droid.telecomCallGetCallIds()
635        host.log.info("Calls in Phone %s", calls)
636        if num_active_calls(self.log, host) != 3:
637            return False
638        if not verify_incall_state(self.log, [host], True):
639            return False
640        if not verify_incall_state(self.log, participant_list, True):
641            return False
642        if (CALL_CAPABILITY_MERGE_CONFERENCE in
643                host.droid.telecomCallGetCapabilities(call_conf_id)):
644            self.log.error("Merge conference failed.")
645            return False
646        return True
647
648    def _test_volte_mo_mo_add_volte_swap_x(self, num_swaps):
649        """Test swap feature in VoLTE call.
650
651        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
652        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
653        Swap active call on PhoneA.(N times)
654
655        Args:
656            num_swaps: do swap for 'num_swaps' times.
657                This value can be 0 (no swap operation).
658
659        Returns:
660            call_ab_id, call_ac_id if succeed;
661            None, None if failed.
662
663        """
664        ads = self.android_devices
665
666        call_ab_id = self._three_phone_call_mo_add_mo(
667            [ads[0], ads[1], ads[2]],
668            [phone_setup_volte, phone_setup_volte, phone_setup_volte], [
669                is_phone_in_call_volte, is_phone_in_call_volte,
670                is_phone_in_call_volte
671            ])
672        if call_ab_id is None:
673            self.log.error("Failed to get call_ab_id")
674            return None, None
675
676        calls = ads[0].droid.telecomCallGetCallIds()
677        ads[0].log.info("Calls in PhoneA %s", calls)
678        if num_active_calls(self.log, ads[0]) != 2:
679            return None, None
680        if calls[0] == call_ab_id:
681            call_ac_id = calls[1]
682        else:
683            call_ac_id = calls[0]
684
685        if num_swaps > 0:
686            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
687            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
688                              num_swaps):
689                self.log.error("Swap test failed.")
690                return None, None
691
692        return call_ab_id, call_ac_id
693
694    def _test_volte_mo_mt_add_volte_swap_x(self, num_swaps):
695        """Test swap feature in VoLTE call.
696
697        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
698        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
699        Swap active call on PhoneA. (N times)
700
701        Args:
702            num_swaps: do swap for 'num_swaps' times.
703                This value can be 0 (no swap operation).
704
705        Returns:
706            call_ab_id, call_ac_id if succeed;
707            None, None if failed.
708
709        """
710        ads = self.android_devices
711
712        call_ab_id = self._three_phone_call_mo_add_mt(
713            [ads[0], ads[1], ads[2]],
714            [phone_setup_volte, phone_setup_volte, phone_setup_volte], [
715                is_phone_in_call_volte, is_phone_in_call_volte,
716                is_phone_in_call_volte
717            ])
718        if call_ab_id is None:
719            self.log.error("Failed to get call_ab_id")
720            return None, None
721
722        calls = ads[0].droid.telecomCallGetCallIds()
723        ads[0].log.info("Calls in PhoneA %s", calls)
724        if num_active_calls(self.log, ads[0]) != 2:
725            return None, None
726        if calls[0] == call_ab_id:
727            call_ac_id = calls[1]
728        else:
729            call_ac_id = calls[0]
730
731        if num_swaps > 0:
732            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
733            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
734                              num_swaps):
735                self.log.error("Swap test failed.")
736                return None, None
737
738        return call_ab_id, call_ac_id
739
740    def _test_volte_mt_mt_add_volte_swap_x(self, num_swaps):
741        """Test swap feature in VoLTE call.
742
743        PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
744        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
745        Swap active call on PhoneA. (N times)
746
747        Args:
748            num_swaps: do swap for 'num_swaps' times.
749                This value can be 0 (no swap operation).
750
751        Returns:
752            call_ab_id, call_ac_id if succeed;
753            None, None if failed.
754
755        """
756        ads = self.android_devices
757
758        call_ab_id = self._three_phone_call_mt_add_mt(
759            [ads[0], ads[1], ads[2]],
760            [phone_setup_volte, phone_setup_volte, phone_setup_volte], [
761                is_phone_in_call_volte, is_phone_in_call_volte,
762                is_phone_in_call_volte
763            ])
764        if call_ab_id is None:
765            self.log.error("Failed to get call_ab_id")
766            return None, None
767
768        calls = ads[0].droid.telecomCallGetCallIds()
769        ads[0].log.info("Calls in PhoneA %s", calls)
770        if num_active_calls(self.log, ads[0]) != 2:
771            return None, None
772        if calls[0] == call_ab_id:
773            call_ac_id = calls[1]
774        else:
775            call_ac_id = calls[0]
776
777        if num_swaps > 0:
778            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
779            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
780                              num_swaps):
781                self.log.error("Swap test failed.")
782                return None, None
783
784        return call_ab_id, call_ac_id
785
786    def _test_volte_mo_mo_add_wcdma_swap_x(self, num_swaps):
787        """Test swap feature in VoLTE call.
788
789        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
790        PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
791        Swap active call on PhoneA.(N times)
792
793        Args:
794            num_swaps: do swap for 'num_swaps' times.
795                This value can be 0 (no swap operation).
796
797        Returns:
798            call_ab_id, call_ac_id if succeed;
799            None, None if failed.
800
801        """
802        ads = self.android_devices
803
804        # make sure PhoneB and PhoneC are GSM phone before proceed.
805        for ad in [ads[1], ads[2]]:
806            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
807                ad.log.error("not GSM phone, abort wcdma swap test.")
808                return None, None
809
810        call_ab_id = self._three_phone_call_mo_add_mo(
811            [ads[0], ads[1], ads[2]],
812            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g], [
813                is_phone_in_call_volte, is_phone_in_call_wcdma,
814                is_phone_in_call_wcdma
815            ])
816        if call_ab_id is None:
817            self.log.error("Failed to get call_ab_id")
818            return None, None
819
820        calls = ads[0].droid.telecomCallGetCallIds()
821        ads[0].log.info("Calls in PhoneA %s", calls)
822        if num_active_calls(self.log, ads[0]) != 2:
823            return None, None
824        if calls[0] == call_ab_id:
825            call_ac_id = calls[1]
826        else:
827            call_ac_id = calls[0]
828
829        if num_swaps > 0:
830            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
831            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
832                              num_swaps):
833                self.log.error("Swap test failed.")
834                return None, None
835
836        return call_ab_id, call_ac_id
837
838    def _test_volte_mo_mt_add_wcdma_swap_x(self, num_swaps):
839        """Test swap feature in VoLTE call.
840
841        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
842        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
843        Swap active call on PhoneA.(N times)
844
845        Args:
846            num_swaps: do swap for 'num_swaps' times.
847                This value can be 0 (no swap operation).
848
849        Returns:
850            call_ab_id, call_ac_id if succeed;
851            None, None if failed.
852
853        """
854        ads = self.android_devices
855
856        # make sure PhoneB and PhoneC are GSM phone before proceed.
857        for ad in [ads[1], ads[2]]:
858            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
859                ad.log.error("not GSM phone, abort wcdma swap test.")
860                return None, None
861
862        call_ab_id = self._three_phone_call_mo_add_mt(
863            [ads[0], ads[1], ads[2]],
864            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g], [
865                is_phone_in_call_volte, is_phone_in_call_wcdma,
866                is_phone_in_call_wcdma
867            ])
868        if call_ab_id is None:
869            self.log.error("Failed to get call_ab_id")
870            return None, None
871
872        calls = ads[0].droid.telecomCallGetCallIds()
873        ads[0].log.info("Calls in PhoneA %s", calls)
874        if num_active_calls(self.log, ads[0]) != 2:
875            return None, None
876        if calls[0] == call_ab_id:
877            call_ac_id = calls[1]
878        else:
879            call_ac_id = calls[0]
880
881        if num_swaps > 0:
882            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
883            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
884                              num_swaps):
885                self.log.error("Swap test failed.")
886                return None, None
887
888        return call_ab_id, call_ac_id
889
890    def _test_volte_mt_mt_add_wcdma_swap_x(self, num_swaps):
891        """Test swap feature in VoLTE call.
892
893        PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
894        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
895        Swap active call on PhoneA.(N times)
896
897        Args:
898            num_swaps: do swap for 'num_swaps' times.
899                This value can be 0 (no swap operation).
900
901        Returns:
902            call_ab_id, call_ac_id if succeed;
903            None, None if failed.
904
905        """
906        ads = self.android_devices
907
908        # make sure PhoneB and PhoneC are GSM phone before proceed.
909        for ad in [ads[1], ads[2]]:
910            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
911                ad.log.error("not GSM phone, abort wcdma swap test.")
912                return None, None
913
914        call_ab_id = self._three_phone_call_mt_add_mt(
915            [ads[0], ads[1], ads[2]],
916            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g], [
917                is_phone_in_call_volte, is_phone_in_call_wcdma,
918                is_phone_in_call_wcdma
919            ])
920        if call_ab_id is None:
921            self.log.error("Failed to get call_ab_id")
922            return None, None
923
924        calls = ads[0].droid.telecomCallGetCallIds()
925        ads[0].log.info("Calls in PhoneA %s", calls)
926        if num_active_calls(self.log, ads[0]) != 2:
927            return None, None
928        if calls[0] == call_ab_id:
929            call_ac_id = calls[1]
930        else:
931            call_ac_id = calls[0]
932
933        if num_swaps > 0:
934            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
935            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
936                              num_swaps):
937                self.log.error("Swap test failed.")
938                return None, None
939
940        return call_ab_id, call_ac_id
941
942    def _test_volte_mo_mo_add_1x_swap_x(self, num_swaps):
943        """Test swap feature in VoLTE call.
944
945        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
946        PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
947        Swap active call on PhoneA.(N times)
948
949        Args:
950            num_swaps: do swap for 'num_swaps' times.
951                This value can be 0 (no swap operation).
952
953        Returns:
954            call_ab_id, call_ac_id if succeed;
955            None, None if failed.
956
957        """
958        ads = self.android_devices
959
960        # make sure PhoneB and PhoneC are CDMA phone before proceed.
961        for ad in [ads[1], ads[2]]:
962            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
963                ad.log.error("not CDMA phone, abort 1x swap test.")
964                return None, None
965
966        call_ab_id = self._three_phone_call_mo_add_mo(
967            [ads[0], ads[1], ads[2]],
968            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g],
969            [is_phone_in_call_volte, is_phone_in_call_1x, is_phone_in_call_1x])
970        if call_ab_id is None:
971            self.log.error("Failed to get call_ab_id")
972            return None, None
973
974        calls = ads[0].droid.telecomCallGetCallIds()
975        ads[0].log.info("Calls in PhoneA %s", calls)
976        if num_active_calls(self.log, ads[0]) != 2:
977            return None, None
978        if calls[0] == call_ab_id:
979            call_ac_id = calls[1]
980        else:
981            call_ac_id = calls[0]
982
983        if num_swaps > 0:
984            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
985            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
986                              num_swaps):
987                self.log.error("Swap test failed.")
988                return None, None
989
990        return call_ab_id, call_ac_id
991
992    def _test_volte_mo_mt_add_1x_swap_x(self, num_swaps):
993        """Test swap feature in VoLTE call.
994
995        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
996        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
997        Swap active call on PhoneA.(N times)
998
999        Args:
1000            num_swaps: do swap for 'num_swaps' times.
1001                This value can be 0 (no swap operation).
1002
1003        Returns:
1004            call_ab_id, call_ac_id if succeed;
1005            None, None if failed.
1006
1007        """
1008        ads = self.android_devices
1009
1010        # make sure PhoneB and PhoneC are CDMA phone before proceed.
1011        for ad in [ads[1], ads[2]]:
1012            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
1013                ad.log.error("not CDMA phone, abort 1x swap test.")
1014                return None, None
1015
1016        call_ab_id = self._three_phone_call_mo_add_mt(
1017            [ads[0], ads[1], ads[2]],
1018            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g],
1019            [is_phone_in_call_volte, is_phone_in_call_1x, is_phone_in_call_1x])
1020        if call_ab_id is None:
1021            self.log.error("Failed to get call_ab_id")
1022            return None, None
1023
1024        calls = ads[0].droid.telecomCallGetCallIds()
1025        ads[0].log.info("Calls in PhoneA %s", calls)
1026        if num_active_calls(self.log, ads[0]) != 2:
1027            return None, None
1028        if calls[0] == call_ab_id:
1029            call_ac_id = calls[1]
1030        else:
1031            call_ac_id = calls[0]
1032
1033        if num_swaps > 0:
1034            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1035            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1036                              num_swaps):
1037                self.log.error("Swap test failed.")
1038                return None, None
1039
1040        return call_ab_id, call_ac_id
1041
1042    def _test_volte_mt_mt_add_1x_swap_x(self, num_swaps):
1043        """Test swap feature in VoLTE call.
1044
1045        PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
1046        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
1047        Swap active call on PhoneA.(N times)
1048
1049        Args:
1050            num_swaps: do swap for 'num_swaps' times.
1051                This value can be 0 (no swap operation).
1052
1053        Returns:
1054            call_ab_id, call_ac_id if succeed;
1055            None, None if failed.
1056
1057        """
1058        ads = self.android_devices
1059
1060        # make sure PhoneB and PhoneC are CDMA phone before proceed.
1061        for ad in [ads[1], ads[2]]:
1062            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
1063                self.log.error("not CDMA phone, abort 1x swap test.")
1064                return None, None
1065
1066        call_ab_id = self._three_phone_call_mt_add_mt(
1067            [ads[0], ads[1], ads[2]],
1068            [phone_setup_volte, phone_setup_voice_3g, phone_setup_voice_3g],
1069            [is_phone_in_call_volte, is_phone_in_call_1x, is_phone_in_call_1x])
1070        if call_ab_id is None:
1071            self.log.error("Failed to get call_ab_id")
1072            return None, None
1073
1074        calls = ads[0].droid.telecomCallGetCallIds()
1075        ads[0].log.info("Calls in PhoneA %s", calls)
1076        if num_active_calls(self.log, ads[0]) != 2:
1077            return None, None
1078        if calls[0] == call_ab_id:
1079            call_ac_id = calls[1]
1080        else:
1081            call_ac_id = calls[0]
1082
1083        if num_swaps > 0:
1084            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1085            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1086                              num_swaps):
1087                self.log.error("Swap test failed.")
1088                return None, None
1089
1090        return call_ab_id, call_ac_id
1091
1092    def _test_wcdma_mo_mo_add_swap_x(self, num_swaps):
1093        """Test swap feature in WCDMA call.
1094
1095        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
1096        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
1097        Swap active call on PhoneA. (N times)
1098
1099        Args:
1100            num_swaps: do swap for 'num_swaps' times.
1101                This value can be 0 (no swap operation).
1102
1103        Returns:
1104            call_ab_id, call_ac_id if succeed;
1105            None, None if failed.
1106
1107        """
1108        ads = self.android_devices
1109
1110        # make sure PhoneA is GSM phone before proceed.
1111        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
1112            ad.log.error("not GSM phone, abort wcdma swap test.")
1113            return None, None
1114
1115        call_ab_id = self._three_phone_call_mo_add_mo(
1116            [ads[0], ads[1], ads[2]], [
1117                phone_setup_voice_3g, phone_setup_voice_general,
1118                phone_setup_voice_general
1119            ], [is_phone_in_call_3g, None, None])
1120        if call_ab_id is None:
1121            self.log.error("Failed to get call_ab_id")
1122            return None, None
1123
1124        calls = ads[0].droid.telecomCallGetCallIds()
1125        ads[0].log.info("Calls in PhoneA %s", calls)
1126        if num_active_calls(self.log, ads[0]) != 2:
1127            return None, None
1128        if calls[0] == call_ab_id:
1129            call_ac_id = calls[1]
1130        else:
1131            call_ac_id = calls[0]
1132
1133        if num_swaps > 0:
1134            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1135            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1136                              num_swaps):
1137                self.log.error("Swap test failed.")
1138                return None, None
1139
1140        return call_ab_id, call_ac_id
1141
1142    def _test_wcdma_mt_mt_add_swap_x(self, num_swaps):
1143        """Test swap feature in WCDMA call.
1144
1145        PhoneB call PhoneA (WCDMA), accept on PhoneA.
1146        PhoneC call PhoneA (WCDMA), accept on PhoneA.
1147        Swap active call on PhoneA. (N times)
1148
1149        Args:
1150            num_swaps: do swap for 'num_swaps' times.
1151                This value can be 0 (no swap operation).
1152
1153        Returns:
1154            call_ab_id, call_ac_id if succeed;
1155            None, None if failed.
1156
1157        """
1158        ads = self.android_devices
1159
1160        # make sure PhoneA is GSM phone before proceed.
1161        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
1162            ads[0].log.error("not GSM phone, abort wcdma swap test.")
1163            return None, None
1164
1165        call_ab_id = self._three_phone_call_mt_add_mt(
1166            [ads[0], ads[1], ads[2]], [
1167                phone_setup_voice_3g, phone_setup_voice_general,
1168                phone_setup_voice_general
1169            ], [is_phone_in_call_3g, None, None])
1170        if call_ab_id is None:
1171            self.log.error("Failed to get call_ab_id")
1172            return None, None
1173
1174        calls = ads[0].droid.telecomCallGetCallIds()
1175        ads[0].log.info("Calls in PhoneA %s", calls)
1176        if num_active_calls(self.log, ads[0]) != 2:
1177            return None, None
1178        if calls[0] == call_ab_id:
1179            call_ac_id = calls[1]
1180        else:
1181            call_ac_id = calls[0]
1182
1183        if num_swaps > 0:
1184            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1185            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1186                              num_swaps):
1187                self.log.error("Swap test failed.")
1188                return None, None
1189
1190        return call_ab_id, call_ac_id
1191
1192    def _test_wcdma_mo_mt_add_swap_x(self, num_swaps):
1193        """Test swap feature in WCDMA call.
1194
1195        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
1196        PhoneC call PhoneA (WCDMA), accept on PhoneA.
1197        Swap active call on PhoneA. (N times)
1198
1199        Args:
1200            num_swaps: do swap for 'num_swaps' times.
1201                This value can be 0 (no swap operation).
1202
1203        Returns:
1204            call_ab_id, call_ac_id if succeed;
1205            None, None if failed.
1206
1207        """
1208        ads = self.android_devices
1209
1210        # make sure PhoneA is GSM phone before proceed.
1211        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
1212            ads[0].log.error("not GSM phone, abort wcdma swap test.")
1213            return None, None
1214
1215        call_ab_id = self._three_phone_call_mo_add_mt(
1216            [ads[0], ads[1], ads[2]], [
1217                phone_setup_voice_3g, phone_setup_voice_general,
1218                phone_setup_voice_general
1219            ], [is_phone_in_call_wcdma, None, None])
1220        if call_ab_id is None:
1221            self.log.error("Failed to get call_ab_id")
1222            return None, None
1223
1224        calls = ads[0].droid.telecomCallGetCallIds()
1225        ads[0].log.info("Calls in PhoneA %s", calls)
1226        if num_active_calls(self.log, ads[0]) != 2:
1227            return None, None
1228        if calls[0] == call_ab_id:
1229            call_ac_id = calls[1]
1230        else:
1231            call_ac_id = calls[0]
1232
1233        if num_swaps > 0:
1234            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1235            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1236                              num_swaps):
1237                self.log.error("Swap test failed.")
1238                return None, None
1239
1240        return call_ab_id, call_ac_id
1241
1242    def _test_csfb_wcdma_mo_mo_add_swap_x(self, num_swaps):
1243        """Test swap feature in CSFB WCDMA call.
1244
1245        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
1246        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
1247        Swap active call on PhoneA. (N times)
1248
1249        Args:
1250            num_swaps: do swap for 'num_swaps' times.
1251                This value can be 0 (no swap operation).
1252
1253        Returns:
1254            call_ab_id, call_ac_id if succeed;
1255            None, None if failed.
1256
1257        """
1258        ads = self.android_devices
1259
1260        # make sure PhoneA is GSM phone before proceed.
1261        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
1262            ads[0].log.error("not GSM phone, abort wcdma swap test.")
1263            return None, None
1264
1265        call_ab_id = self._three_phone_call_mo_add_mo(
1266            [ads[0], ads[1], ads[2]], [
1267                phone_setup_csfb, phone_setup_voice_general,
1268                phone_setup_voice_general
1269            ], [is_phone_in_call_csfb, None, None])
1270        if call_ab_id is None:
1271            self.log.error("Failed to get call_ab_id")
1272            return None, None
1273
1274        calls = ads[0].droid.telecomCallGetCallIds()
1275        ads[0].log.info("Calls in PhoneA %s", calls)
1276        if num_active_calls(self.log, ads[0]) != 2:
1277            return None, None
1278        if calls[0] == call_ab_id:
1279            call_ac_id = calls[1]
1280        else:
1281            call_ac_id = calls[0]
1282
1283        if num_swaps > 0:
1284            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1285            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1286                              num_swaps):
1287                self.log.error("Swap test failed.")
1288                return None, None
1289
1290        return call_ab_id, call_ac_id
1291
1292    def _test_csfb_wcdma_mo_mt_add_swap_x(self, num_swaps):
1293        """Test swap feature in CSFB WCDMA call.
1294
1295        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
1296        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
1297        Swap active call on PhoneA. (N times)
1298
1299        Args:
1300            num_swaps: do swap for 'num_swaps' times.
1301                This value can be 0 (no swap operation).
1302
1303        Returns:
1304            call_ab_id, call_ac_id if succeed;
1305            None, None if failed.
1306
1307        """
1308        ads = self.android_devices
1309
1310        # make sure PhoneA is GSM phone before proceed.
1311        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
1312            ads[0].log.error("not GSM phone, abort wcdma swap test.")
1313            return None, None
1314
1315        call_ab_id = self._three_phone_call_mo_add_mt(
1316            [ads[0], ads[1], ads[2]], [
1317                phone_setup_csfb, phone_setup_voice_general,
1318                phone_setup_voice_general
1319            ], [is_phone_in_call_csfb, None, None])
1320        if call_ab_id is None:
1321            self.log.error("Failed to get call_ab_id")
1322            return None, None
1323
1324        calls = ads[0].droid.telecomCallGetCallIds()
1325        ads[0].log.info("Calls in PhoneA %s", calls)
1326        if num_active_calls(self.log, ads[0]) != 2:
1327            return None, None
1328        if calls[0] == call_ab_id:
1329            call_ac_id = calls[1]
1330        else:
1331            call_ac_id = calls[0]
1332
1333        if num_swaps > 0:
1334            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1335            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1336                              num_swaps):
1337                self.log.error("Swap test failed.")
1338                return None, None
1339
1340        return call_ab_id, call_ac_id
1341
1342    def _test_ims_conference_merge_drop_second_call_no_cep(
1343            self, call_ab_id, call_ac_id):
1344        """Test conference merge and drop in VoLTE call.
1345
1346        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1347        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1348        Merge calls to conference on PhoneA.
1349        Hangup on PhoneC, check call continues between AB.
1350        Hangup on PhoneB, check A ends.
1351
1352        Args:
1353            call_ab_id: call id for call_AB on PhoneA.
1354            call_ac_id: call id for call_AC on PhoneA.
1355
1356        Returns:
1357            True if succeed;
1358            False if failed.
1359        """
1360        ads = self.android_devices
1361
1362        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
1363        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
1364        time.sleep(WAIT_TIME_IN_CALL)
1365        calls = ads[0].droid.telecomCallGetCallIds()
1366        ads[0].log.info("Calls in PhoneA %s", calls)
1367        if num_active_calls(self.log, ads[0]) != 1:
1368            ads[0].log.error("Total number of call lists is not 1.")
1369            if get_cep_conference_call_id(ads[0]) is not None:
1370                self.log.error("CEP enabled.")
1371            else:
1372                self.log.error("Merge failed.")
1373            return False
1374        call_conf_id = None
1375        for call_id in calls:
1376            if call_id != call_ab_id and call_id != call_ac_id:
1377                call_conf_id = call_id
1378        if not call_conf_id:
1379            self.log.error("Merge call fail, no new conference call id.")
1380            return False
1381        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
1382            return False
1383
1384        # Check if Conf Call is currently active
1385        if ads[0].droid.telecomCallGetCallState(
1386                call_conf_id) != CALL_STATE_ACTIVE:
1387            ads[0].log.error(
1388                "Call_id:%s, state:%s, expected: STATE_ACTIVE", call_conf_id,
1389                ads[0].droid.telecomCallGetCallState(call_conf_id))
1390            return False
1391
1392        self.log.info("Step5: End call on PhoneC and verify call continues.")
1393        if not self._hangup_call(ads[2], "PhoneC"):
1394            return False
1395        time.sleep(WAIT_TIME_IN_CALL)
1396        calls = ads[0].droid.telecomCallGetCallIds()
1397        ads[0].log.info("Calls in PhoneA %s", calls)
1398        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
1399            return False
1400        if not verify_incall_state(self.log, [ads[2]], False):
1401            return False
1402
1403        # Because of b/18413009, VZW VoLTE conference host will not drop call
1404        # even if all participants drop. The reason is VZW network is not
1405        # providing such information to DUT.
1406        # So this test probably will fail on the last step for VZW.
1407        self.log.info("Step6: End call on PhoneB and verify PhoneA end.")
1408        if not self._hangup_call(ads[1], "PhoneB"):
1409            return False
1410        time.sleep(WAIT_TIME_IN_CALL)
1411        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1412            return False
1413        return True
1414
1415    def _merge_cep_conference_call(self, call_ab_id, call_ac_id):
1416        """Merge CEP conference call.
1417
1418        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1419        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1420        Merge calls to conference on PhoneA (CEP enabled IMS conference).
1421
1422        Args:
1423            call_ab_id: call id for call_AB on PhoneA.
1424            call_ac_id: call id for call_AC on PhoneA.
1425
1426        Returns:
1427            call_id for conference
1428        """
1429        ads = self.android_devices
1430
1431        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
1432        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
1433        time.sleep(WAIT_TIME_IN_CALL)
1434        calls = ads[0].droid.telecomCallGetCallIds()
1435        ads[0].log.info("Calls in PhoneA %s", calls)
1436
1437        call_conf_id = get_cep_conference_call_id(ads[0])
1438        if call_conf_id is None:
1439            self.log.error(
1440                "No call with children. Probably CEP not enabled or merge failed."
1441            )
1442            return None
1443        calls.remove(call_conf_id)
1444        if (set(ads[0].droid.telecomCallGetCallChildren(call_conf_id)) !=
1445                set(calls)):
1446            ads[0].log.error(
1447                "Children list %s for conference call is not correct.",
1448                ads[0].droid.telecomCallGetCallChildren(call_conf_id))
1449            return None
1450
1451        if (CALL_PROPERTY_CONFERENCE not in ads[0]
1452                .droid.telecomCallGetProperties(call_conf_id)):
1453            ads[0].log.error(
1454                "Conf call id % properties wrong: %s", call_conf_id,
1455                ads[0].droid.telecomCallGetProperties(call_conf_id))
1456            return None
1457
1458        if (CALL_CAPABILITY_MANAGE_CONFERENCE not in ads[0]
1459                .droid.telecomCallGetCapabilities(call_conf_id)):
1460            ads[0].log.error(
1461                "Conf call id %s capabilities wrong: %s", call_conf_id,
1462                ads[0].droid.telecomCallGetCapabilities(call_conf_id))
1463            return None
1464
1465        if (call_ab_id in calls) or (call_ac_id in calls):
1466            self.log.error(
1467                "Previous call ids should not in new call list after merge.")
1468            return None
1469
1470        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
1471            return None
1472
1473        # Check if Conf Call is currently active
1474        if ads[0].droid.telecomCallGetCallState(
1475                call_conf_id) != CALL_STATE_ACTIVE:
1476            ads[0].log.error(
1477                "Call_ID: %s, state: %s, expected: STATE_ACTIVE", call_conf_id,
1478                ads[0].droid.telecomCallGetCallState(call_conf_id))
1479            return None
1480
1481        return call_conf_id
1482
1483    def _test_ims_conference_merge_drop_second_call_from_participant_cep(
1484            self, call_ab_id, call_ac_id):
1485        """Test conference merge and drop in IMS (VoLTE or WiFi Calling) call.
1486        (CEP enabled).
1487
1488        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1489        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1490        Merge calls to conference on PhoneA (CEP enabled IMS conference).
1491        Hangup on PhoneC, check call continues between AB.
1492        Hangup on PhoneB, check A ends.
1493
1494        Args:
1495            call_ab_id: call id for call_AB on PhoneA.
1496            call_ac_id: call id for call_AC on PhoneA.
1497
1498        Returns:
1499            True if succeed;
1500            False if failed.
1501        """
1502        ads = self.android_devices
1503
1504        call_conf_id = self._merge_cep_conference_call(call_ab_id, call_ac_id)
1505        if call_conf_id is None:
1506            return False
1507
1508        self.log.info("Step5: End call on PhoneC and verify call continues.")
1509        if not self._hangup_call(ads[2], "PhoneC"):
1510            return False
1511        time.sleep(WAIT_TIME_IN_CALL)
1512        calls = ads[0].droid.telecomCallGetCallIds()
1513        ads[0].log.info("Calls in PhoneA %s", calls)
1514        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
1515            return False
1516        if not verify_incall_state(self.log, [ads[2]], False):
1517            return False
1518
1519        self.log.info("Step6: End call on PhoneB and verify PhoneA end.")
1520        if not self._hangup_call(ads[1], "PhoneB"):
1521            return False
1522        time.sleep(WAIT_TIME_IN_CALL)
1523        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1524            return False
1525        return True
1526
1527    def _test_ims_conference_merge_drop_first_call_from_participant_cep(
1528            self, call_ab_id, call_ac_id):
1529        """Test conference merge and drop in IMS (VoLTE or WiFi Calling) call.
1530        (CEP enabled).
1531
1532        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1533        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1534        Merge calls to conference on PhoneA (CEP enabled IMS conference).
1535        Hangup on PhoneB, check call continues between AC.
1536        Hangup on PhoneC, check A ends.
1537
1538        Args:
1539            call_ab_id: call id for call_AB on PhoneA.
1540            call_ac_id: call id for call_AC on PhoneA.
1541
1542        Returns:
1543            True if succeed;
1544            False if failed.
1545        """
1546        ads = self.android_devices
1547
1548        call_conf_id = self._merge_cep_conference_call(call_ab_id, call_ac_id)
1549        if call_conf_id is None:
1550            return False
1551
1552        self.log.info("Step5: End call on PhoneB and verify call continues.")
1553        if not self._hangup_call(ads[1], "PhoneB"):
1554            return False
1555        time.sleep(WAIT_TIME_IN_CALL)
1556        if not verify_incall_state(self.log, [ads[0], ads[2]], True):
1557            return False
1558        if not verify_incall_state(self.log, [ads[1]], False):
1559            return False
1560
1561        self.log.info("Step6: End call on PhoneC and verify PhoneA end.")
1562        if not self._hangup_call(ads[2], "PhoneC"):
1563            return False
1564        time.sleep(WAIT_TIME_IN_CALL)
1565        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1566            return False
1567        return True
1568
1569    def _test_ims_conference_merge_drop_second_call_from_host_cep(
1570            self, call_ab_id, call_ac_id):
1571        """Test conference merge and drop in IMS (VoLTE or WiFi Calling) call.
1572        (CEP enabled).
1573
1574        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1575        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1576        Merge calls to conference on PhoneA (CEP enabled IMS conference).
1577        On PhoneA, disconnect call between A-C, verify PhoneA PhoneB still in call.
1578        On PhoneA, disconnect call between A-B, verify PhoneA PhoneB disconnected.
1579
1580        Args:
1581            call_ab_id: call id for call_AB on PhoneA.
1582            call_ac_id: call id for call_AC on PhoneA.
1583
1584        Returns:
1585            True if succeed;
1586            False if failed.
1587        """
1588        ads = self.android_devices
1589
1590        call_ab_uri = get_call_uri(ads[0], call_ab_id)
1591        call_ac_uri = get_call_uri(ads[0], call_ac_id)
1592
1593        call_conf_id = self._merge_cep_conference_call(call_ab_id, call_ac_id)
1594        if call_conf_id is None:
1595            return False
1596
1597        calls = ads[0].droid.telecomCallGetCallIds()
1598        calls.remove(call_conf_id)
1599
1600        self.log.info("Step5: Disconnect call A-C and verify call continues.")
1601        call_to_disconnect = None
1602        for call in calls:
1603            if is_uri_equivalent(call_ac_uri, get_call_uri(ads[0], call)):
1604                call_to_disconnect = call
1605                calls.remove(call_to_disconnect)
1606                break
1607        if call_to_disconnect is None:
1608            self.log.error("Can NOT find call on host represents A-C.")
1609            return False
1610        else:
1611            ads[0].droid.telecomCallDisconnect(call_to_disconnect)
1612        time.sleep(WAIT_TIME_IN_CALL)
1613        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
1614            return False
1615        if not verify_incall_state(self.log, [ads[2]], False):
1616            return False
1617
1618        self.log.info(
1619            "Step6: Disconnect call A-B and verify PhoneA PhoneB end.")
1620        call_to_disconnect = None
1621        for call in calls:
1622            if is_uri_equivalent(call_ab_uri, get_call_uri(ads[0], call)):
1623                call_to_disconnect = call
1624                calls.remove(call_to_disconnect)
1625                break
1626        if call_to_disconnect is None:
1627            self.log.error("Can NOT find call on host represents A-B.")
1628            return False
1629        else:
1630            ads[0].droid.telecomCallDisconnect(call_to_disconnect)
1631        time.sleep(WAIT_TIME_IN_CALL)
1632        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1633            return False
1634        return True
1635
1636    def _test_ims_conference_merge_drop_first_call_from_host_cep(
1637            self, call_ab_id, call_ac_id):
1638        """Test conference merge and drop in IMS (VoLTE or WiFi Calling) call.
1639        (CEP enabled).
1640
1641        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneB.
1642        PhoneA in IMS (VoLTE or WiFi Calling) call with PhoneC.
1643        Merge calls to conference on PhoneA (CEP enabled IMS conference).
1644        On PhoneA, disconnect call between A-B, verify PhoneA PhoneC still in call.
1645        On PhoneA, disconnect call between A-C, verify PhoneA PhoneC disconnected.
1646
1647        Args:
1648            call_ab_id: call id for call_AB on PhoneA.
1649            call_ac_id: call id for call_AC on PhoneA.
1650
1651        Returns:
1652            True if succeed;
1653            False if failed.
1654        """
1655        ads = self.android_devices
1656
1657        call_ab_uri = get_call_uri(ads[0], call_ab_id)
1658        call_ac_uri = get_call_uri(ads[0], call_ac_id)
1659
1660        call_conf_id = self._merge_cep_conference_call(call_ab_id, call_ac_id)
1661        if call_conf_id is None:
1662            return False
1663
1664        calls = ads[0].droid.telecomCallGetCallIds()
1665        calls.remove(call_conf_id)
1666
1667        self.log.info("Step5: Disconnect call A-B and verify call continues.")
1668        call_to_disconnect = None
1669        for call in calls:
1670            if is_uri_equivalent(call_ab_uri, get_call_uri(ads[0], call)):
1671                call_to_disconnect = call
1672                calls.remove(call_to_disconnect)
1673                break
1674        if call_to_disconnect is None:
1675            self.log.error("Can NOT find call on host represents A-B.")
1676            return False
1677        else:
1678            ads[0].droid.telecomCallDisconnect(call_to_disconnect)
1679        time.sleep(WAIT_TIME_IN_CALL)
1680        if not verify_incall_state(self.log, [ads[0], ads[2]], True):
1681            return False
1682        if not verify_incall_state(self.log, [ads[1]], False):
1683            return False
1684
1685        self.log.info(
1686            "Step6: Disconnect call A-C and verify PhoneA PhoneC end.")
1687        call_to_disconnect = None
1688        for call in calls:
1689            if is_uri_equivalent(call_ac_uri, get_call_uri(ads[0], call)):
1690                call_to_disconnect = call
1691                calls.remove(call_to_disconnect)
1692                break
1693        if call_to_disconnect is None:
1694            self.log.error("Can NOT find call on host represents A-C.")
1695            return False
1696        else:
1697            ads[0].droid.telecomCallDisconnect(call_to_disconnect)
1698        time.sleep(WAIT_TIME_IN_CALL)
1699        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1700            return False
1701        return True
1702
1703    def _test_wcdma_conference_merge_drop(self, call_ab_id, call_ac_id):
1704        """Test conference merge and drop in WCDMA/CSFB_WCDMA call.
1705
1706        PhoneA in WCDMA (or CSFB_WCDMA) call with PhoneB.
1707        PhoneA in WCDMA (or CSFB_WCDMA) call with PhoneC.
1708        Merge calls to conference on PhoneA.
1709        Hangup on PhoneC, check call continues between AB.
1710        Hangup on PhoneB, check A ends.
1711
1712        Args:
1713            call_ab_id: call id for call_AB on PhoneA.
1714            call_ac_id: call id for call_AC on PhoneA.
1715
1716        Returns:
1717            True if succeed;
1718            False if failed.
1719        """
1720        ads = self.android_devices
1721
1722        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
1723        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
1724        time.sleep(WAIT_TIME_IN_CALL)
1725        calls = ads[0].droid.telecomCallGetCallIds()
1726        ads[0].log.info("Calls in PhoneA %s", calls)
1727        if num_active_calls(self.log, ads[0]) != 3:
1728            ads[0].log.error("Total number of call ids is not 3.")
1729            return False
1730        call_conf_id = None
1731        for call_id in calls:
1732            if call_id != call_ab_id and call_id != call_ac_id:
1733                call_conf_id = call_id
1734        if not call_conf_id:
1735            self.log.error("Merge call fail, no new conference call id.")
1736            return False
1737        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
1738            return False
1739
1740        # Check if Conf Call is currently active
1741        if ads[0].droid.telecomCallGetCallState(
1742                call_conf_id) != CALL_STATE_ACTIVE:
1743            ads[0].log.error(
1744                "Call_id: %s, state: %s, expected: STATE_ACTIVE", call_conf_id,
1745                ads[0].droid.telecomCallGetCallState(call_conf_id))
1746            return False
1747
1748        self.log.info("Step5: End call on PhoneC and verify call continues.")
1749        if not self._hangup_call(ads[2], "PhoneC"):
1750            return False
1751        time.sleep(WAIT_TIME_IN_CALL)
1752        calls = ads[0].droid.telecomCallGetCallIds()
1753        ads[0].log.info("Calls in PhoneA %s", calls)
1754        if num_active_calls(self.log, ads[0]) != 1:
1755            return False
1756        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
1757            return False
1758        if not verify_incall_state(self.log, [ads[2]], False):
1759            return False
1760
1761        self.log.info("Step6: End call on PhoneB and verify PhoneA end.")
1762        if not self._hangup_call(ads[1], "PhoneB"):
1763            return False
1764        time.sleep(WAIT_TIME_IN_CALL)
1765        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
1766            return False
1767        return True
1768
1769    def _three_phone_hangup_call_verify_call_state(
1770            self, ad_hangup, ad_verify, call_id, call_state, ads_active):
1771        """Private Test utility for swap test.
1772
1773        Hangup on 'ad_hangup'.
1774        Verify 'call_id' on 'ad_verify' is in expected 'call_state'
1775        Verify each ad in ads_active are 'in-call'.
1776
1777        Args:
1778            ad_hangup: android object to hangup call.
1779            ad_verify: android object to verify call id state.
1780            call_id: call id in 'ad_verify'.
1781            call_state: expected state for 'call_id'.
1782                'call_state' is either CALL_STATE_HOLDING or CALL_STATE_ACTIVE.
1783            ads_active: list of android object.
1784                Each one of them should be 'in-call' after 'hangup' operation.
1785
1786        Returns:
1787            True if no error happened. Otherwise False.
1788
1789        """
1790
1791        ad_hangup.log.info("Hangup, verify call continues.")
1792        if not self._hangup_call(ad_hangup):
1793            ad_hangup.log.error("Phone fails to hang up")
1794            return False
1795        time.sleep(WAIT_TIME_IN_CALL)
1796
1797        if ad_verify.droid.telecomCallGetCallState(call_id) != call_state:
1798            ad_verify.log.error(
1799                "Call_id: %s, state: %s, expected: %s", call_id,
1800                ad_verify.droid.telecomCallGetCallState(call_id), call_state)
1801            return False
1802        ad_verify.log.info("Call in expected %s state", call_state)
1803        # TODO: b/26296375 add voice check.
1804
1805        if not verify_incall_state(self.log, ads_active, True):
1806            ads_active.log.error("Phone not in call state")
1807            return False
1808        if not verify_incall_state(self.log, [ad_hangup], False):
1809            ad_hangup.log.error("Phone not in hangup state")
1810            return False
1811
1812        return True
1813
1814    def _test_epdg_mo_mo_add_epdg_swap_x(self, num_swaps):
1815        """Test swap feature in epdg call.
1816
1817        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
1818        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
1819        Swap active call on PhoneA.(N times)
1820
1821        Args:
1822            num_swaps: do swap for 'num_swaps' times.
1823                This value can be 0 (no swap operation).
1824
1825        Returns:
1826            call_ab_id, call_ac_id if succeed;
1827            None, None if failed.
1828
1829        """
1830        ads = self.android_devices
1831
1832        # To make thing simple, for epdg, setup should be called before calling
1833        # _test_epdg_mo_mo_add_epdg_swap_x in test cases.
1834        call_ab_id = self._three_phone_call_mo_add_mo(
1835            [ads[0], ads[1], ads[2]], [None, None, None], [
1836                is_phone_in_call_iwlan, is_phone_in_call_iwlan,
1837                is_phone_in_call_iwlan
1838            ])
1839        if call_ab_id is None:
1840            self.log.error("Failed to get call_ab_id")
1841            return None, None
1842
1843        calls = ads[0].droid.telecomCallGetCallIds()
1844        ads[0].log.info("Calls in PhoneA %s", calls)
1845        if num_active_calls(self.log, ads[0]) != 2:
1846            return None, None
1847        if calls[0] == call_ab_id:
1848            call_ac_id = calls[1]
1849        else:
1850            call_ac_id = calls[0]
1851
1852        if num_swaps > 0:
1853            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1854            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1855                              num_swaps):
1856                self.log.error("Swap test failed.")
1857                return None, None
1858
1859        return call_ab_id, call_ac_id
1860
1861    def _test_epdg_mo_mt_add_epdg_swap_x(self, num_swaps):
1862        """Test swap feature in epdg call.
1863
1864        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
1865        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
1866        Swap active call on PhoneA.(N times)
1867
1868        Args:
1869            num_swaps: do swap for 'num_swaps' times.
1870                This value can be 0 (no swap operation).
1871
1872        Returns:
1873            call_ab_id, call_ac_id if succeed;
1874            None, None if failed.
1875
1876        """
1877        ads = self.android_devices
1878
1879        # To make thing simple, for epdg, setup should be called before calling
1880        # _test_epdg_mo_mt_add_epdg_swap_x in test cases.
1881        call_ab_id = self._three_phone_call_mo_add_mt(
1882            [ads[0], ads[1], ads[2]], [None, None, None], [
1883                is_phone_in_call_iwlan, is_phone_in_call_iwlan,
1884                is_phone_in_call_iwlan
1885            ])
1886        if call_ab_id is None:
1887            self.log.error("Failed to get call_ab_id")
1888            return None, None
1889
1890        calls = ads[0].droid.telecomCallGetCallIds()
1891        ads[0].log.info("Calls in PhoneA %s", calls)
1892        if num_active_calls(self.log, ads[0]) != 2:
1893            return None, None
1894        if calls[0] == call_ab_id:
1895            call_ac_id = calls[1]
1896        else:
1897            call_ac_id = calls[0]
1898
1899        if num_swaps > 0:
1900            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1901            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1902                              num_swaps):
1903                self.log.error("Swap test failed.")
1904                return None, None
1905
1906        return call_ab_id, call_ac_id
1907
1908    def _test_epdg_mt_mt_add_epdg_swap_x(self, num_swaps):
1909        """Test swap feature in epdg call.
1910
1911        PhoneB (epdg) call PhoneA (epdg), accept on PhoneA.
1912        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
1913        Swap active call on PhoneA.(N times)
1914
1915        Args:
1916            num_swaps: do swap for 'num_swaps' times.
1917                This value can be 0 (no swap operation).
1918
1919        Returns:
1920            call_ab_id, call_ac_id if succeed;
1921            None, None if failed.
1922
1923        """
1924        ads = self.android_devices
1925
1926        # To make thing simple, for epdg, setup should be called before calling
1927        # _test_epdg_mt_mt_add_epdg_swap_x in test cases.
1928        call_ab_id = self._three_phone_call_mt_add_mt(
1929            [ads[0], ads[1], ads[2]], [None, None, None], [
1930                is_phone_in_call_iwlan, is_phone_in_call_iwlan,
1931                is_phone_in_call_iwlan
1932            ])
1933        if call_ab_id is None:
1934            self.log.error("Failed to get call_ab_id")
1935            return None, None
1936
1937        calls = ads[0].droid.telecomCallGetCallIds()
1938        ads[0].log.info("Calls in PhoneA %s", calls)
1939        if num_active_calls(self.log, ads[0]) != 2:
1940            return None, None
1941        if calls[0] == call_ab_id:
1942            call_ac_id = calls[1]
1943        else:
1944            call_ac_id = calls[0]
1945
1946        if num_swaps > 0:
1947            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1948            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1949                              num_swaps):
1950                self.log.error("Swap test failed.")
1951                return None, None
1952
1953        return call_ab_id, call_ac_id
1954
1955    def _test_epdg_mo_mo_add_volte_swap_x(self, num_swaps):
1956        """Test swap feature in epdg call.
1957
1958        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
1959        PhoneA (epdg) call PhoneC (VoLTE), accept on PhoneC.
1960        Swap active call on PhoneA.(N times)
1961
1962        Args:
1963            num_swaps: do swap for 'num_swaps' times.
1964                This value can be 0 (no swap operation).
1965
1966        Returns:
1967            call_ab_id, call_ac_id if succeed;
1968            None, None if failed.
1969
1970        """
1971        ads = self.android_devices
1972
1973        # To make thing simple, for epdg, setup should be called before calling
1974        # _test_epdg_mo_mo_add_volte_swap_x in test cases.
1975        call_ab_id = self._three_phone_call_mo_add_mo(
1976            [ads[0], ads[1], ads[2]], [None, None, None], [
1977                is_phone_in_call_iwlan, is_phone_in_call_volte,
1978                is_phone_in_call_volte
1979            ])
1980        if call_ab_id is None:
1981            self.log.error("Failed to get call_ab_id")
1982            return None, None
1983
1984        calls = ads[0].droid.telecomCallGetCallIds()
1985        ads[0].log.info("Calls in PhoneA: %s", calls)
1986        if num_active_calls(self.log, ads[0]) != 2:
1987            return None, None
1988        if calls[0] == call_ab_id:
1989            call_ac_id = calls[1]
1990        else:
1991            call_ac_id = calls[0]
1992
1993        if num_swaps > 0:
1994            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
1995            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
1996                              num_swaps):
1997                self.log.error("Swap test failed.")
1998                return None, None
1999
2000        return call_ab_id, call_ac_id
2001
2002    def _test_epdg_mo_mt_add_volte_swap_x(self, num_swaps):
2003        """Test swap feature in epdg call.
2004
2005        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
2006        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
2007        Swap active call on PhoneA.(N times)
2008
2009        Args:
2010            num_swaps: do swap for 'num_swaps' times.
2011                This value can be 0 (no swap operation).
2012
2013        Returns:
2014            call_ab_id, call_ac_id if succeed;
2015            None, None if failed.
2016
2017        """
2018        ads = self.android_devices
2019
2020        # To make thing simple, for epdg, setup should be called before calling
2021        # _test_epdg_mo_mt_add_volte_swap_x in test cases.
2022        call_ab_id = self._three_phone_call_mo_add_mt(
2023            [ads[0], ads[1], ads[2]], [None, None, None], [
2024                is_phone_in_call_iwlan, is_phone_in_call_volte,
2025                is_phone_in_call_volte
2026            ])
2027        if call_ab_id is None:
2028            self.log.error("Failed to get call_ab_id")
2029            return None, None
2030
2031        calls = ads[0].droid.telecomCallGetCallIds()
2032        ads[0].log.info("Calls in PhoneA: %s", calls)
2033        if num_active_calls(self.log, ads[0]) != 2:
2034            return None, None
2035        if calls[0] == call_ab_id:
2036            call_ac_id = calls[1]
2037        else:
2038            call_ac_id = calls[0]
2039
2040        if num_swaps > 0:
2041            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2042            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2043                              num_swaps):
2044                self.log.error("Swap test failed.")
2045                return None, None
2046
2047        return call_ab_id, call_ac_id
2048
2049    def _test_epdg_mt_mt_add_volte_swap_x(self, num_swaps):
2050        """Test swap feature in epdg call.
2051
2052        PhoneB (VoLTE) call PhoneA (epdg), accept on PhoneA.
2053        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
2054        Swap active call on PhoneA.(N times)
2055
2056        Args:
2057            num_swaps: do swap for 'num_swaps' times.
2058                This value can be 0 (no swap operation).
2059
2060        Returns:
2061            call_ab_id, call_ac_id if succeed;
2062            None, None if failed.
2063
2064        """
2065        ads = self.android_devices
2066
2067        # To make thing simple, for epdg, setup should be called before calling
2068        # _test_epdg_mt_mt_add_volte_swap_x in test cases.
2069        call_ab_id = self._three_phone_call_mt_add_mt(
2070            [ads[0], ads[1], ads[2]], [None, None, None], [
2071                is_phone_in_call_iwlan, is_phone_in_call_volte,
2072                is_phone_in_call_volte
2073            ])
2074        if call_ab_id is None:
2075            self.log.error("Failed to get call_ab_id")
2076            return None, None
2077
2078        calls = ads[0].droid.telecomCallGetCallIds()
2079        ads[0].log.info("Calls in PhoneA %s", calls)
2080        if num_active_calls(self.log, ads[0]) != 2:
2081            return None, None
2082        if calls[0] == call_ab_id:
2083            call_ac_id = calls[1]
2084        else:
2085            call_ac_id = calls[0]
2086
2087        if num_swaps > 0:
2088            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2089            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2090                              num_swaps):
2091                self.log.error("Swap test failed.")
2092                return None, None
2093
2094        return call_ab_id, call_ac_id
2095
2096    def _test_epdg_mo_mo_add_wcdma_swap_x(self, num_swaps):
2097        """Test swap feature in epdg call.
2098
2099        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
2100        PhoneA (epdg) call PhoneC (WCDMA), accept on PhoneC.
2101        Swap active call on PhoneA.(N times)
2102
2103        Args:
2104            num_swaps: do swap for 'num_swaps' times.
2105                This value can be 0 (no swap operation).
2106
2107        Returns:
2108            call_ab_id, call_ac_id if succeed;
2109            None, None if failed.
2110
2111        """
2112        ads = self.android_devices
2113
2114        # make sure PhoneB and PhoneC are GSM phone before proceed.
2115        for ad in [ads[1], ads[2]]:
2116            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
2117                ad.log.error("not GSM phone, abort wcdma swap test.")
2118                return None, None
2119
2120        # To make thing simple, for epdg, setup should be called before calling
2121        # _test_epdg_mo_mo_add_wcdma_swap_x in test cases.
2122        call_ab_id = self._three_phone_call_mo_add_mo(
2123            [ads[0], ads[1], ads[2]], [None, None, None], [
2124                is_phone_in_call_iwlan, is_phone_in_call_wcdma,
2125                is_phone_in_call_wcdma
2126            ])
2127        if call_ab_id is None:
2128            self.log.error("Failed to get call_ab_id")
2129            return None, None
2130
2131        calls = ads[0].droid.telecomCallGetCallIds()
2132        ads[0].log.info("Calls in PhoneA %s", calls)
2133        if num_active_calls(self.log, ads[0]) != 2:
2134            return None, None
2135        if calls[0] == call_ab_id:
2136            call_ac_id = calls[1]
2137        else:
2138            call_ac_id = calls[0]
2139
2140        if num_swaps > 0:
2141            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2142            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2143                              num_swaps):
2144                self.log.error("Swap test failed.")
2145                return None, None
2146
2147        return call_ab_id, call_ac_id
2148
2149    def _test_epdg_mo_mt_add_wcdma_swap_x(self, num_swaps):
2150        """Test swap feature in epdg call.
2151
2152        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
2153        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
2154        Swap active call on PhoneA.(N times)
2155
2156        Args:
2157            num_swaps: do swap for 'num_swaps' times.
2158                This value can be 0 (no swap operation).
2159
2160        Returns:
2161            call_ab_id, call_ac_id if succeed;
2162            None, None if failed.
2163
2164        """
2165        ads = self.android_devices
2166
2167        # make sure PhoneB and PhoneC are GSM phone before proceed.
2168        for ad in [ads[1], ads[2]]:
2169            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
2170                ad.log.error("not GSM phone, abort wcdma swap test.")
2171                return None, None
2172
2173        # To make thing simple, for epdg, setup should be called before calling
2174        # _test_epdg_mo_mt_add_wcdma_swap_x in test cases.
2175        call_ab_id = self._three_phone_call_mo_add_mt(
2176            [ads[0], ads[1], ads[2]], [None, None, None], [
2177                is_phone_in_call_iwlan, is_phone_in_call_wcdma,
2178                is_phone_in_call_wcdma
2179            ])
2180        if call_ab_id is None:
2181            self.log.error("Failed to get call_ab_id")
2182            return None, None
2183
2184        calls = ads[0].droid.telecomCallGetCallIds()
2185        ads[0].log.info("Calls in PhoneA %s", calls)
2186        if num_active_calls(self.log, ads[0]) != 2:
2187            return None, None
2188        if calls[0] == call_ab_id:
2189            call_ac_id = calls[1]
2190        else:
2191            call_ac_id = calls[0]
2192
2193        if num_swaps > 0:
2194            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2195            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2196                              num_swaps):
2197                self.log.error("Swap test failed.")
2198                return None, None
2199
2200        return call_ab_id, call_ac_id
2201
2202    def _test_epdg_mt_mt_add_wcdma_swap_x(self, num_swaps):
2203        """Test swap feature in epdg call.
2204
2205        PhoneB (WCDMA) call PhoneA (epdg), accept on PhoneA.
2206        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
2207        Swap active call on PhoneA.(N times)
2208
2209        Args:
2210            num_swaps: do swap for 'num_swaps' times.
2211                This value can be 0 (no swap operation).
2212
2213        Returns:
2214            call_ab_id, call_ac_id if succeed;
2215            None, None if failed.
2216
2217        """
2218        ads = self.android_devices
2219
2220        # make sure PhoneB and PhoneC are GSM phone before proceed.
2221        for ad in [ads[1], ads[2]]:
2222            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
2223                ad.log.error("not GSM phone, abort wcdma swap test.")
2224                return None, None
2225
2226        # To make thing simple, for epdg, setup should be called before calling
2227        # _test_epdg_mo_mt_add_wcdma_swap_x in test cases.
2228        call_ab_id = self._three_phone_call_mt_add_mt(
2229            [ads[0], ads[1], ads[2]], [None, None, None], [
2230                is_phone_in_call_iwlan, is_phone_in_call_wcdma,
2231                is_phone_in_call_wcdma
2232            ])
2233        if call_ab_id is None:
2234            self.log.error("Failed to get call_ab_id")
2235            return None, None
2236
2237        calls = ads[0].droid.telecomCallGetCallIds()
2238        ads[0].log.info("Calls in PhoneA %s", calls)
2239        if num_active_calls(self.log, ads[0]) != 2:
2240            return None, None
2241        if calls[0] == call_ab_id:
2242            call_ac_id = calls[1]
2243        else:
2244            call_ac_id = calls[0]
2245
2246        if num_swaps > 0:
2247            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2248            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2249                              num_swaps):
2250                self.log.error("Swap test failed.")
2251                return None, None
2252
2253        return call_ab_id, call_ac_id
2254
2255    def _test_epdg_mo_mo_add_1x_swap_x(self, num_swaps):
2256        """Test swap feature in epdg call.
2257
2258        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
2259        PhoneA (epdg) call PhoneC (1x), accept on PhoneC.
2260        Swap active call on PhoneA.(N times)
2261
2262        Args:
2263            num_swaps: do swap for 'num_swaps' times.
2264                This value can be 0 (no swap operation).
2265
2266        Returns:
2267            call_ab_id, call_ac_id if succeed;
2268            None, None if failed.
2269
2270        """
2271        ads = self.android_devices
2272
2273        # make sure PhoneB and PhoneC are CDMA phone before proceed.
2274        for ad in [ads[1], ads[2]]:
2275            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
2276                ad.log.error("not CDMA phone, abort 1x swap test.")
2277                return None, None
2278
2279        # To make thing simple, for epdg, setup should be called before calling
2280        # _test_epdg_mo_mo_add_1x_swap_x in test cases.
2281        call_ab_id = self._three_phone_call_mo_add_mo(
2282            [ads[0], ads[1], ads[2]], [None, None, None],
2283            [is_phone_in_call_iwlan, is_phone_in_call_1x, is_phone_in_call_1x])
2284        if call_ab_id is None:
2285            self.log.error("Failed to get call_ab_id")
2286            return None, None
2287
2288        calls = ads[0].droid.telecomCallGetCallIds()
2289        ads[0].log.info("Calls in PhoneA %s", calls)
2290        if num_active_calls(self.log, ads[0]) != 2:
2291            return None, None
2292        if calls[0] == call_ab_id:
2293            call_ac_id = calls[1]
2294        else:
2295            call_ac_id = calls[0]
2296
2297        if num_swaps > 0:
2298            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2299            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2300                              num_swaps):
2301                self.log.error("Swap test failed.")
2302                return None, None
2303
2304        return call_ab_id, call_ac_id
2305
2306    def _test_epdg_mo_mt_add_1x_swap_x(self, num_swaps):
2307        """Test swap feature in epdg call.
2308
2309        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
2310        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
2311        Swap active call on PhoneA.(N times)
2312
2313        Args:
2314            num_swaps: do swap for 'num_swaps' times.
2315                This value can be 0 (no swap operation).
2316
2317        Returns:
2318            call_ab_id, call_ac_id if succeed;
2319            None, None if failed.
2320
2321        """
2322        ads = self.android_devices
2323
2324        # make sure PhoneB and PhoneC are CDMA phone before proceed.
2325        for ad in [ads[1], ads[2]]:
2326            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
2327                ad.log.error("not CDMA phone, abort 1x swap test.")
2328                return None, None
2329
2330        # To make thing simple, for epdg, setup should be called before calling
2331        # _test_epdg_mo_mt_add_1x_swap_x in test cases.
2332        call_ab_id = self._three_phone_call_mo_add_mt(
2333            [ads[0], ads[1], ads[2]], [None, None, None],
2334            [is_phone_in_call_iwlan, is_phone_in_call_1x, is_phone_in_call_1x])
2335        if call_ab_id is None:
2336            self.log.error("Failed to get call_ab_id")
2337            return None, None
2338
2339        calls = ads[0].droid.telecomCallGetCallIds()
2340        ads[0].log.info("Calls in PhoneA %s", calls)
2341        if num_active_calls(self.log, ads[0]) != 2:
2342            return None, None
2343        if calls[0] == call_ab_id:
2344            call_ac_id = calls[1]
2345        else:
2346            call_ac_id = calls[0]
2347
2348        if num_swaps > 0:
2349            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2350            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2351                              num_swaps):
2352                self.log.error("Swap test failed.")
2353                return None, None
2354
2355        return call_ab_id, call_ac_id
2356
2357    def _test_epdg_mt_mt_add_1x_swap_x(self, num_swaps):
2358        """Test swap feature in epdg call.
2359
2360        PhoneB (1x) call PhoneA (epdg), accept on PhoneA.
2361        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
2362        Swap active call on PhoneA.(N times)
2363
2364        Args:
2365            num_swaps: do swap for 'num_swaps' times.
2366                This value can be 0 (no swap operation).
2367
2368        Returns:
2369            call_ab_id, call_ac_id if succeed;
2370            None, None if failed.
2371
2372        """
2373        ads = self.android_devices
2374
2375        # make sure PhoneB and PhoneC are CDMA phone before proceed.
2376        for ad in [ads[1], ads[2]]:
2377            if (ad.droid.telephonyGetPhoneType() != PHONE_TYPE_CDMA):
2378                ad.log.error("not CDMA phone, abort 1x swap test.")
2379                return None, None
2380
2381        # To make thing simple, for epdg, setup should be called before calling
2382        # _test_epdg_mo_mt_add_1x_swap_x in test cases.
2383        call_ab_id = self._three_phone_call_mt_add_mt(
2384            [ads[0], ads[1], ads[2]], [None, None, None],
2385            [is_phone_in_call_iwlan, is_phone_in_call_1x, is_phone_in_call_1x])
2386        if call_ab_id is None:
2387            self.log.error("Failed to get call_ab_id")
2388            return None, None
2389
2390        calls = ads[0].droid.telecomCallGetCallIds()
2391        ads[0].log.info("Calls in PhoneA %s", calls)
2392        if num_active_calls(self.log, ads[0]) != 2:
2393            return None, None
2394        if calls[0] == call_ab_id:
2395            call_ac_id = calls[1]
2396        else:
2397            call_ac_id = calls[0]
2398
2399        if num_swaps > 0:
2400            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
2401            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
2402                              num_swaps):
2403                self.log.error("Swap test failed.")
2404                return None, None
2405
2406        return call_ab_id, call_ac_id
2407
2408    def _test_epdg_conference_merge_drop(self, call_ab_id, call_ac_id):
2409        """Test conference merge and drop in epdg call.
2410
2411        PhoneA in epdg call with PhoneB.
2412        PhoneA in epdg call with PhoneC.
2413        Merge calls to conference on PhoneA.
2414        Hangup on PhoneC, check call continues between AB.
2415        Hangup on PhoneB, check A ends.
2416
2417        Args:
2418            call_ab_id: call id for call_AB on PhoneA.
2419            call_ac_id: call id for call_AC on PhoneA.
2420
2421        Returns:
2422            True if succeed;
2423            False if failed.
2424        """
2425
2426        ads = self.android_devices
2427
2428        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
2429        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
2430        time.sleep(WAIT_TIME_IN_CALL)
2431        calls = ads[0].droid.telecomCallGetCallIds()
2432        ads[0].log.info("Calls in PhoneA %s", calls)
2433        if num_active_calls(self.log, ads[0]) != 1:
2434            ads[0].log.error("Total number of call ids is not 1.")
2435            return False
2436        call_conf_id = None
2437        for call_id in calls:
2438            if call_id != call_ab_id and call_id != call_ac_id:
2439                call_conf_id = call_id
2440        if not call_conf_id:
2441            self.log.error("Merge call fail, no new conference call id.")
2442            return False
2443        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2444            return False
2445
2446        # Check if Conf Call is currently active
2447        if ads[0].droid.telecomCallGetCallState(
2448                call_conf_id) != CALL_STATE_ACTIVE:
2449            ads[0].log.error(
2450                "Call_id: %s, state: %s, expected: STATE_ACTIVE", call_conf_id,
2451                ads[0].droid.telecomCallGetCallState(call_conf_id))
2452            return False
2453
2454        self.log.info("Step5: End call on PhoneC and verify call continues.")
2455        if not self._hangup_call(ads[2], "PhoneC"):
2456            return False
2457        time.sleep(WAIT_TIME_IN_CALL)
2458        calls = ads[0].droid.telecomCallGetCallIds()
2459        ads[0].log.info("Calls in PhoneA %s", calls)
2460        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
2461            return False
2462        if not verify_incall_state(self.log, [ads[2]], False):
2463            return False
2464
2465        self.log.info("Step6: End call on PhoneB and verify PhoneA end.")
2466        if not self._hangup_call(ads[1], "PhoneB"):
2467            return False
2468        time.sleep(WAIT_TIME_IN_CALL)
2469        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
2470            return False
2471        return True
2472
2473    """ Tests Begin """
2474
2475    @TelephonyBaseTest.tel_test_wrap
2476    @test_tracker_info(uuid="3cd45972-3862-4956-9504-7fefacdd5ca6")
2477    def test_wcdma_mo_mo_add_merge_drop(self):
2478        """ Test Conf Call among three phones.
2479
2480        Call from PhoneA to PhoneB, accept on PhoneB.
2481        Call from PhoneA to PhoneC, accept on PhoneC.
2482        On PhoneA, merge to conference call.
2483        End call on PhoneC, verify call continues.
2484        End call on PhoneB, verify call end on PhoneA.
2485
2486        Returns:
2487            True if pass; False if fail.
2488        """
2489        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(0)
2490        if call_ab_id is None or call_ac_id is None:
2491            return False
2492
2493        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
2494
2495    @TelephonyBaseTest.tel_test_wrap
2496    @test_tracker_info(uuid="c1158bd3-6327-4c91-96a7-400e69f68698")
2497    def test_wcdma_mt_mt_add_merge_drop(self):
2498        """ Test Conf Call among three phones.
2499
2500        Call from PhoneB to PhoneA, accept on PhoneA.
2501        Call from PhoneC to PhoneA, accept on PhoneA.
2502        On PhoneA, merge to conference call.
2503        End call on PhoneC, verify call continues.
2504        End call on PhoneB, verify call end on PhoneA.
2505
2506        Returns:
2507            True if pass; False if fail.
2508        """
2509        call_ab_id, call_ac_id = self._test_wcdma_mt_mt_add_swap_x(0)
2510        if call_ab_id is None or call_ac_id is None:
2511            return False
2512
2513        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
2514
2515    @TelephonyBaseTest.tel_test_wrap
2516    @test_tracker_info(uuid="804478b4-a826-48be-a9fa-9a0cec66ee54")
2517    def test_1x_mo_mo_add_merge_drop_from_participant(self):
2518        """ Test 1x Conf Call among three phones.
2519
2520        Steps:
2521        1. DUT in 1x idle, PhoneB and PhoneC idle.
2522        2. Call from DUT to PhoneB, accept on PhoneB.
2523        3. Call from DUT to PhoneC, accept on PhoneC.
2524        4. On DUT, merge to conference call.
2525        5. End call PhoneC, verify call continues on DUT and PhoneB.
2526        6. End call on PhoneB, verify call end on PhoneA.
2527
2528        Expected Results:
2529        4. Merge Call succeed on DUT.
2530        5. PhoneC drop call, DUT and PhoneB call continues.
2531        6. PhoneB drop call, call also end on DUT.
2532
2533        Returns:
2534            True if pass; False if fail.
2535        """
2536
2537        ads = self.android_devices
2538
2539        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mo_add()
2540        if ((call_ab_id is None) or (call_ac_id is None)
2541                or (call_conf_id is None)):
2542            self.log.error("Failed to setup 3 way call.")
2543            return False
2544
2545        self.log.info("Merge to Conf Call and verify Conf Call.")
2546        if not self._test_1x_merge_conference(ads[0], [ads[1], ads[2]],
2547                                              call_conf_id):
2548            self.log.error("1x Conference merge failed.")
2549
2550        self.log.info("End call on PhoneC, and end call on PhoneB.")
2551        return self._test_1x_multi_call_drop_from_participant(
2552            ads[0], ads[2], ads[1])
2553
2554    @TelephonyBaseTest.tel_test_wrap
2555    @test_tracker_info(uuid="a36b02a6-480e-4cb6-9201-bd8bfa5ae8a4")
2556    def test_1x_mo_mo_add_merge_drop_from_host(self):
2557        """ Test 1x Conf Call among three phones.
2558
2559        Steps:
2560        1. DUT in 1x idle, PhoneB and PhoneC idle.
2561        2. Call from DUT to PhoneB, accept on PhoneB.
2562        3. Call from DUT to PhoneC, accept on PhoneC.
2563        4. On DUT, merge to conference call.
2564        5. End call on DUT, make sure all participants drop.
2565
2566        Expected Results:
2567        4. Merge Call succeed on DUT.
2568        5. Make sure DUT and all participants drop call.
2569
2570        Returns:
2571            True if pass; False if fail.
2572        """
2573
2574        ads = self.android_devices
2575
2576        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mo_add()
2577        if ((call_ab_id is None) or (call_ac_id is None)
2578                or (call_conf_id is None)):
2579            self.log.error("Failed to setup 3 way call.")
2580            return False
2581
2582        self.log.info("Merge to Conf Call and verify Conf Call.")
2583        if not self._test_1x_merge_conference(ads[0], [ads[1], ads[2]],
2584                                              call_conf_id):
2585            self.log.error("1x Conference merge failed.")
2586
2587        self.log.info("End call on PhoneC, and end call on PhoneB.")
2588        return self._test_1x_conf_call_drop_from_host(ads[0], [ads[2], ads[1]])
2589
2590    @TelephonyBaseTest.tel_test_wrap
2591    @test_tracker_info(uuid="0c9e5da6-90db-4cb5-9b2c-4be3460b49d0")
2592    def test_1x_mo_mt_add_drop_active(self):
2593        """ Test 1x MO+MT call among three phones.
2594
2595        Steps:
2596        1. DUT in 1x idle, PhoneB and PhoneC idle.
2597        2. Call from DUT to PhoneB, accept on PhoneB.
2598        3. Call from PhoneC to DUT, accept on DUT.
2599        4. End call PhoneC, verify call continues on DUT and PhoneB.
2600        5. End call on PhoneB, verify call end on PhoneA.
2601
2602        Expected Results:
2603        4. PhoneC drop call, DUT and PhoneB call continues.
2604        5. PhoneB drop call, call also end on DUT.
2605
2606        Returns:
2607            True if pass; False if fail.
2608        """
2609        ads = self.android_devices
2610
2611        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2612            0)
2613        if ((call_ab_id is None) or (call_ac_id is None)
2614                or (call_conf_id is None)):
2615            self.log.error("Failed to setup 3 way call.")
2616            return False
2617
2618        self.log.info("Verify no one dropped call.")
2619        time.sleep(WAIT_TIME_IN_CALL)
2620        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2621            return False
2622
2623        self.log.info("End call on PhoneC, and end call on PhoneB.")
2624        return self._test_1x_multi_call_drop_from_participant(
2625            ads[0], ads[2], ads[1])
2626
2627    @TelephonyBaseTest.tel_test_wrap
2628    @test_tracker_info(uuid="9dc16b45-3470-44c8-abf8-19cd5944a53c")
2629    def test_1x_mo_mt_add_swap_twice_drop_active(self):
2630        """ Test 1x MO+MT call among three phones.
2631
2632        Steps:
2633        1. DUT in 1x idle, PhoneB and PhoneC idle.
2634        2. DUT MO call to PhoneB, answer on PhoneB.
2635        3. PhoneC call to DUT, answer on DUT
2636        4. Swap active call on DUT.
2637        5. Swap active call on DUT.
2638        6. Drop on PhoneC.
2639        7. Drop on PhoneB.
2640
2641        Expected Results:
2642        4. Swap call succeed.
2643        5. Swap call succeed.
2644        6. Call between DUT and PhoneB continues.
2645        7. All participant call end.
2646
2647        Returns:
2648            True if pass; False if fail.
2649        """
2650        ads = self.android_devices
2651
2652        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2653            2)
2654        if ((call_ab_id is None) or (call_ac_id is None)
2655                or (call_conf_id is None)):
2656            self.log.error("Failed to setup 3 way call.")
2657            return False
2658
2659        self.log.info("Verify no one dropped call.")
2660        time.sleep(WAIT_TIME_IN_CALL)
2661        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2662            return False
2663
2664        self.log.info("End call on PhoneC, and end call on PhoneB.")
2665        return self._test_1x_multi_call_drop_from_participant(
2666            ads[0], ads[2], ads[1])
2667
2668    @TelephonyBaseTest.tel_test_wrap
2669    @test_tracker_info(uuid="dc7a3187-142e-4754-a914-d0241397a2b3")
2670    def test_1x_mo_mt_add_swap_once_drop_active(self):
2671        """ Test 1x MO+MT call among three phones.
2672
2673        Steps:
2674        1. DUT in 1x idle, PhoneB and PhoneC idle.
2675        2. DUT MO call to PhoneB, answer on PhoneB.
2676        3. PhoneC call to DUT, answer on DUT
2677        4. Swap active call on DUT.
2678        5. Drop on PhoneB.
2679        6. Drop on PhoneC.
2680
2681        Expected Results:
2682        4. Swap call succeed.
2683        5. Call between DUT and PhoneC continues.
2684        6. All participant call end.
2685
2686        Returns:
2687            True if pass; False if fail.
2688        """
2689        ads = self.android_devices
2690
2691        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2692            1)
2693        if ((call_ab_id is None) or (call_ac_id is None)
2694                or (call_conf_id is None)):
2695            self.log.error("Failed to setup 3 way call.")
2696            return False
2697
2698        self.log.info("Verify no one dropped call.")
2699        time.sleep(WAIT_TIME_IN_CALL)
2700        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2701            return False
2702
2703        self.log.info("End call on PhoneB, and end call on PhoneC.")
2704        return self._test_1x_multi_call_drop_from_participant(
2705            ads[0], ads[1], ads[2])
2706
2707    @TelephonyBaseTest.tel_test_wrap
2708    @test_tracker_info(uuid="24cd0ef0-1a69-4603-89c2-0f2b96715348")
2709    def test_1x_mo_mt_add_drop_held(self):
2710        """ Test 1x MO+MT call among three phones.
2711
2712        Steps:
2713        1. DUT in 1x idle, PhoneB and PhoneC idle.
2714        2. Call from DUT to PhoneB, accept on PhoneB.
2715        3. Call from PhoneC to DUT, accept on DUT.
2716        4. End call PhoneB, verify call continues on DUT and PhoneC.
2717        5. End call on PhoneC, verify call end on PhoneA.
2718
2719        Expected Results:
2720        4. DUT drop call, PhoneC also end. Then DUT receive callback from PhoneB.
2721        5. DUT drop call, call also end on PhoneB.
2722
2723        Returns:
2724            True if pass; False if fail.
2725        """
2726        ads = self.android_devices
2727
2728        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2729            0)
2730        if ((call_ab_id is None) or (call_ac_id is None)
2731                or (call_conf_id is None)):
2732            self.log.error("Failed to setup 3 way call.")
2733            return False
2734
2735        self.log.info("Verify no one dropped call.")
2736        time.sleep(WAIT_TIME_IN_CALL)
2737        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2738            return False
2739
2740        self.log.info("End call on PhoneB, and end call on PhoneC.")
2741        return self._test_1x_multi_call_drop_from_participant(
2742            ads[0], ads[1], ads[2])
2743
2744    @TelephonyBaseTest.tel_test_wrap
2745    @test_tracker_info(uuid="1c5c1780-84c2-4547-9e57-eeadac6569d7")
2746    def test_1x_mo_mt_add_swap_twice_drop_held(self):
2747        """ Test 1x MO+MT call among three phones.
2748
2749        Steps:
2750        1. DUT in 1x idle, PhoneB and PhoneC idle.
2751        2. DUT MO call to PhoneB, answer on PhoneB.
2752        3. PhoneC call to DUT, answer on DUT
2753        4. Swap active call on DUT.
2754        5. Swap active call on DUT.
2755        6. Drop on PhoneB.
2756        7. Drop on PhoneC.
2757
2758        Expected Results:
2759        4. Swap call succeed.
2760        5. Swap call succeed.
2761        6. Call between DUT and PhoneC continues.
2762        7. All participant call end.
2763
2764        Returns:
2765            True if pass; False if fail.
2766        """
2767        ads = self.android_devices
2768
2769        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2770            2)
2771        if ((call_ab_id is None) or (call_ac_id is None)
2772                or (call_conf_id is None)):
2773            self.log.error("Failed to setup 3 way call.")
2774            return False
2775
2776        self.log.info("Verify no one dropped call.")
2777        time.sleep(WAIT_TIME_IN_CALL)
2778        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2779            return False
2780
2781        self.log.info("End call on PhoneB, and end call on PhoneC.")
2782        return self._test_1x_multi_call_drop_from_participant(
2783            ads[0], ads[1], ads[2])
2784
2785    @TelephonyBaseTest.tel_test_wrap
2786    @test_tracker_info(uuid="928a2b21-c4ca-4553-9acc-8d3db61ed6eb")
2787    def test_1x_mo_mt_add_swap_once_drop_held(self):
2788        """ Test 1x MO+MT call among three phones.
2789
2790        Steps:
2791        1. DUT in 1x idle, PhoneB and PhoneC idle.
2792        2. DUT MO call to PhoneB, answer on PhoneB.
2793        3. PhoneC call to DUT, answer on DUT
2794        4. Swap active call on DUT.
2795        5. Drop on PhoneC.
2796        6. Drop on PhoneB.
2797
2798        Expected Results:
2799        4. Swap call succeed.
2800        5. Call between DUT and PhoneB continues.
2801        6. All participant call end.
2802
2803        Returns:
2804            True if pass; False if fail.
2805        """
2806        ads = self.android_devices
2807
2808        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2809            1)
2810        if ((call_ab_id is None) or (call_ac_id is None)
2811                or (call_conf_id is None)):
2812            self.log.error("Failed to setup 3 way call.")
2813            return False
2814
2815        self.log.info("Verify no one dropped call.")
2816        time.sleep(WAIT_TIME_IN_CALL)
2817        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2818            return False
2819
2820        self.log.info("End call on PhoneC, and end call on PhoneB.")
2821        return self._test_1x_multi_call_drop_from_participant(
2822            ads[0], ads[2], ads[1])
2823
2824    @TelephonyBaseTest.tel_test_wrap
2825    @test_tracker_info(uuid="deb57627-a717-41f0-b8f4-f3ccf9ce2e15")
2826    def test_1x_mo_mt_add_drop_on_dut(self):
2827        """ Test 1x MO+MT call among three phones.
2828
2829        Steps:
2830        1. DUT in 1x idle, PhoneB and PhoneC idle.
2831        2. Call from DUT to PhoneB, accept on PhoneB.
2832        3. Call from PhoneC to DUT, accept on DUT.
2833        4. End call on DUT.
2834        5. End call on DUT.
2835
2836        Expected Results:
2837        4. DUT drop call, PhoneC also end. Then DUT receive callback from PhoneB.
2838        5. DUT drop call, call also end on PhoneB.
2839
2840        Returns:
2841            True if pass; False if fail.
2842        """
2843        ads = self.android_devices
2844
2845        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2846            0)
2847        if ((call_ab_id is None) or (call_ac_id is None)
2848                or (call_conf_id is None)):
2849            self.log.error("Failed to setup 3 way call.")
2850            return False
2851
2852        self.log.info("Verify no one dropped call.")
2853        time.sleep(WAIT_TIME_IN_CALL)
2854        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2855            return False
2856
2857        self.log.info("End call on DUT, DUT should receive callback.")
2858        return self._test_1x_multi_call_drop_from_host(ads[0], ads[2], ads[1])
2859
2860    @TelephonyBaseTest.tel_test_wrap
2861    @test_tracker_info(uuid="9cdee9c2-98cf-40de-9396-516192e493a1")
2862    def test_1x_mo_mt_add_swap_twice_drop_on_dut(self):
2863        """ Test 1x MO+MT call among three phones.
2864
2865        Steps:
2866        1. DUT in 1x idle, PhoneB and PhoneC idle.
2867        2. DUT MO call to PhoneB, answer on PhoneB.
2868        3. PhoneC call to DUT, answer on DUT
2869        4. Swap active call on DUT.
2870        5. Swap active call on DUT.
2871        6. Drop current call on DUT.
2872        7. Drop current call on DUT.
2873
2874        Expected Results:
2875        4. Swap call succeed.
2876        5. Swap call succeed.
2877        6. DUT drop call, PhoneC also end. Then DUT receive callback from PhoneB.
2878        7. DUT drop call, call also end on PhoneB.
2879
2880        Returns:
2881            True if pass; False if fail.
2882        """
2883        ads = self.android_devices
2884
2885        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2886            2)
2887        if ((call_ab_id is None) or (call_ac_id is None)
2888                or (call_conf_id is None)):
2889            self.log.error("Failed to setup 3 way call.")
2890            return False
2891
2892        self.log.info("Verify no one dropped call.")
2893        time.sleep(WAIT_TIME_IN_CALL)
2894        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2895            return False
2896
2897        self.log.info("End call on DUT, DUT should receive callback.")
2898        return self._test_1x_multi_call_drop_from_host(ads[0], ads[2], ads[1])
2899
2900    @TelephonyBaseTest.tel_test_wrap
2901    @test_tracker_info(uuid="26187827-64c0-436e-9792-20c216aeb442")
2902    def test_1x_mo_mt_add_swap_once_drop_on_dut(self):
2903        """ Test 1x MO+MT call among three phones.
2904
2905        Steps:
2906        1. DUT in 1x idle, PhoneB and PhoneC idle.
2907        2. DUT MO call to PhoneB, answer on PhoneB.
2908        3. PhoneC call to DUT, answer on DUT
2909        4. Swap active call on DUT.
2910        5. Drop current call on DUT.
2911        6. Drop current call on DUT.
2912
2913        Expected Results:
2914        4. Swap call succeed.
2915        5. DUT drop call, PhoneB also end. Then DUT receive callback from PhoneC.
2916        6. DUT drop call, call also end on PhoneC.
2917
2918        Returns:
2919            True if pass; False if fail.
2920        """
2921        ads = self.android_devices
2922
2923        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mo_mt_add_swap_x(
2924            1)
2925        if ((call_ab_id is None) or (call_ac_id is None)
2926                or (call_conf_id is None)):
2927            self.log.error("Failed to setup 3 way call.")
2928            return False
2929
2930        self.log.info("Verify no one dropped call.")
2931        time.sleep(WAIT_TIME_IN_CALL)
2932        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2933            return False
2934
2935        self.log.info("End call on DUT, DUT should receive callback.")
2936        return self._test_1x_multi_call_drop_from_host(ads[0], ads[1], ads[2])
2937
2938    @TelephonyBaseTest.tel_test_wrap
2939    @test_tracker_info(uuid="ce590b72-b4ab-4a27-9c01-f8e3b110419f")
2940    def test_1x_mt_mt_add_drop_active(self):
2941        """ Test 1x MT+MT call among three phones.
2942
2943        Steps:
2944        1. DUT in 1x idle, PhoneB and PhoneC idle.
2945        2. Call from PhoneB to DUT, accept on DUT.
2946        3. Call from PhoneC to DUT, accept on DUT.
2947        4. End call PhoneC, verify call continues on DUT and PhoneB.
2948        5. End call on PhoneB, verify call end on PhoneA.
2949
2950        Expected Results:
2951        4. PhoneC drop call, DUT and PhoneB call continues.
2952        5. PhoneB drop call, call also end on DUT.
2953
2954        Returns:
2955            True if pass; False if fail.
2956        """
2957        ads = self.android_devices
2958
2959        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
2960            0)
2961        if ((call_ab_id is None) or (call_ac_id is None)
2962                or (call_conf_id is None)):
2963            self.log.error("Failed to setup 3 way call.")
2964            return False
2965
2966        self.log.info("Verify no one dropped call.")
2967        time.sleep(WAIT_TIME_IN_CALL)
2968        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
2969            return False
2970
2971        self.log.info("End call on PhoneC, and end call on PhoneB.")
2972        return self._test_1x_multi_call_drop_from_participant(
2973            ads[0], ads[2], ads[1])
2974
2975    @TelephonyBaseTest.tel_test_wrap
2976    @test_tracker_info(uuid="736aa74e-1d0b-4f85-b0f7-11840543cf54")
2977    def test_1x_mt_mt_add_swap_twice_drop_active(self):
2978        """ Test 1x MT+MT call among three phones.
2979
2980        Steps:
2981        1. DUT in 1x idle, PhoneB and PhoneC idle.
2982        2. PhoneB call to DUT, answer on DUT.
2983        3. PhoneC call to DUT, answer on DUT
2984        4. Swap active call on DUT.
2985        5. Swap active call on DUT.
2986        6. Drop on PhoneC.
2987        7. Drop on PhoneB.
2988
2989        Expected Results:
2990        4. Swap call succeed.
2991        5. Swap call succeed.
2992        6. Call between DUT and PhoneB continues.
2993        7. All participant call end.
2994
2995        Returns:
2996            True if pass; False if fail.
2997        """
2998        ads = self.android_devices
2999
3000        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3001            2)
3002        if ((call_ab_id is None) or (call_ac_id is None)
3003                or (call_conf_id is None)):
3004            self.log.error("Failed to setup 3 way call.")
3005            return False
3006
3007        self.log.info("Verify no one dropped call.")
3008        time.sleep(WAIT_TIME_IN_CALL)
3009        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3010            return False
3011
3012        self.log.info("End call on PhoneC, and end call on PhoneB.")
3013        return self._test_1x_multi_call_drop_from_participant(
3014            ads[0], ads[2], ads[1])
3015
3016    @TelephonyBaseTest.tel_test_wrap
3017    @test_tracker_info(uuid="3eee6b6e-e1b1-43ec-82d5-d298b514fc07")
3018    def test_1x_mt_mt_add_swap_once_drop_active(self):
3019        """ Test 1x MT+MT call among three phones.
3020
3021        Steps:
3022        1. DUT in 1x idle, PhoneB and PhoneC idle.
3023        2. PhoneB call to DUT, answer on DUT.
3024        3. PhoneC call to DUT, answer on DUT
3025        4. Swap active call on DUT.
3026        5. Drop on PhoneB.
3027        6. Drop on PhoneC.
3028
3029        Expected Results:
3030        4. Swap call succeed.
3031        5. Call between DUT and PhoneC continues.
3032        6. All participant call end.
3033
3034        Returns:
3035            True if pass; False if fail.
3036        """
3037        ads = self.android_devices
3038
3039        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3040            1)
3041        if ((call_ab_id is None) or (call_ac_id is None)
3042                or (call_conf_id is None)):
3043            self.log.error("Failed to setup 3 way call.")
3044            return False
3045
3046        self.log.info("Verify no one dropped call.")
3047        time.sleep(WAIT_TIME_IN_CALL)
3048        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3049            return False
3050
3051        self.log.info("End call on PhoneB, and end call on PhoneC.")
3052        return self._test_1x_multi_call_drop_from_participant(
3053            ads[0], ads[1], ads[2])
3054
3055    @TelephonyBaseTest.tel_test_wrap
3056    @test_tracker_info(uuid="432549a9-e4bb-44d3-bd44-befffc1af02d")
3057    def test_1x_mt_mt_add_drop_held(self):
3058        """ Test 1x MT+MT call among three phones.
3059
3060        Steps:
3061        1. DUT in 1x idle, PhoneB and PhoneC idle.
3062        2. Call from PhoneB to DUT, accept on DUT.
3063        3. Call from PhoneC to DUT, accept on DUT.
3064        4. End call PhoneB, verify call continues on DUT and PhoneC.
3065        5. End call on PhoneC, verify call end on PhoneA.
3066
3067        Expected Results:
3068        4. PhoneB drop call, DUT and PhoneC call continues.
3069        5. PhoneC drop call, call also end on DUT.
3070
3071        Returns:
3072            True if pass; False if fail.
3073        """
3074        ads = self.android_devices
3075
3076        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3077            0)
3078        if ((call_ab_id is None) or (call_ac_id is None)
3079                or (call_conf_id is None)):
3080            self.log.error("Failed to setup 3 way call.")
3081            return False
3082
3083        self.log.info("Verify no one dropped call.")
3084        time.sleep(WAIT_TIME_IN_CALL)
3085        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3086            return False
3087
3088        self.log.info("End call on PhoneB, and end call on PhoneC.")
3089        return self._test_1x_multi_call_drop_from_participant(
3090            ads[0], ads[1], ads[2])
3091
3092    @TelephonyBaseTest.tel_test_wrap
3093    @test_tracker_info(uuid="c8f30fc1-8586-4eb0-854e-264989fd69b8")
3094    def test_1x_mt_mt_add_swap_twice_drop_held(self):
3095        """ Test 1x MT+MT call among three phones.
3096
3097        Steps:
3098        1. DUT in 1x idle, PhoneB and PhoneC idle.
3099        2. PhoneB call to DUT, answer on DUT.
3100        3. PhoneC call to DUT, answer on DUT
3101        4. Swap active call on DUT.
3102        5. Swap active call on DUT.
3103        6. Drop on PhoneB.
3104        7. Drop on PhoneC.
3105
3106        Expected Results:
3107        4. Swap call succeed.
3108        5. Swap call succeed.
3109        6. Call between DUT and PhoneC continues.
3110        7. All participant call end.
3111
3112        Returns:
3113            True if pass; False if fail.
3114        """
3115        ads = self.android_devices
3116
3117        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3118            2)
3119        if ((call_ab_id is None) or (call_ac_id is None)
3120                or (call_conf_id is None)):
3121            self.log.error("Failed to setup 3 way call.")
3122            return False
3123
3124        self.log.info("Verify no one dropped call.")
3125        time.sleep(WAIT_TIME_IN_CALL)
3126        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3127            return False
3128
3129        self.log.info("End call on PhoneB, and end call on PhoneC.")
3130        return self._test_1x_multi_call_drop_from_participant(
3131            ads[0], ads[1], ads[2])
3132
3133    @TelephonyBaseTest.tel_test_wrap
3134    @test_tracker_info(uuid="065ba51e-9843-4018-8009-7fdc6590011d")
3135    def test_1x_mt_mt_add_swap_once_drop_held(self):
3136        """ Test 1x MT+MT call among three phones.
3137
3138        Steps:
3139        1. DUT in 1x idle, PhoneB and PhoneC idle.
3140        2. PhoneB call to DUT, answer on DUT.
3141        3. PhoneC call to DUT, answer on DUT
3142        4. Swap active call on DUT.
3143        5. Drop on PhoneC.
3144        6. Drop on PhoneB.
3145
3146        Expected Results:
3147        4. Swap call succeed.
3148        5. Call between DUT and PhoneB continues.
3149        6. All participant call end.
3150
3151        Returns:
3152            True if pass; False if fail.
3153        """
3154        ads = self.android_devices
3155
3156        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3157            1)
3158        if ((call_ab_id is None) or (call_ac_id is None)
3159                or (call_conf_id is None)):
3160            self.log.error("Failed to setup 3 way call.")
3161            return False
3162
3163        self.log.info("Verify no one dropped call.")
3164        time.sleep(WAIT_TIME_IN_CALL)
3165        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3166            return False
3167
3168        self.log.info("End call on PhoneC, and end call on PhoneB.")
3169        return self._test_1x_multi_call_drop_from_participant(
3170            ads[0], ads[2], ads[1])
3171
3172    @TelephonyBaseTest.tel_test_wrap
3173    @test_tracker_info(uuid="69c69449-d430-4f00-ae19-c51242561ac9")
3174    def test_1x_mt_mt_add_drop_on_dut(self):
3175        """ Test 1x MT+MT call among three phones.
3176
3177        Steps:
3178        1. DUT in 1x idle, PhoneB and PhoneC idle.
3179        2. Call from PhoneB to DUT, accept on DUT.
3180        3. Call from PhoneC to DUT, accept on DUT.
3181        4. End call on DUT.
3182        5. End call on DUT.
3183
3184        Expected Results:
3185        4. DUT drop call, PhoneC also end. Then DUT receive callback from PhoneB.
3186        5. DUT drop call, call also end on PhoneB.
3187
3188        Returns:
3189            True if pass; False if fail.
3190        """
3191        ads = self.android_devices
3192
3193        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3194            0)
3195        if ((call_ab_id is None) or (call_ac_id is None)
3196                or (call_conf_id is None)):
3197            self.log.error("Failed to setup 3 way call.")
3198            return False
3199
3200        self.log.info("Verify no one dropped call.")
3201        time.sleep(WAIT_TIME_IN_CALL)
3202        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3203            return False
3204
3205        self.log.info("End call on DUT, DUT should receive callback.")
3206        return self._test_1x_multi_call_drop_from_host(ads[0], ads[2], ads[1])
3207
3208    @TelephonyBaseTest.tel_test_wrap
3209    @test_tracker_info(uuid="282583a3-d455-4caf-a184-718f8bbccb91")
3210    def test_1x_mt_mt_add_swap_twice_drop_on_dut(self):
3211        """ Test 1x MT+MT call among three phones.
3212
3213        Steps:
3214        1. DUT in 1x idle, PhoneB and PhoneC idle.
3215        2. PhoneB call to DUT, answer on DUT.
3216        3. PhoneC call to DUT, answer on DUT
3217        4. Swap active call on DUT.
3218        5. Swap active call on DUT.
3219        6. Drop current call on DUT.
3220        7. Drop current call on DUT.
3221
3222        Expected Results:
3223        4. Swap call succeed.
3224        5. Swap call succeed.
3225        6. DUT drop call, PhoneC also end. Then DUT receive callback from PhoneB.
3226        7. DUT drop call, call also end on PhoneB.
3227
3228        Returns:
3229            True if pass; False if fail.
3230        """
3231        ads = self.android_devices
3232
3233        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3234            2)
3235        if ((call_ab_id is None) or (call_ac_id is None)
3236                or (call_conf_id is None)):
3237            self.log.error("Failed to setup 3 way call.")
3238            return False
3239
3240        self.log.info("Verify no one dropped call.")
3241        time.sleep(WAIT_TIME_IN_CALL)
3242        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3243            return False
3244
3245        self.log.info("End call on DUT, DUT should receive callback.")
3246        return self._test_1x_multi_call_drop_from_host(ads[0], ads[2], ads[1])
3247
3248    @TelephonyBaseTest.tel_test_wrap
3249    @test_tracker_info(uuid="1cf83159-d230-41a4-842c-064be5ef11e6")
3250    def test_1x_mt_mt_add_swap_once_drop_on_dut(self):
3251        """ Test 1x MT+MT call among three phones.
3252
3253        Steps:
3254        1. DUT in 1x idle, PhoneB and PhoneC idle.
3255        2. PhoneB call to DUT, answer on DUT.
3256        3. PhoneC call to DUT, answer on DUT
3257        4. Swap active call on DUT.
3258        5. Drop current call on DUT.
3259        6. Drop current call on DUT.
3260
3261        Expected Results:
3262        4. Swap call succeed.
3263        5. DUT drop call, PhoneB also end. Then DUT receive callback from PhoneC.
3264        6. DUT drop call, call also end on PhoneC.
3265
3266        Returns:
3267            True if pass; False if fail.
3268        """
3269        ads = self.android_devices
3270
3271        call_ab_id, call_ac_id, call_conf_id = self._test_1x_mt_mt_add_swap_x(
3272            1)
3273        if ((call_ab_id is None) or (call_ac_id is None)
3274                or (call_conf_id is None)):
3275            self.log.error("Failed to setup 3 way call.")
3276            return False
3277
3278        self.log.info("Verify no one dropped call.")
3279        time.sleep(WAIT_TIME_IN_CALL)
3280        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
3281            return False
3282
3283        self.log.info("End call on DUT, DUT should receive callback.")
3284        return self._test_1x_multi_call_drop_from_host(ads[0], ads[1], ads[2])
3285
3286    @TelephonyBaseTest.tel_test_wrap
3287    @test_tracker_info(uuid="602db3cb-e02b-4e4c-9043-338e1231f51b")
3288    def test_volte_mo_mo_add_volte_merge_drop_second_call_from_participant_no_cep(
3289            self):
3290        """ Test VoLTE Conference Call among three phones. No CEP.
3291
3292        Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3293        Call from PhoneA (VoLTE) to PhoneC (VoLTE), accept on PhoneC.
3294        On PhoneA, merge to conference call (No CEP).
3295        End call on PhoneC, verify call continues.
3296        End call on PhoneB, verify call end on PhoneA.
3297
3298        Returns:
3299            True if pass; False if fail.
3300        """
3301        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(0)
3302        if call_ab_id is None or call_ac_id is None:
3303            return False
3304
3305        return self._test_ims_conference_merge_drop_second_call_no_cep(
3306            call_ab_id, call_ac_id)
3307
3308    @TelephonyBaseTest.tel_test_wrap
3309    @test_tracker_info(uuid="7c9ae738-9031-4a77-9ff7-356a186820a5")
3310    def test_volte_mo_mo_add_volte_merge_drop_second_call_from_participant_cep(
3311            self):
3312        """ Test VoLTE Conference Call among three phones. CEP enabled.
3313
3314        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3315        2. Call from PhoneA (VoLTE) to PhoneC (VoLTE), accept on PhoneC.
3316        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3317        4. End call on PhoneC, verify call continues.
3318        5. End call on PhoneB, verify call end on PhoneA.
3319
3320        Returns:
3321            True if pass; False if fail.
3322        """
3323        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(0)
3324        if call_ab_id is None or call_ac_id is None:
3325            return False
3326
3327        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3328            call_ab_id, call_ac_id)
3329
3330    @TelephonyBaseTest.tel_test_wrap
3331    @test_tracker_info(uuid="f50e7e94-0956-41c4-b02b-384a12668f10")
3332    def test_volte_mo_mo_add_volte_merge_drop_second_call_from_host_cep(self):
3333        """ Test VoLTE Conference Call among three phones. CEP enabled.
3334
3335        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3336        2. Call from PhoneA (VoLTE) to PhoneC (VoLTE), accept on PhoneC.
3337        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3338        4. On PhoneA disconnect call between A-C, verify call continues.
3339        5. On PhoneA disconnect call between A-B, verify call continues.
3340
3341        Returns:
3342            True if pass; False if fail.
3343        """
3344        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(0)
3345        if call_ab_id is None or call_ac_id is None:
3346            return False
3347
3348        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3349            call_ab_id, call_ac_id)
3350
3351    @TelephonyBaseTest.tel_test_wrap
3352    @test_tracker_info(uuid="a6c22e39-fd7e-4bed-982a-145065572281")
3353    def test_volte_mo_mo_add_volte_merge_drop_first_call_from_participant_cep(
3354            self):
3355        """ Test VoLTE Conference Call among three phones. CEP enabled.
3356
3357        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3358        2. Call from PhoneA (VoLTE) to PhoneC (VoLTE), accept on PhoneC.
3359        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3360        4. End call on PhoneB, verify call continues.
3361        5. End call on PhoneC, verify call end on PhoneA.
3362
3363        Returns:
3364            True if pass; False if fail.
3365        """
3366        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(0)
3367        if call_ab_id is None or call_ac_id is None:
3368            return False
3369
3370        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3371            call_ab_id, call_ac_id)
3372
3373    @TelephonyBaseTest.tel_test_wrap
3374    @test_tracker_info(uuid="2188722a-31e3-4e46-8f74-6ea4cbc08476")
3375    def test_volte_mo_mo_add_volte_merge_drop_first_call_from_host_cep(self):
3376        """ Test VoLTE Conference Call among three phones. CEP enabled.
3377
3378        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3379        2. Call from PhoneA (VoLTE) to PhoneC (VoLTE), accept on PhoneC.
3380        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3381        4. On PhoneA disconnect call between A-B, verify call continues.
3382        5. On PhoneA disconnect call between A-C, verify call continues.
3383
3384        Returns:
3385            True if pass; False if fail.
3386        """
3387        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(0)
3388        if call_ab_id is None or call_ac_id is None:
3389            return False
3390
3391        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3392            call_ab_id, call_ac_id)
3393
3394    @TelephonyBaseTest.tel_test_wrap
3395    @test_tracker_info(uuid="ef5ec1c9-7771-4289-ad94-08a80145d680")
3396    def test_volte_mo_mt_add_volte_merge_drop_second_call_from_participant_no_cep(
3397            self):
3398        """ Test VoLTE Conference Call among three phones. No CEP.
3399
3400        Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3401        Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3402        On PhoneA, merge to conference call (No CEP).
3403        End call on PhoneC, verify call continues.
3404        End call on PhoneB, verify call end on PhoneA.
3405
3406        Returns:
3407            True if pass; False if fail.
3408        """
3409        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(0)
3410        if call_ab_id is None or call_ac_id is None:
3411            return False
3412
3413        return self._test_ims_conference_merge_drop_second_call_no_cep(
3414            call_ab_id, call_ac_id)
3415
3416    @TelephonyBaseTest.tel_test_wrap
3417    @test_tracker_info(uuid="2111001d-c310-4eff-a6ef-201d199796ea")
3418    def test_volte_mo_mt_add_volte_merge_drop_second_call_from_participant_cep(
3419            self):
3420        """ Test VoLTE Conference Call among three phones. CEP enabled.
3421
3422        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3423        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3424        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3425        4. End call on PhoneC, verify call continues.
3426        5. End call on PhoneB, verify call end on PhoneA.
3427
3428        Returns:
3429            True if pass; False if fail.
3430        """
3431        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(0)
3432        if call_ab_id is None or call_ac_id is None:
3433            return False
3434
3435        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3436            call_ab_id, call_ac_id)
3437
3438    @TelephonyBaseTest.tel_test_wrap
3439    @test_tracker_info(uuid="eee3577b-5427-43ee-aff0-ed7f7846b41c")
3440    def test_volte_mo_mt_add_volte_merge_drop_second_call_from_host_cep(self):
3441        """ Test VoLTE Conference Call among three phones. CEP enabled.
3442
3443        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3444        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3445        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3446        4. On PhoneA disconnect call between A-C, verify call continues.
3447        5. On PhoneA disconnect call between A-B, verify call continues.
3448
3449        Returns:
3450            True if pass; False if fail.
3451        """
3452        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(0)
3453        if call_ab_id is None or call_ac_id is None:
3454            return False
3455
3456        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3457            call_ab_id, call_ac_id)
3458
3459    @TelephonyBaseTest.tel_test_wrap
3460    @test_tracker_info(uuid="86faf200-be78-452d-8662-85e7f42a2d3b")
3461    def test_volte_mo_mt_add_volte_merge_drop_first_call_from_participant_cep(
3462            self):
3463        """ Test VoLTE Conference Call among three phones. CEP enabled.
3464
3465        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3466        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3467        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3468        4. End call on PhoneB, verify call continues.
3469        5. End call on PhoneC, verify call end on PhoneA.
3470
3471        Returns:
3472            True if pass; False if fail.
3473        """
3474        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(0)
3475        if call_ab_id is None or call_ac_id is None:
3476            return False
3477
3478        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3479            call_ab_id, call_ac_id)
3480
3481    @TelephonyBaseTest.tel_test_wrap
3482    @test_tracker_info(uuid="d0e18f3c-71a1-49c9-b3ad-b8c24f8a43ec")
3483    def test_volte_mo_mt_add_volte_merge_drop_first_call_from_host_cep(self):
3484        """ Test VoLTE Conference Call among three phones. CEP enabled.
3485
3486        1. Call from PhoneA (VoLTE) to PhoneB (VoLTE), accept on PhoneB.
3487        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3488        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3489        4. On PhoneA disconnect call between A-B, verify call continues.
3490        5. On PhoneA disconnect call between A-C, verify call continues.
3491
3492        Returns:
3493            True if pass; False if fail.
3494        """
3495        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(0)
3496        if call_ab_id is None or call_ac_id is None:
3497            return False
3498
3499        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3500            call_ab_id, call_ac_id)
3501
3502    @TelephonyBaseTest.tel_test_wrap
3503    @test_tracker_info(uuid="b27d6b3d-b73b-4a20-a5ae-2990d73a07fe")
3504    def test_volte_mt_mt_add_volte_merge_drop_second_call_from_participant_no_cep(
3505            self):
3506        """ Test VoLTE Conference Call among three phones. No CEP.
3507
3508        Call from PhoneB (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3509        Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3510        On PhoneA, merge to conference call (No CEP).
3511        End call on PhoneC, verify call continues.
3512        End call on PhoneB, verify call end on PhoneA.
3513
3514        Returns:
3515            True if pass; False if fail.
3516        """
3517        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(0)
3518        if call_ab_id is None or call_ac_id is None:
3519            return False
3520
3521        return self._test_ims_conference_merge_drop_second_call_no_cep(
3522            call_ab_id, call_ac_id)
3523
3524    @TelephonyBaseTest.tel_test_wrap
3525    @test_tracker_info(uuid="f66e940c-30bd-48c7-b5e2-91147fa04ba2")
3526    def test_volte_mt_mt_add_volte_merge_drop_second_call_from_participant_cep(
3527            self):
3528        """ Test VoLTE Conference Call among three phones. CEP enabled.
3529
3530        1. Call from PhoneB (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3531        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3532        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3533        4. End call on PhoneC, verify call continues.
3534        5. End call on PhoneB, verify call end on PhoneA.
3535
3536        Returns:
3537            True if pass; False if fail.
3538        """
3539        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(0)
3540        if call_ab_id is None or call_ac_id is None:
3541            return False
3542
3543        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3544            call_ab_id, call_ac_id)
3545
3546    @TelephonyBaseTest.tel_test_wrap
3547    @test_tracker_info(uuid="ad313a8b-8bb0-43eb-a10e-e2c17f530ee4")
3548    def test_volte_mt_mt_add_volte_merge_drop_second_call_from_host_cep(self):
3549        """ Test VoLTE Conference Call among three phones. CEP enabled.
3550
3551        1. Call from PhoneB (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3552        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3553        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3554        4. On PhoneA disconnect call between A-C, verify call continues.
3555        5. On PhoneA disconnect call between A-B, verify call continues.
3556
3557        Returns:
3558            True if pass; False if fail.
3559        """
3560        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(0)
3561        if call_ab_id is None or call_ac_id is None:
3562            return False
3563
3564        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3565            call_ab_id, call_ac_id)
3566
3567    @TelephonyBaseTest.tel_test_wrap
3568    @test_tracker_info(uuid="18b30c14-fef1-4055-8987-ee6137609b81")
3569    def test_volte_mt_mt_add_volte_merge_drop_first_call_from_participant_cep(
3570            self):
3571        """ Test VoLTE Conference Call among three phones. CEP enabled.
3572
3573        1. Call from PhoneB (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3574        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3575        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3576        4. End call on PhoneB, verify call continues.
3577        5. End call on PhoneC, verify call end on PhoneA.
3578
3579        Returns:
3580            True if pass; False if fail.
3581        """
3582        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(0)
3583        if call_ab_id is None or call_ac_id is None:
3584            return False
3585
3586        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3587            call_ab_id, call_ac_id)
3588
3589    @TelephonyBaseTest.tel_test_wrap
3590    @test_tracker_info(uuid="7dc24162-f06e-453b-93e6-926d31e6d387")
3591    def test_volte_mt_mt_add_volte_merge_drop_first_call_from_host_cep(self):
3592        """ Test VoLTE Conference Call among three phones. CEP enabled.
3593
3594        1. Call from PhoneB (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3595        2. Call from PhoneC (VoLTE) to PhoneA (VoLTE), accept on PhoneA.
3596        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3597        4. On PhoneA disconnect call between A-B, verify call continues.
3598        5. On PhoneA disconnect call between A-C, verify call continues.
3599
3600        Returns:
3601            True if pass; False if fail.
3602        """
3603        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(0)
3604        if call_ab_id is None or call_ac_id is None:
3605            return False
3606
3607        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3608            call_ab_id, call_ac_id)
3609
3610    @TelephonyBaseTest.tel_test_wrap
3611    @test_tracker_info(uuid="eb90a56b-2085-4fde-a156-ada3620200df")
3612    def test_volte_mo_mo_add_wcdma_merge_drop_second_call_from_participant_no_cep(
3613            self):
3614        """ Test VoLTE Conference Call among three phones. No CEP.
3615
3616        Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3617        Call from PhoneA (VOLTE) to PhoneC (WCDMA), accept on PhoneC.
3618        On PhoneA, merge to conference call (No CEP).
3619        End call on PhoneC, verify call continues.
3620        End call on PhoneB, verify call end on PhoneA.
3621
3622        Returns:
3623            True if pass; False if fail.
3624        """
3625        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(0)
3626        if call_ab_id is None or call_ac_id is None:
3627            return False
3628
3629        return self._test_ims_conference_merge_drop_second_call_no_cep(
3630            call_ab_id, call_ac_id)
3631
3632    @TelephonyBaseTest.tel_test_wrap
3633    @test_tracker_info(uuid="ae999260-7856-41cc-bf4c-67b26e18c9a3")
3634    def test_volte_mo_mo_add_wcdma_merge_drop_second_call_from_participant_cep(
3635            self):
3636        """ Test VoLTE Conference Call among three phones. CEP enabled.
3637
3638        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3639        2. Call from PhoneA (VoLTE) to PhoneC (WCDMA), accept on PhoneC.
3640        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3641        4. End call on PhoneC, verify call continues.
3642        5. End call on PhoneB, verify call end on PhoneA.
3643
3644        Returns:
3645            True if pass; False if fail.
3646        """
3647        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(0)
3648        if call_ab_id is None or call_ac_id is None:
3649            return False
3650
3651        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3652            call_ab_id, call_ac_id)
3653
3654    @TelephonyBaseTest.tel_test_wrap
3655    @test_tracker_info(uuid="cd48de00-c1e5-4716-b232-3f1f98e89510")
3656    def test_volte_mo_mo_add_wcdma_merge_drop_second_call_from_host_cep(self):
3657        """ Test VoLTE Conference Call among three phones. CEP enabled.
3658
3659        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3660        2. Call from PhoneA (VoLTE) to PhoneC (WCDMA), accept on PhoneC.
3661        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3662        4. On PhoneA disconnect call between A-C, verify call continues.
3663        5. On PhoneA disconnect call between A-B, verify call continues.
3664
3665        Returns:
3666            True if pass; False if fail.
3667        """
3668        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(0)
3669        if call_ab_id is None or call_ac_id is None:
3670            return False
3671
3672        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3673            call_ab_id, call_ac_id)
3674
3675    @TelephonyBaseTest.tel_test_wrap
3676    @test_tracker_info(uuid="a84ea6e8-dabc-4bab-b6d1-700b0a0fb9e9")
3677    def test_volte_mo_mo_add_wcdma_merge_drop_first_call_from_participant_cep(
3678            self):
3679        """ Test VoLTE Conference Call among three phones. CEP enabled.
3680
3681        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3682        2. Call from PhoneA (VoLTE) to PhoneC (WCDMA), accept on PhoneC.
3683        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3684        4. End call on PhoneB, verify call continues.
3685        5. End call on PhoneC, verify call end on PhoneA.
3686
3687        Returns:
3688            True if pass; False if fail.
3689        """
3690        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(0)
3691        if call_ab_id is None or call_ac_id is None:
3692            return False
3693
3694        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3695            call_ab_id, call_ac_id)
3696
3697    @TelephonyBaseTest.tel_test_wrap
3698    @test_tracker_info(uuid="7ac9a806-c608-42dd-a4fd-66b0ba535434")
3699    def test_volte_mo_mo_add_wcdma_merge_drop_first_call_from_host_cep(self):
3700        """ Test VoLTE Conference Call among three phones. CEP enabled.
3701
3702        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3703        2. Call from PhoneA (VoLTE) to PhoneC (WCDMA), accept on PhoneC.
3704        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3705        4. On PhoneA disconnect call between A-B, verify call continues.
3706        5. On PhoneA disconnect call between A-C, verify call continues.
3707
3708        Returns:
3709            True if pass; False if fail.
3710        """
3711        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(0)
3712        if call_ab_id is None or call_ac_id is None:
3713            return False
3714
3715        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3716            call_ab_id, call_ac_id)
3717
3718    @TelephonyBaseTest.tel_test_wrap
3719    @test_tracker_info(uuid="35f9eb31-3a77-457c-aeb0-55a73c60dda1")
3720    def test_volte_mo_mt_add_wcdma_merge_drop_second_call_from_participant_no_cep(
3721            self):
3722        """ Test VoLTE Conference Call among three phones. No CEP.
3723
3724        Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3725        Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3726        On PhoneA, merge to conference call (No CEP).
3727        End call on PhoneC, verify call continues.
3728        End call on PhoneB, verify call end on PhoneA.
3729
3730        Returns:
3731            True if pass; False if fail.
3732        """
3733        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(0)
3734        if call_ab_id is None or call_ac_id is None:
3735            return False
3736
3737        return self._test_ims_conference_merge_drop_second_call_no_cep(
3738            call_ab_id, call_ac_id)
3739
3740    @TelephonyBaseTest.tel_test_wrap
3741    @test_tracker_info(uuid="f3314f74-e929-45ed-91cb-27c1c26e240f")
3742    def test_volte_mo_mt_add_wcdma_merge_drop_second_call_from_participant_cep(
3743            self):
3744        """ Test VoLTE Conference Call among three phones. CEP enabled.
3745
3746        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3747        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3748        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3749        4. End call on PhoneC, verify call continues.
3750        5. End call on PhoneB, verify call end on PhoneA.
3751
3752        Returns:
3753            True if pass; False if fail.
3754        """
3755        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(0)
3756        if call_ab_id is None or call_ac_id is None:
3757            return False
3758
3759        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3760            call_ab_id, call_ac_id)
3761
3762    @TelephonyBaseTest.tel_test_wrap
3763    @test_tracker_info(uuid="5e521ff1-505b-4d63-8b12-7b0187dea94b")
3764    def test_volte_mo_mt_add_wcdma_merge_drop_second_call_from_host_cep(self):
3765        """ Test VoLTE Conference Call among three phones. CEP enabled.
3766
3767        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3768        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3769        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3770        4. On PhoneA disconnect call between A-C, verify call continues.
3771        5. On PhoneA disconnect call between A-B, verify call continues.
3772
3773        Returns:
3774            True if pass; False if fail.
3775        """
3776        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(0)
3777        if call_ab_id is None or call_ac_id is None:
3778            return False
3779
3780        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3781            call_ab_id, call_ac_id)
3782
3783    @TelephonyBaseTest.tel_test_wrap
3784    @test_tracker_info(uuid="d5732ea2-a657-40ea-bb30-151e53cf8058")
3785    def test_volte_mo_mt_add_wcdma_merge_drop_first_call_from_participant_cep(
3786            self):
3787        """ Test VoLTE Conference Call among three phones. CEP enabled.
3788
3789        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3790        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3791        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3792        4. End call on PhoneB, verify call continues.
3793        5. End call on PhoneC, verify call end on PhoneA.
3794
3795        Returns:
3796            True if pass; False if fail.
3797        """
3798        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(0)
3799        if call_ab_id is None or call_ac_id is None:
3800            return False
3801
3802        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3803            call_ab_id, call_ac_id)
3804
3805    @TelephonyBaseTest.tel_test_wrap
3806    @test_tracker_info(uuid="78e73444-3dde-465f-bf5e-dc48b40a93f3")
3807    def test_volte_mo_mt_add_wcdma_merge_drop_first_call_from_host_cep(self):
3808        """ Test VoLTE Conference Call among three phones. CEP enabled.
3809
3810        1. Call from PhoneA (VoLTE) to PhoneB (WCDMA), accept on PhoneB.
3811        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3812        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3813        4. On PhoneA disconnect call between A-B, verify call continues.
3814        5. On PhoneA disconnect call between A-C, verify call continues.
3815
3816        Returns:
3817            True if pass; False if fail.
3818        """
3819        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(0)
3820        if call_ab_id is None or call_ac_id is None:
3821            return False
3822
3823        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3824            call_ab_id, call_ac_id)
3825
3826    @TelephonyBaseTest.tel_test_wrap
3827    @test_tracker_info(uuid="f4efbf04-b117-4508-ba86-0ef37481cc3a")
3828    def test_volte_mt_mt_add_wcdma_merge_drop_second_call_from_participant_no_cep(
3829            self):
3830        """ Test VoLTE Conference Call among three phones. No CEP.
3831
3832        Call from PhoneB (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3833        Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3834        On PhoneA, merge to conference call (No CEP).
3835        End call on PhoneC, verify call continues.
3836        End call on PhoneB, verify call end on PhoneA.
3837
3838        Returns:
3839            True if pass; False if fail.
3840        """
3841        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(0)
3842        if call_ab_id is None or call_ac_id is None:
3843            return False
3844
3845        return self._test_ims_conference_merge_drop_second_call_no_cep(
3846            call_ab_id, call_ac_id)
3847
3848    @TelephonyBaseTest.tel_test_wrap
3849    @test_tracker_info(uuid="064109cf-d166-448a-8655-81744ea37e05")
3850    def test_volte_mt_mt_add_wcdma_merge_drop_second_call_from_participant_cep(
3851            self):
3852        """ Test VoLTE Conference Call among three phones. CEP enabled.
3853
3854        1. Call from PhoneB (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3855        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3856        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3857        4. End call on PhoneC, verify call continues.
3858        5. End call on PhoneB, verify call end on PhoneA.
3859
3860        Returns:
3861            True if pass; False if fail.
3862        """
3863        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(0)
3864        if call_ab_id is None or call_ac_id is None:
3865            return False
3866
3867        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3868            call_ab_id, call_ac_id)
3869
3870    @TelephonyBaseTest.tel_test_wrap
3871    @test_tracker_info(uuid="bedd0576-5bb6-4fef-9700-f638cf742201")
3872    def test_volte_mt_mt_add_wcdma_merge_drop_second_call_from_host_cep(self):
3873        """ Test VoLTE Conference Call among three phones. CEP enabled.
3874
3875        1. Call from PhoneB (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3876        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3877        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3878        4. On PhoneA disconnect call between A-C, verify call continues.
3879        5. On PhoneA disconnect call between A-B, verify call continues.
3880
3881        Returns:
3882            True if pass; False if fail.
3883        """
3884        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(0)
3885        if call_ab_id is None or call_ac_id is None:
3886            return False
3887
3888        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3889            call_ab_id, call_ac_id)
3890
3891    @TelephonyBaseTest.tel_test_wrap
3892    @test_tracker_info(uuid="46178387-a0dc-4e77-8ca4-06f731e1104f")
3893    def test_volte_mt_mt_add_wcdma_merge_drop_first_call_from_participant_cep(
3894            self):
3895        """ Test VoLTE Conference Call among three phones. CEP enabled.
3896
3897        1. Call from PhoneB (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3898        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3899        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3900        4. End call on PhoneB, verify call continues.
3901        5. End call on PhoneC, verify call end on PhoneA.
3902
3903        Returns:
3904            True if pass; False if fail.
3905        """
3906        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(0)
3907        if call_ab_id is None or call_ac_id is None:
3908            return False
3909
3910        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
3911            call_ab_id, call_ac_id)
3912
3913    @TelephonyBaseTest.tel_test_wrap
3914    @test_tracker_info(uuid="a1d13168-078b-47d8-89f0-0798b085502d")
3915    def test_volte_mt_mt_add_wcdma_merge_drop_first_call_from_host_cep(self):
3916        """ Test VoLTE Conference Call among three phones. CEP enabled.
3917
3918        1. Call from PhoneB (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3919        2. Call from PhoneC (WCDMA) to PhoneA (VoLTE), accept on PhoneA.
3920        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3921        4. On PhoneA disconnect call between A-B, verify call continues.
3922        5. On PhoneA disconnect call between A-C, verify call continues.
3923
3924        Returns:
3925            True if pass; False if fail.
3926        """
3927        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(0)
3928        if call_ab_id is None or call_ac_id is None:
3929            return False
3930
3931        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
3932            call_ab_id, call_ac_id)
3933
3934    @TelephonyBaseTest.tel_test_wrap
3935    @test_tracker_info(uuid="08a26dc4-78e5-47cb-af75-9695453e82bb")
3936    def test_volte_mo_mo_add_1x_merge_drop_second_call_from_participant_no_cep(
3937            self):
3938        """ Test VoLTE Conference Call among three phones. No CEP.
3939
3940        Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
3941        Call from PhoneA (VOLTE) to PhoneC (1x), accept on PhoneC.
3942        On PhoneA, merge to conference call (No CEP).
3943        End call on PhoneC, verify call continues.
3944        End call on PhoneB, verify call end on PhoneA.
3945
3946        Returns:
3947            True if pass; False if fail.
3948        """
3949        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(0)
3950        if call_ab_id is None or call_ac_id is None:
3951            return False
3952
3953        return self._test_ims_conference_merge_drop_second_call_no_cep(
3954            call_ab_id, call_ac_id)
3955
3956    @TelephonyBaseTest.tel_test_wrap
3957    @test_tracker_info(uuid="bde45028-b844-4192-89b1-8579941a03ed")
3958    def test_volte_mo_mo_add_1x_merge_drop_second_call_from_participant_cep(
3959            self):
3960        """ Test VoLTE Conference Call among three phones. CEP enabled.
3961
3962        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
3963        2. Call from PhoneA (VoLTE) to PhoneC (1x), accept on PhoneC.
3964        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3965        4. End call on PhoneC, verify call continues.
3966        5. End call on PhoneB, verify call end on PhoneA.
3967
3968        Returns:
3969            True if pass; False if fail.
3970        """
3971        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(0)
3972        if call_ab_id is None or call_ac_id is None:
3973            return False
3974
3975        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
3976            call_ab_id, call_ac_id)
3977
3978    @TelephonyBaseTest.tel_test_wrap
3979    @test_tracker_info(uuid="f38d3031-d7f1-4990-bce3-9c329beb5eeb")
3980    def test_volte_mo_mo_add_1x_merge_drop_second_call_from_host_cep(self):
3981        """ Test VoLTE Conference Call among three phones. CEP enabled.
3982
3983        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
3984        2. Call from PhoneA (VoLTE) to PhoneC (1x), accept on PhoneC.
3985        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
3986        4. On PhoneA disconnect call between A-C, verify call continues.
3987        5. On PhoneA disconnect call between A-B, verify call continues.
3988
3989        Returns:
3990            True if pass; False if fail.
3991        """
3992        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(0)
3993        if call_ab_id is None or call_ac_id is None:
3994            return False
3995
3996        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
3997            call_ab_id, call_ac_id)
3998
3999    @TelephonyBaseTest.tel_test_wrap
4000    @test_tracker_info(uuid="d1391513-8592-4159-81b7-16cb10c406e8")
4001    def test_volte_mo_mo_add_1x_merge_drop_first_call_from_participant_cep(
4002            self):
4003        """ Test VoLTE Conference Call among three phones. CEP enabled.
4004
4005        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4006        2. Call from PhoneA (VoLTE) to PhoneC (1x), accept on PhoneC.
4007        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4008        4. End call on PhoneB, verify call continues.
4009        5. End call on PhoneC, verify call end on PhoneA.
4010
4011        Returns:
4012            True if pass; False if fail.
4013        """
4014        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(0)
4015        if call_ab_id is None or call_ac_id is None:
4016            return False
4017
4018        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
4019            call_ab_id, call_ac_id)
4020
4021    @TelephonyBaseTest.tel_test_wrap
4022    @test_tracker_info(uuid="e05c261e-e99a-4ca7-a8db-9ad982e06913")
4023    def test_volte_mo_mo_add_1x_merge_drop_first_call_from_host_cep(self):
4024        """ Test VoLTE Conference Call among three phones. CEP enabled.
4025
4026        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4027        2. Call from PhoneA (VoLTE) to PhoneC (1x), accept on PhoneC.
4028        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4029        4. On PhoneA disconnect call between A-B, verify call continues.
4030        5. On PhoneA disconnect call between A-C, verify call continues.
4031
4032        Returns:
4033            True if pass; False if fail.
4034        """
4035        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(0)
4036        if call_ab_id is None or call_ac_id is None:
4037            return False
4038
4039        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
4040            call_ab_id, call_ac_id)
4041
4042    @TelephonyBaseTest.tel_test_wrap
4043    @test_tracker_info(uuid="f4329201-a388-4070-9225-37d4c8045096")
4044    def test_volte_mo_mt_add_1x_merge_drop_second_call_from_participant_no_cep(
4045            self):
4046        """ Test VoLTE Conference Call among three phones. No CEP.
4047
4048        Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4049        Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4050        On PhoneA, merge to conference call (No CEP).
4051        End call on PhoneC, verify call continues.
4052        End call on PhoneB, verify call end on PhoneA.
4053
4054        Returns:
4055            True if pass; False if fail.
4056        """
4057        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(0)
4058        if call_ab_id is None or call_ac_id is None:
4059            return False
4060
4061        return self._test_ims_conference_merge_drop_second_call_no_cep(
4062            call_ab_id, call_ac_id)
4063
4064    @TelephonyBaseTest.tel_test_wrap
4065    @test_tracker_info(uuid="fafa96ef-649a-4ff7-8fed-d4bfd6d88c2e")
4066    def test_volte_mo_mt_add_1x_merge_drop_second_call_from_participant_cep(
4067            self):
4068        """ Test VoLTE Conference Call among three phones. CEP enabled.
4069
4070        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4071        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4072        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4073        4. End call on PhoneC, verify call continues.
4074        5. End call on PhoneB, verify call end on PhoneA.
4075
4076        Returns:
4077            True if pass; False if fail.
4078        """
4079        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(0)
4080        if call_ab_id is None or call_ac_id is None:
4081            return False
4082
4083        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
4084            call_ab_id, call_ac_id)
4085
4086    @TelephonyBaseTest.tel_test_wrap
4087    @test_tracker_info(uuid="66d79e0b-879d-461c-bf5d-b27495f73754")
4088    def test_volte_mo_mt_add_1x_merge_drop_second_call_from_host_cep(self):
4089        """ Test VoLTE Conference Call among three phones. CEP enabled.
4090
4091        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4092        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4093        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4094        4. On PhoneA disconnect call between A-C, verify call continues.
4095        5. On PhoneA disconnect call between A-B, verify call continues.
4096
4097        Returns:
4098            True if pass; False if fail.
4099        """
4100        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(0)
4101        if call_ab_id is None or call_ac_id is None:
4102            return False
4103
4104        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
4105            call_ab_id, call_ac_id)
4106
4107    @TelephonyBaseTest.tel_test_wrap
4108    @test_tracker_info(uuid="a5f2a3d0-9b00-4496-8316-ea626b1c978a")
4109    def test_volte_mo_mt_add_1x_merge_drop_first_call_from_participant_cep(
4110            self):
4111        """ Test VoLTE Conference Call among three phones. CEP enabled.
4112
4113        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4114        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4115        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4116        4. End call on PhoneB, verify call continues.
4117        5. End call on PhoneC, verify call end on PhoneA.
4118
4119        Returns:
4120            True if pass; False if fail.
4121        """
4122        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(0)
4123        if call_ab_id is None or call_ac_id is None:
4124            return False
4125
4126        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
4127            call_ab_id, call_ac_id)
4128
4129    @TelephonyBaseTest.tel_test_wrap
4130    @test_tracker_info(uuid="98cfd8d8-200f-4820-94ed-1561df1ed152")
4131    def test_volte_mo_mt_add_1x_merge_drop_first_call_from_host_cep(self):
4132        """ Test VoLTE Conference Call among three phones. CEP enabled.
4133
4134        1. Call from PhoneA (VoLTE) to PhoneB (1x), accept on PhoneB.
4135        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4136        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4137        4. On PhoneA disconnect call between A-B, verify call continues.
4138        5. On PhoneA disconnect call between A-C, verify call continues.
4139
4140        Returns:
4141            True if pass; False if fail.
4142        """
4143        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(0)
4144        if call_ab_id is None or call_ac_id is None:
4145            return False
4146
4147        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
4148            call_ab_id, call_ac_id)
4149
4150    @TelephonyBaseTest.tel_test_wrap
4151    @test_tracker_info(uuid="c9ee6bb1-4aee-4fc9-95b0-f899d3d31d82")
4152    def test_volte_mt_mt_add_1x_merge_drop_second_call_from_participant_no_cep(
4153            self):
4154        """ Test VoLTE Conference Call among three phones. No CEP.
4155
4156        Call from PhoneB (1x) to PhoneA (VoLTE), accept on PhoneA.
4157        Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4158        On PhoneA, merge to conference call (No CEP).
4159        End call on PhoneC, verify call continues.
4160        End call on PhoneB, verify call end on PhoneA.
4161
4162        Returns:
4163            True if pass; False if fail.
4164        """
4165        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(0)
4166        if call_ab_id is None or call_ac_id is None:
4167            return False
4168
4169        return self._test_ims_conference_merge_drop_second_call_no_cep(
4170            call_ab_id, call_ac_id)
4171
4172    @TelephonyBaseTest.tel_test_wrap
4173    @test_tracker_info(uuid="f4fb92a1-d4a0-4796-bdb4-f441b926c63c")
4174    def test_volte_mt_mt_add_1x_merge_drop_second_call_from_participant_cep(
4175            self):
4176        """ Test VoLTE Conference Call among three phones. CEP enabled.
4177
4178        1. Call from PhoneB (1x) to PhoneA (VoLTE), accept on PhoneA.
4179        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4180        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4181        4. End call on PhoneC, verify call continues.
4182        5. End call on PhoneB, verify call end on PhoneA.
4183
4184        Returns:
4185            True if pass; False if fail.
4186        """
4187        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(0)
4188        if call_ab_id is None or call_ac_id is None:
4189            return False
4190
4191        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
4192            call_ab_id, call_ac_id)
4193
4194    @TelephonyBaseTest.tel_test_wrap
4195    @test_tracker_info(uuid="8ad0e672-83cc-463a-aa12-d331faa5eb17")
4196    def test_volte_mt_mt_add_1x_merge_drop_second_call_from_host_cep(self):
4197        """ Test VoLTE Conference Call among three phones. CEP enabled.
4198
4199        1. Call from PhoneB (1x) to PhoneA (VoLTE), accept on PhoneA.
4200        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4201        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4202        4. On PhoneA disconnect call between A-C, verify call continues.
4203        5. On PhoneA disconnect call between A-B, verify call continues.
4204
4205        Returns:
4206            True if pass; False if fail.
4207        """
4208        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(0)
4209        if call_ab_id is None or call_ac_id is None:
4210            return False
4211
4212        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
4213            call_ab_id, call_ac_id)
4214
4215    @TelephonyBaseTest.tel_test_wrap
4216    @test_tracker_info(uuid="3dad2fd1-d2c0-477c-a758-3c054df6e92a")
4217    def test_volte_mt_mt_add_1x_merge_drop_first_call_from_participant_cep(
4218            self):
4219        """ Test VoLTE Conference Call among three phones. CEP enabled.
4220
4221        1. Call from PhoneB (1x) to PhoneA (VoLTE), accept on PhoneA.
4222        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4223        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4224        4. End call on PhoneB, verify call continues.
4225        5. End call on PhoneC, verify call end on PhoneA.
4226
4227        Returns:
4228            True if pass; False if fail.
4229        """
4230        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(0)
4231        if call_ab_id is None or call_ac_id is None:
4232            return False
4233
4234        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
4235            call_ab_id, call_ac_id)
4236
4237    @TelephonyBaseTest.tel_test_wrap
4238    @test_tracker_info(uuid="e382469b-8767-47fd-b3e6-8c81d8fb45ef")
4239    def test_volte_mt_mt_add_1x_merge_drop_first_call_from_host_cep(self):
4240        """ Test VoLTE Conference Call among three phones. CEP enabled.
4241
4242        1. Call from PhoneB (1x) to PhoneA (VoLTE), accept on PhoneA.
4243        2. Call from PhoneC (1x) to PhoneA (VoLTE), accept on PhoneA.
4244        3. On PhoneA, merge to conference call (VoLTE CEP conference call).
4245        4. On PhoneA disconnect call between A-B, verify call continues.
4246        5. On PhoneA disconnect call between A-C, verify call continues.
4247
4248        Returns:
4249            True if pass; False if fail.
4250        """
4251        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(0)
4252        if call_ab_id is None or call_ac_id is None:
4253            return False
4254
4255        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
4256            call_ab_id, call_ac_id)
4257
4258    @TelephonyBaseTest.tel_test_wrap
4259    @test_tracker_info(uuid="98db2430-07c2-4ec7-8644-2aa081a3eb22")
4260    def test_volte_mo_mo_add_volte_swap_twice_drop_held(self):
4261        """Test swap feature in VoLTE call.
4262
4263        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4264        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4265        Swap active call on PhoneA.
4266        Swap active call on PhoneA.
4267        Hangup call from PhoneB, check if call continues between AC.
4268
4269        """
4270        ads = self.android_devices
4271
4272        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
4273        if call_ab_id is None or call_ac_id is None:
4274            return False
4275
4276        return self._three_phone_hangup_call_verify_call_state(
4277            ad_hangup=ads[1],
4278            ad_verify=ads[0],
4279            call_id=call_ac_id,
4280            call_state=CALL_STATE_ACTIVE,
4281            ads_active=[ads[0], ads[2]])
4282
4283    @TelephonyBaseTest.tel_test_wrap
4284    @test_tracker_info(uuid="7504958b-172b-4afc-97ea-9562b8429dfe")
4285    def test_volte_mo_mo_add_volte_swap_twice_drop_active(self):
4286        """Test swap feature in VoLTE call.
4287
4288        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4289        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4290        Swap active call on PhoneA.
4291        Swap active call on PhoneA.
4292        Hangup call from PhoneC, check if call continues between AB.
4293
4294        """
4295        ads = self.android_devices
4296
4297        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
4298        if call_ab_id is None or call_ac_id is None:
4299            return False
4300
4301        return self._three_phone_hangup_call_verify_call_state(
4302            ad_hangup=ads[2],
4303            ad_verify=ads[0],
4304            call_id=call_ab_id,
4305            call_state=self._get_expected_call_state(ads[0]),
4306            ads_active=[ads[0], ads[1]])
4307
4308    @TelephonyBaseTest.tel_test_wrap
4309    @test_tracker_info(uuid="ac02ce22-fd8c-48ba-9e68-6748d1e48c68")
4310    def test_volte_mo_mt_add_volte_swap_twice_drop_held(self):
4311        """Test swap feature in VoLTE call.
4312
4313        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4314        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
4315        Swap active call on PhoneA.
4316        Swap active call on PhoneA.
4317        Hangup call from PhoneB, check if call continues between AC.
4318
4319        """
4320        ads = self.android_devices
4321
4322        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
4323        if call_ab_id is None or call_ac_id is None:
4324            return False
4325
4326        return self._three_phone_hangup_call_verify_call_state(
4327            ad_hangup=ads[1],
4328            ad_verify=ads[0],
4329            call_id=call_ac_id,
4330            call_state=CALL_STATE_ACTIVE,
4331            ads_active=[ads[0], ads[2]])
4332
4333    @TelephonyBaseTest.tel_test_wrap
4334    @test_tracker_info(uuid="2fb2c4f6-1c14-4122-bc3e-a7a6416003a3")
4335    def test_volte_mo_mt_add_volte_swap_twice_drop_active(self):
4336        """Test swap feature in VoLTE call.
4337
4338        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4339        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
4340        Swap active call on PhoneA.
4341        Swap active call on PhoneA.
4342        Hangup call from PhoneC, check if call continues between AB.
4343
4344        """
4345        ads = self.android_devices
4346
4347        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
4348        if call_ab_id is None or call_ac_id is None:
4349            return False
4350
4351        return self._three_phone_hangup_call_verify_call_state(
4352            ad_hangup=ads[2],
4353            ad_verify=ads[0],
4354            call_id=call_ab_id,
4355            call_state=self._get_expected_call_state(ads[0]),
4356            ads_active=[ads[0], ads[1]])
4357
4358    @TelephonyBaseTest.tel_test_wrap
4359    @test_tracker_info(uuid="deed9c13-2e9d-464a-b8f7-62e91265451d")
4360    def test_volte_mo_mo_add_volte_swap_once_drop_held(self):
4361        """Test swap feature in VoLTE call.
4362
4363        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4364        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4365        Swap active call on PhoneA.
4366        Hangup call from PhoneC, check if call continues between AB.
4367
4368        """
4369        ads = self.android_devices
4370
4371        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4372        if call_ab_id is None or call_ac_id is None:
4373            return False
4374
4375        return self._three_phone_hangup_call_verify_call_state(
4376            ad_hangup=ads[2],
4377            ad_verify=ads[0],
4378            call_id=call_ab_id,
4379            call_state=CALL_STATE_ACTIVE,
4380            ads_active=[ads[0], ads[1]])
4381
4382    @TelephonyBaseTest.tel_test_wrap
4383    @test_tracker_info(uuid="3324a4d3-68db-41a4-b0d0-3e8e82b84f46")
4384    def test_volte_mo_mo_add_volte_swap_once_drop_active(self):
4385        """Test swap feature in VoLTE call.
4386
4387        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4388        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4389        Swap active call on PhoneA.
4390        Swap active call on PhoneA.
4391        Hangup call from PhoneB, check if call continues between AC.
4392
4393        """
4394        ads = self.android_devices
4395
4396        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4397        if call_ab_id is None or call_ac_id is None:
4398            return False
4399
4400        return self._three_phone_hangup_call_verify_call_state(
4401            ad_hangup=ads[1],
4402            ad_verify=ads[0],
4403            call_id=call_ac_id,
4404            call_state=self._get_expected_call_state(ads[0]),
4405            ads_active=[ads[0], ads[2]])
4406
4407    @TelephonyBaseTest.tel_test_wrap
4408    @test_tracker_info(uuid="57c8c3f6-c690-41c3-aaed-98e5548cc4b6")
4409    def test_volte_mo_mt_add_volte_swap_once_drop_held(self):
4410        """Test swap feature in VoLTE call.
4411
4412        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4413        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
4414        Swap active call on PhoneA.
4415        Hangup call from PhoneC, check if call continues between AB.
4416
4417        """
4418        ads = self.android_devices
4419
4420        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
4421        if call_ab_id is None or call_ac_id is None:
4422            return False
4423        return self._three_phone_hangup_call_verify_call_state(
4424            ad_hangup=ads[2],
4425            ad_verify=ads[0],
4426            call_id=call_ab_id,
4427            call_state=CALL_STATE_ACTIVE,
4428            ads_active=[ads[0], ads[1]])
4429
4430    @TelephonyBaseTest.tel_test_wrap
4431    @test_tracker_info(uuid="96376148-f069-41f9-b22f-f5240de427f7")
4432    def test_volte_mo_mt_add_volte_swap_once_drop_active(self):
4433        """Test swap feature in VoLTE call.
4434
4435        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4436        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
4437        Swap active call on PhoneA.
4438        Hangup call from PhoneB, check if call continues between AC.
4439
4440        """
4441        ads = self.android_devices
4442
4443        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
4444        if call_ab_id is None or call_ac_id is None:
4445            return False
4446
4447        return self._three_phone_hangup_call_verify_call_state(
4448            ad_hangup=ads[1],
4449            ad_verify=ads[0],
4450            call_id=call_ac_id,
4451            call_state=self._get_expected_call_state(ads[0]),
4452            ads_active=[ads[0], ads[2]])
4453
4454    @TelephonyBaseTest.tel_test_wrap
4455    @test_tracker_info(uuid="baac4ef4-198b-4a33-a09a-5507c6aa740d")
4456    def test_wcdma_mo_mo_add_swap_twice_drop_held(self):
4457        """Test swap feature in WCDMA call.
4458
4459        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4460        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
4461        Swap active call on PhoneA.
4462        Swap active call on PhoneA.
4463        Hangup call from PhoneB, check if call continues between AC.
4464
4465        """
4466        ads = self.android_devices
4467
4468        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(2)
4469        if call_ab_id is None or call_ac_id is None:
4470            return False
4471
4472        return self._three_phone_hangup_call_verify_call_state(
4473            ad_hangup=ads[1],
4474            ad_verify=ads[0],
4475            call_id=call_ac_id,
4476            call_state=CALL_STATE_ACTIVE,
4477            ads_active=[ads[0], ads[2]])
4478
4479    @TelephonyBaseTest.tel_test_wrap
4480    @test_tracker_info(uuid="8c2588ff-3857-49eb-8db0-9e76d7c99c68")
4481    def test_wcdma_mo_mo_add_swap_twice_drop_active(self):
4482        """Test swap feature in WCDMA call.
4483
4484        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4485        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
4486        Swap active call on PhoneA.
4487        Swap active call on PhoneA.
4488        Hangup call from PhoneC, check if call continues between AB.
4489
4490        """
4491        ads = self.android_devices
4492
4493        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(2)
4494        if call_ab_id is None or call_ac_id is None:
4495            return False
4496
4497        return self._three_phone_hangup_call_verify_call_state(
4498            ad_hangup=ads[2],
4499            ad_verify=ads[0],
4500            call_id=call_ab_id,
4501            call_state=self._get_expected_call_state(ads[0]),
4502            ads_active=[ads[0], ads[1]])
4503
4504    @TelephonyBaseTest.tel_test_wrap
4505    @test_tracker_info(uuid="16a6aa3c-fe68-41b4-af42-75847062d4ec")
4506    def test_wcdma_mo_mt_add_swap_twice_drop_held(self):
4507        """Test swap feature in WCDMA call.
4508
4509        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4510        PhoneC call PhoneA (WCDMA), accept on PhoneA.
4511        Swap active call on PhoneA.
4512        Swap active call on PhoneA.
4513        Hangup call from PhoneB, check if call continues between AC.
4514
4515        """
4516        ads = self.android_devices
4517
4518        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(2)
4519        if call_ab_id is None or call_ac_id is None:
4520            return False
4521
4522        return self._three_phone_hangup_call_verify_call_state(
4523            ad_hangup=ads[1],
4524            ad_verify=ads[0],
4525            call_id=call_ac_id,
4526            call_state=CALL_STATE_ACTIVE,
4527            ads_active=[ads[0], ads[2]])
4528
4529    @TelephonyBaseTest.tel_test_wrap
4530    @test_tracker_info(uuid="f38c4cd5-53b4-43d0-a5fa-2a008a96cedc")
4531    def test_wcdma_mo_mt_add_swap_twice_drop_active(self):
4532        """Test swap feature in WCDMA call.
4533
4534        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4535        PhoneC call PhoneA (WCDMA), accept on PhoneA.
4536        Swap active call on PhoneA.
4537        Swap active call on PhoneA.
4538        Hangup call from PhoneC, check if call continues between AB.
4539
4540        """
4541        ads = self.android_devices
4542
4543        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(2)
4544        if call_ab_id is None or call_ac_id is None:
4545            return False
4546
4547        return self._three_phone_hangup_call_verify_call_state(
4548            ad_hangup=ads[2],
4549            ad_verify=ads[0],
4550            call_id=call_ab_id,
4551            call_state=self._get_expected_call_state(ads[0]),
4552            ads_active=[ads[0], ads[1]])
4553
4554    @TelephonyBaseTest.tel_test_wrap
4555    @test_tracker_info(uuid="734689e8-2acd-405f-be93-db62e2606252")
4556    def test_wcdma_mo_mo_add_swap_once_drop_held(self):
4557        """Test swap feature in WCDMA call.
4558
4559        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4560        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
4561        Swap active call on PhoneA.
4562        Hangup call from PhoneC, check if call continues between AB.
4563
4564        """
4565        ads = self.android_devices
4566
4567        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(1)
4568        if call_ab_id is None or call_ac_id is None:
4569            return False
4570
4571        return self._three_phone_hangup_call_verify_call_state(
4572            ad_hangup=ads[2],
4573            ad_verify=ads[0],
4574            call_id=call_ab_id,
4575            call_state=CALL_STATE_ACTIVE,
4576            ads_active=[ads[0], ads[1]])
4577
4578    @TelephonyBaseTest.tel_test_wrap
4579    @test_tracker_info(uuid="126f294e-590a-4392-8fbd-1b826cd97214")
4580    def test_wcdma_mo_mo_add_swap_once_drop_active(self):
4581        """Test swap feature in WCDMA call.
4582
4583        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4584        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
4585        Swap active call on PhoneA.
4586        Hangup call from PhoneB, check if call continues between AC.
4587
4588        """
4589        ads = self.android_devices
4590
4591        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(1)
4592        if call_ab_id is None or call_ac_id is None:
4593            return False
4594
4595        return self._three_phone_hangup_call_verify_call_state(
4596            ad_hangup=ads[1],
4597            ad_verify=ads[0],
4598            call_id=call_ac_id,
4599            call_state=self._get_expected_call_state(ads[0]),
4600            ads_active=[ads[0], ads[2]])
4601
4602    @TelephonyBaseTest.tel_test_wrap
4603    @test_tracker_info(uuid="e5f36f28-ec2b-4958-8578-c0454ef2a8ad")
4604    def test_wcdma_mo_mt_add_swap_once_drop_held(self):
4605        """Test swap feature in WCDMA call.
4606
4607        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4608        PhoneC call PhoneA (WCDMA), accept on PhoneA.
4609        Swap active call on PhoneA.
4610        Hangup call from PhoneC, check if call continues between AB.
4611
4612        """
4613        ads = self.android_devices
4614
4615        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(1)
4616        if call_ab_id is None or call_ac_id is None:
4617            return False
4618
4619        return self._three_phone_hangup_call_verify_call_state(
4620            ad_hangup=ads[2],
4621            ad_verify=ads[0],
4622            call_id=call_ab_id,
4623            call_state=CALL_STATE_ACTIVE,
4624            ads_active=[ads[0], ads[1]])
4625
4626    @TelephonyBaseTest.tel_test_wrap
4627    @test_tracker_info(uuid="a2252ebe-3ee2-4b9e-b76b-6be68d6b2719")
4628    def test_wcdma_mo_mt_add_swap_once_drop_active(self):
4629        """Test swap feature in WCDMA call.
4630
4631        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
4632        PhoneC call PhoneA (WCDMA), accept on PhoneA.
4633        Swap active call on PhoneA.
4634        Hangup call from PhoneB, check if call continues between AC.
4635
4636        """
4637        ads = self.android_devices
4638
4639        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(1)
4640        if call_ab_id is None or call_ac_id is None:
4641            return False
4642
4643        return self._three_phone_hangup_call_verify_call_state(
4644            ad_hangup=ads[1],
4645            ad_verify=ads[0],
4646            call_id=call_ac_id,
4647            call_state=self._get_expected_call_state(ads[0]),
4648            ads_active=[ads[0], ads[2]])
4649
4650    @TelephonyBaseTest.tel_test_wrap
4651    @test_tracker_info(uuid="cba48f87-4026-422d-a760-f913d2763ee9")
4652    def test_csfb_wcdma_mo_mo_add_swap_twice_drop_held(self):
4653        """Test swap feature in CSFB WCDMA call.
4654
4655        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4656        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
4657        Swap active call on PhoneA.
4658        Swap active call on PhoneA.
4659        Hangup call from PhoneB, check if call continues between AC.
4660
4661        """
4662        ads = self.android_devices
4663
4664        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(2)
4665        if call_ab_id is None or call_ac_id is None:
4666            return False
4667
4668        return self._three_phone_hangup_call_verify_call_state(
4669            ad_hangup=ads[1],
4670            ad_verify=ads[0],
4671            call_id=call_ac_id,
4672            call_state=CALL_STATE_ACTIVE,
4673            ads_active=[ads[0], ads[2]])
4674
4675    @TelephonyBaseTest.tel_test_wrap
4676    @test_tracker_info(uuid="3e6bd083-ccae-4962-a3d7-4194ed685b64")
4677    def test_csfb_wcdma_mo_mo_add_swap_twice_drop_active(self):
4678        """Test swap feature in CSFB WCDMA call.
4679
4680        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4681        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
4682        Swap active call on PhoneA.
4683        Swap active call on PhoneA.
4684        Hangup call from PhoneC, check if call continues between AB.
4685
4686        """
4687        ads = self.android_devices
4688
4689        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(2)
4690        if call_ab_id is None or call_ac_id is None:
4691            return False
4692
4693        return self._three_phone_hangup_call_verify_call_state(
4694            ad_hangup=ads[2],
4695            ad_verify=ads[0],
4696            call_id=call_ab_id,
4697            call_state=self._get_expected_call_state(ads[0]),
4698            ads_active=[ads[0], ads[1]])
4699
4700    @TelephonyBaseTest.tel_test_wrap
4701    @test_tracker_info(uuid="a1972846-0bca-4583-a966-11ebf0670c04")
4702    def test_csfb_wcdma_mo_mt_add_swap_twice_drop_held(self):
4703        """Test swap feature in CSFB WCDMA call.
4704
4705        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4706        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
4707        Swap active call on PhoneA.
4708        Swap active call on PhoneA.
4709        Hangup call from PhoneB, check if call continues between AC.
4710
4711        """
4712        ads = self.android_devices
4713
4714        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(2)
4715        if call_ab_id is None or call_ac_id is None:
4716            return False
4717
4718        return self._three_phone_hangup_call_verify_call_state(
4719            ad_hangup=ads[1],
4720            ad_verify=ads[0],
4721            call_id=call_ac_id,
4722            call_state=CALL_STATE_ACTIVE,
4723            ads_active=[ads[0], ads[2]])
4724
4725    @TelephonyBaseTest.tel_test_wrap
4726    @test_tracker_info(uuid="98609dfd-07fb-4414-bf6e-46144205fe70")
4727    def test_csfb_wcdma_mo_mt_add_swap_twice_drop_active(self):
4728        """Test swap feature in CSFB WCDMA call.
4729
4730        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4731        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
4732        Swap active call on PhoneA.
4733        Swap active call on PhoneA.
4734        Hangup call from PhoneC, check if call continues between AB.
4735
4736        """
4737        ads = self.android_devices
4738
4739        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(2)
4740        if call_ab_id is None or call_ac_id is None:
4741            return False
4742
4743        return self._three_phone_hangup_call_verify_call_state(
4744            ad_hangup=ads[2],
4745            ad_verify=ads[0],
4746            call_id=call_ab_id,
4747            call_state=self._get_expected_call_state(ads[0]),
4748            ads_active=[ads[0], ads[1]])
4749
4750    @TelephonyBaseTest.tel_test_wrap
4751    @test_tracker_info(uuid="0c4c9b0b-ef7a-4e3d-9d31-dde721444820")
4752    def test_csfb_wcdma_mo_mo_add_swap_once_drop_held(self):
4753        """Test swap feature in CSFB WCDMA call.
4754
4755        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4756        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
4757        Swap active call on PhoneA.
4758        Hangup call from PhoneC, check if call continues between AB.
4759
4760        """
4761        ads = self.android_devices
4762
4763        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(1)
4764        if call_ab_id is None or call_ac_id is None:
4765            return False
4766
4767        return self._three_phone_hangup_call_verify_call_state(
4768            ad_hangup=ads[2],
4769            ad_verify=ads[0],
4770            call_id=call_ab_id,
4771            call_state=CALL_STATE_ACTIVE,
4772            ads_active=[ads[0], ads[1]])
4773
4774    @TelephonyBaseTest.tel_test_wrap
4775    @test_tracker_info(uuid="ee0f7772-9e58-4a00-8eb5-a03b3e5baf40")
4776    def test_csfb_wcdma_mo_mo_add_swap_once_drop_active(self):
4777        """Test swap feature in CSFB WCDMA call.
4778
4779        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4780        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
4781        Swap active call on PhoneA.
4782        Hangup call from PhoneB, check if call continues between AC.
4783
4784        """
4785        ads = self.android_devices
4786
4787        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(1)
4788        if call_ab_id is None or call_ac_id is None:
4789            return False
4790
4791        return self._three_phone_hangup_call_verify_call_state(
4792            ad_hangup=ads[1],
4793            ad_verify=ads[0],
4794            call_id=call_ac_id,
4795            call_state=self._get_expected_call_state(ads[0]),
4796            ads_active=[ads[0], ads[2]])
4797
4798    @TelephonyBaseTest.tel_test_wrap
4799    @test_tracker_info(uuid="2f9e0120-c052-467b-be45-313ada433dce")
4800    def test_csfb_wcdma_mo_mt_add_swap_once_drop_held(self):
4801        """Test swap feature in CSFB WCDMA call.
4802
4803        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4804        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
4805        Swap active call on PhoneA.
4806        Hangup call from PhoneC, check if call continues between AB.
4807
4808        """
4809        ads = self.android_devices
4810
4811        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(1)
4812        if call_ab_id is None or call_ac_id is None:
4813            return False
4814
4815        return self._three_phone_hangup_call_verify_call_state(
4816            ad_hangup=ads[2],
4817            ad_verify=ads[0],
4818            call_id=call_ab_id,
4819            call_state=CALL_STATE_ACTIVE,
4820            ads_active=[ads[0], ads[1]])
4821
4822    @TelephonyBaseTest.tel_test_wrap
4823    @test_tracker_info(uuid="9110ad34-04e4-4d0f-9ac0-183ad9e6fa8a")
4824    def test_csfb_wcdma_mo_mt_add_swap_once_drop_active(self):
4825        """Test swap feature in CSFB WCDMA call.
4826
4827        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
4828        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
4829        Swap active call on PhoneA.
4830        Hangup call from PhoneB, check if call continues between AC.
4831
4832        """
4833        ads = self.android_devices
4834
4835        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(1)
4836        if call_ab_id is None or call_ac_id is None:
4837            return False
4838
4839        return self._three_phone_hangup_call_verify_call_state(
4840            ad_hangup=ads[1],
4841            ad_verify=ads[0],
4842            call_id=call_ac_id,
4843            call_state=self._get_expected_call_state(ads[0]),
4844            ads_active=[ads[0], ads[2]])
4845
4846    @TelephonyBaseTest.tel_test_wrap
4847    @test_tracker_info(uuid="8cca4681-a5d4-472a-b0b5-46b79a6892a7")
4848    def test_volte_mo_mo_add_volte_swap_once_merge_drop_second_call_from_participant_no_cep(
4849            self):
4850        """ Test swap and merge features in VoLTE call. No CEP.
4851
4852        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4853        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4854        Swap active call on PhoneA.
4855        On PhoneA, merge to conference call (No CEP).
4856        End call on PhoneC, verify call continues.
4857        End call on PhoneB, verify call end on PhoneA.
4858
4859        Returns:
4860            True if pass; False if fail.
4861        """
4862        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4863        if call_ab_id is None or call_ac_id is None:
4864            return False
4865
4866        return self._test_ims_conference_merge_drop_second_call_no_cep(
4867            call_ab_id, call_ac_id)
4868
4869    @TelephonyBaseTest.tel_test_wrap
4870    @test_tracker_info(uuid="9168698e-987a-42e3-8bc6-2a433fa4b5e3")
4871    def test_volte_mo_mo_add_volte_swap_once_merge_drop_second_call_from_participant_cep(
4872            self):
4873        """ Test swap and merge features in VoLTE call. CEP enabled.
4874
4875        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4876        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4877        3. Swap active call on PhoneA.
4878        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
4879        5. End call on PhoneC, verify call continues.
4880        6. End call on PhoneB, verify call end on PhoneA.
4881
4882        Returns:
4883            True if pass; False if fail.
4884        """
4885        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4886        if call_ab_id is None or call_ac_id is None:
4887            return False
4888
4889        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
4890            call_ab_id, call_ac_id)
4891
4892    @TelephonyBaseTest.tel_test_wrap
4893    @test_tracker_info(uuid="397bfab8-6651-4438-a603-22657fd69b84")
4894    def test_volte_mo_mo_add_volte_swap_once_merge_drop_second_call_from_host_cep(
4895            self):
4896        """ Test swap and merge features in VoLTE call. CEP enabled.
4897
4898        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4899        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4900        3. Swap active call on PhoneA.
4901        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
4902        5. On PhoneA disconnect call between A-C, verify call continues.
4903        6. On PhoneA disconnect call between A-B, verify call continues.
4904
4905        Returns:
4906            True if pass; False if fail.
4907        """
4908        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4909        if call_ab_id is None or call_ac_id is None:
4910            return False
4911
4912        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
4913            call_ab_id, call_ac_id)
4914
4915    @TelephonyBaseTest.tel_test_wrap
4916    @test_tracker_info(uuid="ba766c4c-690f-407b-87f8-05a91783e224")
4917    def test_volte_mo_mo_add_volte_swap_once_merge_drop_first_call_from_participant_cep(
4918            self):
4919        """ Test swap and merge features in VoLTE call. CEP enabled.
4920
4921        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4922        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4923        3. Swap active call on PhoneA.
4924        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
4925        5. End call on PhoneB, verify call continues.
4926        6. End call on PhoneC, verify call end on PhoneA.
4927
4928        Returns:
4929            True if pass; False if fail.
4930        """
4931        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4932        if call_ab_id is None or call_ac_id is None:
4933            return False
4934
4935        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
4936            call_ab_id, call_ac_id)
4937
4938    @TelephonyBaseTest.tel_test_wrap
4939    @test_tracker_info(uuid="1e45c749-6d4c-4d30-b104-bfcc37e13f1d")
4940    def test_volte_mo_mo_add_volte_swap_once_merge_drop_first_call_from_host_cep(
4941            self):
4942        """ Test swap and merge features in VoLTE call. CEP enabled.
4943
4944        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4945        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4946        3. Swap active call on PhoneA.
4947        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
4948        5. On PhoneA disconnect call between A-B, verify call continues.
4949        6. On PhoneA disconnect call between A-C, verify call continues.
4950
4951        Returns:
4952            True if pass; False if fail.
4953        """
4954        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(1)
4955        if call_ab_id is None or call_ac_id is None:
4956            return False
4957
4958        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
4959            call_ab_id, call_ac_id)
4960
4961    @TelephonyBaseTest.tel_test_wrap
4962    @test_tracker_info(uuid="d6648e19-8001-483a-a83b-a92b638a7650")
4963    def test_volte_mo_mo_add_volte_swap_twice_merge_drop_second_call_from_participant_no_cep(
4964            self):
4965        """ Test swap and merge features in VoLTE call. No CEP.
4966
4967        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4968        PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4969        Swap active call on PhoneA.
4970        Swap active call on PhoneA.
4971        On PhoneA, merge to conference call (No CEP).
4972        End call on PhoneC, verify call continues.
4973        End call on PhoneB, verify call end on PhoneA.
4974
4975        Returns:
4976            True if pass; False if fail.
4977        """
4978        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
4979        if call_ab_id is None or call_ac_id is None:
4980            return False
4981
4982        return self._test_ims_conference_merge_drop_second_call_no_cep(
4983            call_ab_id, call_ac_id)
4984
4985    @TelephonyBaseTest.tel_test_wrap
4986    @test_tracker_info(uuid="18d3c304-ad04-409f-bfd4-fd3f01f9a51e")
4987    def test_volte_mo_mo_add_volte_swap_twice_merge_drop_second_call_from_participant_cep(
4988            self):
4989        """ Test swap and merge features in VoLTE call. CEP enabled.
4990
4991        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
4992        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
4993        3. Swap active call on PhoneA.
4994        4. Swap active call on PhoneA.
4995        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
4996        6. End call on PhoneC, verify call continues.
4997        7. End call on PhoneB, verify call end on PhoneA.
4998
4999        Returns:
5000            True if pass; False if fail.
5001        """
5002        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
5003        if call_ab_id is None or call_ac_id is None:
5004            return False
5005
5006        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5007            call_ab_id, call_ac_id)
5008
5009    @TelephonyBaseTest.tel_test_wrap
5010    @test_tracker_info(uuid="f1e71550-3a45-45e4-88e4-7e4da919d58e")
5011    def test_volte_mo_mo_add_volte_swap_twice_merge_drop_second_call_from_host_cep(
5012            self):
5013        """ Test swap and merge features in VoLTE call. CEP enabled.
5014
5015        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5016        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
5017        3. Swap active call on PhoneA.
5018        4. Swap active call on PhoneA.
5019        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5020        6. On PhoneA disconnect call between A-C, verify call continues.
5021        7. On PhoneA disconnect call between A-B, verify call continues.
5022
5023        Returns:
5024            True if pass; False if fail.
5025        """
5026        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
5027        if call_ab_id is None or call_ac_id is None:
5028            return False
5029
5030        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5031            call_ab_id, call_ac_id)
5032
5033    @TelephonyBaseTest.tel_test_wrap
5034    @test_tracker_info(uuid="60cc8bd1-4270-4b5c-9d29-9fa36a357503")
5035    def test_volte_mo_mo_add_volte_swap_twice_merge_drop_first_call_from_participant_cep(
5036            self):
5037        """ Test swap and merge features in VoLTE call. CEP enabled.
5038
5039        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5040        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
5041        3. Swap active call on PhoneA.
5042        4. Swap active call on PhoneA.
5043        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5044        6. End call on PhoneB, verify call continues.
5045        7. End call on PhoneC, verify call end on PhoneA.
5046
5047        Returns:
5048            True if pass; False if fail.
5049        """
5050        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
5051        if call_ab_id is None or call_ac_id is None:
5052            return False
5053
5054        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5055            call_ab_id, call_ac_id)
5056
5057    @TelephonyBaseTest.tel_test_wrap
5058    @test_tracker_info(uuid="7d81c5f8-5ee1-4ad2-b08e-3e4c97748a66")
5059    def test_volte_mo_mo_add_volte_swap_twice_merge_drop_first_call_from_host_cep(
5060            self):
5061        """ Test swap and merge features in VoLTE call. CEP enabled.
5062
5063        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5064        2. PhoneA (VoLTE) call PhoneC (VoLTE), accept on PhoneC.
5065        3. Swap active call on PhoneA.
5066        4. Swap active call on PhoneA.
5067        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5068        6. On PhoneA disconnect call between A-B, verify call continues.
5069        7. On PhoneA disconnect call between A-C, verify call continues.
5070
5071        Returns:
5072            True if pass; False if fail.
5073        """
5074        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_volte_swap_x(2)
5075        if call_ab_id is None or call_ac_id is None:
5076            return False
5077
5078        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5079            call_ab_id, call_ac_id)
5080
5081    @TelephonyBaseTest.tel_test_wrap
5082    @test_tracker_info(uuid="5a887fde-8f9b-436b-ae8d-5ff97a884fc9")
5083    def test_volte_mo_mt_add_volte_swap_once_merge_drop_second_call_from_participant_no_cep(
5084            self):
5085        """ Test swap and merge features in VoLTE call. No CEP.
5086
5087        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5088        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5089        Swap active call on PhoneA.
5090        On PhoneA, merge to conference call (No CEP).
5091        End call on PhoneC, verify call continues.
5092        End call on PhoneB, verify call end on PhoneA.
5093
5094        Returns:
5095            True if pass; False if fail.
5096        """
5097        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
5098        if call_ab_id is None or call_ac_id is None:
5099            return False
5100
5101        return self._test_ims_conference_merge_drop_second_call_no_cep(
5102            call_ab_id, call_ac_id)
5103
5104    @TelephonyBaseTest.tel_test_wrap
5105    @test_tracker_info(uuid="82574508-0d77-42cf-bf60-9fdddee24c42")
5106    def test_volte_mo_mt_add_volte_swap_once_merge_drop_second_call_from_participant_cep(
5107            self):
5108        """ Test swap and merge features in VoLTE call. CEP enabled.
5109
5110        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5111        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5112        3. Swap active call on PhoneA.
5113        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5114        5. End call on PhoneC, verify call continues.
5115        6. End call on PhoneB, verify call end on PhoneA.
5116
5117        Returns:
5118            True if pass; False if fail.
5119        """
5120        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
5121        if call_ab_id is None or call_ac_id is None:
5122            return False
5123
5124        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5125            call_ab_id, call_ac_id)
5126
5127    @TelephonyBaseTest.tel_test_wrap
5128    @test_tracker_info(uuid="8f30c425-c689-43b8-84f3-f24f7d9216f6")
5129    def test_volte_mo_mt_add_volte_swap_once_merge_drop_second_call_from_host_cep(
5130            self):
5131        """ Test swap and merge features in VoLTE call. CEP enabled.
5132
5133        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5134        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5135        3. Swap active call on PhoneA.
5136        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5137        5. On PhoneA disconnect call between A-C, verify call continues.
5138        6. On PhoneA disconnect call between A-B, verify call continues.
5139
5140        Returns:
5141            True if pass; False if fail.
5142        """
5143        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
5144        if call_ab_id is None or call_ac_id is None:
5145            return False
5146
5147        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5148            call_ab_id, call_ac_id)
5149
5150    @TelephonyBaseTest.tel_test_wrap
5151    @test_tracker_info(uuid="2a67845f-ccfd-4c06-aedc-9d6c1f022959")
5152    def test_volte_mo_mt_add_volte_swap_once_merge_drop_first_call_from_participant_cep(
5153            self):
5154        """ Test swap and merge features in VoLTE call. CEP enabled.
5155
5156        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5157        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5158        3. Swap active call on PhoneA.
5159        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5160        5. End call on PhoneB, verify call continues.
5161        6. End call on PhoneC, verify call end on PhoneA.
5162
5163        Returns:
5164            True if pass; False if fail.
5165        """
5166        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
5167        if call_ab_id is None or call_ac_id is None:
5168            return False
5169
5170        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5171            call_ab_id, call_ac_id)
5172
5173    @TelephonyBaseTest.tel_test_wrap
5174    @test_tracker_info(uuid="0a5d1305-0890-40c4-8c7a-070876423e16")
5175    def test_volte_mo_mt_add_volte_swap_once_merge_drop_first_call_from_host_cep(
5176            self):
5177        """ Test swap and merge features in VoLTE call. CEP enabled.
5178
5179        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5180        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5181        3. Swap active call on PhoneA.
5182        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5183        5. On PhoneA disconnect call between A-B, verify call continues.
5184        6. On PhoneA disconnect call between A-C, verify call continues.
5185
5186        Returns:
5187            True if pass; False if fail.
5188        """
5189        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(1)
5190        if call_ab_id is None or call_ac_id is None:
5191            return False
5192
5193        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5194            call_ab_id, call_ac_id)
5195
5196    @TelephonyBaseTest.tel_test_wrap
5197    @test_tracker_info(uuid="77bbb5ec-fd16-4031-b316-7f6563b79a3d")
5198    def test_volte_mo_mt_add_volte_swap_twice_merge_drop_second_call_from_participant_no_cep(
5199            self):
5200        """ Test swap and merge features in VoLTE call. No CEP.
5201
5202        PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5203        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5204        Swap active call on PhoneA.
5205        Swap active call on PhoneA.
5206        On PhoneA, merge to conference call (No CEP).
5207        End call on PhoneC, verify call continues.
5208        End call on PhoneB, verify call end on PhoneA.
5209
5210        Returns:
5211            True if pass; False if fail.
5212        """
5213        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
5214        if call_ab_id is None or call_ac_id is None:
5215            return False
5216
5217        return self._test_ims_conference_merge_drop_second_call_no_cep(
5218            call_ab_id, call_ac_id)
5219
5220    @TelephonyBaseTest.tel_test_wrap
5221    @test_tracker_info(uuid="09cd41cd-821d-4d09-9b1e-7330dca77150")
5222    def test_volte_mo_mt_add_volte_swap_twice_merge_drop_second_call_from_participant_cep(
5223            self):
5224        """ Test swap and merge features in VoLTE call. CEP enabled.
5225
5226        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5227        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5228        3. Swap active call on PhoneA.
5229        4. Swap active call on PhoneA.
5230        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5231        6. End call on PhoneC, verify call continues.
5232        7. End call on PhoneB, verify call end on PhoneA.
5233
5234        Returns:
5235            True if pass; False if fail.
5236        """
5237        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
5238        if call_ab_id is None or call_ac_id is None:
5239            return False
5240
5241        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5242            call_ab_id, call_ac_id)
5243
5244    @TelephonyBaseTest.tel_test_wrap
5245    @test_tracker_info(uuid="bdb2791e-92d0-44a3-aa8f-bd83e8159cb7")
5246    def test_volte_mo_mt_add_volte_swap_twice_merge_drop_second_call_from_host_cep(
5247            self):
5248        """ Test swap and merge features in VoLTE call. CEP enabled.
5249
5250        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5251        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5252        3. Swap active call on PhoneA.
5253        4. Swap active call on PhoneA.
5254        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5255        6. On PhoneA disconnect call between A-C, verify call continues.
5256        7. On PhoneA disconnect call between A-B, verify call continues.
5257
5258        Returns:
5259            True if pass; False if fail.
5260        """
5261        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
5262        if call_ab_id is None or call_ac_id is None:
5263            return False
5264
5265        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5266            call_ab_id, call_ac_id)
5267
5268    @TelephonyBaseTest.tel_test_wrap
5269    @test_tracker_info(uuid="4f54e67d-7c7a-4952-ae09-f940094ec1ff")
5270    def test_volte_mo_mt_add_volte_swap_twice_merge_drop_first_call_from_participant_cep(
5271            self):
5272        """ Test swap and merge features in VoLTE call. CEP enabled.
5273
5274        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5275        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5276        3. Swap active call on PhoneA.
5277        4. Swap active call on PhoneA.
5278        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5279        6. End call on PhoneB, verify call continues.
5280        7. End call on PhoneC, verify call end on PhoneA.
5281
5282        Returns:
5283            True if pass; False if fail.
5284        """
5285        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
5286        if call_ab_id is None or call_ac_id is None:
5287            return False
5288
5289        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5290            call_ab_id, call_ac_id)
5291
5292    @TelephonyBaseTest.tel_test_wrap
5293    @test_tracker_info(uuid="4ca28f9f-098f-4f71-b89c-9b2793aa2f5f")
5294    def test_volte_mo_mt_add_volte_swap_twice_merge_drop_first_call_from_host_cep(
5295            self):
5296        """ Test swap and merge features in VoLTE call. CEP enabled.
5297
5298        1. PhoneA (VoLTE) call PhoneB (VoLTE), accept on PhoneB.
5299        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5300        3. Swap active call on PhoneA.
5301        4. Swap active call on PhoneA.
5302        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5303        6. On PhoneA disconnect call between A-B, verify call continues.
5304        7. On PhoneA disconnect call between A-C, verify call continues.
5305
5306        Returns:
5307            True if pass; False if fail.
5308        """
5309        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_volte_swap_x(2)
5310        if call_ab_id is None or call_ac_id is None:
5311            return False
5312
5313        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5314            call_ab_id, call_ac_id)
5315
5316    @TelephonyBaseTest.tel_test_wrap
5317    @test_tracker_info(uuid="f025c100-bb77-436e-b8ab-0c23a3d43318")
5318    def test_volte_mt_mt_add_volte_swap_once_merge_drop_second_call_from_participant_no_cep(
5319            self):
5320        """ Test swap and merge features in VoLTE call. No CEP.
5321
5322        PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5323        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5324        Swap active call on PhoneA.
5325        On PhoneA, merge to conference call (No CEP).
5326        End call on PhoneC, verify call continues.
5327        End call on PhoneB, verify call end on PhoneA.
5328
5329        Returns:
5330            True if pass; False if fail.
5331        """
5332        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(1)
5333        if call_ab_id is None or call_ac_id is None:
5334            return False
5335
5336        return self._test_ims_conference_merge_drop_second_call_no_cep(
5337            call_ab_id, call_ac_id)
5338
5339    @TelephonyBaseTest.tel_test_wrap
5340    @test_tracker_info(uuid="b6cd6b06-0984-4588-892e-939d332bf147")
5341    def test_volte_mt_mt_add_volte_swap_once_merge_drop_second_call_from_participant_cep(
5342            self):
5343        """ Test swap and merge features in VoLTE call. CEP enabled.
5344
5345        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5346        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5347        3. Swap active call on PhoneA.
5348        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5349        5. End call on PhoneC, verify call continues.
5350        6. End call on PhoneB, verify call end on PhoneA.
5351
5352        Returns:
5353            True if pass; False if fail.
5354        """
5355        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(1)
5356        if call_ab_id is None or call_ac_id is None:
5357            return False
5358
5359        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5360            call_ab_id, call_ac_id)
5361
5362    @TelephonyBaseTest.tel_test_wrap
5363    @test_tracker_info(uuid="f7bda827-79bd-41cc-b720-140f49b381d9")
5364    def test_volte_mt_mt_add_volte_swap_once_merge_drop_second_call_from_host_cep(
5365            self):
5366        """ Test swap and merge features in VoLTE call. CEP enabled.
5367
5368        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5369        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5370        3. Swap active call on PhoneA.
5371        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5372        5. On PhoneA disconnect call between A-C, verify call continues.
5373        6. On PhoneA disconnect call between A-B, verify call continues.
5374
5375        Returns:
5376            True if pass; False if fail.
5377        """
5378        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(1)
5379        if call_ab_id is None or call_ac_id is None:
5380            return False
5381
5382        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5383            call_ab_id, call_ac_id)
5384
5385    @TelephonyBaseTest.tel_test_wrap
5386    @test_tracker_info(uuid="de8aae4e-c8fc-4996-9d0b-56c3904c9bb4")
5387    def test_volte_mt_mt_add_volte_swap_once_merge_drop_first_call_from_participant_cep(
5388            self):
5389        """ Test swap and merge features in VoLTE call. CEP enabled.
5390
5391        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5392        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5393        3. Swap active call on PhoneA.
5394        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5395        5. End call on PhoneB, verify call continues.
5396        6. End call on PhoneC, verify call end on PhoneA.
5397
5398        Returns:
5399            True if pass; False if fail.
5400        """
5401        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(1)
5402        if call_ab_id is None or call_ac_id is None:
5403            return False
5404
5405        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5406            call_ab_id, call_ac_id)
5407
5408    @TelephonyBaseTest.tel_test_wrap
5409    @test_tracker_info(uuid="35d72ebf-1a99-4571-8993-2899925f5489")
5410    def test_volte_mt_mt_add_volte_swap_once_merge_drop_first_call_from_host_cep(
5411            self):
5412        """ Test swap and merge features in VoLTE call. CEP enabled.
5413
5414        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5415        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5416        3. Swap active call on PhoneA.
5417        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5418        5. On PhoneA disconnect call between A-B, verify call continues.
5419        6. On PhoneA disconnect call between A-C, verify call continues.
5420
5421        Returns:
5422            True if pass; False if fail.
5423        """
5424        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(1)
5425        if call_ab_id is None or call_ac_id is None:
5426            return False
5427
5428        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5429            call_ab_id, call_ac_id)
5430
5431    @TelephonyBaseTest.tel_test_wrap
5432    @test_tracker_info(uuid="96c4c9d2-2e00-41a8-b4ce-3a9377262d36")
5433    def test_volte_mt_mt_add_volte_swap_twice_merge_drop_second_call_from_participant_no_cep(
5434            self):
5435        """ Test swap and merge features in VoLTE call. No CEP.
5436
5437        PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5438        PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5439        Swap active call on PhoneA.
5440        Swap active call on PhoneA.
5441        On PhoneA, merge to conference call (No CEP).
5442        End call on PhoneC, verify call continues.
5443        End call on PhoneB, verify call end on PhoneA.
5444
5445        Returns:
5446            True if pass; False if fail.
5447        """
5448        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(2)
5449        if call_ab_id is None or call_ac_id is None:
5450            return False
5451
5452        return self._test_ims_conference_merge_drop_second_call_no_cep(
5453            call_ab_id, call_ac_id)
5454
5455    @TelephonyBaseTest.tel_test_wrap
5456    @test_tracker_info(uuid="e1e0bb6c-c2d5-4566-80b1-46bfb0b95544")
5457    def test_volte_mt_mt_add_volte_swap_twice_merge_drop_second_call_from_participant_cep(
5458            self):
5459        """ Test swap and merge features in VoLTE call. CEP enabled.
5460
5461        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5462        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5463        3. Swap active call on PhoneA.
5464        4. Swap active call on PhoneA.
5465        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5466        6. End call on PhoneC, verify call continues.
5467        7. End call on PhoneB, verify call end on PhoneA.
5468
5469        Returns:
5470            True if pass; False if fail.
5471        """
5472        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(2)
5473        if call_ab_id is None or call_ac_id is None:
5474            return False
5475
5476        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5477            call_ab_id, call_ac_id)
5478
5479    @TelephonyBaseTest.tel_test_wrap
5480    @test_tracker_info(uuid="764b5930-ba96-4901-b629-e753bc5c8d8e")
5481    def test_volte_mt_mt_add_volte_swap_twice_merge_drop_second_call_from_host_cep(
5482            self):
5483        """ Test swap and merge features in VoLTE call. CEP enabled.
5484
5485        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5486        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5487        3. Swap active call on PhoneA.
5488        4. Swap active call on PhoneA.
5489        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5490        6. On PhoneA disconnect call between A-C, verify call continues.
5491        7. On PhoneA disconnect call between A-B, verify call continues.
5492
5493        Returns:
5494            True if pass; False if fail.
5495        """
5496        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(2)
5497        if call_ab_id is None or call_ac_id is None:
5498            return False
5499
5500        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5501            call_ab_id, call_ac_id)
5502
5503    @TelephonyBaseTest.tel_test_wrap
5504    @test_tracker_info(uuid="e03e52a1-7e7b-4a53-a496-3092a35153ae")
5505    def test_volte_mt_mt_add_volte_swap_twice_merge_drop_first_call_from_participant_cep(
5506            self):
5507        """ Test swap and merge features in VoLTE call. CEP enabled.
5508
5509        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5510        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5511        3. Swap active call on PhoneA.
5512        4. Swap active call on PhoneA.
5513        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5514        6. End call on PhoneB, verify call continues.
5515        7. End call on PhoneC, verify call end on PhoneA.
5516
5517        Returns:
5518            True if pass; False if fail.
5519        """
5520        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(2)
5521        if call_ab_id is None or call_ac_id is None:
5522            return False
5523
5524        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5525            call_ab_id, call_ac_id)
5526
5527    @TelephonyBaseTest.tel_test_wrap
5528    @test_tracker_info(uuid="10a63692-56de-4563-b223-91e8814ddbc9")
5529    def test_volte_mt_mt_add_volte_swap_twice_merge_drop_first_call_from_host_cep(
5530            self):
5531        """ Test swap and merge features in VoLTE call. CEP enabled.
5532
5533        1. PhoneB (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5534        2. PhoneC (VoLTE) call PhoneA (VoLTE), accept on PhoneA.
5535        3. Swap active call on PhoneA.
5536        4. Swap active call on PhoneA.
5537        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5538        6. On PhoneA disconnect call between A-B, verify call continues.
5539        7. On PhoneA disconnect call between A-C, verify call continues.
5540
5541        Returns:
5542            True if pass; False if fail.
5543        """
5544        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_volte_swap_x(2)
5545        if call_ab_id is None or call_ac_id is None:
5546            return False
5547
5548        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5549            call_ab_id, call_ac_id)
5550
5551    @TelephonyBaseTest.tel_test_wrap
5552    @test_tracker_info(uuid="cf4b1fe2-40d7-409b-a4ec-06bdb9a0d957")
5553    def test_volte_mo_mo_add_wcdma_swap_once_merge_drop_second_call_from_participant_no_cep(
5554            self):
5555        """ Test VoLTE Conference Call among three phones. No CEP.
5556
5557        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5558        PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5559        Swap active call on PhoneA.
5560        On PhoneA, merge to conference call (No CEP).
5561        End call on PhoneC, verify call continues.
5562        End call on PhoneB, verify call end on PhoneA.
5563
5564        Returns:
5565            True if pass; False if fail.
5566        """
5567        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(1)
5568        if call_ab_id is None or call_ac_id is None:
5569            return False
5570
5571        return self._test_ims_conference_merge_drop_second_call_no_cep(
5572            call_ab_id, call_ac_id)
5573
5574    @TelephonyBaseTest.tel_test_wrap
5575    @test_tracker_info(uuid="fcc9dbd2-919d-4552-838c-2b672fb24b2b")
5576    def test_volte_mo_mo_add_wcdma_swap_once_merge_drop_second_call_from_participant_cep(
5577            self):
5578        """ Test swap and merge features in VoLTE call. CEP enabled.
5579
5580        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5581        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5582        3. Swap active call on PhoneA.
5583        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5584        5. End call on PhoneC, verify call continues.
5585        6. End call on PhoneB, verify call end on PhoneA.
5586
5587        Returns:
5588            True if pass; False if fail.
5589        """
5590        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(1)
5591        if call_ab_id is None or call_ac_id is None:
5592            return False
5593
5594        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5595            call_ab_id, call_ac_id)
5596
5597    @TelephonyBaseTest.tel_test_wrap
5598    @test_tracker_info(uuid="37021d31-4242-46a2-adbf-eb7b987e4a43")
5599    def test_volte_mo_mo_add_wcdma_swap_once_merge_drop_second_call_from_host_cep(
5600            self):
5601        """ Test swap and merge features in VoLTE call. CEP enabled.
5602
5603        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5604        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5605        3. Swap active call on PhoneA.
5606        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5607        5. On PhoneA disconnect call between A-C, verify call continues.
5608        6. On PhoneA disconnect call between A-B, verify call continues.
5609
5610        Returns:
5611            True if pass; False if fail.
5612        """
5613        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(1)
5614        if call_ab_id is None or call_ac_id is None:
5615            return False
5616
5617        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5618            call_ab_id, call_ac_id)
5619
5620    @TelephonyBaseTest.tel_test_wrap
5621    @test_tracker_info(uuid="cc362118-ccd1-4502-96f1-b3584b0c6bf3")
5622    def test_volte_mo_mo_add_wcdma_swap_once_merge_drop_first_call_from_participant_cep(
5623            self):
5624        """ Test swap and merge features in VoLTE call. CEP enabled.
5625
5626        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5627        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5628        3. Swap active call on PhoneA.
5629        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5630        5. End call on PhoneB, verify call continues.
5631        6. End call on PhoneC, verify call end on PhoneA.
5632
5633        Returns:
5634            True if pass; False if fail.
5635        """
5636        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(1)
5637        if call_ab_id is None or call_ac_id is None:
5638            return False
5639
5640        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5641            call_ab_id, call_ac_id)
5642
5643    @TelephonyBaseTest.tel_test_wrap
5644    @test_tracker_info(uuid="be57dd4f-020f-4491-9cd0-2461dcd0806b")
5645    def test_volte_mo_mo_add_wcdma_swap_once_merge_drop_first_call_from_host_cep(
5646            self):
5647        """ Test swap and merge features in VoLTE call. CEP enabled.
5648
5649        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5650        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5651        3. Swap active call on PhoneA.
5652        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5653        5. On PhoneA disconnect call between A-B, verify call continues.
5654        6. On PhoneA disconnect call between A-C, verify call continues.
5655
5656        Returns:
5657            True if pass; False if fail.
5658        """
5659        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(1)
5660        if call_ab_id is None or call_ac_id is None:
5661            return False
5662
5663        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5664            call_ab_id, call_ac_id)
5665
5666    @TelephonyBaseTest.tel_test_wrap
5667    @test_tracker_info(uuid="058425ca-7b25-4a85-a5c7-bfdcd7920f15")
5668    def test_volte_mo_mo_add_wcdma_swap_twice_merge_drop_second_call_from_participant_no_cep(
5669            self):
5670        """ Test VoLTE Conference Call among three phones. No CEP.
5671
5672        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5673        PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5674        Swap active call on PhoneA.
5675        Swap active call on PhoneA.
5676        On PhoneA, merge to conference call (No CEP).
5677        End call on PhoneC, verify call continues.
5678        End call on PhoneB, verify call end on PhoneA.
5679
5680        Returns:
5681            True if pass; False if fail.
5682        """
5683        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(2)
5684        if call_ab_id is None or call_ac_id is None:
5685            return False
5686
5687        return self._test_ims_conference_merge_drop_second_call_no_cep(
5688            call_ab_id, call_ac_id)
5689
5690    @TelephonyBaseTest.tel_test_wrap
5691    @test_tracker_info(uuid="5f691165-d099-419d-a50e-1547c8677f6b")
5692    def test_volte_mo_mo_add_wcdma_swap_twice_merge_drop_second_call_from_participant_cep(
5693            self):
5694        """ Test swap and merge features in VoLTE call. CEP enabled.
5695
5696        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5697        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5698        3. Swap active call on PhoneA.
5699        4. Swap active call on PhoneA.
5700        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5701        6. End call on PhoneC, verify call continues.
5702        7. End call on PhoneB, verify call end on PhoneA.
5703
5704        Returns:
5705            True if pass; False if fail.
5706        """
5707        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(2)
5708        if call_ab_id is None or call_ac_id is None:
5709            return False
5710
5711        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5712            call_ab_id, call_ac_id)
5713
5714    @TelephonyBaseTest.tel_test_wrap
5715    @test_tracker_info(uuid="4fc8459e-23c6-408a-a061-e8f182086dd6")
5716    def test_volte_mo_mo_add_wcdma_swap_twice_merge_drop_second_call_from_host_cep(
5717            self):
5718        """ Test swap and merge features in VoLTE call. CEP enabled.
5719
5720        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5721        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5722        3. Swap active call on PhoneA.
5723        4. Swap active call on PhoneA.
5724        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5725        6. On PhoneA disconnect call between A-C, verify call continues.
5726        7. On PhoneA disconnect call between A-B, verify call continues.
5727
5728        Returns:
5729            True if pass; False if fail.
5730        """
5731        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(2)
5732        if call_ab_id is None or call_ac_id is None:
5733            return False
5734
5735        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5736            call_ab_id, call_ac_id)
5737
5738    @TelephonyBaseTest.tel_test_wrap
5739    @test_tracker_info(uuid="3026802f-ddca-41e4-ae6f-db0c994613a7")
5740    def test_volte_mo_mo_add_wcdma_swap_twice_merge_drop_first_call_from_participant_cep(
5741            self):
5742        """ Test swap and merge features in VoLTE call. CEP enabled.
5743
5744        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5745        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5746        3. Swap active call on PhoneA.
5747        4. Swap active call on PhoneA.
5748        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5749        6. End call on PhoneB, verify call continues.
5750        7. End call on PhoneC, verify call end on PhoneA.
5751
5752        Returns:
5753            True if pass; False if fail.
5754        """
5755        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(2)
5756        if call_ab_id is None or call_ac_id is None:
5757            return False
5758
5759        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5760            call_ab_id, call_ac_id)
5761
5762    @TelephonyBaseTest.tel_test_wrap
5763    @test_tracker_info(uuid="5ce98774-66b4-4710-b0da-e43bb7fa1c0f")
5764    def test_volte_mo_mo_add_wcdma_swap_twice_merge_drop_first_call_from_host_cep(
5765            self):
5766        """ Test swap and merge features in VoLTE call. CEP enabled.
5767
5768        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5769        2. PhoneA (VoLTE) call PhoneC (WCDMA), accept on PhoneC.
5770        3. Swap active call on PhoneA.
5771        4. Swap active call on PhoneA.
5772        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5773        6. On PhoneA disconnect call between A-B, verify call continues.
5774        7. On PhoneA disconnect call between A-C, verify call continues.
5775
5776        Returns:
5777            True if pass; False if fail.
5778        """
5779        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_wcdma_swap_x(2)
5780        if call_ab_id is None or call_ac_id is None:
5781            return False
5782
5783        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5784            call_ab_id, call_ac_id)
5785
5786    @TelephonyBaseTest.tel_test_wrap
5787    @test_tracker_info(uuid="61766517-8762-4db3-9366-609c0f1a43b5")
5788    def test_volte_mo_mt_add_wcdma_swap_once_merge_drop_second_call_from_participant_no_cep(
5789            self):
5790        """ Test VoLTE Conference Call among three phones. No CEP.
5791
5792        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5793        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5794        Swap active call on PhoneA.
5795        On PhoneA, merge to conference call (No CEP).
5796        End call on PhoneC, verify call continues.
5797        End call on PhoneB, verify call end on PhoneA.
5798
5799        Returns:
5800            True if pass; False if fail.
5801        """
5802        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(1)
5803        if call_ab_id is None or call_ac_id is None:
5804            return False
5805
5806        return self._test_ims_conference_merge_drop_second_call_no_cep(
5807            call_ab_id, call_ac_id)
5808
5809    @TelephonyBaseTest.tel_test_wrap
5810    @test_tracker_info(uuid="9a809168-1ca4-4672-a5b3-934aeed0f06c")
5811    def test_volte_mo_mt_add_wcdma_swap_once_merge_drop_second_call_from_participant_cep(
5812            self):
5813        """ Test swap and merge features in VoLTE call. CEP enabled.
5814
5815        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5816        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5817        3. Swap active call on PhoneA.
5818        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5819        5. End call on PhoneC, verify call continues.
5820        6. End call on PhoneB, verify call end on PhoneA.
5821
5822        Returns:
5823            True if pass; False if fail.
5824        """
5825        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(1)
5826        if call_ab_id is None or call_ac_id is None:
5827            return False
5828
5829        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5830            call_ab_id, call_ac_id)
5831
5832    @TelephonyBaseTest.tel_test_wrap
5833    @test_tracker_info(uuid="4a146608-fbc7-4828-b2ee-77e08c19ddec")
5834    def test_volte_mo_mt_add_wcdma_swap_once_merge_drop_second_call_from_host_cep(
5835            self):
5836        """ Test swap and merge features in VoLTE call. CEP enabled.
5837
5838        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5839        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5840        3. Swap active call on PhoneA.
5841        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5842        5. On PhoneA disconnect call between A-C, verify call continues.
5843        6. On PhoneA disconnect call between A-B, verify call continues.
5844
5845        Returns:
5846            True if pass; False if fail.
5847        """
5848        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(1)
5849        if call_ab_id is None or call_ac_id is None:
5850            return False
5851
5852        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5853            call_ab_id, call_ac_id)
5854
5855    @TelephonyBaseTest.tel_test_wrap
5856    @test_tracker_info(uuid="4a3d4c0b-912a-4922-a4a3-f0bdf600c376")
5857    def test_volte_mo_mt_add_wcdma_swap_once_merge_drop_first_call_from_participant_cep(
5858            self):
5859        """ Test swap and merge features in VoLTE call. CEP enabled.
5860
5861        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5862        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5863        3. Swap active call on PhoneA.
5864        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5865        5. End call on PhoneB, verify call continues.
5866        6. End call on PhoneC, verify call end on PhoneA.
5867
5868        Returns:
5869            True if pass; False if fail.
5870        """
5871        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(1)
5872        if call_ab_id is None or call_ac_id is None:
5873            return False
5874
5875        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5876            call_ab_id, call_ac_id)
5877
5878    @TelephonyBaseTest.tel_test_wrap
5879    @test_tracker_info(uuid="614903e0-7091-4791-9af6-076799e43a97")
5880    def test_volte_mo_mt_add_wcdma_swap_once_merge_drop_first_call_from_host_cep(
5881            self):
5882        """ Test swap and merge features in VoLTE call. CEP enabled.
5883
5884        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5885        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5886        3. Swap active call on PhoneA.
5887        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
5888        5. On PhoneA disconnect call between A-B, verify call continues.
5889        6. On PhoneA disconnect call between A-C, verify call continues.
5890
5891        Returns:
5892            True if pass; False if fail.
5893        """
5894        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(1)
5895        if call_ab_id is None or call_ac_id is None:
5896            return False
5897
5898        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
5899            call_ab_id, call_ac_id)
5900
5901    @TelephonyBaseTest.tel_test_wrap
5902    @test_tracker_info(uuid="cea2ffc9-b8c8-46df-8f58-b606f3d352e2")
5903    def test_volte_mo_mt_add_wcdma_swap_twice_merge_drop_second_call_from_participant_no_cep(
5904            self):
5905        """ Test VoLTE Conference Call among three phones. No CEP.
5906
5907        PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5908        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5909        Swap active call on PhoneA.
5910        Swap active call on PhoneA.
5911        On PhoneA, merge to conference call (No CEP).
5912        End call on PhoneC, verify call continues.
5913        End call on PhoneB, verify call end on PhoneA.
5914
5915        Returns:
5916            True if pass; False if fail.
5917        """
5918        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(2)
5919        if call_ab_id is None or call_ac_id is None:
5920            return False
5921
5922        return self._test_ims_conference_merge_drop_second_call_no_cep(
5923            call_ab_id, call_ac_id)
5924
5925    @TelephonyBaseTest.tel_test_wrap
5926    @test_tracker_info(uuid="4b0e040a-f199-4dc4-9f98-eb923f79814e")
5927    def test_volte_mo_mt_add_wcdma_swap_twice_merge_drop_second_call_from_participant_cep(
5928            self):
5929        """ Test swap and merge features in VoLTE call. CEP enabled.
5930
5931        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5932        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5933        3. Swap active call on PhoneA.
5934        4. Swap active call on PhoneA.
5935        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5936        6. End call on PhoneC, verify call continues.
5937        7. End call on PhoneB, verify call end on PhoneA.
5938
5939        Returns:
5940            True if pass; False if fail.
5941        """
5942        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(2)
5943        if call_ab_id is None or call_ac_id is None:
5944            return False
5945
5946        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
5947            call_ab_id, call_ac_id)
5948
5949    @TelephonyBaseTest.tel_test_wrap
5950    @test_tracker_info(uuid="56d45561-8e9b-40d4-bacc-a4c5ac4c2af0")
5951    def test_volte_mo_mt_add_wcdma_swap_twice_merge_drop_second_call_from_host_cep(
5952            self):
5953        """ Test swap and merge features in VoLTE call. CEP enabled.
5954
5955        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5956        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5957        3. Swap active call on PhoneA.
5958        4. Swap active call on PhoneA.
5959        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5960        6. On PhoneA disconnect call between A-C, verify call continues.
5961        7. On PhoneA disconnect call between A-B, verify call continues.
5962
5963        Returns:
5964            True if pass; False if fail.
5965        """
5966        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(2)
5967        if call_ab_id is None or call_ac_id is None:
5968            return False
5969
5970        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
5971            call_ab_id, call_ac_id)
5972
5973    @TelephonyBaseTest.tel_test_wrap
5974    @test_tracker_info(uuid="790ccd53-07e6-471b-a224-b7eeb3a83116")
5975    def test_volte_mo_mt_add_wcdma_swap_twice_merge_drop_first_call_from_participant_cep(
5976            self):
5977        """ Test swap and merge features in VoLTE call. CEP enabled.
5978
5979        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
5980        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
5981        3. Swap active call on PhoneA.
5982        4. Swap active call on PhoneA.
5983        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
5984        6. End call on PhoneB, verify call continues.
5985        7. End call on PhoneC, verify call end on PhoneA.
5986
5987        Returns:
5988            True if pass; False if fail.
5989        """
5990        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(2)
5991        if call_ab_id is None or call_ac_id is None:
5992            return False
5993
5994        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
5995            call_ab_id, call_ac_id)
5996
5997    @TelephonyBaseTest.tel_test_wrap
5998    @test_tracker_info(uuid="84083401-22af-4568-929a-4fd29e39db5c")
5999    def test_volte_mo_mt_add_wcdma_swap_twice_merge_drop_first_call_from_host_cep(
6000            self):
6001        """ Test swap and merge features in VoLTE call. CEP enabled.
6002
6003        1. PhoneA (VoLTE) call PhoneB (WCDMA), accept on PhoneB.
6004        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6005        3. Swap active call on PhoneA.
6006        4. Swap active call on PhoneA.
6007        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6008        6. On PhoneA disconnect call between A-B, verify call continues.
6009        7. On PhoneA disconnect call between A-C, verify call continues.
6010
6011        Returns:
6012            True if pass; False if fail.
6013        """
6014        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_wcdma_swap_x(2)
6015        if call_ab_id is None or call_ac_id is None:
6016            return False
6017
6018        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6019            call_ab_id, call_ac_id)
6020
6021    @TelephonyBaseTest.tel_test_wrap
6022    @test_tracker_info(uuid="11a3d9cd-6f05-4638-9683-3ee475e41fdb")
6023    def test_volte_mt_mt_add_wcdma_swap_once_merge_drop_second_call_from_participant_no_cep(
6024            self):
6025        """ Test VoLTE Conference Call among three phones. No CEP.
6026
6027        PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6028        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6029        Swap active call on PhoneA.
6030        On PhoneA, merge to conference call (No CEP).
6031        End call on PhoneC, verify call continues.
6032        End call on PhoneB, verify call end on PhoneA.
6033
6034        Returns:
6035            True if pass; False if fail.
6036        """
6037        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(1)
6038        if call_ab_id is None or call_ac_id is None:
6039            return False
6040
6041        return self._test_ims_conference_merge_drop_second_call_no_cep(
6042            call_ab_id, call_ac_id)
6043
6044    @TelephonyBaseTest.tel_test_wrap
6045    @test_tracker_info(uuid="ff03b64e-fccd-45e3-8245-f8c6cb328212")
6046    def test_volte_mt_mt_add_wcdma_swap_once_merge_drop_second_call_from_participant_cep(
6047            self):
6048        """ Test swap and merge features in VoLTE call. CEP enabled.
6049
6050        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6051        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6052        3. Swap active call on PhoneA.
6053        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6054        5. End call on PhoneC, verify call continues.
6055        6. End call on PhoneB, verify call end on PhoneA.
6056
6057        Returns:
6058            True if pass; False if fail.
6059        """
6060        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(1)
6061        if call_ab_id is None or call_ac_id is None:
6062            return False
6063
6064        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6065            call_ab_id, call_ac_id)
6066
6067    @TelephonyBaseTest.tel_test_wrap
6068    @test_tracker_info(uuid="c1822404-df8e-4b0c-b5d2-f70bb8c3119d")
6069    def test_volte_mt_mt_add_wcdma_swap_once_merge_drop_second_call_from_host_cep(
6070            self):
6071        """ Test swap and merge features in VoLTE call. CEP enabled.
6072
6073        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6074        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6075        3. Swap active call on PhoneA.
6076        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6077        5. On PhoneA disconnect call between A-C, verify call continues.
6078        6. On PhoneA disconnect call between A-B, verify call continues.
6079
6080        Returns:
6081            True if pass; False if fail.
6082        """
6083        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(1)
6084        if call_ab_id is None or call_ac_id is None:
6085            return False
6086
6087        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6088            call_ab_id, call_ac_id)
6089
6090    @TelephonyBaseTest.tel_test_wrap
6091    @test_tracker_info(uuid="3ebf7526-57f9-47f5-9196-b483384d6759")
6092    def test_volte_mt_mt_add_wcdma_swap_once_merge_drop_first_call_from_participant_cep(
6093            self):
6094        """ Test swap and merge features in VoLTE call. CEP enabled.
6095
6096        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6097        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6098        3. Swap active call on PhoneA.
6099        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6100        5. End call on PhoneB, verify call continues.
6101        6. End call on PhoneC, verify call end on PhoneA.
6102
6103        Returns:
6104            True if pass; False if fail.
6105        """
6106        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(1)
6107        if call_ab_id is None or call_ac_id is None:
6108            return False
6109
6110        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6111            call_ab_id, call_ac_id)
6112
6113    @TelephonyBaseTest.tel_test_wrap
6114    @test_tracker_info(uuid="8b8e664d-e872-493f-bff9-34a9500b2c25")
6115    def test_volte_mt_mt_add_wcdma_swap_once_merge_drop_first_call_from_host_cep(
6116            self):
6117        """ Test swap and merge features in VoLTE call. CEP enabled.
6118
6119        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6120        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6121        3. Swap active call on PhoneA.
6122        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6123        5. On PhoneA disconnect call between A-B, verify call continues.
6124        6. On PhoneA disconnect call between A-C, verify call continues.
6125
6126        Returns:
6127            True if pass; False if fail.
6128        """
6129        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(1)
6130        if call_ab_id is None or call_ac_id is None:
6131            return False
6132
6133        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6134            call_ab_id, call_ac_id)
6135
6136    @TelephonyBaseTest.tel_test_wrap
6137    @test_tracker_info(uuid="aa4079dd-b5c6-41a3-ae0f-99f17fd0bae0")
6138    def test_volte_mt_mt_add_wcdma_swap_twice_merge_drop_second_call_from_participant_no_cep(
6139            self):
6140        """ Test VoLTE Conference Call among three phones. No CEP.
6141
6142        PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6143        PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6144        Swap active call on PhoneA.
6145        Swap active call on PhoneA.
6146        On PhoneA, merge to conference call (No CEP).
6147        End call on PhoneC, verify call continues.
6148        End call on PhoneB, verify call end on PhoneA.
6149
6150        Returns:
6151            True if pass; False if fail.
6152        """
6153        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(2)
6154        if call_ab_id is None or call_ac_id is None:
6155            return False
6156
6157        return self._test_ims_conference_merge_drop_second_call_no_cep(
6158            call_ab_id, call_ac_id)
6159
6160    @TelephonyBaseTest.tel_test_wrap
6161    @test_tracker_info(uuid="d9f32013-529c-46c3-9963-405ebbdbc537")
6162    def test_volte_mt_mt_add_wcdma_swap_twice_merge_drop_second_call_from_participant_cep(
6163            self):
6164        """ Test swap and merge features in VoLTE call. CEP enabled.
6165
6166        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6167        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6168        3. Swap active call on PhoneA.
6169        4. Swap active call on PhoneA.
6170        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6171        6. End call on PhoneC, verify call continues.
6172        7. End call on PhoneB, verify call end on PhoneA.
6173
6174        Returns:
6175            True if pass; False if fail.
6176        """
6177        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(2)
6178        if call_ab_id is None or call_ac_id is None:
6179            return False
6180
6181        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6182            call_ab_id, call_ac_id)
6183
6184    @TelephonyBaseTest.tel_test_wrap
6185    @test_tracker_info(uuid="93331954-4403-47ec-8af3-1a791ea2fc8b")
6186    def test_volte_mt_mt_add_wcdma_swap_twice_merge_drop_second_call_from_host_cep(
6187            self):
6188        """ Test swap and merge features in VoLTE call. CEP enabled.
6189
6190        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6191        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6192        3. Swap active call on PhoneA.
6193        4. Swap active call on PhoneA.
6194        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6195        6. On PhoneA disconnect call between A-C, verify call continues.
6196        7. On PhoneA disconnect call between A-B, verify call continues.
6197
6198        Returns:
6199            True if pass; False if fail.
6200        """
6201        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(2)
6202        if call_ab_id is None or call_ac_id is None:
6203            return False
6204
6205        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6206            call_ab_id, call_ac_id)
6207
6208    @TelephonyBaseTest.tel_test_wrap
6209    @test_tracker_info(uuid="c5a47e45-166b-46db-8b12-734d5d062509")
6210    def test_volte_mt_mt_add_wcdma_swap_twice_merge_drop_first_call_from_participant_cep(
6211            self):
6212        """ Test swap and merge features in VoLTE call. CEP enabled.
6213
6214        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6215        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6216        3. Swap active call on PhoneA.
6217        4. Swap active call on PhoneA.
6218        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6219        6. End call on PhoneB, verify call continues.
6220        7. End call on PhoneC, verify call end on PhoneA.
6221
6222        Returns:
6223            True if pass; False if fail.
6224        """
6225        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(2)
6226        if call_ab_id is None or call_ac_id is None:
6227            return False
6228
6229        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6230            call_ab_id, call_ac_id)
6231
6232    @TelephonyBaseTest.tel_test_wrap
6233    @test_tracker_info(uuid="05bff9cf-492d-4511-ac0e-b54f1d5fa454")
6234    def test_volte_mt_mt_add_wcdma_swap_twice_merge_drop_first_call_from_host_cep(
6235            self):
6236        """ Test swap and merge features in VoLTE call. CEP enabled.
6237
6238        1. PhoneB (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6239        2. PhoneC (WCDMA) call PhoneA (VoLTE), accept on PhoneA.
6240        3. Swap active call on PhoneA.
6241        4. Swap active call on PhoneA.
6242        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6243        6. On PhoneA disconnect call between A-B, verify call continues.
6244        7. On PhoneA disconnect call between A-C, verify call continues.
6245
6246        Returns:
6247            True if pass; False if fail.
6248        """
6249        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_wcdma_swap_x(2)
6250        if call_ab_id is None or call_ac_id is None:
6251            return False
6252
6253        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6254            call_ab_id, call_ac_id)
6255
6256    @TelephonyBaseTest.tel_test_wrap
6257    @test_tracker_info(uuid="f02add29-d61a-42f4-a1f0-271815e03c45")
6258    def test_volte_mo_mo_add_1x_swap_once_merge_drop_second_call_from_participant_no_cep(
6259            self):
6260        """ Test swap and merge features in VoLTE call. No CEP.
6261
6262        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6263        PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6264        Swap active call on PhoneA.
6265        On PhoneA, merge to conference call (No CEP).
6266        End call on PhoneC, verify call continues.
6267        End call on PhoneB, verify call end on PhoneA.
6268
6269        Returns:
6270            True if pass; False if fail.
6271        """
6272        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(1)
6273        if call_ab_id is None or call_ac_id is None:
6274            return False
6275
6276        return self._test_ims_conference_merge_drop_second_call_no_cep(
6277            call_ab_id, call_ac_id)
6278
6279    @TelephonyBaseTest.tel_test_wrap
6280    @test_tracker_info(uuid="776821e8-259b-441e-a126-45a990e6e14d")
6281    def test_volte_mo_mo_add_1x_swap_once_merge_drop_second_call_from_participant_cep(
6282            self):
6283        """ Test swap and merge features in VoLTE call. CEP enabled.
6284
6285        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6286        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6287        3. Swap active call on PhoneA.
6288        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6289        5. End call on PhoneC, verify call continues.
6290        6. End call on PhoneB, verify call end on PhoneA.
6291
6292        Returns:
6293            True if pass; False if fail.
6294        """
6295        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(1)
6296        if call_ab_id is None or call_ac_id is None:
6297            return False
6298
6299        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6300            call_ab_id, call_ac_id)
6301
6302    @TelephonyBaseTest.tel_test_wrap
6303    @test_tracker_info(uuid="c542c999-d1c7-47f9-ba5c-50a582afa9e5")
6304    def test_volte_mo_mo_add_1x_swap_once_merge_drop_second_call_from_host_cep(
6305            self):
6306        """ Test swap and merge features in VoLTE call. CEP enabled.
6307
6308        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6309        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6310        3. Swap active call on PhoneA.
6311        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6312        5. On PhoneA disconnect call between A-C, verify call continues.
6313        6. On PhoneA disconnect call between A-B, verify call continues.
6314
6315        Returns:
6316            True if pass; False if fail.
6317        """
6318        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(1)
6319        if call_ab_id is None or call_ac_id is None:
6320            return False
6321
6322        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6323            call_ab_id, call_ac_id)
6324
6325    @TelephonyBaseTest.tel_test_wrap
6326    @test_tracker_info(uuid="d40c681a-1bce-4012-a30c-774e6698ba3a")
6327    def test_volte_mo_mo_add_1x_swap_once_merge_drop_first_call_from_participant_cep(
6328            self):
6329        """ Test swap and merge features in VoLTE call. CEP enabled.
6330
6331        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6332        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6333        3. Swap active call on PhoneA.
6334        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6335        5. End call on PhoneB, verify call continues.
6336        6. End call on PhoneC, verify call end on PhoneA.
6337
6338        Returns:
6339            True if pass; False if fail.
6340        """
6341        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(1)
6342        if call_ab_id is None or call_ac_id is None:
6343            return False
6344
6345        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6346            call_ab_id, call_ac_id)
6347
6348    @TelephonyBaseTest.tel_test_wrap
6349    @test_tracker_info(uuid="2805f272-5ada-4dd4-916a-36070905aec4")
6350    def test_volte_mo_mo_add_1x_swap_once_merge_drop_first_call_from_host_cep(
6351            self):
6352        """ Test swap and merge features in VoLTE call. CEP enabled.
6353
6354        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6355        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6356        3. Swap active call on PhoneA.
6357        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6358        5. On PhoneA disconnect call between A-B, verify call continues.
6359        6. On PhoneA disconnect call between A-C, verify call continues.
6360
6361        Returns:
6362            True if pass; False if fail.
6363        """
6364        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(1)
6365        if call_ab_id is None or call_ac_id is None:
6366            return False
6367
6368        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6369            call_ab_id, call_ac_id)
6370
6371    @TelephonyBaseTest.tel_test_wrap
6372    @test_tracker_info(uuid="eb2d010c-ec32-409b-8272-5b950e0076f9")
6373    def test_volte_mo_mo_add_1x_swap_twice_merge_drop_second_call_from_participant_no_cep(
6374            self):
6375        """ Test swap and merge features in VoLTE call. No CEP.
6376
6377        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6378        PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6379        Swap active call on PhoneA.
6380        Swap active call on PhoneA.
6381        On PhoneA, merge to conference call (No CEP).
6382        End call on PhoneC, verify call continues.
6383        End call on PhoneB, verify call end on PhoneA.
6384
6385        Returns:
6386            True if pass; False if fail.
6387        """
6388        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(2)
6389        if call_ab_id is None or call_ac_id is None:
6390            return False
6391
6392        return self._test_ims_conference_merge_drop_second_call_no_cep(
6393            call_ab_id, call_ac_id)
6394
6395    @TelephonyBaseTest.tel_test_wrap
6396    @test_tracker_info(uuid="03bb2fa3-8596-4c66-8adb-a3f9c9085420")
6397    def test_volte_mo_mo_add_1x_swap_twice_merge_drop_second_call_from_participant_cep(
6398            self):
6399        """ Test swap and merge features in VoLTE call. CEP enabled.
6400
6401        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6402        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6403        3. Swap active call on PhoneA.
6404        4. Swap active call on PhoneA.
6405        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6406        6. End call on PhoneC, verify call continues.
6407        7. End call on PhoneB, verify call end on PhoneA.
6408
6409        Returns:
6410            True if pass; False if fail.
6411        """
6412        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(2)
6413        if call_ab_id is None or call_ac_id is None:
6414            return False
6415
6416        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6417            call_ab_id, call_ac_id)
6418
6419    @TelephonyBaseTest.tel_test_wrap
6420    @test_tracker_info(uuid="df3bb0e7-7d72-487a-8cb8-fa75b86662ef")
6421    def test_volte_mo_mo_add_1x_swap_twice_merge_drop_second_call_from_host_cep(
6422            self):
6423        """ Test swap and merge features in VoLTE call. CEP enabled.
6424
6425        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6426        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6427        3. Swap active call on PhoneA.
6428        4. Swap active call on PhoneA.
6429        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6430        6. On PhoneA disconnect call between A-C, verify call continues.
6431        7. On PhoneA disconnect call between A-B, verify call continues.
6432
6433        Returns:
6434            True if pass; False if fail.
6435        """
6436        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(2)
6437        if call_ab_id is None or call_ac_id is None:
6438            return False
6439
6440        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6441            call_ab_id, call_ac_id)
6442
6443    @TelephonyBaseTest.tel_test_wrap
6444    @test_tracker_info(uuid="3893ce25-0fad-4eb8-af35-f9ebf47c0615")
6445    def test_volte_mo_mo_add_1x_swap_twice_merge_drop_first_call_from_participant_cep(
6446            self):
6447        """ Test swap and merge features in VoLTE call. CEP enabled.
6448
6449        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6450        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6451        3. Swap active call on PhoneA.
6452        4. Swap active call on PhoneA.
6453        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6454        6. End call on PhoneB, verify call continues.
6455        7. End call on PhoneC, verify call end on PhoneA.
6456
6457        Returns:
6458            True if pass; False if fail.
6459        """
6460        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(2)
6461        if call_ab_id is None or call_ac_id is None:
6462            return False
6463
6464        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6465            call_ab_id, call_ac_id)
6466
6467    @TelephonyBaseTest.tel_test_wrap
6468    @test_tracker_info(uuid="fcd0e656-4e98-40f2-b0ce-5ed90c7c4a81")
6469    def test_volte_mo_mo_add_1x_swap_twice_merge_drop_first_call_from_host_cep(
6470            self):
6471        """ Test swap and merge features in VoLTE call. CEP enabled.
6472
6473        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6474        2. PhoneA (VoLTE) call PhoneC (1x), accept on PhoneC.
6475        3. Swap active call on PhoneA.
6476        4. Swap active call on PhoneA.
6477        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6478        6. On PhoneA disconnect call between A-B, verify call continues.
6479        7. On PhoneA disconnect call between A-C, verify call continues.
6480
6481        Returns:
6482            True if pass; False if fail.
6483        """
6484        call_ab_id, call_ac_id = self._test_volte_mo_mo_add_1x_swap_x(2)
6485        if call_ab_id is None or call_ac_id is None:
6486            return False
6487
6488        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6489            call_ab_id, call_ac_id)
6490
6491    @TelephonyBaseTest.tel_test_wrap
6492    @test_tracker_info(uuid="009b5b45-d863-4891-8403-06656b542f3d")
6493    def test_volte_mo_mt_add_1x_swap_once_merge_drop_second_call_from_participant_no_cep(
6494            self):
6495        """ Test swap and merge features in VoLTE call. No CEP.
6496
6497        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6498        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6499        Swap active call on PhoneA.
6500        On PhoneA, merge to conference call (No CEP).
6501        End call on PhoneC, verify call continues.
6502        End call on PhoneB, verify call end on PhoneA.
6503
6504        Returns:
6505            True if pass; False if fail.
6506        """
6507        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(1)
6508        if call_ab_id is None or call_ac_id is None:
6509            return False
6510
6511        return self._test_ims_conference_merge_drop_second_call_no_cep(
6512            call_ab_id, call_ac_id)
6513
6514    @TelephonyBaseTest.tel_test_wrap
6515    @test_tracker_info(uuid="8cfe9354-70db-4dbb-8950-b02e65f9d6ba")
6516    def test_volte_mo_mt_add_1x_swap_once_merge_drop_second_call_from_participant_cep(
6517            self):
6518        """ Test swap and merge features in VoLTE call. CEP enabled.
6519
6520        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6521        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6522        3. Swap active call on PhoneA.
6523        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6524        5. End call on PhoneC, verify call continues.
6525        6. End call on PhoneB, verify call end on PhoneA.
6526
6527        Returns:
6528            True if pass; False if fail.
6529        """
6530        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(1)
6531        if call_ab_id is None or call_ac_id is None:
6532            return False
6533
6534        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6535            call_ab_id, call_ac_id)
6536
6537    @TelephonyBaseTest.tel_test_wrap
6538    @test_tracker_info(uuid="d2502a9f-b35a-4390-b664-300b8310b55a")
6539    def test_volte_mo_mt_add_1x_swap_once_merge_drop_second_call_from_host_cep(
6540            self):
6541        """ Test swap and merge features in VoLTE call. CEP enabled.
6542
6543        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6544        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6545        3. Swap active call on PhoneA.
6546        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6547        5. On PhoneA disconnect call between A-C, verify call continues.
6548        6. On PhoneA disconnect call between A-B, verify call continues.
6549
6550        Returns:
6551            True if pass; False if fail.
6552        """
6553        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(1)
6554        if call_ab_id is None or call_ac_id is None:
6555            return False
6556
6557        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6558            call_ab_id, call_ac_id)
6559
6560    @TelephonyBaseTest.tel_test_wrap
6561    @test_tracker_info(uuid="1fbddcd1-2268-4c2c-a737-c0bcbdc842cb")
6562    def test_volte_mo_mt_add_1x_swap_once_merge_drop_first_call_from_participant_cep(
6563            self):
6564        """ Test swap and merge features in VoLTE call. CEP enabled.
6565
6566        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6567        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6568        3. Swap active call on PhoneA.
6569        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6570        5. End call on PhoneB, verify call continues.
6571        6. End call on PhoneC, verify call end on PhoneA.
6572
6573        Returns:
6574            True if pass; False if fail.
6575        """
6576        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(1)
6577        if call_ab_id is None or call_ac_id is None:
6578            return False
6579
6580        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6581            call_ab_id, call_ac_id)
6582
6583    @TelephonyBaseTest.tel_test_wrap
6584    @test_tracker_info(uuid="91a33ca8-508b-457e-a72f-6fabd00b2453")
6585    def test_volte_mo_mt_add_1x_swap_once_merge_drop_first_call_from_host_cep(
6586            self):
6587        """ Test swap and merge features in VoLTE call. CEP enabled.
6588
6589        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6590        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6591        3. Swap active call on PhoneA.
6592        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6593        5. On PhoneA disconnect call between A-B, verify call continues.
6594        6. On PhoneA disconnect call between A-C, verify call continues.
6595
6596        Returns:
6597            True if pass; False if fail.
6598        """
6599        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(1)
6600        if call_ab_id is None or call_ac_id is None:
6601            return False
6602
6603        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6604            call_ab_id, call_ac_id)
6605
6606    @TelephonyBaseTest.tel_test_wrap
6607    @test_tracker_info(uuid="3642995f-4de0-4327-86d6-c9e37416c7e7")
6608    def test_volte_mo_mt_add_1x_swap_twice_merge_drop_second_call_from_participant_no_cep(
6609            self):
6610        """ Test swap and merge features in VoLTE call. No CEP.
6611
6612        PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6613        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6614        Swap active call on PhoneA.
6615        Swap active call on PhoneA.
6616        On PhoneA, merge to conference call (No CEP).
6617        End call on PhoneC, verify call continues.
6618        End call on PhoneB, verify call end on PhoneA.
6619
6620        Returns:
6621            True if pass; False if fail.
6622        """
6623        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(2)
6624        if call_ab_id is None or call_ac_id is None:
6625            return False
6626
6627        return self._test_ims_conference_merge_drop_second_call_no_cep(
6628            call_ab_id, call_ac_id)
6629
6630    @TelephonyBaseTest.tel_test_wrap
6631    @test_tracker_info(uuid="dd11f3af-09af-4fa3-9c90-8497bbd8687e")
6632    def test_volte_mo_mt_add_1x_swap_twice_merge_drop_second_call_from_participant_cep(
6633            self):
6634        """ Test swap and merge features in VoLTE call. CEP enabled.
6635
6636        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6637        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6638        3. Swap active call on PhoneA.
6639        4. Swap active call on PhoneA.
6640        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6641        6. End call on PhoneC, verify call continues.
6642        7. End call on PhoneB, verify call end on PhoneA.
6643
6644        Returns:
6645            True if pass; False if fail.
6646        """
6647        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(2)
6648        if call_ab_id is None or call_ac_id is None:
6649            return False
6650
6651        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6652            call_ab_id, call_ac_id)
6653
6654    @TelephonyBaseTest.tel_test_wrap
6655    @test_tracker_info(uuid="172360a1-47b2-430a-8a9c-cae6d29813b6")
6656    def test_volte_mo_mt_add_1x_swap_twice_merge_drop_second_call_from_host_cep(
6657            self):
6658        """ Test swap and merge features in VoLTE call. CEP enabled.
6659
6660        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6661        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6662        3. Swap active call on PhoneA.
6663        4. Swap active call on PhoneA.
6664        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6665        6. On PhoneA disconnect call between A-C, verify call continues.
6666        7. On PhoneA disconnect call between A-B, verify call continues.
6667
6668        Returns:
6669            True if pass; False if fail.
6670        """
6671        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(2)
6672        if call_ab_id is None or call_ac_id is None:
6673            return False
6674
6675        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6676            call_ab_id, call_ac_id)
6677
6678    @TelephonyBaseTest.tel_test_wrap
6679    @test_tracker_info(uuid="05d63cef-45b6-47df-8999-aac2e6ecfc9f")
6680    def test_volte_mo_mt_add_1x_swap_twice_merge_drop_first_call_from_participant_cep(
6681            self):
6682        """ Test swap and merge features in VoLTE call. CEP enabled.
6683
6684        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6685        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6686        3. Swap active call on PhoneA.
6687        4. Swap active call on PhoneA.
6688        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6689        6. End call on PhoneB, verify call continues.
6690        7. End call on PhoneC, verify call end on PhoneA.
6691
6692        Returns:
6693            True if pass; False if fail.
6694        """
6695        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(2)
6696        if call_ab_id is None or call_ac_id is None:
6697            return False
6698
6699        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6700            call_ab_id, call_ac_id)
6701
6702    @TelephonyBaseTest.tel_test_wrap
6703    @test_tracker_info(uuid="e02dfbc5-ffa3-4bff-a45e-1b3f4147005e")
6704    def test_volte_mo_mt_add_1x_swap_twice_merge_drop_first_call_from_host_cep(
6705            self):
6706        """ Test swap and merge features in VoLTE call. CEP enabled.
6707
6708        1. PhoneA (VoLTE) call PhoneB (1x), accept on PhoneB.
6709        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6710        3. Swap active call on PhoneA.
6711        4. Swap active call on PhoneA.
6712        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6713        6. On PhoneA disconnect call between A-B, verify call continues.
6714        7. On PhoneA disconnect call between A-C, verify call continues.
6715
6716        Returns:
6717            True if pass; False if fail.
6718        """
6719        call_ab_id, call_ac_id = self._test_volte_mo_mt_add_1x_swap_x(2)
6720        if call_ab_id is None or call_ac_id is None:
6721            return False
6722
6723        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6724            call_ab_id, call_ac_id)
6725
6726    @TelephonyBaseTest.tel_test_wrap
6727    @test_tracker_info(uuid="55bb85a0-bfbd-4b97-bd94-871e82276875")
6728    def test_volte_mt_mt_add_1x_swap_once_merge_drop_second_call_from_participant_no_cep(
6729            self):
6730        """ Test swap and merge features in VoLTE call. No CEP.
6731
6732        PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6733        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6734        Swap active call on PhoneA.
6735        On PhoneA, merge to conference call (No CEP).
6736        End call on PhoneC, verify call continues.
6737        End call on PhoneB, verify call end on PhoneA.
6738
6739        Returns:
6740            True if pass; False if fail.
6741        """
6742        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(1)
6743        if call_ab_id is None or call_ac_id is None:
6744            return False
6745
6746        return self._test_ims_conference_merge_drop_second_call_no_cep(
6747            call_ab_id, call_ac_id)
6748
6749    @TelephonyBaseTest.tel_test_wrap
6750    @test_tracker_info(uuid="31e71818-3522-4e04-8f26-ad26683f16d1")
6751    def test_volte_mt_mt_add_1x_swap_once_merge_drop_second_call_from_participant_cep(
6752            self):
6753        """ Test swap and merge features in VoLTE call. CEP enabled.
6754
6755        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6756        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6757        3. Swap active call on PhoneA.
6758        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6759        5. End call on PhoneC, verify call continues.
6760        6. End call on PhoneB, verify call end on PhoneA.
6761
6762        Returns:
6763            True if pass; False if fail.
6764        """
6765        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(1)
6766        if call_ab_id is None or call_ac_id is None:
6767            return False
6768
6769        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6770            call_ab_id, call_ac_id)
6771
6772    @TelephonyBaseTest.tel_test_wrap
6773    @test_tracker_info(uuid="0b51183d-3f92-4fe8-9487-64a72696a838")
6774    def test_volte_mt_mt_add_1x_swap_once_merge_drop_second_call_from_host_cep(
6775            self):
6776        """ Test swap and merge features in VoLTE call. CEP enabled.
6777
6778        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6779        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6780        3. Swap active call on PhoneA.
6781        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6782        5. On PhoneA disconnect call between A-C, verify call continues.
6783        6. On PhoneA disconnect call between A-B, verify call continues.
6784
6785        Returns:
6786            True if pass; False if fail.
6787        """
6788        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(1)
6789        if call_ab_id is None or call_ac_id is None:
6790            return False
6791
6792        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6793            call_ab_id, call_ac_id)
6794
6795    @TelephonyBaseTest.tel_test_wrap
6796    @test_tracker_info(uuid="2aee2db7-fcd0-4b0a-aaa0-b946a14e91bd")
6797    def test_volte_mt_mt_add_1x_swap_once_merge_drop_first_call_from_participant_cep(
6798            self):
6799        """ Test swap and merge features in VoLTE call. CEP enabled.
6800
6801        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6802        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6803        3. Swap active call on PhoneA.
6804        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6805        5. End call on PhoneB, verify call continues.
6806        6. End call on PhoneC, verify call end on PhoneA.
6807
6808        Returns:
6809            True if pass; False if fail.
6810        """
6811        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(1)
6812        if call_ab_id is None or call_ac_id is None:
6813            return False
6814
6815        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6816            call_ab_id, call_ac_id)
6817
6818    @TelephonyBaseTest.tel_test_wrap
6819    @test_tracker_info(uuid="d78bbe8e-6d39-4843-9eaa-47f06b6e9a95")
6820    def test_volte_mt_mt_add_1x_swap_once_merge_drop_first_call_from_host_cep(
6821            self):
6822        """ Test swap and merge features in VoLTE call. CEP enabled.
6823
6824        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6825        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6826        3. Swap active call on PhoneA.
6827        4. On PhoneA, merge to conference call (VoLTE CEP conference call).
6828        5. On PhoneA disconnect call between A-B, verify call continues.
6829        6. On PhoneA disconnect call between A-C, verify call continues.
6830
6831        Returns:
6832            True if pass; False if fail.
6833        """
6834        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(1)
6835        if call_ab_id is None or call_ac_id is None:
6836            return False
6837
6838        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6839            call_ab_id, call_ac_id)
6840
6841    @TelephonyBaseTest.tel_test_wrap
6842    @test_tracker_info(uuid="bbf4dcd8-3e1d-4ad0-a4fd-bf875e409f15")
6843    def test_volte_mt_mt_add_1x_swap_twice_merge_drop_second_call_from_participant_no_cep(
6844            self):
6845        """ Test swap and merge features in VoLTE call. No CEP.
6846
6847        PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6848        PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6849        Swap active call on PhoneA.
6850        Swap active call on PhoneA.
6851        On PhoneA, merge to conference call (No CEP).
6852        End call on PhoneC, verify call continues.
6853        End call on PhoneB, verify call end on PhoneA.
6854
6855        Returns:
6856            True if pass; False if fail.
6857        """
6858        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(2)
6859        if call_ab_id is None or call_ac_id is None:
6860            return False
6861
6862        return self._test_ims_conference_merge_drop_second_call_no_cep(
6863            call_ab_id, call_ac_id)
6864
6865    @TelephonyBaseTest.tel_test_wrap
6866    @test_tracker_info(uuid="c222e199-497b-4c34-886d-b35592ccd3b2")
6867    def test_volte_mt_mt_add_1x_swap_twice_merge_drop_second_call_from_participant_cep(
6868            self):
6869        """ Test swap and merge features in VoLTE call. CEP enabled.
6870
6871        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6872        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6873        3. Swap active call on PhoneA.
6874        4. Swap active call on PhoneA.
6875        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6876        6. End call on PhoneC, verify call continues.
6877        7. End call on PhoneB, verify call end on PhoneA.
6878
6879        Returns:
6880            True if pass; False if fail.
6881        """
6882        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(2)
6883        if call_ab_id is None or call_ac_id is None:
6884            return False
6885
6886        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
6887            call_ab_id, call_ac_id)
6888
6889    @TelephonyBaseTest.tel_test_wrap
6890    @test_tracker_info(uuid="d916eef5-b942-48fe-9c63-be7e283b197d")
6891    def test_volte_mt_mt_add_1x_swap_twice_merge_drop_second_call_from_host_cep(
6892            self):
6893        """ Test swap and merge features in VoLTE call. CEP enabled.
6894
6895        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6896        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6897        3. Swap active call on PhoneA.
6898        4. Swap active call on PhoneA.
6899        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6900        6. On PhoneA disconnect call between A-C, verify call continues.
6901        7. On PhoneA disconnect call between A-B, verify call continues.
6902
6903        Returns:
6904            True if pass; False if fail.
6905        """
6906        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(2)
6907        if call_ab_id is None or call_ac_id is None:
6908            return False
6909
6910        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
6911            call_ab_id, call_ac_id)
6912
6913    @TelephonyBaseTest.tel_test_wrap
6914    @test_tracker_info(uuid="e34acc9d-4389-4bc3-b34d-6b7e8173cadf")
6915    def test_volte_mt_mt_add_1x_swap_twice_merge_drop_first_call_from_participant_cep(
6916            self):
6917        """ Test swap and merge features in VoLTE call. CEP enabled.
6918
6919        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6920        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6921        3. Swap active call on PhoneA.
6922        4. Swap active call on PhoneA.
6923        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6924        6. End call on PhoneB, verify call continues.
6925        7. End call on PhoneC, verify call end on PhoneA.
6926
6927        Returns:
6928            True if pass; False if fail.
6929        """
6930        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(2)
6931        if call_ab_id is None or call_ac_id is None:
6932            return False
6933
6934        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
6935            call_ab_id, call_ac_id)
6936
6937    @TelephonyBaseTest.tel_test_wrap
6938    @test_tracker_info(uuid="31ddc496-03a5-407f-b925-8cea04dbdae0")
6939    def test_volte_mt_mt_add_1x_swap_twice_merge_drop_first_call_from_host_cep(
6940            self):
6941        """ Test swap and merge features in VoLTE call. CEP enabled.
6942
6943        1. PhoneB (1x) call PhoneA (VoLTE), accept on PhoneA.
6944        2. PhoneC (1x) call PhoneA (VoLTE), accept on PhoneA.
6945        3. Swap active call on PhoneA.
6946        4. Swap active call on PhoneA.
6947        5. On PhoneA, merge to conference call (VoLTE CEP conference call).
6948        6. On PhoneA disconnect call between A-B, verify call continues.
6949        7. On PhoneA disconnect call between A-C, verify call continues.
6950
6951        Returns:
6952            True if pass; False if fail.
6953        """
6954        call_ab_id, call_ac_id = self._test_volte_mt_mt_add_1x_swap_x(2)
6955        if call_ab_id is None or call_ac_id is None:
6956            return False
6957
6958        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
6959            call_ab_id, call_ac_id)
6960
6961    @TelephonyBaseTest.tel_test_wrap
6962    @test_tracker_info(uuid="35b6fa0f-780f-4436-93a0-70f9b79bc71a")
6963    def test_csfb_wcdma_mo_mo_add_swap_once_merge_drop(self):
6964        """Test swap and merge feature in CSFB WCDMA call.
6965
6966        PhoneA (CSFB_WCDMA) call PhoneB, accept on PhoneB.
6967        PhoneA (CSFB_WCDMA) call PhoneC, accept on PhoneC.
6968        Swap active call on PhoneA.
6969        Merge calls to conference on PhoneA.
6970        Hangup on PhoneC, check call continues between AB.
6971        Hangup on PhoneB, check A ends.
6972
6973        """
6974        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(1)
6975        if call_ab_id is None or call_ac_id is None:
6976            return False
6977
6978        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
6979
6980    @TelephonyBaseTest.tel_test_wrap
6981    @test_tracker_info(uuid="9102ce81-0c17-4c7a-93df-f240245a07c5")
6982    def test_csfb_wcdma_mo_mo_add_swap_twice_merge_drop(self):
6983        """Test swap and merge feature in CSFB WCDMA call.
6984
6985        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
6986        PhoneA (CSFB WCDMA) call PhoneC, accept on PhoneC.
6987        Swap active call on PhoneA.
6988        Swap active call on PhoneA.
6989        Merge calls to conference on PhoneA.
6990        Hangup on PhoneC, check call continues between AB.
6991        Hangup on PhoneB, check A ends.
6992
6993        """
6994        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mo_add_swap_x(2)
6995        if call_ab_id is None or call_ac_id is None:
6996            return False
6997
6998        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
6999
7000    @TelephonyBaseTest.tel_test_wrap
7001    @test_tracker_info(uuid="b85ff5a7-f512-4585-a6b1-d92c9e7c25de")
7002    def test_csfb_wcdma_mo_mt_add_swap_once_merge_drop(self):
7003        """Test swap and merge feature in CSFB WCDMA call.
7004
7005        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
7006        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
7007        Swap active call on PhoneA.
7008        Merge calls to conference on PhoneA.
7009        Hangup on PhoneC, check call continues between AB.
7010        Hangup on PhoneB, check A ends.
7011
7012        """
7013        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(1)
7014        if call_ab_id is None or call_ac_id is None:
7015            return False
7016
7017        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7018
7019    @TelephonyBaseTest.tel_test_wrap
7020    @test_tracker_info(uuid="83a74ce1-9028-4e67-a417-599616ab0b2c")
7021    def test_csfb_wcdma_mo_mt_add_swap_twice_merge_drop(self):
7022        """Test swap and merge feature in CSFB WCDMA call.
7023
7024        PhoneA (CSFB WCDMA) call PhoneB, accept on PhoneB.
7025        PhoneC call PhoneA (CSFB WCDMA), accept on PhoneA.
7026        Swap active call on PhoneA.
7027        Swap active call on PhoneA.
7028        Merge calls to conference on PhoneA.
7029        Hangup on PhoneC, check call continues between AB.
7030        Hangup on PhoneB, check A ends.
7031
7032        """
7033        call_ab_id, call_ac_id = self._test_csfb_wcdma_mo_mt_add_swap_x(2)
7034        if call_ab_id is None or call_ac_id is None:
7035            return False
7036
7037        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7038
7039    @TelephonyBaseTest.tel_test_wrap
7040    @test_tracker_info(uuid="835fe3d6-4e44-451c-9c5f-277b8842bf10")
7041    def test_wcdma_mo_mo_add_swap_once_merge_drop(self):
7042        """Test swap and merge feature in WCDMA call.
7043
7044        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
7045        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
7046        Swap active call on PhoneA.
7047        Merge calls to conference on PhoneA.
7048        Hangup on PhoneC, check call continues between AB.
7049        Hangup on PhoneB, check A ends.
7050
7051        """
7052        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(1)
7053        if call_ab_id is None or call_ac_id is None:
7054            return False
7055
7056        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7057
7058    @TelephonyBaseTest.tel_test_wrap
7059    @test_tracker_info(uuid="627eb239-c6f6-47dc-b4cf-8d1796599417")
7060    def test_wcdma_mo_mo_add_swap_twice_merge_drop(self):
7061        """Test swap and merge feature in WCDMA call.
7062
7063        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
7064        PhoneA (WCDMA) call PhoneC, accept on PhoneC.
7065        Swap active call on PhoneA.
7066        Swap active call on PhoneA.
7067        Merge calls to conference on PhoneA.
7068        Hangup on PhoneC, check call continues between AB.
7069        Hangup on PhoneB, check A ends.
7070
7071        """
7072        call_ab_id, call_ac_id = self._test_wcdma_mo_mo_add_swap_x(2)
7073        if call_ab_id is None or call_ac_id is None:
7074            return False
7075
7076        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7077
7078    @TelephonyBaseTest.tel_test_wrap
7079    @test_tracker_info(uuid="571efb21-0ed5-4871-a7d8-f86d94e0ef25")
7080    def test_wcdma_mo_mt_add_swap_once_merge_drop(self):
7081        """Test swap and merge feature in WCDMA call.
7082
7083        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
7084        PhoneC call PhoneA (WCDMA), accept on PhoneA.
7085        Swap active call on PhoneA.
7086        Merge calls to conference on PhoneA.
7087        Hangup on PhoneC, check call continues between AB.
7088        Hangup on PhoneB, check A ends.
7089
7090        """
7091        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(1)
7092        if call_ab_id is None or call_ac_id is None:
7093            return False
7094
7095        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7096
7097    @TelephonyBaseTest.tel_test_wrap
7098    @test_tracker_info(uuid="c981a90a-19b8-4582-a07c-1e9447fbe9ae")
7099    def test_wcdma_mo_mt_add_swap_twice_merge_drop(self):
7100        """Test swap and merge feature in WCDMA call.
7101
7102        PhoneA (WCDMA) call PhoneB, accept on PhoneB.
7103        PhoneC call PhoneA (WCDMA), accept on PhoneA.
7104        Swap active call on PhoneA.
7105        Swap active call on PhoneA.
7106        Merge calls to conference on PhoneA.
7107        Hangup on PhoneC, check call continues between AB.
7108        Hangup on PhoneB, check A ends.
7109
7110        """
7111        call_ab_id, call_ac_id = self._test_wcdma_mo_mt_add_swap_x(2)
7112        if call_ab_id is None or call_ac_id is None:
7113            return False
7114
7115        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7116
7117    @TelephonyBaseTest.tel_test_wrap
7118    @test_tracker_info(uuid="23843881-320b-4071-bbc8-93cd1ee08408")
7119    def test_wcdma_mt_mt_add_swap_once_merge_drop(self):
7120        """Test swap and merge feature in WCDMA call.
7121
7122        PhoneB call PhoneA (WCDMA), accept on PhoneA.
7123        PhoneC call PhoneA (WCDMA), accept on PhoneA.
7124        Swap active call on PhoneA.
7125        Merge calls to conference on PhoneA.
7126        Hangup on PhoneC, check call continues between AB.
7127        Hangup on PhoneB, check A ends.
7128
7129        """
7130        call_ab_id, call_ac_id = self._test_wcdma_mt_mt_add_swap_x(1)
7131        if call_ab_id is None or call_ac_id is None:
7132            return False
7133
7134        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7135
7136    @TelephonyBaseTest.tel_test_wrap
7137    @test_tracker_info(uuid="e447ec45-016c-4723-a954-4bde2e342cb2")
7138    def test_wcdma_mt_mt_add_swap_twice_merge_drop(self):
7139        """Test swap and merge feature in WCDMA call.
7140
7141        PhoneB call PhoneA (WCDMA), accept on PhoneA.
7142        PhoneC call PhoneA (WCDMA), accept on PhoneA.
7143        Swap active call on PhoneA.
7144        Swap active call on PhoneA.
7145        Merge calls to conference on PhoneA.
7146        Hangup on PhoneC, check call continues between AB.
7147        Hangup on PhoneB, check A ends.
7148
7149        """
7150        call_ab_id, call_ac_id = self._test_wcdma_mt_mt_add_swap_x(2)
7151        if call_ab_id is None or call_ac_id is None:
7152            return False
7153
7154        return self._test_wcdma_conference_merge_drop(call_ab_id, call_ac_id)
7155
7156    @TelephonyBaseTest.tel_test_wrap
7157    @test_tracker_info(uuid="876dc6b2-75c2-4fb5-92a0-35d3d29fbd42")
7158    def test_wcdma_mt_mt_add_merge_unmerge_swap_drop(self):
7159        """Test Conference Call Unmerge operation.
7160
7161        Phones A, B, C are in WCDMA Conference call (MT-MT-Merge)
7162        Unmerge call with B on PhoneA
7163        Check the number of Call Ids to be 2 on PhoneA
7164        Check if call AB is active since 'B' was unmerged
7165        Swap call to C
7166        Check if call AC is active
7167        Tear down calls
7168        All Phones should be in Idle
7169
7170        """
7171        call_ab_id, call_ac_id = self._test_wcdma_mt_mt_add_swap_x(0)
7172        if call_ab_id is None or call_ac_id is None:
7173            self.log.error("Either of Call AB ID or Call AC ID is None.")
7174            return False
7175
7176        ads = self.android_devices
7177
7178        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
7179        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
7180        time.sleep(WAIT_TIME_IN_CALL)
7181        calls = ads[0].droid.telecomCallGetCallIds()
7182        ads[0].log.info("Calls in PhoneA %s", calls)
7183        if num_active_calls(self.log, ads[0]) != 3:
7184            ads[0].log.error("Total number of call ids is not 3.")
7185            return False
7186        call_conf_id = None
7187        for call_id in calls:
7188            if call_id != call_ab_id and call_id != call_ac_id:
7189                call_conf_id = call_id
7190        if not call_conf_id:
7191            self.log.error("Merge call fail, no new conference call id.")
7192            return False
7193        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
7194            return False
7195
7196        # Check if Conf Call currently active
7197        if ads[0].droid.telecomCallGetCallState(
7198                call_conf_id) != CALL_STATE_ACTIVE:
7199            ads[0].log.error(
7200                "Call_id: %s, state: %s, expected: STATE_ACTIVE", call_conf_id,
7201                ads[0].droid.telecomCallGetCallState(call_conf_id))
7202            return False
7203
7204        # Unmerge
7205        self.log.info("Step5: UnMerge Conf Call into individual participants.")
7206        ads[0].droid.telecomCallSplitFromConf(call_ab_id)
7207        time.sleep(WAIT_TIME_IN_CALL)
7208        calls = ads[0].droid.telecomCallGetCallIds()
7209        ads[0].log.info("Calls in PhoneA %s", calls)
7210
7211        # Are there 2 calls?
7212        if num_active_calls(self.log, ads[0]) != 2:
7213            ads[0].log.error("Total number of call ids is not 2")
7214            return False
7215
7216        # Unmerged calls not dropped?
7217        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
7218            self.log.error("Either Call_AB or Call_AC was dropped")
7219            return False
7220
7221        # Unmerged call in call state ACTIVE?
7222        if ads[0].droid.telecomCallGetCallState(
7223                call_ab_id) != CALL_STATE_ACTIVE:
7224            ads[0].log.error("Call_id: %s, state:%s, expected: STATE_ACTIVE",
7225                             call_ab_id,
7226                             ads[0].droid.telecomCallGetCallState(call_ab_id))
7227            return False
7228
7229        # Swap call
7230        self.log.info("Step6: Swap call and see if Call_AC is ACTIVE.")
7231        num_swaps = 1
7232        if not swap_calls(self.log, ads, call_ac_id, call_ab_id, num_swaps):
7233            self.log.error("Failed to swap calls.")
7234            return False
7235
7236        # Other call in call state ACTIVE?
7237        if ads[0].droid.telecomCallGetCallState(
7238                call_ac_id) != CALL_STATE_ACTIVE:
7239            ads[0].log.error("Call_id: %s, state: %s, expected: STATE_ACTIVE",
7240                             call_ac_id,
7241                             ads[0].droid.telecomCallGetCallState(call_ac_id))
7242            return False
7243
7244        # All calls still CONNECTED?
7245        return self._three_phone_hangup_call_verify_call_state(
7246            ad_hangup=ads[2],
7247            ad_verify=ads[0],
7248            call_id=call_ab_id,
7249            call_state=self._get_expected_call_state(ads[0]),
7250            ads_active=[ads[0], ads[1]])
7251
7252    @TelephonyBaseTest.tel_test_wrap
7253    @test_tracker_info(uuid="63da439e-23f3-4c3c-9e7e-3af6500342c5")
7254    def test_epdg_mo_mo_add_epdg_merge_drop_wfc_wifi_only(self):
7255        """ Test Conf Call among three phones.
7256
7257        Call from PhoneA (epdg) to PhoneB (epdg), accept on PhoneB.
7258        Call from PhoneA (epdg) to PhoneC (epdg), accept on PhoneC.
7259        On PhoneA, merge to conference call.
7260        End call on PhoneC, verify call continues.
7261        End call on PhoneB, verify call end on PhoneA.
7262
7263        Returns:
7264            True if pass; False if fail.
7265        """
7266        ads = self.android_devices
7267
7268        tasks = [(phone_setup_iwlan,
7269                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7270                   self.wifi_network_ssid, self.wifi_network_pass)),
7271                 (phone_setup_iwlan,
7272                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7273                   self.wifi_network_ssid, self.wifi_network_pass)),
7274                 (phone_setup_iwlan,
7275                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7276                   self.wifi_network_ssid, self.wifi_network_pass))]
7277        if not multithread_func(self.log, tasks):
7278            self.log.error("Phone Failed to Set Up Properly.")
7279            return False
7280
7281        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
7282        if call_ab_id is None or call_ac_id is None:
7283            return False
7284
7285        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7286
7287    @TelephonyBaseTest.tel_test_wrap
7288    @test_tracker_info(uuid="89b9f228-97a6-4e5c-96b9-a7f87d847c22")
7289    def test_epdg_mo_mo_add_epdg_merge_drop_wfc_wifi_preferred(self):
7290        """ Test Conf Call among three phones.
7291
7292        Call from PhoneA (epdg) to PhoneB (epdg), accept on PhoneB.
7293        Call from PhoneA (epdg) to PhoneC (epdg), accept on PhoneC.
7294        On PhoneA, merge to conference call.
7295        End call on PhoneC, verify call continues.
7296        End call on PhoneB, verify call end on PhoneA.
7297
7298        Returns:
7299            True if pass; False if fail.
7300        """
7301        ads = self.android_devices
7302
7303        tasks = [(phone_setup_iwlan,
7304                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7305                   self.wifi_network_ssid, self.wifi_network_pass)),
7306                 (phone_setup_iwlan,
7307                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
7308                   self.wifi_network_ssid, self.wifi_network_pass)),
7309                 (phone_setup_iwlan,
7310                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
7311                   self.wifi_network_ssid, self.wifi_network_pass))]
7312        if not multithread_func(self.log, tasks):
7313            self.log.error("Phone Failed to Set Up Properly.")
7314            return False
7315
7316        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
7317        if call_ab_id is None or call_ac_id is None:
7318            return False
7319
7320        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7321
7322    @TelephonyBaseTest.tel_test_wrap
7323    @test_tracker_info(uuid="2c6dc281-59b0-4ea4-b811-e4c3a4d654ab")
7324    def test_epdg_mo_mt_add_epdg_merge_drop_wfc_wifi_only(self):
7325        """ Test Conf Call among three phones.
7326
7327        Call from PhoneA (epdg) to PhoneB (epdg), accept on PhoneB.
7328        Call from PhoneC (epdg) to PhoneA (epdg), accept on PhoneA.
7329        On PhoneA, merge to conference call.
7330        End call on PhoneC, verify call continues.
7331        End call on PhoneB, verify call end on PhoneA.
7332
7333        Returns:
7334            True if pass; False if fail.
7335        """
7336        ads = self.android_devices
7337
7338        tasks = [(phone_setup_iwlan,
7339                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7340                   self.wifi_network_ssid, self.wifi_network_pass)),
7341                 (phone_setup_iwlan,
7342                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7343                   self.wifi_network_ssid, self.wifi_network_pass)),
7344                 (phone_setup_iwlan,
7345                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7346                   self.wifi_network_ssid, self.wifi_network_pass))]
7347        if not multithread_func(self.log, tasks):
7348            self.log.error("Phone Failed to Set Up Properly.")
7349            return False
7350
7351        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
7352        if call_ab_id is None or call_ac_id is None:
7353            return False
7354
7355        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7356
7357    @TelephonyBaseTest.tel_test_wrap
7358    @test_tracker_info(uuid="f6727241-b727-4eb8-8c0d-f61d3a14a635")
7359    def test_epdg_mo_mt_add_epdg_merge_drop_wfc_wifi_preferred(self):
7360        """ Test Conf Call among three phones.
7361
7362        Call from PhoneA (epdg) to PhoneB (epdg), accept on PhoneB.
7363        Call from PhoneC (epdg) to PhoneA (epdg), accept on PhoneA.
7364        On PhoneA, merge to conference call.
7365        End call on PhoneC, verify call continues.
7366        End call on PhoneB, verify call end on PhoneA.
7367
7368        Returns:
7369            True if pass; False if fail.
7370        """
7371        ads = self.android_devices
7372
7373        tasks = [(phone_setup_iwlan,
7374                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7375                   self.wifi_network_ssid, self.wifi_network_pass)),
7376                 (phone_setup_iwlan,
7377                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
7378                   self.wifi_network_ssid, self.wifi_network_pass)),
7379                 (phone_setup_iwlan,
7380                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
7381                   self.wifi_network_ssid, self.wifi_network_pass))]
7382        if not multithread_func(self.log, tasks):
7383            self.log.error("Phone Failed to Set Up Properly.")
7384            return False
7385
7386        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
7387        if call_ab_id is None or call_ac_id is None:
7388            return False
7389
7390        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7391
7392    @TelephonyBaseTest.tel_test_wrap
7393    @test_tracker_info(uuid="c9e54db0-2b0b-428b-ba63-619ad0b8637b")
7394    def test_epdg_mt_mt_add_epdg_merge_drop_wfc_wifi_only(self):
7395        """ Test Conf Call among three phones.
7396
7397        Call from PhoneB (epdg) to PhoneA (epdg), accept on PhoneA.
7398        Call from PhoneC (epdg) to PhoneA (epdg), accept on PhoneA.
7399        On PhoneA, merge to conference call.
7400        End call on PhoneC, verify call continues.
7401        End call on PhoneB, verify call end on PhoneA.
7402
7403        Returns:
7404            True if pass; False if fail.
7405        """
7406        ads = self.android_devices
7407
7408        tasks = [(phone_setup_iwlan,
7409                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7410                   self.wifi_network_ssid, self.wifi_network_pass)),
7411                 (phone_setup_iwlan,
7412                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7413                   self.wifi_network_ssid, self.wifi_network_pass)),
7414                 (phone_setup_iwlan,
7415                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7416                   self.wifi_network_ssid, self.wifi_network_pass))]
7417        if not multithread_func(self.log, tasks):
7418            self.log.error("Phone Failed to Set Up Properly.")
7419            return False
7420
7421        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
7422        if call_ab_id is None or call_ac_id is None:
7423            return False
7424
7425        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7426
7427    @TelephonyBaseTest.tel_test_wrap
7428    @test_tracker_info(uuid="a478cc82-d95c-43fc-9735-d8333b8937e2")
7429    def test_epdg_mt_mt_add_epdg_merge_drop_wfc_wifi_preferred(self):
7430        """ Test Conf Call among three phones.
7431
7432        Call from PhoneB (epdg) to PhoneA (epdg), accept on PhoneA.
7433        Call from PhoneC (epdg) to PhoneA (epdg), accept on PhoneA.
7434        On PhoneA, merge to conference call.
7435        End call on PhoneC, verify call continues.
7436        End call on PhoneB, verify call end on PhoneA.
7437
7438        Returns:
7439            True if pass; False if fail.
7440        """
7441        ads = self.android_devices
7442
7443        tasks = [(phone_setup_iwlan,
7444                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7445                   self.wifi_network_ssid, self.wifi_network_pass)),
7446                 (phone_setup_iwlan,
7447                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
7448                   self.wifi_network_ssid, self.wifi_network_pass)),
7449                 (phone_setup_iwlan,
7450                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
7451                   self.wifi_network_ssid, self.wifi_network_pass))]
7452        if not multithread_func(self.log, tasks):
7453            self.log.error("Phone Failed to Set Up Properly.")
7454            return False
7455
7456        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
7457        if call_ab_id is None or call_ac_id is None:
7458            return False
7459
7460        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7461
7462    @TelephonyBaseTest.tel_test_wrap
7463    @test_tracker_info(uuid="b1acb263-1481-44a5-b18e-58bdeff7bc1e")
7464    def test_epdg_mo_mo_add_volte_merge_drop_wfc_wifi_only(self):
7465        """ Test Conf Call among three phones.
7466
7467        Call from PhoneA (epdg) to PhoneB (VoLTE), accept on PhoneB.
7468        Call from PhoneA (epdg) to PhoneC (VoLTE), accept on PhoneC.
7469        On PhoneA, merge to conference call.
7470        End call on PhoneC, verify call continues.
7471        End call on PhoneB, verify call end on PhoneA.
7472
7473        Returns:
7474            True if pass; False if fail.
7475        """
7476        ads = self.android_devices
7477
7478        tasks = [(phone_setup_iwlan,
7479                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7480                   self.wifi_network_ssid, self.wifi_network_pass)),
7481                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
7482                                                           (self.log, ads[2]))]
7483        if not multithread_func(self.log, tasks):
7484            self.log.error("Phone Failed to Set Up Properly.")
7485            return False
7486
7487        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(0)
7488        if call_ab_id is None or call_ac_id is None:
7489            return False
7490
7491        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7492
7493    @TelephonyBaseTest.tel_test_wrap
7494    @test_tracker_info(uuid="03b8a0d2-80dd-465a-ad14-5db94cdbcc53")
7495    def test_epdg_mo_mo_add_volte_merge_drop_wfc_wifi_preferred(self):
7496        """ Test Conf Call among three phones.
7497
7498        Call from PhoneA (epdg) to PhoneB (VoLTE), accept on PhoneB.
7499        Call from PhoneA (epdg) to PhoneC (VoLTE), accept on PhoneC.
7500        On PhoneA, merge to conference call.
7501        End call on PhoneC, verify call continues.
7502        End call on PhoneB, verify call end on PhoneA.
7503
7504        Returns:
7505            True if pass; False if fail.
7506        """
7507        ads = self.android_devices
7508
7509        tasks = [(phone_setup_iwlan,
7510                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7511                   self.wifi_network_ssid, self.wifi_network_pass)),
7512                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
7513                                                           (self.log, ads[2]))]
7514        if not multithread_func(self.log, tasks):
7515            self.log.error("Phone Failed to Set Up Properly.")
7516            return False
7517
7518        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(0)
7519        if call_ab_id is None or call_ac_id is None:
7520            return False
7521
7522        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7523
7524    @TelephonyBaseTest.tel_test_wrap
7525    @test_tracker_info(uuid="9eb1a816-1e2c-41da-b083-2026163a3893")
7526    def test_epdg_mo_mt_add_volte_merge_drop_wfc_wifi_only(self):
7527        """ Test Conf Call among three phones.
7528
7529        Call from PhoneA (epdg) to PhoneB (VoLTE), accept on PhoneB.
7530        Call from PhoneC (VoLTE) to PhoneA (epdg), accept on PhoneA.
7531        On PhoneA, merge to conference call.
7532        End call on PhoneC, verify call continues.
7533        End call on PhoneB, verify call end on PhoneA.
7534
7535        Returns:
7536            True if pass; False if fail.
7537        """
7538        ads = self.android_devices
7539
7540        tasks = [(phone_setup_iwlan,
7541                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7542                   self.wifi_network_ssid, self.wifi_network_pass)),
7543                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
7544                                                           (self.log, ads[2]))]
7545        if not multithread_func(self.log, tasks):
7546            self.log.error("Phone Failed to Set Up Properly.")
7547            return False
7548
7549        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(0)
7550        if call_ab_id is None or call_ac_id is None:
7551            return False
7552
7553        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7554
7555    @TelephonyBaseTest.tel_test_wrap
7556    @test_tracker_info(uuid="3d66a1b6-916f-4221-bd99-21ff4d40ebb8")
7557    def test_epdg_mo_mt_add_volte_merge_drop_wfc_wifi_preferred(self):
7558        """ Test Conf Call among three phones.
7559
7560        Call from PhoneA (epdg) to PhoneB (VoLTE), accept on PhoneB.
7561        Call from PhoneC (VoLTE) to PhoneA (epdg), accept on PhoneA.
7562        On PhoneA, merge to conference call.
7563        End call on PhoneC, verify call continues.
7564        End call on PhoneB, verify call end on PhoneA.
7565
7566        Returns:
7567            True if pass; False if fail.
7568        """
7569        ads = self.android_devices
7570
7571        tasks = [(phone_setup_iwlan,
7572                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7573                   self.wifi_network_ssid, self.wifi_network_pass)),
7574                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
7575                                                           (self.log, ads[2]))]
7576        if not multithread_func(self.log, tasks):
7577            self.log.error("Phone Failed to Set Up Properly.")
7578            return False
7579
7580        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(0)
7581        if call_ab_id is None or call_ac_id is None:
7582            return False
7583
7584        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7585
7586    @TelephonyBaseTest.tel_test_wrap
7587    @test_tracker_info(uuid="9d8e8b2f-e2b9-4607-8c54-6233b3096123")
7588    def test_epdg_mo_mo_add_wcdma_merge_drop_wfc_wifi_only(self):
7589        """ Test Conf Call among three phones.
7590
7591        Call from PhoneA (epdg) to PhoneB (WCDMA), accept on PhoneB.
7592        Call from PhoneA (epdg) to PhoneC (WCDMA), accept on PhoneC.
7593        On PhoneA, merge to conference call.
7594        End call on PhoneC, verify call continues.
7595        End call on PhoneB, verify call end on PhoneA.
7596
7597        Returns:
7598            True if pass; False if fail.
7599        """
7600        ads = self.android_devices
7601
7602        tasks = [(phone_setup_iwlan,
7603                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7604                   self.wifi_network_ssid, self.wifi_network_pass)),
7605                 (phone_setup_voice_3g, (self.log, ads[1])),
7606                 (phone_setup_voice_3g, (self.log, ads[2]))]
7607        if not multithread_func(self.log, tasks):
7608            self.log.error("Phone Failed to Set Up Properly.")
7609            return False
7610
7611        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(0)
7612        if call_ab_id is None or call_ac_id is None:
7613            return False
7614
7615        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7616
7617    @TelephonyBaseTest.tel_test_wrap
7618    @test_tracker_info(uuid="0884206b-2471-4a7e-95aa-228379416ff8")
7619    def test_epdg_mo_mo_add_wcdma_merge_drop_wfc_wifi_preferred(self):
7620        """ Test Conf Call among three phones.
7621
7622        Call from PhoneA (epdg) to PhoneB (WCDMA), accept on PhoneB.
7623        Call from PhoneA (epdg) to PhoneC (WCDMA), accept on PhoneC.
7624        On PhoneA, merge to conference call.
7625        End call on PhoneC, verify call continues.
7626        End call on PhoneB, verify call end on PhoneA.
7627
7628        Returns:
7629            True if pass; False if fail.
7630        """
7631        ads = self.android_devices
7632
7633        tasks = [(phone_setup_iwlan,
7634                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7635                   self.wifi_network_ssid, self.wifi_network_pass)),
7636                 (phone_setup_voice_3g, (self.log, ads[1])),
7637                 (phone_setup_voice_3g, (self.log, ads[2]))]
7638        if not multithread_func(self.log, tasks):
7639            self.log.error("Phone Failed to Set Up Properly.")
7640            return False
7641
7642        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(0)
7643        if call_ab_id is None or call_ac_id is None:
7644            return False
7645
7646        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7647
7648    @TelephonyBaseTest.tel_test_wrap
7649    @test_tracker_info(uuid="c7706af6-dc77-4002-b295-66c60aeace6b")
7650    def test_epdg_mo_mt_add_wcdma_merge_drop_wfc_wifi_only(self):
7651        """ Test Conf Call among three phones.
7652
7653        Call from PhoneA (epdg) to PhoneB (WCDMA), accept on PhoneB.
7654        Call from PhoneC (WCDMA) to PhoneA (epdg), accept on PhoneA.
7655        On PhoneA, merge to conference call.
7656        End call on PhoneC, verify call continues.
7657        End call on PhoneB, verify call end on PhoneA.
7658
7659        Returns:
7660            True if pass; False if fail.
7661        """
7662        ads = self.android_devices
7663
7664        tasks = [(phone_setup_iwlan,
7665                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7666                   self.wifi_network_ssid, self.wifi_network_pass)),
7667                 (phone_setup_voice_3g, (self.log, ads[1])),
7668                 (phone_setup_voice_3g, (self.log, ads[2]))]
7669        if not multithread_func(self.log, tasks):
7670            self.log.error("Phone Failed to Set Up Properly.")
7671            return False
7672
7673        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(0)
7674        if call_ab_id is None or call_ac_id is None:
7675            return False
7676
7677        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7678
7679    @TelephonyBaseTest.tel_test_wrap
7680    @test_tracker_info(uuid="b079618f-e32b-4ba0-9009-06e013805c39")
7681    def test_epdg_mo_mt_add_wcdma_merge_drop_wfc_wifi_preferred(self):
7682        """ Test Conf Call among three phones.
7683
7684        Call from PhoneA (epdg) to PhoneB (WCDMA), accept on PhoneB.
7685        Call from PhoneC (WCDMA) to PhoneA (epdg), accept on PhoneA.
7686        On PhoneA, merge to conference call.
7687        End call on PhoneC, verify call continues.
7688        End call on PhoneB, verify call end on PhoneA.
7689
7690        Returns:
7691            True if pass; False if fail.
7692        """
7693        ads = self.android_devices
7694
7695        tasks = [(phone_setup_iwlan,
7696                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7697                   self.wifi_network_ssid, self.wifi_network_pass)),
7698                 (phone_setup_voice_3g, (self.log, ads[1])),
7699                 (phone_setup_voice_3g, (self.log, ads[2]))]
7700        if not multithread_func(self.log, tasks):
7701            self.log.error("Phone Failed to Set Up Properly.")
7702            return False
7703
7704        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(0)
7705        if call_ab_id is None or call_ac_id is None:
7706            return False
7707
7708        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7709
7710    @TelephonyBaseTest.tel_test_wrap
7711    @test_tracker_info(uuid="571fe98b-354f-4038-8441-0e4b1840eb7a")
7712    def test_epdg_mo_mo_add_1x_merge_drop_wfc_wifi_only(self):
7713        """ Test Conf Call among three phones.
7714
7715        Call from PhoneA (epdg) to PhoneB (1x), accept on PhoneB.
7716        Call from PhoneA (epdg) to PhoneC (1x), accept on PhoneC.
7717        On PhoneA, merge to conference call.
7718        End call on PhoneC, verify call continues.
7719        End call on PhoneB, verify call end on PhoneA.
7720
7721        Returns:
7722            True if pass; False if fail.
7723        """
7724        ads = self.android_devices
7725
7726        tasks = [(phone_setup_iwlan,
7727                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7728                   self.wifi_network_ssid, self.wifi_network_pass)),
7729                 (phone_setup_voice_3g, (self.log, ads[1])),
7730                 (phone_setup_voice_3g, (self.log, ads[2]))]
7731        if not multithread_func(self.log, tasks):
7732            self.log.error("Phone Failed to Set Up Properly.")
7733            return False
7734
7735        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(0)
7736        if call_ab_id is None or call_ac_id is None:
7737            return False
7738
7739        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7740
7741    @TelephonyBaseTest.tel_test_wrap
7742    @test_tracker_info(uuid="8f531f3c-493e-43d6-9d6d-f4990b5feba4")
7743    def test_epdg_mo_mo_add_1x_merge_drop_wfc_wifi_preferred(self):
7744        """ Test Conf Call among three phones.
7745
7746        Call from PhoneA (epdg) to PhoneB (1x), accept on PhoneB.
7747        Call from PhoneA (epdg) to PhoneC (1x), accept on PhoneC.
7748        On PhoneA, merge to conference call.
7749        End call on PhoneC, verify call continues.
7750        End call on PhoneB, verify call end on PhoneA.
7751
7752        Returns:
7753            True if pass; False if fail.
7754        """
7755        ads = self.android_devices
7756
7757        tasks = [(phone_setup_iwlan,
7758                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7759                   self.wifi_network_ssid, self.wifi_network_pass)),
7760                 (phone_setup_voice_3g, (self.log, ads[1])),
7761                 (phone_setup_voice_3g, (self.log, ads[2]))]
7762        if not multithread_func(self.log, tasks):
7763            self.log.error("Phone Failed to Set Up Properly.")
7764            return False
7765
7766        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(0)
7767        if call_ab_id is None or call_ac_id is None:
7768            return False
7769
7770        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7771
7772    @TelephonyBaseTest.tel_test_wrap
7773    @test_tracker_info(uuid="00e1194b-3c06-46c4-8764-0339c0aa9f9e")
7774    def test_epdg_mo_mt_add_1x_merge_drop_wfc_wifi_only(self):
7775        """ Test Conf Call among three phones.
7776
7777        Call from PhoneA (epdg) to PhoneB (1x), accept on PhoneB.
7778        Call from PhoneC (1x) to PhoneA (epdg), accept on PhoneA.
7779        On PhoneA, merge to conference call.
7780        End call on PhoneC, verify call continues.
7781        End call on PhoneB, verify call end on PhoneA.
7782
7783        Returns:
7784            True if pass; False if fail.
7785        """
7786        ads = self.android_devices
7787
7788        tasks = [(phone_setup_iwlan,
7789                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7790                   self.wifi_network_ssid, self.wifi_network_pass)),
7791                 (phone_setup_voice_3g, (self.log, ads[1])),
7792                 (phone_setup_voice_3g, (self.log, ads[2]))]
7793        if not multithread_func(self.log, tasks):
7794            self.log.error("Phone Failed to Set Up Properly.")
7795            return False
7796
7797        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(0)
7798        if call_ab_id is None or call_ac_id is None:
7799            return False
7800
7801        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7802
7803    @TelephonyBaseTest.tel_test_wrap
7804    @test_tracker_info(uuid="c94f6444-d265-4277-9555-57041e3c4ff4")
7805    def test_epdg_mo_mt_add_1x_merge_drop_wfc_wifi_preferred(self):
7806        """ Test Conf Call among three phones.
7807
7808        Call from PhoneA (epdg) to PhoneB (1x), accept on PhoneB.
7809        Call from PhoneC (1x) to PhoneA (epdg), accept on PhoneA.
7810        On PhoneA, merge to conference call.
7811        End call on PhoneC, verify call continues.
7812        End call on PhoneB, verify call end on PhoneA.
7813
7814        Returns:
7815            True if pass; False if fail.
7816        """
7817        ads = self.android_devices
7818
7819        tasks = [(phone_setup_iwlan,
7820                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7821                   self.wifi_network_ssid, self.wifi_network_pass)),
7822                 (phone_setup_voice_3g, (self.log, ads[1])),
7823                 (phone_setup_voice_3g, (self.log, ads[2]))]
7824        if not multithread_func(self.log, tasks):
7825            self.log.error("Phone Failed to Set Up Properly.")
7826            return False
7827
7828        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(0)
7829        if call_ab_id is None or call_ac_id is None:
7830            return False
7831
7832        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7833
7834    @TelephonyBaseTest.tel_test_wrap
7835    @test_tracker_info(uuid="0980745e-dcdc-4c56-84e3-e2ee076059ee")
7836    def test_epdg_mo_mo_add_epdg_swap_once_merge_drop_wfc_wifi_only(self):
7837        """Test swap and merge feature in epdg call.
7838
7839        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
7840        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
7841        Swap active call on PhoneA.
7842        Merge calls to conference on PhoneA.
7843        Hangup on PhoneC, check call continues between AB.
7844        Hangup on PhoneB, check A ends.
7845
7846        """
7847        ads = self.android_devices
7848
7849        tasks = [(phone_setup_iwlan,
7850                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7851                   self.wifi_network_ssid, self.wifi_network_pass)),
7852                 (phone_setup_iwlan,
7853                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7854                   self.wifi_network_ssid, self.wifi_network_pass)),
7855                 (phone_setup_iwlan,
7856                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7857                   self.wifi_network_ssid, self.wifi_network_pass))]
7858        if not multithread_func(self.log, tasks):
7859            self.log.error("Phone Failed to Set Up Properly.")
7860            return False
7861
7862        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
7863        if call_ab_id is None or call_ac_id is None:
7864            return False
7865
7866        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7867
7868    @TelephonyBaseTest.tel_test_wrap
7869    @test_tracker_info(uuid="6bf0b152-fb1c-4edc-9525-b39e8640b967")
7870    def test_epdg_mo_mo_add_epdg_swap_once_merge_drop_wfc_wifi_preferred(self):
7871        """Test swap and merge feature in epdg call.
7872
7873        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
7874        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
7875        Swap active call on PhoneA.
7876        Merge calls to conference on PhoneA.
7877        Hangup on PhoneC, check call continues between AB.
7878        Hangup on PhoneB, check A ends.
7879
7880        """
7881        ads = self.android_devices
7882
7883        tasks = [(phone_setup_iwlan,
7884                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7885                   self.wifi_network_ssid, self.wifi_network_pass)),
7886                 (phone_setup_iwlan,
7887                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
7888                   self.wifi_network_ssid, self.wifi_network_pass)),
7889                 (phone_setup_iwlan,
7890                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
7891                   self.wifi_network_ssid, self.wifi_network_pass))]
7892        if not multithread_func(self.log, tasks):
7893            self.log.error("Phone Failed to Set Up Properly.")
7894            return False
7895
7896        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
7897        if call_ab_id is None or call_ac_id is None:
7898            return False
7899
7900        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7901
7902    @TelephonyBaseTest.tel_test_wrap
7903    @test_tracker_info(uuid="e3013df6-98ca-4318-85ba-04011ba0a24f")
7904    def test_epdg_mo_mo_add_epdg_swap_twice_merge_drop_wfc_wifi_only(self):
7905        """Test swap and merge feature in epdg call.
7906
7907        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
7908        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
7909        Swap active call on PhoneA.
7910        Swap active call on PhoneA.
7911        Merge calls to conference on PhoneA.
7912        Hangup on PhoneC, check call continues between AB.
7913        Hangup on PhoneB, check A ends.
7914
7915        """
7916        ads = self.android_devices
7917
7918        tasks = [(phone_setup_iwlan,
7919                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7920                   self.wifi_network_ssid, self.wifi_network_pass)),
7921                 (phone_setup_iwlan,
7922                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7923                   self.wifi_network_ssid, self.wifi_network_pass)),
7924                 (phone_setup_iwlan,
7925                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7926                   self.wifi_network_ssid, self.wifi_network_pass))]
7927        if not multithread_func(self.log, tasks):
7928            self.log.error("Phone Failed to Set Up Properly.")
7929            return False
7930
7931        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
7932        if call_ab_id is None or call_ac_id is None:
7933            return False
7934
7935        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7936
7937    @TelephonyBaseTest.tel_test_wrap
7938    @test_tracker_info(uuid="e88bf042-8799-44c7-bc50-66ac1e1fb2ac")
7939    def test_epdg_mo_mo_add_epdg_swap_twice_merge_drop_wfc_wifi_preferred(
7940            self):
7941        """Test swap and merge feature in epdg call.
7942
7943        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
7944        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
7945        Swap active call on PhoneA.
7946        Swap active call on PhoneA.
7947        Merge calls to conference on PhoneA.
7948        Hangup on PhoneC, check call continues between AB.
7949        Hangup on PhoneB, check A ends.
7950
7951        """
7952        ads = self.android_devices
7953
7954        tasks = [(phone_setup_iwlan,
7955                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
7956                   self.wifi_network_ssid, self.wifi_network_pass)),
7957                 (phone_setup_iwlan,
7958                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
7959                   self.wifi_network_ssid, self.wifi_network_pass)),
7960                 (phone_setup_iwlan,
7961                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
7962                   self.wifi_network_ssid, self.wifi_network_pass))]
7963        if not multithread_func(self.log, tasks):
7964            self.log.error("Phone Failed to Set Up Properly.")
7965            return False
7966
7967        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
7968        if call_ab_id is None or call_ac_id is None:
7969            return False
7970
7971        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
7972
7973    @TelephonyBaseTest.tel_test_wrap
7974    @test_tracker_info(uuid="a8302e73-82a4-4409-b038-5c604fb4c66c")
7975    def test_epdg_mo_mt_add_epdg_swap_once_merge_drop_wfc_wifi_only(self):
7976        """Test swap and merge feature in epdg call.
7977
7978        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
7979        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
7980        Swap active call on PhoneA.
7981        Merge calls to conference on PhoneA.
7982        Hangup on PhoneC, check call continues between AB.
7983        Hangup on PhoneB, check A ends.
7984
7985        """
7986        ads = self.android_devices
7987
7988        tasks = [(phone_setup_iwlan,
7989                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
7990                   self.wifi_network_ssid, self.wifi_network_pass)),
7991                 (phone_setup_iwlan,
7992                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
7993                   self.wifi_network_ssid, self.wifi_network_pass)),
7994                 (phone_setup_iwlan,
7995                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
7996                   self.wifi_network_ssid, self.wifi_network_pass))]
7997        if not multithread_func(self.log, tasks):
7998            self.log.error("Phone Failed to Set Up Properly.")
7999            return False
8000
8001        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
8002        if call_ab_id is None or call_ac_id is None:
8003            return False
8004
8005        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8006
8007    @TelephonyBaseTest.tel_test_wrap
8008    @test_tracker_info(uuid="80f69baf-1649-4858-b35c-b25baf79b42c")
8009    def test_epdg_mo_mt_add_epdg_swap_once_merge_drop_wfc_wifi_preferred(self):
8010        """Test swap and merge feature in epdg call.
8011
8012        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8013        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
8014        Swap active call on PhoneA.
8015        Merge calls to conference on PhoneA.
8016        Hangup on PhoneC, check call continues between AB.
8017        Hangup on PhoneB, check A ends.
8018
8019        """
8020        ads = self.android_devices
8021
8022        tasks = [(phone_setup_iwlan,
8023                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8024                   self.wifi_network_ssid, self.wifi_network_pass)),
8025                 (phone_setup_iwlan,
8026                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
8027                   self.wifi_network_ssid, self.wifi_network_pass)),
8028                 (phone_setup_iwlan,
8029                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
8030                   self.wifi_network_ssid, self.wifi_network_pass))]
8031        if not multithread_func(self.log, tasks):
8032            self.log.error("Phone Failed to Set Up Properly.")
8033            return False
8034
8035        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
8036        if call_ab_id is None or call_ac_id is None:
8037            return False
8038
8039        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8040
8041    @TelephonyBaseTest.tel_test_wrap
8042    @test_tracker_info(uuid="1ac0c067-49fb-41d9-8649-cc709bdd8926")
8043    def test_epdg_mo_mt_add_epdg_swap_twice_merge_drop_wfc_wifi_only(self):
8044        """Test swap and merge feature in epdg call.
8045
8046        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8047        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
8048        Swap active call on PhoneA.
8049        Swap active call on PhoneA.
8050        Merge calls to conference on PhoneA.
8051        Hangup on PhoneC, check call continues between AB.
8052        Hangup on PhoneB, check A ends.
8053
8054        """
8055        ads = self.android_devices
8056
8057        tasks = [(phone_setup_iwlan,
8058                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8059                   self.wifi_network_ssid, self.wifi_network_pass)),
8060                 (phone_setup_iwlan,
8061                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
8062                   self.wifi_network_ssid, self.wifi_network_pass)),
8063                 (phone_setup_iwlan,
8064                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
8065                   self.wifi_network_ssid, self.wifi_network_pass))]
8066        if not multithread_func(self.log, tasks):
8067            self.log.error("Phone Failed to Set Up Properly.")
8068            return False
8069
8070        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
8071        if call_ab_id is None or call_ac_id is None:
8072            return False
8073
8074        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8075
8076    @TelephonyBaseTest.tel_test_wrap
8077    @test_tracker_info(uuid="b20b1a94-048c-4f10-9261-dde79e1edb00")
8078    def test_epdg_mo_mt_add_epdg_swap_twice_merge_drop_wfc_wifi_preferred(
8079            self):
8080        """Test swap and merge feature in epdg call.
8081
8082        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8083        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
8084        Swap active call on PhoneA.
8085        Swap active call on PhoneA.
8086        Merge calls to conference on PhoneA.
8087        Hangup on PhoneC, check call continues between AB.
8088        Hangup on PhoneB, check A ends.
8089
8090        """
8091        ads = self.android_devices
8092
8093        tasks = [(phone_setup_iwlan,
8094                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8095                   self.wifi_network_ssid, self.wifi_network_pass)),
8096                 (phone_setup_iwlan,
8097                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
8098                   self.wifi_network_ssid, self.wifi_network_pass)),
8099                 (phone_setup_iwlan,
8100                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
8101                   self.wifi_network_ssid, self.wifi_network_pass))]
8102        if not multithread_func(self.log, tasks):
8103            self.log.error("Phone Failed to Set Up Properly.")
8104            return False
8105
8106        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
8107        if call_ab_id is None or call_ac_id is None:
8108            return False
8109
8110        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8111
8112    @TelephonyBaseTest.tel_test_wrap
8113    @test_tracker_info(uuid="402b175f-1510-4e2a-97c2-7c9ea5ce40f6")
8114    def test_epdg_mo_mo_add_volte_swap_once_merge_drop_wfc_wifi_only(self):
8115        """Test swap and merge feature in epdg call.
8116
8117        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8118        PhoneA (epdg) call PhoneC (VoLTE), accept on PhoneC.
8119        Swap active call on PhoneA.
8120        Merge calls to conference on PhoneA.
8121        Hangup on PhoneC, check call continues between AB.
8122        Hangup on PhoneB, check A ends.
8123
8124        """
8125        ads = self.android_devices
8126
8127        tasks = [(phone_setup_iwlan,
8128                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8129                   self.wifi_network_ssid, self.wifi_network_pass)),
8130                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8131                                                           (self.log, ads[2]))]
8132        if not multithread_func(self.log, tasks):
8133            self.log.error("Phone Failed to Set Up Properly.")
8134            return False
8135
8136        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(1)
8137        if call_ab_id is None or call_ac_id is None:
8138            return False
8139
8140        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8141
8142    @TelephonyBaseTest.tel_test_wrap
8143    @test_tracker_info(uuid="7c710fbf-4b77-4b46-9719-e17b3d047cfc")
8144    def test_epdg_mo_mo_add_volte_swap_once_merge_drop_wfc_wifi_preferred(
8145            self):
8146        """Test swap and merge feature in epdg call.
8147
8148        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8149        PhoneA (epdg) call PhoneC (VoLTE), accept on PhoneC.
8150        Swap active call on PhoneA.
8151        Merge calls to conference on PhoneA.
8152        Hangup on PhoneC, check call continues between AB.
8153        Hangup on PhoneB, check A ends.
8154
8155        """
8156        ads = self.android_devices
8157
8158        tasks = [(phone_setup_iwlan,
8159                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8160                   self.wifi_network_ssid, self.wifi_network_pass)),
8161                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8162                                                           (self.log, ads[2]))]
8163        if not multithread_func(self.log, tasks):
8164            self.log.error("Phone Failed to Set Up Properly.")
8165            return False
8166
8167        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(1)
8168        if call_ab_id is None or call_ac_id is None:
8169            return False
8170
8171        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8172
8173    @TelephonyBaseTest.tel_test_wrap
8174    @test_tracker_info(uuid="642afbac-30c1-4dbf-bf3e-758ab6c3a306")
8175    def test_epdg_mo_mo_add_volte_swap_twice_merge_drop_wfc_wifi_only(self):
8176        """Test swap and merge feature in epdg call.
8177
8178        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8179        PhoneA (epdg) call PhoneC (VoLTE), accept on PhoneC.
8180        Swap active call on PhoneA.
8181        Swap active call on PhoneA.
8182        Merge calls to conference on PhoneA.
8183        Hangup on PhoneC, check call continues between AB.
8184        Hangup on PhoneB, check A ends.
8185
8186        """
8187        ads = self.android_devices
8188
8189        tasks = [(phone_setup_iwlan,
8190                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8191                   self.wifi_network_ssid, self.wifi_network_pass)),
8192                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8193                                                           (self.log, ads[2]))]
8194        if not multithread_func(self.log, tasks):
8195            self.log.error("Phone Failed to Set Up Properly.")
8196            return False
8197
8198        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(2)
8199        if call_ab_id is None or call_ac_id is None:
8200            return False
8201
8202        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8203
8204    @TelephonyBaseTest.tel_test_wrap
8205    @test_tracker_info(uuid="a4ae1e39-ed6d-412e-b821-321c715a5d47")
8206    def test_epdg_mo_mo_add_volte_swap_twice_merge_drop_wfc_wifi_preferred(
8207            self):
8208        """Test swap and merge feature in epdg call.
8209
8210        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8211        PhoneA (epdg) call PhoneC (VoLTE), accept on PhoneC.
8212        Swap active call on PhoneA.
8213        Swap active call on PhoneA.
8214        Merge calls to conference on PhoneA.
8215        Hangup on PhoneC, check call continues between AB.
8216        Hangup on PhoneB, check A ends.
8217
8218        """
8219        ads = self.android_devices
8220
8221        tasks = [(phone_setup_iwlan,
8222                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8223                   self.wifi_network_ssid, self.wifi_network_pass)),
8224                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8225                                                           (self.log, ads[2]))]
8226        if not multithread_func(self.log, tasks):
8227            self.log.error("Phone Failed to Set Up Properly.")
8228            return False
8229
8230        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_volte_swap_x(2)
8231        if call_ab_id is None or call_ac_id is None:
8232            return False
8233
8234        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8235
8236    @TelephonyBaseTest.tel_test_wrap
8237    @test_tracker_info(uuid="7b8431f2-8a49-4aa9-b84d-77f16a6a2c30")
8238    def test_epdg_mo_mt_add_volte_swap_once_merge_drop_wfc_wifi_only(self):
8239        """Test swap and merge feature in epdg call.
8240
8241        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8242        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
8243        Swap active call on PhoneA.
8244        Merge calls to conference on PhoneA.
8245        Hangup on PhoneC, check call continues between AB.
8246        Hangup on PhoneB, check A ends.
8247
8248        """
8249        ads = self.android_devices
8250
8251        tasks = [(phone_setup_iwlan,
8252                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8253                   self.wifi_network_ssid, self.wifi_network_pass)),
8254                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8255                                                           (self.log, ads[2]))]
8256        if not multithread_func(self.log, tasks):
8257            self.log.error("Phone Failed to Set Up Properly.")
8258            return False
8259
8260        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(1)
8261        if call_ab_id is None or call_ac_id is None:
8262            return False
8263
8264        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8265
8266    @TelephonyBaseTest.tel_test_wrap
8267    @test_tracker_info(uuid="5b4d7444-32a1-4e82-8847-1c4ae002edca")
8268    def test_epdg_mo_mt_add_volte_swap_once_merge_drop_wfc_wifi_preferred(
8269            self):
8270        """Test swap and merge feature in epdg call.
8271
8272        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8273        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
8274        Swap active call on PhoneA.
8275        Merge calls to conference on PhoneA.
8276        Hangup on PhoneC, check call continues between AB.
8277        Hangup on PhoneB, check A ends.
8278
8279        """
8280        ads = self.android_devices
8281
8282        tasks = [(phone_setup_iwlan,
8283                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8284                   self.wifi_network_ssid, self.wifi_network_pass)),
8285                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8286                                                           (self.log, ads[2]))]
8287        if not multithread_func(self.log, tasks):
8288            self.log.error("Phone Failed to Set Up Properly.")
8289            return False
8290
8291        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(1)
8292        if call_ab_id is None or call_ac_id is None:
8293            return False
8294
8295        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8296
8297    @TelephonyBaseTest.tel_test_wrap
8298    @test_tracker_info(uuid="88c6c179-0b56-4d03-b5e4-76a147a40995")
8299    def test_epdg_mo_mt_add_volte_swap_twice_merge_drop_wfc_wifi_only(self):
8300        """Test swap and merge feature in epdg call.
8301
8302        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8303        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
8304        Swap active call on PhoneA.
8305        Swap active call on PhoneA.
8306        Merge calls to conference on PhoneA.
8307        Hangup on PhoneC, check call continues between AB.
8308        Hangup on PhoneB, check A ends.
8309
8310        """
8311        ads = self.android_devices
8312
8313        tasks = [(phone_setup_iwlan,
8314                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8315                   self.wifi_network_ssid, self.wifi_network_pass)),
8316                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8317                                                           (self.log, ads[2]))]
8318        if not multithread_func(self.log, tasks):
8319            self.log.error("Phone Failed to Set Up Properly.")
8320            return False
8321
8322        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(2)
8323        if call_ab_id is None or call_ac_id is None:
8324            return False
8325
8326        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8327
8328    @TelephonyBaseTest.tel_test_wrap
8329    @test_tracker_info(uuid="7f744ab3-f919-4a7a-83ce-e38487d619cc")
8330    def test_epdg_mo_mt_add_volte_swap_twice_merge_drop_wfc_wifi_preferred(
8331            self):
8332        """Test swap and merge feature in epdg call.
8333
8334        PhoneA (epdg) call PhoneB (VoLTE), accept on PhoneB.
8335        PhoneC (VoLTE) call PhoneA (epdg), accept on PhoneA.
8336        Swap active call on PhoneA.
8337        Swap active call on PhoneA.
8338        Merge calls to conference on PhoneA.
8339        Hangup on PhoneC, check call continues between AB.
8340        Hangup on PhoneB, check A ends.
8341
8342        """
8343        ads = self.android_devices
8344
8345        tasks = [(phone_setup_iwlan,
8346                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8347                   self.wifi_network_ssid, self.wifi_network_pass)),
8348                 (phone_setup_volte, (self.log, ads[1])), (phone_setup_volte,
8349                                                           (self.log, ads[2]))]
8350        if not multithread_func(self.log, tasks):
8351            self.log.error("Phone Failed to Set Up Properly.")
8352            return False
8353
8354        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_volte_swap_x(2)
8355        if call_ab_id is None or call_ac_id is None:
8356            return False
8357
8358        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8359
8360    @TelephonyBaseTest.tel_test_wrap
8361    @test_tracker_info(uuid="5c861a99-a1b8-45fc-ba67-f8fde4575efc")
8362    def test_epdg_mo_mo_add_wcdma_swap_once_merge_drop_wfc_wifi_only(self):
8363        """Test swap and merge feature in epdg call.
8364
8365        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8366        PhoneA (epdg) call PhoneC (WCDMA), accept on PhoneC.
8367        Swap active call on PhoneA.
8368        Merge calls to conference on PhoneA.
8369        Hangup on PhoneC, check call continues between AB.
8370        Hangup on PhoneB, check A ends.
8371
8372        """
8373        ads = self.android_devices
8374
8375        tasks = [(phone_setup_iwlan,
8376                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8377                   self.wifi_network_ssid, self.wifi_network_pass)),
8378                 (phone_setup_voice_3g, (self.log, ads[1])),
8379                 (phone_setup_voice_3g, (self.log, ads[2]))]
8380        if not multithread_func(self.log, tasks):
8381            self.log.error("Phone Failed to Set Up Properly.")
8382            return False
8383
8384        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(1)
8385        if call_ab_id is None or call_ac_id is None:
8386            return False
8387
8388        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8389
8390    @TelephonyBaseTest.tel_test_wrap
8391    @test_tracker_info(uuid="fdb32a13-302c-4c1c-a77e-f78ed7e90911")
8392    def test_epdg_mo_mo_add_wcdma_swap_once_merge_drop_wfc_wifi_preferred(
8393            self):
8394        """Test swap and merge feature in epdg call.
8395
8396        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8397        PhoneA (epdg) call PhoneC (WCDMA), accept on PhoneC.
8398        Swap active call on PhoneA.
8399        Merge calls to conference on PhoneA.
8400        Hangup on PhoneC, check call continues between AB.
8401        Hangup on PhoneB, check A ends.
8402
8403        """
8404        ads = self.android_devices
8405
8406        tasks = [(phone_setup_iwlan,
8407                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8408                   self.wifi_network_ssid, self.wifi_network_pass)),
8409                 (phone_setup_voice_3g, (self.log, ads[1])),
8410                 (phone_setup_voice_3g, (self.log, ads[2]))]
8411        if not multithread_func(self.log, tasks):
8412            self.log.error("Phone Failed to Set Up Properly.")
8413            return False
8414
8415        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(1)
8416        if call_ab_id is None or call_ac_id is None:
8417            return False
8418
8419        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8420
8421    @TelephonyBaseTest.tel_test_wrap
8422    @test_tracker_info(uuid="a2cf3366-ae66-4e8f-a682-df506173f282")
8423    def test_epdg_mo_mo_add_wcdma_swap_twice_merge_drop_wfc_wifi_only(self):
8424        """Test swap and merge feature in epdg call.
8425
8426        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8427        PhoneA (epdg) call PhoneC (WCDMA), accept on PhoneC.
8428        Swap active call on PhoneA.
8429        Swap active call on PhoneA.
8430        Merge calls to conference on PhoneA.
8431        Hangup on PhoneC, check call continues between AB.
8432        Hangup on PhoneB, check A ends.
8433
8434        """
8435        ads = self.android_devices
8436
8437        tasks = [(phone_setup_iwlan,
8438                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8439                   self.wifi_network_ssid, self.wifi_network_pass)),
8440                 (phone_setup_voice_3g, (self.log, ads[1])),
8441                 (phone_setup_voice_3g, (self.log, ads[2]))]
8442        if not multithread_func(self.log, tasks):
8443            self.log.error("Phone Failed to Set Up Properly.")
8444            return False
8445
8446        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(2)
8447        if call_ab_id is None or call_ac_id is None:
8448            return False
8449
8450        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8451
8452    @TelephonyBaseTest.tel_test_wrap
8453    @test_tracker_info(uuid="fc5f0f1c-9610-4d0f-adce-9c8db351e7da")
8454    def test_epdg_mo_mo_add_wcdma_swap_twice_merge_drop_wfc_wifi_preferred(
8455            self):
8456        """Test swap and merge feature in epdg call.
8457
8458        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8459        PhoneA (epdg) call PhoneC (WCDMA), accept on PhoneC.
8460        Swap active call on PhoneA.
8461        Swap active call on PhoneA.
8462        Merge calls to conference on PhoneA.
8463        Hangup on PhoneC, check call continues between AB.
8464        Hangup on PhoneB, check A ends.
8465
8466        """
8467        ads = self.android_devices
8468
8469        tasks = [(phone_setup_iwlan,
8470                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8471                   self.wifi_network_ssid, self.wifi_network_pass)),
8472                 (phone_setup_voice_3g, (self.log, ads[1])),
8473                 (phone_setup_voice_3g, (self.log, ads[2]))]
8474        if not multithread_func(self.log, tasks):
8475            self.log.error("Phone Failed to Set Up Properly.")
8476            return False
8477
8478        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_wcdma_swap_x(2)
8479        if call_ab_id is None or call_ac_id is None:
8480            return False
8481
8482        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8483
8484    @TelephonyBaseTest.tel_test_wrap
8485    @test_tracker_info(uuid="05332b1e-c36b-4874-b13b-f8e49d0d9bca")
8486    def test_epdg_mo_mt_add_wcdma_swap_once_merge_drop_wfc_wifi_only(self):
8487        """Test swap and merge feature in epdg call.
8488
8489        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8490        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
8491        Swap active call on PhoneA.
8492        Merge calls to conference on PhoneA.
8493        Hangup on PhoneC, check call continues between AB.
8494        Hangup on PhoneB, check A ends.
8495
8496        """
8497        ads = self.android_devices
8498
8499        tasks = [(phone_setup_iwlan,
8500                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8501                   self.wifi_network_ssid, self.wifi_network_pass)),
8502                 (phone_setup_voice_3g, (self.log, ads[1])),
8503                 (phone_setup_voice_3g, (self.log, ads[2]))]
8504        if not multithread_func(self.log, tasks):
8505            self.log.error("Phone Failed to Set Up Properly.")
8506            return False
8507
8508        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(1)
8509        if call_ab_id is None or call_ac_id is None:
8510            return False
8511
8512        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8513
8514    @TelephonyBaseTest.tel_test_wrap
8515    @test_tracker_info(uuid="2421d340-f9cb-47e7-ac3e-8581e141a6d0")
8516    def test_epdg_mo_mt_add_wcdma_swap_once_merge_drop_wfc_wifi_preferred(
8517            self):
8518        """Test swap and merge feature in epdg call.
8519
8520        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8521        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
8522        Swap active call on PhoneA.
8523        Merge calls to conference on PhoneA.
8524        Hangup on PhoneC, check call continues between AB.
8525        Hangup on PhoneB, check A ends.
8526
8527        """
8528        ads = self.android_devices
8529
8530        tasks = [(phone_setup_iwlan,
8531                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8532                   self.wifi_network_ssid, self.wifi_network_pass)),
8533                 (phone_setup_voice_3g, (self.log, ads[1])),
8534                 (phone_setup_voice_3g, (self.log, ads[2]))]
8535        if not multithread_func(self.log, tasks):
8536            self.log.error("Phone Failed to Set Up Properly.")
8537            return False
8538
8539        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(1)
8540        if call_ab_id is None or call_ac_id is None:
8541            return False
8542
8543        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8544
8545    @TelephonyBaseTest.tel_test_wrap
8546    @test_tracker_info(uuid="7c1f6008-cf59-4e63-9285-3cf1c26bc0aa")
8547    def test_epdg_mo_mt_add_wcdma_swap_twice_merge_drop_wfc_wifi_only(self):
8548        """Test swap and merge feature in epdg call.
8549
8550        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8551        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
8552        Swap active call on PhoneA.
8553        Swap active call on PhoneA.
8554        Merge calls to conference on PhoneA.
8555        Hangup on PhoneC, check call continues between AB.
8556        Hangup on PhoneB, check A ends.
8557
8558        """
8559        ads = self.android_devices
8560
8561        tasks = [(phone_setup_iwlan,
8562                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8563                   self.wifi_network_ssid, self.wifi_network_pass)),
8564                 (phone_setup_voice_3g, (self.log, ads[1])),
8565                 (phone_setup_voice_3g, (self.log, ads[2]))]
8566        if not multithread_func(self.log, tasks):
8567            self.log.error("Phone Failed to Set Up Properly.")
8568            return False
8569
8570        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(2)
8571        if call_ab_id is None or call_ac_id is None:
8572            return False
8573
8574        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8575
8576    @TelephonyBaseTest.tel_test_wrap
8577    @test_tracker_info(uuid="be153f3d-0707-45d0-9ddd-4aa696e0e536")
8578    def test_epdg_mo_mt_add_wcdma_swap_twice_merge_drop_wfc_wifi_preferred(
8579            self):
8580        """Test swap and merge feature in epdg call.
8581
8582        PhoneA (epdg) call PhoneB (WCDMA), accept on PhoneB.
8583        PhoneC (WCDMA) call PhoneA (epdg), accept on PhoneA.
8584        Swap active call on PhoneA.
8585        Swap active call on PhoneA.
8586        Merge calls to conference on PhoneA.
8587        Hangup on PhoneC, check call continues between AB.
8588        Hangup on PhoneB, check A ends.
8589
8590        """
8591        ads = self.android_devices
8592
8593        tasks = [(phone_setup_iwlan,
8594                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8595                   self.wifi_network_ssid, self.wifi_network_pass)),
8596                 (phone_setup_voice_3g, (self.log, ads[1])),
8597                 (phone_setup_voice_3g, (self.log, ads[2]))]
8598        if not multithread_func(self.log, tasks):
8599            self.log.error("Phone Failed to Set Up Properly.")
8600            return False
8601
8602        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_wcdma_swap_x(2)
8603        if call_ab_id is None or call_ac_id is None:
8604            return False
8605
8606        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8607
8608    @TelephonyBaseTest.tel_test_wrap
8609    @test_tracker_info(uuid="7235c917-a2d4-4561-bda5-630171053f8f")
8610    def test_epdg_mo_mo_add_1x_swap_once_merge_drop_wfc_wifi_only(self):
8611        """Test swap and merge feature in epdg call.
8612
8613        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8614        PhoneA (epdg) call PhoneC (1x), accept on PhoneC.
8615        Swap active call on PhoneA.
8616        Merge calls to conference on PhoneA.
8617        Hangup on PhoneC, check call continues between AB.
8618        Hangup on PhoneB, check A ends.
8619
8620        """
8621        ads = self.android_devices
8622
8623        tasks = [(phone_setup_iwlan,
8624                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8625                   self.wifi_network_ssid, self.wifi_network_pass)),
8626                 (phone_setup_voice_3g, (self.log, ads[1])),
8627                 (phone_setup_voice_3g, (self.log, ads[2]))]
8628        if not multithread_func(self.log, tasks):
8629            self.log.error("Phone Failed to Set Up Properly.")
8630            return False
8631
8632        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(1)
8633        if call_ab_id is None or call_ac_id is None:
8634            return False
8635
8636        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8637
8638    @TelephonyBaseTest.tel_test_wrap
8639    @test_tracker_info(uuid="8e52b9a4-c0d1-4dcd-9359-746354124763")
8640    def test_epdg_mo_mo_add_1x_swap_once_merge_drop_wfc_wifi_preferred(self):
8641        """Test swap and merge feature in epdg call.
8642
8643        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8644        PhoneA (epdg) call PhoneC (1x), accept on PhoneC.
8645        Swap active call on PhoneA.
8646        Merge calls to conference on PhoneA.
8647        Hangup on PhoneC, check call continues between AB.
8648        Hangup on PhoneB, check A ends.
8649
8650        """
8651        ads = self.android_devices
8652
8653        tasks = [(phone_setup_iwlan,
8654                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8655                   self.wifi_network_ssid, self.wifi_network_pass)),
8656                 (phone_setup_voice_3g, (self.log, ads[1])),
8657                 (phone_setup_voice_3g, (self.log, ads[2]))]
8658        if not multithread_func(self.log, tasks):
8659            self.log.error("Phone Failed to Set Up Properly.")
8660            return False
8661
8662        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(1)
8663        if call_ab_id is None or call_ac_id is None:
8664            return False
8665
8666        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8667
8668    @TelephonyBaseTest.tel_test_wrap
8669    @test_tracker_info(uuid="49a4440f-40a1-4518-810a-6ba9f1fbc243")
8670    def test_epdg_mo_mo_add_1x_swap_twice_merge_drop_wfc_wifi_only(self):
8671        """Test swap and merge feature in epdg call.
8672
8673        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8674        PhoneA (epdg) call PhoneC (1x), accept on PhoneC.
8675        Swap active call on PhoneA.
8676        Swap active call on PhoneA.
8677        Merge calls to conference on PhoneA.
8678        Hangup on PhoneC, check call continues between AB.
8679        Hangup on PhoneB, check A ends.
8680
8681        """
8682        ads = self.android_devices
8683
8684        tasks = [(phone_setup_iwlan,
8685                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8686                   self.wifi_network_ssid, self.wifi_network_pass)),
8687                 (phone_setup_voice_3g, (self.log, ads[1])),
8688                 (phone_setup_voice_3g, (self.log, ads[2]))]
8689        if not multithread_func(self.log, tasks):
8690            self.log.error("Phone Failed to Set Up Properly.")
8691            return False
8692
8693        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(2)
8694        if call_ab_id is None or call_ac_id is None:
8695            return False
8696
8697        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8698
8699    @TelephonyBaseTest.tel_test_wrap
8700    @test_tracker_info(uuid="9d05bde3-50ac-4a49-a0db-2181c9b5a10f")
8701    def test_epdg_mo_mo_add_1x_swap_twice_merge_drop_wfc_wifi_preferred(self):
8702        """Test swap and merge feature in epdg call.
8703
8704        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8705        PhoneA (epdg) call PhoneC (1x), accept on PhoneC.
8706        Swap active call on PhoneA.
8707        Swap active call on PhoneA.
8708        Merge calls to conference on PhoneA.
8709        Hangup on PhoneC, check call continues between AB.
8710        Hangup on PhoneB, check A ends.
8711
8712        """
8713        ads = self.android_devices
8714
8715        tasks = [(phone_setup_iwlan,
8716                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8717                   self.wifi_network_ssid, self.wifi_network_pass)),
8718                 (phone_setup_voice_3g, (self.log, ads[1])),
8719                 (phone_setup_voice_3g, (self.log, ads[2]))]
8720        if not multithread_func(self.log, tasks):
8721            self.log.error("Phone Failed to Set Up Properly.")
8722            return False
8723
8724        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_1x_swap_x(2)
8725        if call_ab_id is None or call_ac_id is None:
8726            return False
8727
8728        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8729
8730    @TelephonyBaseTest.tel_test_wrap
8731    @test_tracker_info(uuid="5c44eb64-b184-417a-97c9-8c22c48fb731")
8732    def test_epdg_mo_mt_add_1x_swap_once_merge_drop_wfc_wifi_only(self):
8733        """Test swap and merge feature in epdg call.
8734
8735        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8736        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
8737        Swap active call on PhoneA.
8738        Merge calls to conference on PhoneA.
8739        Hangup on PhoneC, check call continues between AB.
8740        Hangup on PhoneB, check A ends.
8741
8742        """
8743        ads = self.android_devices
8744
8745        tasks = [(phone_setup_iwlan,
8746                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8747                   self.wifi_network_ssid, self.wifi_network_pass)),
8748                 (phone_setup_voice_3g, (self.log, ads[1])),
8749                 (phone_setup_voice_3g, (self.log, ads[2]))]
8750        if not multithread_func(self.log, tasks):
8751            self.log.error("Phone Failed to Set Up Properly.")
8752            return False
8753
8754        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(1)
8755        if call_ab_id is None or call_ac_id is None:
8756            return False
8757
8758        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8759
8760    @TelephonyBaseTest.tel_test_wrap
8761    @test_tracker_info(uuid="e16e2e81-1b59-4b02-b601-bb27b62d6468")
8762    def test_epdg_mo_mt_add_1x_swap_once_merge_drop_wfc_wifi_preferred(self):
8763        """Test swap and merge feature in epdg call.
8764
8765        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8766        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
8767        Swap active call on PhoneA.
8768        Merge calls to conference on PhoneA.
8769        Hangup on PhoneC, check call continues between AB.
8770        Hangup on PhoneB, check A ends.
8771
8772        """
8773        ads = self.android_devices
8774
8775        tasks = [(phone_setup_iwlan,
8776                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8777                   self.wifi_network_ssid, self.wifi_network_pass)),
8778                 (phone_setup_voice_3g, (self.log, ads[1])),
8779                 (phone_setup_voice_3g, (self.log, ads[2]))]
8780        if not multithread_func(self.log, tasks):
8781            self.log.error("Phone Failed to Set Up Properly.")
8782            return False
8783
8784        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(1)
8785        if call_ab_id is None or call_ac_id is None:
8786            return False
8787
8788        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8789
8790    @TelephonyBaseTest.tel_test_wrap
8791    @test_tracker_info(uuid="fd4c3b72-ea2d-4cd4-af79-b93635eda8b8")
8792    def test_epdg_mo_mt_add_1x_swap_twice_merge_drop_wfc_wifi_only(self):
8793        """Test swap and merge feature in epdg call.
8794
8795        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8796        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
8797        Swap active call on PhoneA.
8798        Swap active call on PhoneA.
8799        Merge calls to conference on PhoneA.
8800        Hangup on PhoneC, check call continues between AB.
8801        Hangup on PhoneB, check A ends.
8802
8803        """
8804        ads = self.android_devices
8805
8806        tasks = [(phone_setup_iwlan,
8807                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8808                   self.wifi_network_ssid, self.wifi_network_pass)),
8809                 (phone_setup_voice_3g, (self.log, ads[1])),
8810                 (phone_setup_voice_3g, (self.log, ads[2]))]
8811        if not multithread_func(self.log, tasks):
8812            self.log.error("Phone Failed to Set Up Properly.")
8813            return False
8814
8815        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(2)
8816        if call_ab_id is None or call_ac_id is None:
8817            return False
8818
8819        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8820
8821    @TelephonyBaseTest.tel_test_wrap
8822    @test_tracker_info(uuid="a33d7b2b-cc22-40c3-9689-a2a14642396d")
8823    def test_epdg_mo_mt_add_1x_swap_twice_merge_drop_wfc_wifi_preferred(self):
8824        """Test swap and merge feature in epdg call.
8825
8826        PhoneA (epdg) call PhoneB (1x), accept on PhoneB.
8827        PhoneC (1x) call PhoneA (epdg), accept on PhoneA.
8828        Swap active call on PhoneA.
8829        Swap active call on PhoneA.
8830        Merge calls to conference on PhoneA.
8831        Hangup on PhoneC, check call continues between AB.
8832        Hangup on PhoneB, check A ends.
8833
8834        """
8835        ads = self.android_devices
8836
8837        tasks = [(phone_setup_iwlan,
8838                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8839                   self.wifi_network_ssid, self.wifi_network_pass)),
8840                 (phone_setup_voice_3g, (self.log, ads[1])),
8841                 (phone_setup_voice_3g, (self.log, ads[2]))]
8842        if not multithread_func(self.log, tasks):
8843            self.log.error("Phone Failed to Set Up Properly.")
8844            return False
8845
8846        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_1x_swap_x(2)
8847        if call_ab_id is None or call_ac_id is None:
8848            return False
8849
8850        return self._test_epdg_conference_merge_drop(call_ab_id, call_ac_id)
8851
8852    @TelephonyBaseTest.tel_test_wrap
8853    @test_tracker_info(uuid="7839c6a3-6797-4cd0-a918-c7d317881e3d")
8854    def test_epdg_mo_mo_add_epdg_swap_twice_drop_held_wfc_wifi_only(self):
8855        """Test swap feature in epdg call.
8856
8857        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8858        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
8859        Swap active call on PhoneA.
8860        Swap active call on PhoneA.
8861        Hangup call from PhoneB, check if call continues between AC.
8862
8863        """
8864        ads = self.android_devices
8865
8866        tasks = [(phone_setup_iwlan,
8867                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8868                   self.wifi_network_ssid, self.wifi_network_pass)),
8869                 (phone_setup_iwlan,
8870                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
8871                   self.wifi_network_ssid, self.wifi_network_pass)),
8872                 (phone_setup_iwlan,
8873                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
8874                   self.wifi_network_ssid, self.wifi_network_pass))]
8875        if not multithread_func(self.log, tasks):
8876            self.log.error("Phone Failed to Set Up Properly.")
8877            return False
8878
8879        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
8880        if call_ab_id is None or call_ac_id is None:
8881            return False
8882
8883        return self._three_phone_hangup_call_verify_call_state(
8884            ad_hangup=ads[1],
8885            ad_verify=ads[0],
8886            call_id=call_ac_id,
8887            call_state=CALL_STATE_ACTIVE,
8888            ads_active=[ads[0], ads[2]])
8889
8890    @TelephonyBaseTest.tel_test_wrap
8891    @test_tracker_info(uuid="3f4e761e-8fa2-4b85-bc11-8150532b7686")
8892    def test_epdg_mo_mo_add_epdg_swap_twice_drop_held_wfc_wifi_preferred(self):
8893        """Test swap feature in epdg call.
8894
8895        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8896        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
8897        Swap active call on PhoneA.
8898        Swap active call on PhoneA.
8899        Hangup call from PhoneB, check if call continues between AC.
8900
8901        """
8902        ads = self.android_devices
8903
8904        tasks = [(phone_setup_iwlan,
8905                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8906                   self.wifi_network_ssid, self.wifi_network_pass)),
8907                 (phone_setup_iwlan,
8908                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
8909                   self.wifi_network_ssid, self.wifi_network_pass)),
8910                 (phone_setup_iwlan,
8911                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
8912                   self.wifi_network_ssid, self.wifi_network_pass))]
8913        if not multithread_func(self.log, tasks):
8914            self.log.error("Phone Failed to Set Up Properly.")
8915            return False
8916
8917        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
8918        if call_ab_id is None or call_ac_id is None:
8919            return False
8920
8921        return self._three_phone_hangup_call_verify_call_state(
8922            ad_hangup=ads[1],
8923            ad_verify=ads[0],
8924            call_id=call_ac_id,
8925            call_state=CALL_STATE_ACTIVE,
8926            ads_active=[ads[0], ads[2]])
8927
8928    @TelephonyBaseTest.tel_test_wrap
8929    @test_tracker_info(uuid="9fd4f171-9eea-4fc7-91f1-d3c7f08a5fad")
8930    def test_epdg_mo_mo_add_epdg_swap_twice_drop_active_wfc_wifi_only(self):
8931        """Test swap feature in epdg call.
8932
8933        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8934        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
8935        Swap active call on PhoneA.
8936        Swap active call on PhoneA.
8937        Hangup call from PhoneC, check if call continues between AB.
8938
8939        """
8940        ads = self.android_devices
8941
8942        tasks = [(phone_setup_iwlan,
8943                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
8944                   self.wifi_network_ssid, self.wifi_network_pass)),
8945                 (phone_setup_iwlan,
8946                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
8947                   self.wifi_network_ssid, self.wifi_network_pass)),
8948                 (phone_setup_iwlan,
8949                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
8950                   self.wifi_network_ssid, self.wifi_network_pass))]
8951        if not multithread_func(self.log, tasks):
8952            self.log.error("Phone Failed to Set Up Properly.")
8953            return False
8954
8955        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
8956        if call_ab_id is None or call_ac_id is None:
8957            return False
8958
8959        return self._three_phone_hangup_call_verify_call_state(
8960            ad_hangup=ads[2],
8961            ad_verify=ads[0],
8962            call_id=call_ab_id,
8963            call_state=self._get_expected_call_state(ads[0]),
8964            ads_active=[ads[0], ads[1]])
8965
8966    @TelephonyBaseTest.tel_test_wrap
8967    @test_tracker_info(uuid="8b97d6b9-253a-4ab7-8afb-126df71fee41")
8968    def test_epdg_mo_mo_add_epdg_swap_twice_drop_active_wfc_wifi_preferred(
8969            self):
8970        """Test swap feature in epdg call.
8971
8972        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
8973        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
8974        Swap active call on PhoneA.
8975        Swap active call on PhoneA.
8976        Hangup call from PhoneC, check if call continues between AB.
8977
8978        """
8979        ads = self.android_devices
8980
8981        tasks = [(phone_setup_iwlan,
8982                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
8983                   self.wifi_network_ssid, self.wifi_network_pass)),
8984                 (phone_setup_iwlan,
8985                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
8986                   self.wifi_network_ssid, self.wifi_network_pass)),
8987                 (phone_setup_iwlan,
8988                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
8989                   self.wifi_network_ssid, self.wifi_network_pass))]
8990        if not multithread_func(self.log, tasks):
8991            self.log.error("Phone Failed to Set Up Properly.")
8992            return False
8993
8994        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
8995        if call_ab_id is None or call_ac_id is None:
8996            return False
8997
8998        return self._three_phone_hangup_call_verify_call_state(
8999            ad_hangup=ads[2],
9000            ad_verify=ads[0],
9001            call_id=call_ab_id,
9002            call_state=self._get_expected_call_state(ads[0]),
9003            ads_active=[ads[0], ads[1]])
9004
9005    @TelephonyBaseTest.tel_test_wrap
9006    @test_tracker_info(uuid="6617e779-c987-41dd-acda-ff132662ccf0")
9007    def test_epdg_mo_mo_add_epdg_swap_twice_drop_active_apm_wifi_preferred(
9008            self):
9009        """Test swap feature in epdg call.
9010
9011        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9012        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9013        Swap active call on PhoneA.
9014        Swap active call on PhoneA.
9015        Hangup call from PhoneC, check if call continues between AB.
9016
9017        """
9018        ads = self.android_devices
9019
9020        tasks = [(phone_setup_iwlan,
9021                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9022                   self.wifi_network_ssid, self.wifi_network_pass)),
9023                 (phone_setup_iwlan,
9024                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9025                   self.wifi_network_ssid, self.wifi_network_pass)),
9026                 (phone_setup_iwlan,
9027                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9028                   self.wifi_network_ssid, self.wifi_network_pass))]
9029        if not multithread_func(self.log, tasks):
9030            self.log.error("Phone Failed to Set Up Properly.")
9031            return False
9032
9033        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(2)
9034        if call_ab_id is None or call_ac_id is None:
9035            return False
9036
9037        return self._three_phone_hangup_call_verify_call_state(
9038            ad_hangup=ads[2],
9039            ad_verify=ads[0],
9040            call_id=call_ab_id,
9041            call_state=self._get_expected_call_state(ads[0]),
9042            ads_active=[ads[0], ads[1]])
9043
9044    @TelephonyBaseTest.tel_test_wrap
9045    @test_tracker_info(uuid="f8b61289-ccc5-4adf-b291-94c73925edb3")
9046    def test_epdg_mo_mt_add_epdg_swap_twice_drop_held_wfc_wifi_only(self):
9047        """Test swap feature in epdg call.
9048
9049        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9050        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9051        Swap active call on PhoneA.
9052        Swap active call on PhoneA.
9053        Hangup call from PhoneB, check if call continues between AC.
9054
9055        """
9056        ads = self.android_devices
9057
9058        tasks = [(phone_setup_iwlan,
9059                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9060                   self.wifi_network_ssid, self.wifi_network_pass)),
9061                 (phone_setup_iwlan,
9062                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9063                   self.wifi_network_ssid, self.wifi_network_pass)),
9064                 (phone_setup_iwlan,
9065                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9066                   self.wifi_network_ssid, self.wifi_network_pass))]
9067        if not multithread_func(self.log, tasks):
9068            self.log.error("Phone Failed to Set Up Properly.")
9069            return False
9070
9071        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
9072        if call_ab_id is None or call_ac_id is None:
9073            return False
9074
9075        return self._three_phone_hangup_call_verify_call_state(
9076            ad_hangup=ads[1],
9077            ad_verify=ads[0],
9078            call_id=call_ac_id,
9079            call_state=CALL_STATE_ACTIVE,
9080            ads_active=[ads[0], ads[2]])
9081
9082    @TelephonyBaseTest.tel_test_wrap
9083    @test_tracker_info(uuid="bb975203-7cee-4fbc-ad4a-da473413e410")
9084    def test_epdg_mo_mt_add_epdg_swap_twice_drop_held_wfc_wifi_preferred(self):
9085        """Test swap feature in epdg call.
9086
9087        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9088        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9089        Swap active call on PhoneA.
9090        Swap active call on PhoneA.
9091        Hangup call from PhoneB, check if call continues between AC.
9092
9093        """
9094        ads = self.android_devices
9095
9096        tasks = [(phone_setup_iwlan,
9097                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9098                   self.wifi_network_ssid, self.wifi_network_pass)),
9099                 (phone_setup_iwlan,
9100                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9101                   self.wifi_network_ssid, self.wifi_network_pass)),
9102                 (phone_setup_iwlan,
9103                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9104                   self.wifi_network_ssid, self.wifi_network_pass))]
9105        if not multithread_func(self.log, tasks):
9106            self.log.error("Phone Failed to Set Up Properly.")
9107            return False
9108
9109        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
9110        if call_ab_id is None or call_ac_id is None:
9111            return False
9112
9113        return self._three_phone_hangup_call_verify_call_state(
9114            ad_hangup=ads[1],
9115            ad_verify=ads[0],
9116            call_id=call_ac_id,
9117            call_state=CALL_STATE_ACTIVE,
9118            ads_active=[ads[0], ads[2]])
9119
9120    @TelephonyBaseTest.tel_test_wrap
9121    @test_tracker_info(uuid="593f6034-fd15-4b1d-a9fe-c4331e6a7f72")
9122    def test_epdg_mo_mt_add_epdg_swap_twice_drop_active_wfc_wifi_only(self):
9123        """Test swap feature in epdg call.
9124
9125        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9126        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9127        Swap active call on PhoneA.
9128        Swap active call on PhoneA.
9129        Hangup call from PhoneC, check if call continues between AB.
9130
9131        """
9132        ads = self.android_devices
9133
9134        tasks = [(phone_setup_iwlan,
9135                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9136                   self.wifi_network_ssid, self.wifi_network_pass)),
9137                 (phone_setup_iwlan,
9138                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9139                   self.wifi_network_ssid, self.wifi_network_pass)),
9140                 (phone_setup_iwlan,
9141                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9142                   self.wifi_network_ssid, self.wifi_network_pass))]
9143        if not multithread_func(self.log, tasks):
9144            self.log.error("Phone Failed to Set Up Properly.")
9145            return False
9146
9147        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
9148        if call_ab_id is None or call_ac_id is None:
9149            return False
9150
9151        return self._three_phone_hangup_call_verify_call_state(
9152            ad_hangup=ads[2],
9153            ad_verify=ads[0],
9154            call_id=call_ab_id,
9155            call_state=self._get_expected_call_state(ads[0]),
9156            ads_active=[ads[0], ads[1]])
9157
9158    @TelephonyBaseTest.tel_test_wrap
9159    @test_tracker_info(uuid="adc3fb00-543e-44ec-905b-0eea52790896")
9160    def test_epdg_mo_mt_add_epdg_swap_twice_drop_active_wfc_wifi_preferred(
9161            self):
9162        """Test swap feature in epdg call.
9163
9164        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9165        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9166        Swap active call on PhoneA.
9167        Swap active call on PhoneA.
9168        Hangup call from PhoneC, check if call continues between AB.
9169
9170        """
9171        ads = self.android_devices
9172
9173        tasks = [(phone_setup_iwlan,
9174                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9175                   self.wifi_network_ssid, self.wifi_network_pass)),
9176                 (phone_setup_iwlan,
9177                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9178                   self.wifi_network_ssid, self.wifi_network_pass)),
9179                 (phone_setup_iwlan,
9180                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9181                   self.wifi_network_ssid, self.wifi_network_pass))]
9182        if not multithread_func(self.log, tasks):
9183            self.log.error("Phone Failed to Set Up Properly.")
9184            return False
9185
9186        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(2)
9187        if call_ab_id is None or call_ac_id is None:
9188            return False
9189
9190        return self._three_phone_hangup_call_verify_call_state(
9191            ad_hangup=ads[2],
9192            ad_verify=ads[0],
9193            call_id=call_ab_id,
9194            call_state=self._get_expected_call_state(ads[0]),
9195            ads_active=[ads[0], ads[1]])
9196
9197    @TelephonyBaseTest.tel_test_wrap
9198    @test_tracker_info(uuid="e96aac52-c536-4a08-9e6a-8bf598db9267")
9199    def test_epdg_mo_mo_add_epdg_swap_once_drop_held_wfc_wifi_only(self):
9200        """Test swap feature in epdg call.
9201
9202        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9203        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9204        Swap active call on PhoneA.
9205        Hangup call from PhoneC, check if call continues between AB.
9206
9207        """
9208        ads = self.android_devices
9209
9210        tasks = [(phone_setup_iwlan,
9211                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9212                   self.wifi_network_ssid, self.wifi_network_pass)),
9213                 (phone_setup_iwlan,
9214                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9215                   self.wifi_network_ssid, self.wifi_network_pass)),
9216                 (phone_setup_iwlan,
9217                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9218                   self.wifi_network_ssid, self.wifi_network_pass))]
9219        if not multithread_func(self.log, tasks):
9220            self.log.error("Phone Failed to Set Up Properly.")
9221            return False
9222
9223        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
9224        if call_ab_id is None or call_ac_id is None:
9225            return False
9226
9227        return self._three_phone_hangup_call_verify_call_state(
9228            ad_hangup=ads[2],
9229            ad_verify=ads[0],
9230            call_id=call_ab_id,
9231            call_state=CALL_STATE_ACTIVE,
9232            ads_active=[ads[0], ads[1]])
9233
9234    @TelephonyBaseTest.tel_test_wrap
9235    @test_tracker_info(uuid="74efa176-1ff2-4b06-9739-06f67009cb5d")
9236    def test_epdg_mo_mo_add_epdg_swap_once_drop_held_wfc_wifi_preferred(self):
9237        """Test swap feature in epdg call.
9238
9239        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9240        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9241        Swap active call on PhoneA.
9242        Hangup call from PhoneC, check if call continues between AB.
9243
9244        """
9245        ads = self.android_devices
9246
9247        tasks = [(phone_setup_iwlan,
9248                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9249                   self.wifi_network_ssid, self.wifi_network_pass)),
9250                 (phone_setup_iwlan,
9251                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9252                   self.wifi_network_ssid, self.wifi_network_pass)),
9253                 (phone_setup_iwlan,
9254                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9255                   self.wifi_network_ssid, self.wifi_network_pass))]
9256        if not multithread_func(self.log, tasks):
9257            self.log.error("Phone Failed to Set Up Properly.")
9258            return False
9259
9260        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
9261        if call_ab_id is None or call_ac_id is None:
9262            return False
9263
9264        return self._three_phone_hangup_call_verify_call_state(
9265            ad_hangup=ads[2],
9266            ad_verify=ads[0],
9267            call_id=call_ab_id,
9268            call_state=CALL_STATE_ACTIVE,
9269            ads_active=[ads[0], ads[1]])
9270
9271    @TelephonyBaseTest.tel_test_wrap
9272    @test_tracker_info(uuid="dfcdeebe-dada-4722-8880-5b3877d0809b")
9273    def test_epdg_mo_mo_add_epdg_swap_once_drop_active_wfc_wifi_only(self):
9274        """Test swap feature in epdg call.
9275
9276        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9277        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9278        Swap active call on PhoneA.
9279        Hangup call from PhoneB, check if call continues between AC.
9280
9281        """
9282        ads = self.android_devices
9283
9284        tasks = [(phone_setup_iwlan,
9285                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9286                   self.wifi_network_ssid, self.wifi_network_pass)),
9287                 (phone_setup_iwlan,
9288                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9289                   self.wifi_network_ssid, self.wifi_network_pass)),
9290                 (phone_setup_iwlan,
9291                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9292                   self.wifi_network_ssid, self.wifi_network_pass))]
9293        if not multithread_func(self.log, tasks):
9294            self.log.error("Phone Failed to Set Up Properly.")
9295            return False
9296
9297        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
9298        if call_ab_id is None or call_ac_id is None:
9299            return False
9300
9301        return self._three_phone_hangup_call_verify_call_state(
9302            ad_hangup=ads[1],
9303            ad_verify=ads[0],
9304            call_id=call_ac_id,
9305            call_state=self._get_expected_call_state(ads[0]),
9306            ads_active=[ads[0], ads[2]])
9307
9308    @TelephonyBaseTest.tel_test_wrap
9309    @test_tracker_info(uuid="b9658029-90da-4df8-bbb2-9c08eb3a3a8c")
9310    def test_epdg_mo_mo_add_epdg_swap_once_drop_active_wfc_wifi_preferred(
9311            self):
9312        """Test swap feature in epdg call.
9313
9314        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9315        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9316        Swap active call on PhoneA.
9317        Hangup call from PhoneB, check if call continues between AC.
9318
9319        """
9320        ads = self.android_devices
9321
9322        tasks = [(phone_setup_iwlan,
9323                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9324                   self.wifi_network_ssid, self.wifi_network_pass)),
9325                 (phone_setup_iwlan,
9326                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9327                   self.wifi_network_ssid, self.wifi_network_pass)),
9328                 (phone_setup_iwlan,
9329                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9330                   self.wifi_network_ssid, self.wifi_network_pass))]
9331        if not multithread_func(self.log, tasks):
9332            self.log.error("Phone Failed to Set Up Properly.")
9333            return False
9334
9335        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
9336        if call_ab_id is None or call_ac_id is None:
9337            return False
9338
9339        return self._three_phone_hangup_call_verify_call_state(
9340            ad_hangup=ads[1],
9341            ad_verify=ads[0],
9342            call_id=call_ac_id,
9343            call_state=self._get_expected_call_state(ads[0]),
9344            ads_active=[ads[0], ads[2]])
9345
9346    @TelephonyBaseTest.tel_test_wrap
9347    @test_tracker_info(uuid="3381c8e0-cdf1-47d1-8a17-58592f3cd6e6")
9348    def test_epdg_mo_mo_add_epdg_swap_once_drop_active_apm_wfc_wifi_preferred(
9349            self):
9350        """Test swap feature in epdg call.
9351
9352        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9353        PhoneA (epdg) call PhoneC (epdg), accept on PhoneC.
9354        Swap active call on PhoneA.
9355        Hangup call from PhoneB, check if call continues between AC.
9356
9357        """
9358        ads = self.android_devices
9359
9360        tasks = [(phone_setup_iwlan,
9361                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9362                   self.wifi_network_ssid, self.wifi_network_pass)),
9363                 (phone_setup_iwlan,
9364                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9365                   self.wifi_network_ssid, self.wifi_network_pass)),
9366                 (phone_setup_iwlan,
9367                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9368                   self.wifi_network_ssid, self.wifi_network_pass))]
9369        if not multithread_func(self.log, tasks):
9370            self.log.error("Phone Failed to Set Up Properly.")
9371            return False
9372
9373        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(1)
9374        if call_ab_id is None or call_ac_id is None:
9375            return False
9376
9377        return self._three_phone_hangup_call_verify_call_state(
9378            ad_hangup=ads[1],
9379            ad_verify=ads[0],
9380            call_id=call_ac_id,
9381            call_state=self._get_expected_call_state(ads[0]),
9382            ads_active=[ads[0], ads[2]])
9383
9384    @TelephonyBaseTest.tel_test_wrap
9385    @test_tracker_info(uuid="fb655f12-aabe-45bf-8020-61c21ada9440")
9386    def test_epdg_mo_mt_add_epdg_swap_once_drop_held_wfc_wifi_only(self):
9387        """Test swap feature in epdg call.
9388
9389        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9390        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9391        Swap active call on PhoneA.
9392        Hangup call from PhoneC, check if call continues between AB.
9393
9394        """
9395        ads = self.android_devices
9396
9397        tasks = [(phone_setup_iwlan,
9398                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9399                   self.wifi_network_ssid, self.wifi_network_pass)),
9400                 (phone_setup_iwlan,
9401                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9402                   self.wifi_network_ssid, self.wifi_network_pass)),
9403                 (phone_setup_iwlan,
9404                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9405                   self.wifi_network_ssid, self.wifi_network_pass))]
9406        if not multithread_func(self.log, tasks):
9407            self.log.error("Phone Failed to Set Up Properly.")
9408            return False
9409
9410        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
9411        if call_ab_id is None or call_ac_id is None:
9412            return False
9413        return self._three_phone_hangup_call_verify_call_state(
9414            ad_hangup=ads[2],
9415            ad_verify=ads[0],
9416            call_id=call_ab_id,
9417            call_state=CALL_STATE_ACTIVE,
9418            ads_active=[ads[0], ads[1]])
9419
9420    @TelephonyBaseTest.tel_test_wrap
9421    @test_tracker_info(uuid="35e7b36d-e2d5-42bd-99d9-dbc7986ef93a")
9422    def test_epdg_mo_mt_add_epdg_swap_once_drop_held_wfc_wifi_preferred(self):
9423        """Test swap feature in epdg call.
9424
9425        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9426        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9427        Swap active call on PhoneA.
9428        Hangup call from PhoneC, check if call continues between AB.
9429
9430        """
9431        ads = self.android_devices
9432
9433        tasks = [(phone_setup_iwlan,
9434                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9435                   self.wifi_network_ssid, self.wifi_network_pass)),
9436                 (phone_setup_iwlan,
9437                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9438                   self.wifi_network_ssid, self.wifi_network_pass)),
9439                 (phone_setup_iwlan,
9440                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9441                   self.wifi_network_ssid, self.wifi_network_pass))]
9442        if not multithread_func(self.log, tasks):
9443            self.log.error("Phone Failed to Set Up Properly.")
9444            return False
9445
9446        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
9447        if call_ab_id is None or call_ac_id is None:
9448            return False
9449        return self._three_phone_hangup_call_verify_call_state(
9450            ad_hangup=ads[2],
9451            ad_verify=ads[0],
9452            call_id=call_ab_id,
9453            call_state=CALL_STATE_ACTIVE,
9454            ads_active=[ads[0], ads[1]])
9455
9456    @TelephonyBaseTest.tel_test_wrap
9457    @test_tracker_info(uuid="e959e668-8150-46c1-bf49-a1ab2a9f45a5")
9458    def test_epdg_mo_mt_add_epdg_swap_once_drop_held_apm_wifi_preferred(self):
9459        """Test swap feature in epdg call.
9460
9461        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9462        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9463        Swap active call on PhoneA.
9464        Hangup call from PhoneC, check if call continues between AB.
9465
9466        """
9467        ads = self.android_devices
9468
9469        tasks = [(phone_setup_iwlan,
9470                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9471                   self.wifi_network_ssid, self.wifi_network_pass)),
9472                 (phone_setup_iwlan,
9473                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9474                   self.wifi_network_ssid, self.wifi_network_pass)),
9475                 (phone_setup_iwlan,
9476                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9477                   self.wifi_network_ssid, self.wifi_network_pass))]
9478        if not multithread_func(self.log, tasks):
9479            self.log.error("Phone Failed to Set Up Properly.")
9480            return False
9481
9482        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
9483        if call_ab_id is None or call_ac_id is None:
9484            return False
9485        return self._three_phone_hangup_call_verify_call_state(
9486            ad_hangup=ads[2],
9487            ad_verify=ads[0],
9488            call_id=call_ab_id,
9489            call_state=CALL_STATE_ACTIVE,
9490            ads_active=[ads[0], ads[1]])
9491
9492    @TelephonyBaseTest.tel_test_wrap
9493    @test_tracker_info(uuid="b9c47ccd-cc84-42cc-83f4-0a98c22c1d7a")
9494    def test_epdg_mo_mt_add_epdg_swap_once_drop_active_wfc_wifi_only(self):
9495        """Test swap feature in epdg call.
9496
9497        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9498        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9499        Swap active call on PhoneA.
9500        Hangup call from PhoneB, check if call continues between AC.
9501
9502        """
9503        ads = self.android_devices
9504
9505        tasks = [(phone_setup_iwlan,
9506                  (self.log, ads[0], False, WFC_MODE_WIFI_ONLY,
9507                   self.wifi_network_ssid, self.wifi_network_pass)),
9508                 (phone_setup_iwlan,
9509                  (self.log, ads[1], False, WFC_MODE_WIFI_ONLY,
9510                   self.wifi_network_ssid, self.wifi_network_pass)),
9511                 (phone_setup_iwlan,
9512                  (self.log, ads[2], False, WFC_MODE_WIFI_ONLY,
9513                   self.wifi_network_ssid, self.wifi_network_pass))]
9514        if not multithread_func(self.log, tasks):
9515            self.log.error("Phone Failed to Set Up Properly.")
9516            return False
9517
9518        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
9519        if call_ab_id is None or call_ac_id is None:
9520            return False
9521
9522        return self._three_phone_hangup_call_verify_call_state(
9523            ad_hangup=ads[1],
9524            ad_verify=ads[0],
9525            call_id=call_ac_id,
9526            call_state=self._get_expected_call_state(ads[0]),
9527            ads_active=[ads[0], ads[2]])
9528
9529    @TelephonyBaseTest.tel_test_wrap
9530    @test_tracker_info(uuid="273d521f-d11c-4956-ae51-33f69de87663")
9531    def test_epdg_mo_mt_add_epdg_swap_once_drop_active_wfc_wifi_preferred(
9532            self):
9533        """Test swap feature in epdg call.
9534
9535        PhoneA (epdg) call PhoneB (epdg), accept on PhoneB.
9536        PhoneC (epdg) call PhoneA (epdg), accept on PhoneA.
9537        Swap active call on PhoneA.
9538        Hangup call from PhoneB, check if call continues between AC.
9539
9540        """
9541        ads = self.android_devices
9542
9543        tasks = [(phone_setup_iwlan,
9544                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
9545                   self.wifi_network_ssid, self.wifi_network_pass)),
9546                 (phone_setup_iwlan,
9547                  (self.log, ads[1], False, WFC_MODE_WIFI_PREFERRED,
9548                   self.wifi_network_ssid, self.wifi_network_pass)),
9549                 (phone_setup_iwlan,
9550                  (self.log, ads[2], False, WFC_MODE_WIFI_PREFERRED,
9551                   self.wifi_network_ssid, self.wifi_network_pass))]
9552        if not multithread_func(self.log, tasks):
9553            self.log.error("Phone Failed to Set Up Properly.")
9554            return False
9555
9556        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
9557        if call_ab_id is None or call_ac_id is None:
9558            return False
9559
9560        return self._three_phone_hangup_call_verify_call_state(
9561            ad_hangup=ads[1],
9562            ad_verify=ads[0],
9563            call_id=call_ac_id,
9564            call_state=self._get_expected_call_state(ads[0]),
9565            ads_active=[ads[0], ads[2]])
9566
9567    def _test_gsm_mo_mo_add_swap_x(self, num_swaps):
9568        """Test swap feature in GSM call.
9569
9570        PhoneA (GSM) call PhoneB, accept on PhoneB.
9571        PhoneA (GSM) call PhoneC, accept on PhoneC.
9572        Swap active call on PhoneA. (N times)
9573
9574        Args:
9575            num_swaps: do swap for 'num_swaps' times.
9576                This value can be 0 (no swap operation).
9577
9578        Returns:
9579            call_ab_id, call_ac_id if succeed;
9580            None, None if failed.
9581
9582        """
9583        ads = self.android_devices
9584
9585        # make sure PhoneA is GSM phone before proceed.
9586        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
9587            ads[0].log.error("not GSM phone, abort wcdma swap test.")
9588            return None, None
9589
9590        call_ab_id = self._three_phone_call_mo_add_mo(
9591            [ads[0], ads[1], ads[2]], [
9592                phone_setup_voice_2g, phone_setup_voice_general,
9593                phone_setup_voice_general
9594            ], [is_phone_in_call_2g, None, None])
9595        if call_ab_id is None:
9596            self.log.error("Failed to get call_ab_id")
9597            return None, None
9598
9599        calls = ads[0].droid.telecomCallGetCallIds()
9600        ads[0].log.info("Calls in PhoneA %s", calls)
9601        if num_active_calls(self.log, ads[0]) != 2:
9602            return None, None
9603        if calls[0] == call_ab_id:
9604            call_ac_id = calls[1]
9605        else:
9606            call_ac_id = calls[0]
9607
9608        if num_swaps > 0:
9609            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
9610            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
9611                              num_swaps):
9612                self.log.error("Swap test failed.")
9613                return None, None
9614
9615        return call_ab_id, call_ac_id
9616
9617    def _test_gsm_mt_mt_add_swap_x(self, num_swaps):
9618        """Test swap feature in GSM call.
9619
9620        PhoneB call PhoneA (GSM), accept on PhoneA.
9621        PhoneC call PhoneA (GSM), accept on PhoneA.
9622        Swap active call on PhoneA. (N times)
9623
9624        Args:
9625            num_swaps: do swap for 'num_swaps' times.
9626                This value can be 0 (no swap operation).
9627
9628        Returns:
9629            call_ab_id, call_ac_id if succeed;
9630            None, None if failed.
9631
9632        """
9633        ads = self.android_devices
9634
9635        # make sure PhoneA is GSM phone before proceed.
9636        if (ads[0].droid.telephonyGetPhoneType() != PHONE_TYPE_GSM):
9637            ads[0].log.error("not GSM phone, abort wcdma swap test.")
9638            return None, None
9639
9640        call_ab_id = self._three_phone_call_mt_add_mt(
9641            [ads[0], ads[1], ads[2]], [
9642                phone_setup_voice_2g, phone_setup_voice_general,
9643                phone_setup_voice_general
9644            ], [is_phone_in_call_2g, None, None])
9645        if call_ab_id is None:
9646            self.log.error("Failed to get call_ab_id")
9647            return None, None
9648
9649        calls = ads[0].droid.telecomCallGetCallIds()
9650        ads[0].log.info("Calls in PhoneA %s", calls)
9651        if num_active_calls(self.log, ads[0]) != 2:
9652            return None, None
9653        if calls[0] == call_ab_id:
9654            call_ac_id = calls[1]
9655        else:
9656            call_ac_id = calls[0]
9657
9658        if num_swaps > 0:
9659            self.log.info("Step3: Begin Swap x%s test.", num_swaps)
9660            if not swap_calls(self.log, ads, call_ab_id, call_ac_id,
9661                              num_swaps):
9662                self.log.error("Swap test failed.")
9663                return None, None
9664
9665        return call_ab_id, call_ac_id
9666
9667    def _test_gsm_conference_merge_drop(self, call_ab_id, call_ac_id):
9668        """Test conference merge and drop in GSM call.
9669
9670        PhoneA in GSM call with PhoneB.
9671        PhoneA in GSM call with PhoneC.
9672        Merge calls to conference on PhoneA.
9673        Hangup on PhoneC, check call continues between AB.
9674        Hangup on PhoneB, check A ends.
9675
9676        Args:
9677            call_ab_id: call id for call_AB on PhoneA.
9678            call_ac_id: call id for call_AC on PhoneA.
9679
9680        Returns:
9681            True if succeed;
9682            False if failed.
9683        """
9684        ads = self.android_devices
9685
9686        self.log.info("Step4: Merge to Conf Call and verify Conf Call.")
9687        ads[0].droid.telecomCallJoinCallsInConf(call_ab_id, call_ac_id)
9688        time.sleep(WAIT_TIME_IN_CALL)
9689        calls = ads[0].droid.telecomCallGetCallIds()
9690        ads[0].log.info("Calls in PhoneA %s", calls)
9691        if num_active_calls(self.log, ads[0]) != 3:
9692            ads[0].log.error("Total number of call ids is not 3.")
9693            return False
9694        call_conf_id = None
9695        for call_id in calls:
9696            if call_id != call_ab_id and call_id != call_ac_id:
9697                call_conf_id = call_id
9698        if not call_conf_id:
9699            self.log.error("Merge call fail, no new conference call id.")
9700            return False
9701        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], True):
9702            return False
9703
9704        # Check if Conf Call is currently active
9705        if ads[0].droid.telecomCallGetCallState(
9706                call_conf_id) != CALL_STATE_ACTIVE:
9707            ads[0].log.error(
9708                "Call_id: %s, state: %s, expected: STATE_ACTIVE", call_conf_id,
9709                ads[0].droid.telecomCallGetCallState(call_conf_id))
9710            return False
9711
9712        self.log.info("Step5: End call on PhoneC and verify call continues.")
9713        if not self._hangup_call(ads[2], "PhoneC"):
9714            return False
9715        time.sleep(WAIT_TIME_IN_CALL)
9716        calls = ads[0].droid.telecomCallGetCallIds()
9717        ads[0].log.info("Calls in PhoneA %s", calls)
9718        if num_active_calls(self.log, ads[0]) != 1:
9719            return False
9720        if not verify_incall_state(self.log, [ads[0], ads[1]], True):
9721            return False
9722        if not verify_incall_state(self.log, [ads[2]], False):
9723            return False
9724
9725        self.log.info("Step6: End call on PhoneB and verify PhoneA end.")
9726        if not self._hangup_call(ads[1], "PhoneB"):
9727            return False
9728        time.sleep(WAIT_TIME_IN_CALL)
9729        if not verify_incall_state(self.log, [ads[0], ads[1], ads[2]], False):
9730            return False
9731        return True
9732
9733    @TelephonyBaseTest.tel_test_wrap
9734    @test_tracker_info(uuid="03eb38b1-bd7f-457e-8b80-d58651d82741")
9735    def test_gsm_mo_mo_add_merge_drop(self):
9736        """ Test Conf Call among three phones.
9737
9738        Call from PhoneA to PhoneB, accept on PhoneB.
9739        Call from PhoneA to PhoneC, accept on PhoneC.
9740        On PhoneA, merge to conference call.
9741        End call on PhoneC, verify call continues.
9742        End call on PhoneB, verify call end on PhoneA.
9743
9744        Returns:
9745            True if pass; False if fail.
9746        """
9747        call_ab_id, call_ac_id = self._test_gsm_mo_mo_add_swap_x(0)
9748        if call_ab_id is None or call_ac_id is None:
9749            return False
9750
9751        return self._test_gsm_conference_merge_drop(call_ab_id, call_ac_id)
9752
9753    @TelephonyBaseTest.tel_test_wrap
9754    @test_tracker_info(uuid="3286306f-4d66-48c4-9303-f691c53bcfe0")
9755    def test_gsm_mo_mo_add_swap_once_drop_held(self):
9756        """ Test Conf Call among three phones.
9757
9758        Call from PhoneA to PhoneB, accept on PhoneB.
9759        Call from PhoneA to PhoneC, accept on PhoneC.
9760        On PhoneA, swap active call.
9761        End call on PhoneB, verify call continues.
9762        End call on PhoneC, verify call end on PhoneA.
9763
9764        Returns:
9765            True if pass; False if fail.
9766        """
9767        ads = self.android_devices
9768        call_ab_id, call_ac_id = self._test_gsm_mo_mo_add_swap_x(1)
9769        if call_ab_id is None or call_ac_id is None:
9770            return False
9771
9772        return self._three_phone_hangup_call_verify_call_state(
9773            ad_hangup=ads[2],
9774            ad_verify=ads[0],
9775            call_id=call_ab_id,
9776            call_state=CALL_STATE_ACTIVE,
9777            ads_active=[ads[0], ads[1]])
9778
9779    @TelephonyBaseTest.tel_test_wrap
9780    @test_tracker_info(uuid="af4ff690-be2a-42d8-930a-8258fe81c77e")
9781    def test_gsm_mt_mt_add_merge_drop(self):
9782        """ Test Conf Call among three phones.
9783
9784        Call from PhoneB to PhoneA, accept on PhoneA.
9785        Call from PhoneC to PhoneA, accept on PhoneA.
9786        On PhoneA, merge to conference call.
9787        End call on PhoneC, verify call continues.
9788        End call on PhoneB, verify call end on PhoneA.
9789
9790        Returns:
9791            True if pass; False if fail.
9792        """
9793        call_ab_id, call_ac_id = self._test_gsm_mt_mt_add_swap_x(0)
9794        if call_ab_id is None or call_ac_id is None:
9795            return False
9796
9797        return self._test_gsm_conference_merge_drop(call_ab_id, call_ac_id)
9798
9799    @TelephonyBaseTest.tel_test_wrap
9800    @test_tracker_info(uuid="6b70902e-ca59-4d92-9bfe-2116dcc91213")
9801    def test_gsm_mo_mo_add_swap_twice_drop_active(self):
9802        """Test swap feature in GSM call.
9803
9804        PhoneA (GSM) call PhoneB, accept on PhoneB.
9805        PhoneA (GSM) call PhoneC, accept on PhoneC.
9806        Swap active call on PhoneA.
9807        Swap active call on PhoneA.
9808        Hangup call from PhoneC, check if call continues between AB.
9809
9810        """
9811        ads = self.android_devices
9812
9813        call_ab_id, call_ac_id = self._test_gsm_mo_mo_add_swap_x(1)
9814        if call_ab_id is None or call_ac_id is None:
9815            return False
9816
9817        return self._three_phone_hangup_call_verify_call_state(
9818            ad_hangup=ads[2],
9819            ad_verify=ads[0],
9820            call_id=call_ab_id,
9821            call_state=self._get_expected_call_state(ads[0]),
9822            ads_active=[ads[0], ads[1]])
9823
9824    @TelephonyBaseTest.tel_test_wrap
9825    @test_tracker_info(uuid="a9ddf5a7-8399-4a8c-abc9-b9235b0153b0")
9826    def test_epdg_mo_mo_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_no_cep(
9827            self):
9828        """ Test WFC Conference Call among three phones. No CEP.
9829
9830        Steps:
9831        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
9832        2. PhoneA (WFC APM WiFi Preferred) call PhoneC (WFC APM WiFi Preferred), accept on PhoneC.
9833        3. On PhoneA, merge to conference call (No CEP).
9834        4. End call on PhoneC, verify call continues.
9835        5. End call on PhoneB, verify call end on PhoneA.
9836
9837        Expected Results:
9838        3. Conference merged successfully.
9839        4. Drop calls succeeded. Call between A-B continues.
9840        5. Drop calls succeeded, all call participants drop.
9841
9842        Returns:
9843            True if pass; False if fail.
9844
9845        TAGS: Telephony, WFC, Conference, No_CEP
9846        Priority: 1
9847        """
9848        ads = self.android_devices
9849
9850        tasks = [(phone_setup_iwlan,
9851                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9852                   self.wifi_network_ssid, self.wifi_network_pass)),
9853                 (phone_setup_iwlan,
9854                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9855                   self.wifi_network_ssid, self.wifi_network_pass)),
9856                 (phone_setup_iwlan,
9857                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9858                   self.wifi_network_ssid, self.wifi_network_pass))]
9859        if not multithread_func(self.log, tasks):
9860            self.log.error("Phone Failed to Set Up Properly.")
9861            return False
9862
9863        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
9864        if call_ab_id is None or call_ac_id is None:
9865            return False
9866
9867        return self._test_ims_conference_merge_drop_second_call_no_cep(
9868            call_ab_id, call_ac_id)
9869
9870    @TelephonyBaseTest.tel_test_wrap
9871    @test_tracker_info(uuid="5aaff055-3329-4077-91e8-5707a0f6a309")
9872    def test_epdg_mo_mo_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_cep(
9873            self):
9874        """ Test WFC Conference Call among three phones. CEP enabled.
9875
9876        Steps
9877        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
9878        2. PhoneA (WFC APM WiFi Preferred) call PhoneC (WFC APM WiFi Preferred), accept on PhoneC.
9879        3. On PhoneA, merge to conference call (WFC CEP conference call).
9880        4. End call on PhoneC, verify call continues.
9881        5. End call on PhoneB, verify call end on PhoneA.
9882
9883        Expected Results:
9884        3. Conference merged successfully.
9885        4. Drop calls succeeded. Call between A-B continues.
9886        5. Drop calls succeeded, all call participants drop.
9887
9888        Returns:
9889            True if pass; False if fail.
9890
9891        TAGS: Telephony, WFC, Conference, CEP
9892        Priority: 1
9893        """
9894        ads = self.android_devices
9895
9896        tasks = [(phone_setup_iwlan,
9897                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9898                   self.wifi_network_ssid, self.wifi_network_pass)),
9899                 (phone_setup_iwlan,
9900                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9901                   self.wifi_network_ssid, self.wifi_network_pass)),
9902                 (phone_setup_iwlan,
9903                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9904                   self.wifi_network_ssid, self.wifi_network_pass))]
9905        if not multithread_func(self.log, tasks):
9906            self.log.error("Phone Failed to Set Up Properly.")
9907            return False
9908
9909        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
9910        if call_ab_id is None or call_ac_id is None:
9911            return False
9912
9913        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
9914            call_ab_id, call_ac_id)
9915
9916    @TelephonyBaseTest.tel_test_wrap
9917    @test_tracker_info(uuid="d3624dd8-20bd-4f6b-8a81-0c8671987b84")
9918    def test_epdg_mo_mo_add_epdg_merge_drop_second_call_from_host_wfc_apm_wifi_preferred_cep(
9919            self):
9920        """ Test WFC Conference Call among three phones. CEP enabled.
9921
9922        Steps:
9923        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
9924        2. PhoneA (WFC APM WiFi Preferred) call PhoneC (WFC APM WiFi Preferred), accept on PhoneC.
9925        3. On PhoneA, merge to conference call (WFC CEP conference call).
9926        4. On PhoneA disconnect call between A-C, verify call continues.
9927        5. On PhoneA disconnect call between A-B, verify call continues.
9928
9929        Expected Results:
9930        3. Conference merged successfully.
9931        4. Drop calls succeeded. Call between A-B continues.
9932        5. Drop calls succeeded, all call participants drop.
9933
9934        Returns:
9935            True if pass; False if fail.
9936
9937        TAGS: Telephony, WFC, Conference, CEP
9938        Priority: 1
9939        """
9940        ads = self.android_devices
9941
9942        tasks = [(phone_setup_iwlan,
9943                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9944                   self.wifi_network_ssid, self.wifi_network_pass)),
9945                 (phone_setup_iwlan,
9946                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9947                   self.wifi_network_ssid, self.wifi_network_pass)),
9948                 (phone_setup_iwlan,
9949                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9950                   self.wifi_network_ssid, self.wifi_network_pass))]
9951        if not multithread_func(self.log, tasks):
9952            self.log.error("Phone Failed to Set Up Properly.")
9953            return False
9954
9955        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
9956        if call_ab_id is None or call_ac_id is None:
9957            return False
9958
9959        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
9960            call_ab_id, call_ac_id)
9961
9962    @TelephonyBaseTest.tel_test_wrap
9963    @test_tracker_info(uuid="ba43d88c-1347-4570-92d0-ebfa6404788f")
9964    def test_epdg_mo_mo_add_epdg_merge_drop_first_call_from_participant_wfc_apm_wifi_preferred_cep(
9965            self):
9966        """ Test WFC Conference Call among three phones. CEP enabled.
9967
9968        Steps:
9969        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
9970        2. PhoneA (WFC APM WiFi Preferred) call PhoneC (WFC APM WiFi Preferred), accept on PhoneC.
9971        3. On PhoneA, merge to conference call (WFC CEP conference call).
9972        4. End call on PhoneB, verify call continues.
9973        5. End call on PhoneC, verify call end on PhoneA.
9974
9975        Expected Results:
9976        3. Conference merged successfully.
9977        4. Drop calls succeeded. Call between A-C continues.
9978        5. Drop calls succeeded, all call participants drop.
9979
9980        Returns:
9981            True if pass; False if fail.
9982
9983        TAGS: Telephony, WFC, Conference, CEP
9984        Priority: 1
9985        """
9986        ads = self.android_devices
9987
9988        tasks = [(phone_setup_iwlan,
9989                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
9990                   self.wifi_network_ssid, self.wifi_network_pass)),
9991                 (phone_setup_iwlan,
9992                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
9993                   self.wifi_network_ssid, self.wifi_network_pass)),
9994                 (phone_setup_iwlan,
9995                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
9996                   self.wifi_network_ssid, self.wifi_network_pass))]
9997        if not multithread_func(self.log, tasks):
9998            self.log.error("Phone Failed to Set Up Properly.")
9999            return False
10000
10001        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
10002        if call_ab_id is None or call_ac_id is None:
10003            return False
10004
10005        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
10006            call_ab_id, call_ac_id)
10007
10008    @TelephonyBaseTest.tel_test_wrap
10009    @test_tracker_info(uuid="fbcd20ec-ebac-45c2-b228-30fdec42752f")
10010    def test_epdg_mo_mo_add_epdg_merge_drop_first_call_from_host_wfc_apm_wifi_preferred_cep(
10011            self):
10012        """ Test WFC Conference Call among three phones. CEP enabled.
10013
10014        Steps:
10015        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10016        2. PhoneA (WFC APM WiFi Preferred) call PhoneC (WFC APM WiFi Preferred), accept on PhoneC.
10017        3. On PhoneA, merge to conference call (WFC CEP conference call).
10018        4. On PhoneA disconnect call between A-B, verify call continues.
10019        5. On PhoneA disconnect call between A-C, verify call continues.
10020
10021        Expected Results:
10022        3. Conference merged successfully.
10023        4. Drop calls succeeded. Call between A-C continues.
10024        5. Drop calls succeeded, all call participants drop.
10025
10026        Returns:
10027            True if pass; False if fail.
10028
10029        TAGS: Telephony, WFC, Conference, CEP
10030        Priority: 1
10031        """
10032        ads = self.android_devices
10033
10034        tasks = [(phone_setup_iwlan,
10035                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10036                   self.wifi_network_ssid, self.wifi_network_pass)),
10037                 (phone_setup_iwlan,
10038                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10039                   self.wifi_network_ssid, self.wifi_network_pass)),
10040                 (phone_setup_iwlan,
10041                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10042                   self.wifi_network_ssid, self.wifi_network_pass))]
10043        if not multithread_func(self.log, tasks):
10044            self.log.error("Phone Failed to Set Up Properly.")
10045            return False
10046
10047        call_ab_id, call_ac_id = self._test_epdg_mo_mo_add_epdg_swap_x(0)
10048        if call_ab_id is None or call_ac_id is None:
10049            return False
10050
10051        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
10052            call_ab_id, call_ac_id)
10053
10054    @TelephonyBaseTest.tel_test_wrap
10055    @test_tracker_info(uuid="fc54b329-4ec6-45b2-8f91-0a5789542596")
10056    def test_epdg_mo_mt_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_no_cep(
10057            self):
10058        """ Test WFC Conference Call among three phones. No CEP.
10059
10060        Steps:
10061        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10062        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10063        3. On PhoneA, merge to conference call (No CEP).
10064        4. End call on PhoneC, verify call continues.
10065        5. End call on PhoneB, verify call end on PhoneA.
10066
10067        Expected Results:
10068        3. Conference merged successfully.
10069        4. Drop calls succeeded. Call between A-B continues.
10070        5. Drop calls succeeded, all call participants drop.
10071
10072        Returns:
10073            True if pass; False if fail.
10074
10075        TAGS: Telephony, WFC, Conference, No_CEP
10076        Priority: 1
10077        """
10078        ads = self.android_devices
10079
10080        tasks = [(phone_setup_iwlan,
10081                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10082                   self.wifi_network_ssid, self.wifi_network_pass)),
10083                 (phone_setup_iwlan,
10084                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10085                   self.wifi_network_ssid, self.wifi_network_pass)),
10086                 (phone_setup_iwlan,
10087                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10088                   self.wifi_network_ssid, self.wifi_network_pass))]
10089        if not multithread_func(self.log, tasks):
10090            self.log.error("Phone Failed to Set Up Properly.")
10091            return False
10092
10093        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
10094        if call_ab_id is None or call_ac_id is None:
10095            return False
10096
10097        return self._test_ims_conference_merge_drop_second_call_no_cep(
10098            call_ab_id, call_ac_id)
10099
10100    @TelephonyBaseTest.tel_test_wrap
10101    @test_tracker_info(uuid="64096e42-1fb2-4eb4-9f60-3e22c7ad5c83")
10102    def test_epdg_mo_mt_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_cep(
10103            self):
10104        """ Test WFC Conference Call among three phones. CEP enabled.
10105
10106        Steps
10107        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10108        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10109        3. On PhoneA, merge to conference call (WFC CEP conference call).
10110        4. End call on PhoneC, verify call continues.
10111        5. End call on PhoneB, verify call end on PhoneA.
10112
10113        Expected Results:
10114        3. Conference merged successfully.
10115        4. Drop calls succeeded. Call between A-B continues.
10116        5. Drop calls succeeded, all call participants drop.
10117
10118        Returns:
10119            True if pass; False if fail.
10120
10121        TAGS: Telephony, WFC, Conference, CEP
10122        Priority: 1
10123        """
10124        ads = self.android_devices
10125
10126        tasks = [(phone_setup_iwlan,
10127                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10128                   self.wifi_network_ssid, self.wifi_network_pass)),
10129                 (phone_setup_iwlan,
10130                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10131                   self.wifi_network_ssid, self.wifi_network_pass)),
10132                 (phone_setup_iwlan,
10133                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10134                   self.wifi_network_ssid, self.wifi_network_pass))]
10135        if not multithread_func(self.log, tasks):
10136            self.log.error("Phone Failed to Set Up Properly.")
10137            return False
10138
10139        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
10140        if call_ab_id is None or call_ac_id is None:
10141            return False
10142
10143        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
10144            call_ab_id, call_ac_id)
10145
10146    @TelephonyBaseTest.tel_test_wrap
10147    @test_tracker_info(uuid="24b6abb4-03c8-464c-a584-ca597bd67b46")
10148    def test_epdg_mo_mt_add_epdg_merge_drop_second_call_from_host_wfc_apm_wifi_preferred_cep(
10149            self):
10150        """ Test WFC Conference Call among three phones. CEP enabled.
10151
10152        Steps:
10153        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10154        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10155        3. On PhoneA, merge to conference call (WFC CEP conference call).
10156        4. On PhoneA disconnect call between A-C, verify call continues.
10157        5. On PhoneA disconnect call between A-B, verify call continues.
10158
10159        Expected Results:
10160        3. Conference merged successfully.
10161        4. Drop calls succeeded. Call between A-B continues.
10162        5. Drop calls succeeded, all call participants drop.
10163
10164        Returns:
10165            True if pass; False if fail.
10166
10167        TAGS: Telephony, WFC, Conference, CEP
10168        Priority: 1
10169        """
10170        ads = self.android_devices
10171
10172        tasks = [(phone_setup_iwlan,
10173                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10174                   self.wifi_network_ssid, self.wifi_network_pass)),
10175                 (phone_setup_iwlan,
10176                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10177                   self.wifi_network_ssid, self.wifi_network_pass)),
10178                 (phone_setup_iwlan,
10179                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10180                   self.wifi_network_ssid, self.wifi_network_pass))]
10181        if not multithread_func(self.log, tasks):
10182            self.log.error("Phone Failed to Set Up Properly.")
10183            return False
10184
10185        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
10186        if call_ab_id is None or call_ac_id is None:
10187            return False
10188
10189        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
10190            call_ab_id, call_ac_id)
10191
10192    @TelephonyBaseTest.tel_test_wrap
10193    @test_tracker_info(uuid="f54776e4-84c0-43db-8724-f012ef551ebd")
10194    def test_epdg_mo_mt_add_epdg_merge_drop_first_call_from_participant_wfc_apm_wifi_preferred_cep(
10195            self):
10196        """ Test WFC Conference Call among three phones. CEP enabled.
10197
10198        Steps:
10199        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10200        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10201        3. On PhoneA, merge to conference call (WFC CEP conference call).
10202        4. End call on PhoneB, verify call continues.
10203        5. End call on PhoneC, verify call end on PhoneA.
10204
10205        Expected Results:
10206        3. Conference merged successfully.
10207        4. Drop calls succeeded. Call between A-C continues.
10208        5. Drop calls succeeded, all call participants drop.
10209
10210        Returns:
10211            True if pass; False if fail.
10212
10213        TAGS: Telephony, WFC, Conference, CEP
10214        Priority: 1
10215        """
10216        ads = self.android_devices
10217
10218        tasks = [(phone_setup_iwlan,
10219                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10220                   self.wifi_network_ssid, self.wifi_network_pass)),
10221                 (phone_setup_iwlan,
10222                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10223                   self.wifi_network_ssid, self.wifi_network_pass)),
10224                 (phone_setup_iwlan,
10225                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10226                   self.wifi_network_ssid, self.wifi_network_pass))]
10227        if not multithread_func(self.log, tasks):
10228            self.log.error("Phone Failed to Set Up Properly.")
10229            return False
10230
10231        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
10232        if call_ab_id is None or call_ac_id is None:
10233            return False
10234
10235        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
10236            call_ab_id, call_ac_id)
10237
10238    @TelephonyBaseTest.tel_test_wrap
10239    @test_tracker_info(uuid="6635aeff-f10a-4fb0-b658-4f1e7f2d9a68")
10240    def test_epdg_mo_mt_add_epdg_merge_drop_first_call_from_host_wfc_apm_wifi_preferred_cep(
10241            self):
10242        """ Test WFC Conference Call among three phones. CEP enabled.
10243
10244        Steps:
10245        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10246        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10247        3. On PhoneA, merge to conference call (WFC CEP conference call).
10248        4. On PhoneA disconnect call between A-B, verify call continues.
10249        5. On PhoneA disconnect call between A-C, verify call continues.
10250
10251        Expected Results:
10252        3. Conference merged successfully.
10253        4. Drop calls succeeded. Call between A-C continues.
10254        5. Drop calls succeeded, all call participants drop.
10255
10256        Returns:
10257            True if pass; False if fail.
10258
10259        TAGS: Telephony, WFC, Conference, CEP
10260        Priority: 1
10261        """
10262        ads = self.android_devices
10263
10264        tasks = [(phone_setup_iwlan,
10265                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10266                   self.wifi_network_ssid, self.wifi_network_pass)),
10267                 (phone_setup_iwlan,
10268                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10269                   self.wifi_network_ssid, self.wifi_network_pass)),
10270                 (phone_setup_iwlan,
10271                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10272                   self.wifi_network_ssid, self.wifi_network_pass))]
10273        if not multithread_func(self.log, tasks):
10274            self.log.error("Phone Failed to Set Up Properly.")
10275            return False
10276
10277        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(0)
10278        if call_ab_id is None or call_ac_id is None:
10279            return False
10280
10281        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
10282            call_ab_id, call_ac_id)
10283
10284    @TelephonyBaseTest.tel_test_wrap
10285    @test_tracker_info(uuid="c2534477-74ff-43ca-920a-48238928f344")
10286    def test_epdg_mt_mt_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_no_cep(
10287            self):
10288        """ Test WFC Conference Call among three phones. No CEP.
10289
10290        Steps:
10291        1. PhoneB (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10292        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10293        3. On PhoneA, merge to conference call (No CEP).
10294        4. End call on PhoneC, verify call continues.
10295        5. End call on PhoneB, verify call end on PhoneA.
10296
10297        Expected Results:
10298        3. Conference merged successfully.
10299        4. Drop calls succeeded. Call between A-B continues.
10300        5. Drop calls succeeded, all call participants drop.
10301
10302        Returns:
10303            True if pass; False if fail.
10304
10305        TAGS: Telephony, WFC, Conference, No_CEP
10306        Priority: 1
10307        """
10308        ads = self.android_devices
10309
10310        tasks = [(phone_setup_iwlan,
10311                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10312                   self.wifi_network_ssid, self.wifi_network_pass)),
10313                 (phone_setup_iwlan,
10314                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10315                   self.wifi_network_ssid, self.wifi_network_pass)),
10316                 (phone_setup_iwlan,
10317                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10318                   self.wifi_network_ssid, self.wifi_network_pass))]
10319        if not multithread_func(self.log, tasks):
10320            self.log.error("Phone Failed to Set Up Properly.")
10321            return False
10322
10323        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
10324        if call_ab_id is None or call_ac_id is None:
10325            return False
10326
10327        return self._test_ims_conference_merge_drop_second_call_no_cep(
10328            call_ab_id, call_ac_id)
10329
10330    @TelephonyBaseTest.tel_test_wrap
10331    @test_tracker_info(uuid="ef5ea03d-1c1b-4c9a-a72d-14b2ba7e87cb")
10332    def test_epdg_mt_mt_add_epdg_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_cep(
10333            self):
10334        """ Test WFC Conference Call among three phones. CEP enabled.
10335
10336        Steps
10337        1. PhoneB (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10338        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10339        3. On PhoneA, merge to conference call (WFC CEP conference call).
10340        4. End call on PhoneC, verify call continues.
10341        5. End call on PhoneB, verify call end on PhoneA.
10342
10343        Expected Results:
10344        3. Conference merged successfully.
10345        4. Drop calls succeeded. Call between A-B continues.
10346        5. Drop calls succeeded, all call participants drop.
10347
10348        Returns:
10349            True if pass; False if fail.
10350
10351        TAGS: Telephony, WFC, Conference, CEP
10352        Priority: 1
10353        """
10354        ads = self.android_devices
10355
10356        tasks = [(phone_setup_iwlan,
10357                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10358                   self.wifi_network_ssid, self.wifi_network_pass)),
10359                 (phone_setup_iwlan,
10360                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10361                   self.wifi_network_ssid, self.wifi_network_pass)),
10362                 (phone_setup_iwlan,
10363                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10364                   self.wifi_network_ssid, self.wifi_network_pass))]
10365        if not multithread_func(self.log, tasks):
10366            self.log.error("Phone Failed to Set Up Properly.")
10367            return False
10368
10369        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
10370        if call_ab_id is None or call_ac_id is None:
10371            return False
10372
10373        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
10374            call_ab_id, call_ac_id)
10375
10376    @TelephonyBaseTest.tel_test_wrap
10377    @test_tracker_info(uuid="b0df507f-2adf-45fe-a174-44f62718296e")
10378    def test_epdg_mt_mt_add_epdg_merge_drop_second_call_from_host_wfc_apm_wifi_preferred_cep(
10379            self):
10380        """ Test WFC Conference Call among three phones. CEP enabled.
10381
10382        Steps:
10383        1. PhoneB (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10384        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10385        3. On PhoneA, merge to conference call (WFC CEP conference call).
10386        4. On PhoneA disconnect call between A-C, verify call continues.
10387        5. On PhoneA disconnect call between A-B, verify call continues.
10388
10389        Expected Results:
10390        3. Conference merged successfully.
10391        4. Drop calls succeeded. Call between A-B continues.
10392        5. Drop calls succeeded, all call participants drop.
10393
10394        Returns:
10395            True if pass; False if fail.
10396
10397        TAGS: Telephony, WFC, Conference, CEP
10398        Priority: 1
10399        """
10400        ads = self.android_devices
10401
10402        tasks = [(phone_setup_iwlan,
10403                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10404                   self.wifi_network_ssid, self.wifi_network_pass)),
10405                 (phone_setup_iwlan,
10406                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10407                   self.wifi_network_ssid, self.wifi_network_pass)),
10408                 (phone_setup_iwlan,
10409                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10410                   self.wifi_network_ssid, self.wifi_network_pass))]
10411        if not multithread_func(self.log, tasks):
10412            self.log.error("Phone Failed to Set Up Properly.")
10413            return False
10414
10415        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
10416        if call_ab_id is None or call_ac_id is None:
10417            return False
10418
10419        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
10420            call_ab_id, call_ac_id)
10421
10422    @TelephonyBaseTest.tel_test_wrap
10423    @test_tracker_info(uuid="278c6bec-7065-4f54-9834-33d8a6172f58")
10424    def test_epdg_mt_mt_add_epdg_merge_drop_first_call_from_participant_wfc_apm_wifi_preferred_cep(
10425            self):
10426        """ Test WFC Conference Call among three phones. CEP enabled.
10427
10428        Steps:
10429        1. PhoneB (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10430        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10431        3. On PhoneA, merge to conference call (WFC CEP conference call).
10432        4. End call on PhoneB, verify call continues.
10433        5. End call on PhoneC, verify call end on PhoneA.
10434
10435        Expected Results:
10436        3. Conference merged successfully.
10437        4. Drop calls succeeded. Call between A-C continues.
10438        5. Drop calls succeeded, all call participants drop.
10439
10440        Returns:
10441            True if pass; False if fail.
10442
10443        TAGS: Telephony, WFC, Conference, CEP
10444        Priority: 1
10445        """
10446        ads = self.android_devices
10447
10448        tasks = [(phone_setup_iwlan,
10449                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10450                   self.wifi_network_ssid, self.wifi_network_pass)),
10451                 (phone_setup_iwlan,
10452                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10453                   self.wifi_network_ssid, self.wifi_network_pass)),
10454                 (phone_setup_iwlan,
10455                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10456                   self.wifi_network_ssid, self.wifi_network_pass))]
10457        if not multithread_func(self.log, tasks):
10458            self.log.error("Phone Failed to Set Up Properly.")
10459            return False
10460
10461        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
10462        if call_ab_id is None or call_ac_id is None:
10463            return False
10464
10465        return self._test_ims_conference_merge_drop_first_call_from_participant_cep(
10466            call_ab_id, call_ac_id)
10467
10468    @TelephonyBaseTest.tel_test_wrap
10469    @test_tracker_info(uuid="1ffceadc-8bd1-489d-bb66-4b3081df3a64")
10470    def test_epdg_mt_mt_add_epdg_merge_drop_first_call_from_host_wfc_apm_wifi_preferred_cep(
10471            self):
10472        """ Test WFC Conference Call among three phones. CEP enabled.
10473
10474        Steps:
10475        1. PhoneB (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10476        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10477        3. On PhoneA, merge to conference call (WFC CEP conference call).
10478        4. On PhoneA disconnect call between A-B, verify call continues.
10479        5. On PhoneA disconnect call between A-C, verify call continues.
10480
10481        Expected Results:
10482        3. Conference merged successfully.
10483        4. Drop calls succeeded. Call between A-C continues.
10484        5. Drop calls succeeded, all call participants drop.
10485
10486        Returns:
10487            True if pass; False if fail.
10488
10489        TAGS: Telephony, WFC, Conference, CEP
10490        Priority: 1
10491        """
10492        ads = self.android_devices
10493
10494        tasks = [(phone_setup_iwlan,
10495                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10496                   self.wifi_network_ssid, self.wifi_network_pass)),
10497                 (phone_setup_iwlan,
10498                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10499                   self.wifi_network_ssid, self.wifi_network_pass)),
10500                 (phone_setup_iwlan,
10501                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10502                   self.wifi_network_ssid, self.wifi_network_pass))]
10503        if not multithread_func(self.log, tasks):
10504            self.log.error("Phone Failed to Set Up Properly.")
10505            return False
10506
10507        call_ab_id, call_ac_id = self._test_epdg_mt_mt_add_epdg_swap_x(0)
10508        if call_ab_id is None or call_ac_id is None:
10509            return False
10510
10511        return self._test_ims_conference_merge_drop_first_call_from_host_cep(
10512            call_ab_id, call_ac_id)
10513
10514    @TelephonyBaseTest.tel_test_wrap
10515    @test_tracker_info(uuid="b3dfaa38-8e9b-45b7-8e4e-6e6ca10887bd")
10516    def test_epdg_mo_mt_add_epdg_swap_once_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_no_cep(
10517            self):
10518        """ Test swap and merge features in WFC call. No CEP.
10519
10520        Steps:
10521        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10522        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10523        3. Swap active call on PhoneA.
10524        4. On PhoneA, merge to conference call (No CEP).
10525        5. End call on PhoneC, verify call continues.
10526        6. End call on PhoneB, verify call end on PhoneA.
10527
10528        Expected Results:
10529        3. Swap operation succeeded.
10530        4. Conference merged successfully.
10531        5. Drop calls succeeded. Call between A-B continues.
10532        6. Drop calls succeeded, all call participants drop.
10533
10534        Returns:
10535            True if pass; False if fail.
10536
10537        TAGS: Telephony, WFC, Conference, No_CEP
10538        Priority: 1
10539        """
10540        ads = self.android_devices
10541
10542        tasks = [(phone_setup_iwlan,
10543                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10544                   self.wifi_network_ssid, self.wifi_network_pass)),
10545                 (phone_setup_iwlan,
10546                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10547                   self.wifi_network_ssid, self.wifi_network_pass)),
10548                 (phone_setup_iwlan,
10549                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10550                   self.wifi_network_ssid, self.wifi_network_pass))]
10551        if not multithread_func(self.log, tasks):
10552            self.log.error("Phone Failed to Set Up Properly.")
10553            return False
10554
10555        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
10556        if call_ab_id is None or call_ac_id is None:
10557            return False
10558
10559        return self._test_ims_conference_merge_drop_second_call_no_cep(
10560            call_ab_id, call_ac_id)
10561
10562    @TelephonyBaseTest.tel_test_wrap
10563    @test_tracker_info(uuid="eb82f1ac-e5a3-42bc-b9d9-806442263f79")
10564    def test_epdg_mo_mt_add_epdg_swap_once_merge_drop_second_call_from_host_wfc_apm_wifi_preferred_cep(
10565            self):
10566        """ Test swap and merge features in WFC call. CEP enabled.
10567
10568        Steps:
10569        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10570        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10571        3. Swap active call on PhoneA.
10572        4. On PhoneA, merge to conference call (WFC CEP conference call).
10573        5. On PhoneA disconnect call between A-C, verify call continues.
10574        6. On PhoneA disconnect call between A-B, verify call continues.
10575
10576        Expected Results:
10577        3. Swap operation succeeded.
10578        4. Conference merged successfully.
10579        5. Drop calls succeeded. Call between A-B continues.
10580        6. Drop calls succeeded, all call participants drop.
10581
10582        Returns:
10583            True if pass; False if fail.
10584
10585        TAGS: Telephony, WFC, Conference, CEP
10586        Priority: 1
10587        """
10588        ads = self.android_devices
10589
10590        tasks = [(phone_setup_iwlan,
10591                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10592                   self.wifi_network_ssid, self.wifi_network_pass)),
10593                 (phone_setup_iwlan,
10594                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10595                   self.wifi_network_ssid, self.wifi_network_pass)),
10596                 (phone_setup_iwlan,
10597                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10598                   self.wifi_network_ssid, self.wifi_network_pass))]
10599        if not multithread_func(self.log, tasks):
10600            self.log.error("Phone Failed to Set Up Properly.")
10601            return False
10602
10603        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
10604        if call_ab_id is None or call_ac_id is None:
10605            return False
10606
10607        return self._test_ims_conference_merge_drop_second_call_from_host_cep(
10608            call_ab_id, call_ac_id)
10609
10610    @TelephonyBaseTest.tel_test_wrap
10611    @test_tracker_info(uuid="53ba057d-5c5c-4236-9ff9-829177e6f51e")
10612    def test_epdg_mo_mt_add_epdg_swap_once_merge_drop_second_call_from_participant_wfc_apm_wifi_preferred_cep(
10613            self):
10614        """ Test swap and merge features in WFC call. CEP enabled.
10615
10616        Steps:
10617        1. PhoneA (WFC APM WiFi Preferred) call PhoneB (WFC APM WiFi Preferred), accept on PhoneB.
10618        2. PhoneC (WFC APM WiFi Preferred) call PhoneA (WFC APM WiFi Preferred), accept on PhoneA.
10619        3. Swap active call on PhoneA.
10620        4. On PhoneA, merge to conference call (WFC CEP conference call).
10621        5. End call on PhoneC, verify call continues.
10622        6. End call on PhoneB, verify call end on PhoneA.
10623
10624        Expected Results:
10625        3. Swap operation succeeded.
10626        4. Conference merged successfully.
10627        5. Drop calls succeeded. Call between A-B continues.
10628        6. Drop calls succeeded, all call participants drop.
10629
10630        Returns:
10631            True if pass; False if fail.
10632
10633        TAGS: Telephony, WFC, Conference, CEP
10634        Priority: 1
10635        """
10636        ads = self.android_devices
10637
10638        tasks = [(phone_setup_iwlan,
10639                  (self.log, ads[0], True, WFC_MODE_WIFI_PREFERRED,
10640                   self.wifi_network_ssid, self.wifi_network_pass)),
10641                 (phone_setup_iwlan,
10642                  (self.log, ads[1], True, WFC_MODE_WIFI_PREFERRED,
10643                   self.wifi_network_ssid, self.wifi_network_pass)),
10644                 (phone_setup_iwlan,
10645                  (self.log, ads[2], True, WFC_MODE_WIFI_PREFERRED,
10646                   self.wifi_network_ssid, self.wifi_network_pass))]
10647        if not multithread_func(self.log, tasks):
10648            self.log.error("Phone Failed to Set Up Properly.")
10649            return False
10650
10651        call_ab_id, call_ac_id = self._test_epdg_mo_mt_add_epdg_swap_x(1)
10652        if call_ab_id is None or call_ac_id is None:
10653            return False
10654
10655        return self._test_ims_conference_merge_drop_second_call_from_participant_cep(
10656            call_ab_id, call_ac_id)
10657
10658    @TelephonyBaseTest.tel_test_wrap
10659    @test_tracker_info(uuid="a246cbd0-915d-4068-8d63-7e099d41fd43")
10660    def test_wcdma_add_mt_decline(self):
10661        ads = self.android_devices
10662
10663        tasks = [(phone_setup_3g, (self.log, ads[0])),
10664                 (phone_setup_voice_general, (self.log, ads[1])),
10665                 (phone_setup_voice_general, (self.log, ads[2]))]
10666        if not multithread_func(self.log, tasks):
10667            self.log.error("Phone Failed to Set Up Properly.")
10668            return False
10669
10670        if not self._three_phone_call_mo_add_mt_reject(
10671            [ads[0], ads[1], ads[2]], [is_phone_in_call_wcdma, None], True):
10672            return False
10673        return True
10674
10675    @TelephonyBaseTest.tel_test_wrap
10676    @test_tracker_info(uuid="2789388a-c67c-4c37-a4ea-98c9083abcf9")
10677    def test_wcdma_add_mt_ignore(self):
10678        ads = self.android_devices
10679
10680        tasks = [(phone_setup_3g, (self.log, ads[0])),
10681                 (phone_setup_voice_general, (self.log, ads[1])),
10682                 (phone_setup_voice_general, (self.log, ads[2]))]
10683        if not multithread_func(self.log, tasks):
10684            self.log.error("Phone Failed to Set Up Properly.")
10685            return False
10686
10687        if not self._three_phone_call_mo_add_mt_reject(
10688            [ads[0], ads[1], ads[2]], [is_phone_in_call_wcdma, None], False):
10689            return False
10690        return True
10691
10692    @TelephonyBaseTest.tel_test_wrap
10693    @test_tracker_info(uuid="8f5399b2-5075-45b2-b916-2d436d1c1c93")
10694    def test_1x_add_mt_decline(self):
10695        ads = self.android_devices
10696
10697        tasks = [(phone_setup_3g, (self.log, ads[0])),
10698                 (phone_setup_voice_general, (self.log, ads[1])),
10699                 (phone_setup_voice_general, (self.log, ads[2]))]
10700        if not multithread_func(self.log, tasks):
10701            self.log.error("Phone Failed to Set Up Properly.")
10702            return False
10703
10704        if not self._three_phone_call_mo_add_mt_reject(
10705            [ads[0], ads[1], ads[2]], [is_phone_in_call_1x, None], True):
10706            return False
10707        return True
10708
10709    @TelephonyBaseTest.tel_test_wrap
10710    @test_tracker_info(uuid="a7e6ea10-d4d4-4089-a012-31565314cf65")
10711    def test_1x_add_mt_ignore(self):
10712        ads = self.android_devices
10713
10714        tasks = [(phone_setup_3g, (self.log, ads[0])),
10715                 (phone_setup_voice_general, (self.log, ads[1])),
10716                 (phone_setup_voice_general, (self.log, ads[2]))]
10717        if not multithread_func(self.log, tasks):
10718            self.log.error("Phone Failed to Set Up Properly.")
10719            return False
10720
10721        if not self._three_phone_call_mo_add_mt_reject(
10722            [ads[0], ads[1], ads[2]], [is_phone_in_call_1x, None], False):
10723            return False
10724        return True
10725
10726    @TelephonyBaseTest.tel_test_wrap
10727    @test_tracker_info(uuid="c7d878f6-2f1c-4029-bcf9-2aecf2d202e7")
10728    def test_volte_add_mt_decline(self):
10729        ads = self.android_devices
10730
10731        tasks = [(phone_setup_volte, (self.log, ads[0])),
10732                 (phone_setup_voice_general, (self.log, ads[1])),
10733                 (phone_setup_voice_general, (self.log, ads[2]))]
10734        if not multithread_func(self.log, tasks):
10735            self.log.error("Phone Failed to Set Up Properly.")
10736            return False
10737
10738        if not self._three_phone_call_mo_add_mt_reject(
10739            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], True):
10740            return False
10741        return True
10742
10743    @TelephonyBaseTest.tel_test_wrap
10744    @test_tracker_info(uuid="4f03240f-88a7-4d39-9d90-6327e835d5e2")
10745    def test_volte_add_mt_ignore(self):
10746        ads = self.android_devices
10747
10748        tasks = [(phone_setup_volte, (self.log, ads[0])),
10749                 (phone_setup_voice_general, (self.log, ads[1])),
10750                 (phone_setup_voice_general, (self.log, ads[2]))]
10751        if not multithread_func(self.log, tasks):
10752            self.log.error("Phone Failed to Set Up Properly.")
10753            return False
10754
10755        if not self._three_phone_call_mo_add_mt_reject(
10756            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], False):
10757            return False
10758        return True
10759
10760    @TelephonyBaseTest.tel_test_wrap
10761    @test_tracker_info(uuid="ce51844a-4879-470e-9a22-4eafe25f8e2a")
10762    def test_wfc_lte_add_mt_decline(self):
10763        ads = self.android_devices
10764
10765        tasks = [(phone_setup_iwlan,
10766                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
10767                   self.wifi_network_ssid, self.wifi_network_pass)),
10768                 (phone_setup_voice_general, (self.log, ads[1])),
10769                 (phone_setup_voice_general, (self.log, ads[2]))]
10770        if not multithread_func(self.log, tasks):
10771            self.log.error("Phone Failed to Set Up Properly.")
10772            return False
10773
10774        if not self._three_phone_call_mo_add_mt_reject(
10775            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], True):
10776            return False
10777        return True
10778
10779    @TelephonyBaseTest.tel_test_wrap
10780    @test_tracker_info(uuid="b5058cd0-4073-4018-9683-335fd27ab529")
10781    def test_wfc_lte_add_mt_ignore(self):
10782        ads = self.android_devices
10783
10784        tasks = [(phone_setup_iwlan,
10785                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
10786                   self.wifi_network_ssid, self.wifi_network_pass)),
10787                 (phone_setup_voice_general, (self.log, ads[1])),
10788                 (phone_setup_voice_general, (self.log, ads[2]))]
10789        if not multithread_func(self.log, tasks):
10790            self.log.error("Phone Failed to Set Up Properly.")
10791            return False
10792
10793        if not self._three_phone_call_mo_add_mt_reject(
10794            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], False):
10795            return False
10796        return True
10797
10798    @TelephonyBaseTest.tel_test_wrap
10799    @test_tracker_info(uuid="456e0a04-7d82-4387-89bb-80613732412e")
10800    def test_wfc_apm_add_mt_decline(self):
10801        ads = self.android_devices
10802
10803        tasks = [(phone_setup_iwlan,
10804                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
10805                   self.wifi_network_ssid, self.wifi_network_pass)),
10806                 (phone_setup_voice_general, (self.log, ads[1])),
10807                 (phone_setup_voice_general, (self.log, ads[2]))]
10808        if not multithread_func(self.log, tasks):
10809            self.log.error("Phone Failed to Set Up Properly.")
10810            return False
10811
10812        if not self._three_phone_call_mo_add_mt_reject(
10813            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], True):
10814            return False
10815        return True
10816
10817    @TelephonyBaseTest.tel_test_wrap
10818    @test_tracker_info(uuid="ee71fc98-9e52-406f-8d8a-6d9c62cbe6f4")
10819    def test_wfc_apm_add_mt_ignore(self):
10820        ads = self.android_devices
10821
10822        tasks = [(phone_setup_iwlan,
10823                  (self.log, ads[0], False, WFC_MODE_WIFI_PREFERRED,
10824                   self.wifi_network_ssid, self.wifi_network_pass)),
10825                 (phone_setup_voice_general, (self.log, ads[1])),
10826                 (phone_setup_voice_general, (self.log, ads[2]))]
10827        if not multithread_func(self.log, tasks):
10828            self.log.error("Phone Failed to Set Up Properly.")
10829            return False
10830
10831        if not self._three_phone_call_mo_add_mt_reject(
10832            [ads[0], ads[1], ads[2]], [is_phone_in_call_volte, None], False):
10833            return False
10834        return True
10835
10836    """ Tests End """
10837