• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2021 - 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 5G Voice Conference scenarios
18"""
19
20from acts import signals
21from acts.test_decorators import test_tracker_info
22from acts.libs.utils.multithread import multithread_func
23from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
24from acts_contrib.test_utils.tel.tel_defines import CALL_STATE_ACTIVE
25from acts_contrib.test_utils.tel.tel_defines import CAPABILITY_CONFERENCE
26from acts_contrib.test_utils.tel.tel_defines import GEN_5G
27from acts_contrib.test_utils.tel.tel_5g_test_utils import provision_device_for_5g
28from acts_contrib.test_utils.tel.tel_phone_setup_utils import ensure_phones_idle
29from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_voice_general
30from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_voice_3g
31from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_volte
32from acts_contrib.test_utils.tel.tel_ss_utils import three_phone_call_forwarding_short_seq
33from acts_contrib.test_utils.tel.tel_ss_utils import three_phone_call_waiting_short_seq
34from acts_contrib.test_utils.tel.tel_subscription_utils import get_outgoing_voice_sub_id
35from acts_contrib.test_utils.tel.tel_test_utils import get_capability_for_subscription
36from acts_contrib.test_utils.tel.tel_test_utils import install_dialer_apk
37from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
38from acts_contrib.test_utils.tel.tel_voice_utils import is_phone_in_call_wcdma
39from acts_contrib.test_utils.tel.tel_voice_conf_utils import _get_expected_call_state
40from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_ims_conference_merge_drop_first_call_from_host
41from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_ims_conference_merge_drop_first_call_from_participant
42from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_ims_conference_merge_drop_second_call_from_host
43from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_ims_conference_merge_drop_second_call_from_participant
44from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_call_mo_mo_add_swap_x
45from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_call_mo_mt_add_swap_x
46from acts_contrib.test_utils.tel.tel_voice_conf_utils import _test_call_mt_mt_add_swap_x
47from acts_contrib.test_utils.tel.tel_voice_conf_utils import _three_phone_hangup_call_verify_call_state
48
49
50class Nsa5gVoiceConfTest(TelephonyBaseTest):
51    def setup_class(self):
52        TelephonyBaseTest.setup_class(self)
53        if not get_capability_for_subscription(
54                self.android_devices[0], CAPABILITY_CONFERENCE,
55                get_outgoing_voice_sub_id(self.android_devices[0])):
56            self.android_devices[0].log.error(
57                "Conference call is not supported, abort test.")
58            raise signals.TestAbortClass(
59                "Conference call is not supported, abort test.")
60
61        self.dialer_util = self.user_params.get("dialer_apk", None)
62        if isinstance(self.dialer_util, list):
63            self.dialer_util = self.dialer_util[0]
64
65        if self.dialer_util:
66            ads = self.android_devices
67            for ad in ads:
68                install_dialer_apk(ad, self.dialer_util)
69
70    def teardown_test(self):
71        ensure_phones_idle(self.log, self.android_devices)
72
73    """ Tests Begin """
74
75    @TelephonyBaseTest.tel_test_wrap
76    @test_tracker_info(uuid="68a8be5b-a5e0-4475-a5bd-42adfdb6535f")
77    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_merge_drop_second_call_from_participant(
78            self):
79        """ Test nsa 5g VoLTE Conference Call among three phones.
80
81        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
82        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
83        3. On PhoneA, merge to conference call.
84        4. End call on PhoneC, verify call continues.
85        5. End call on PhoneB, verify call end on PhoneA.
86
87        Returns:
88            True if pass; False if fail.
89        """
90        ads = self.android_devices
91        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
92            log=self.log,
93            ads=ads,
94            num_swaps=0,
95            phone_setup_a=provision_device_for_5g,
96            phone_setup_b=provision_device_for_5g,
97            phone_setup_c=provision_device_for_5g,
98            verify_phone_a_network_subscription=is_phone_in_call_volte,
99            verify_phone_b_network_subscription=is_phone_in_call_volte,
100            verify_phone_c_network_subscription=is_phone_in_call_volte)
101        if call_ab_id is None or call_ac_id is None:
102            return False
103
104        return _test_ims_conference_merge_drop_second_call_from_participant(
105            self.log, ads, call_ab_id, call_ac_id)
106
107    @TelephonyBaseTest.tel_test_wrap
108    @test_tracker_info(uuid="bd828db0-dcc5-4d49-b049-48dd76f5f2f0")
109    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_merge_drop_second_call_from_host(
110            self):
111        """ Test nsa 5g VoLTE Conference Call among three phones.
112
113        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
114        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
115        3. On PhoneA, merge to conference call.
116        4. On PhoneA disconnect call between A-C, verify call continues.
117        5. On PhoneA disconnect call between A-B, verify call continues.
118
119        Returns:
120            True if pass; False if fail.
121        """
122        ads = self.android_devices
123        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
124            log=self.log,
125            ads=ads,
126            num_swaps=0,
127            phone_setup_a=provision_device_for_5g,
128            phone_setup_b=provision_device_for_5g,
129            phone_setup_c=provision_device_for_5g,
130            verify_phone_a_network_subscription=is_phone_in_call_volte,
131            verify_phone_b_network_subscription=is_phone_in_call_volte,
132            verify_phone_c_network_subscription=is_phone_in_call_volte)
133        if call_ab_id is None or call_ac_id is None:
134            return False
135
136        return _test_ims_conference_merge_drop_second_call_from_host(
137            self.log, ads, call_ab_id, call_ac_id)
138
139    @TelephonyBaseTest.tel_test_wrap
140    @test_tracker_info(uuid="5c3a3370-094d-43ff-b024-58a8a2983274")
141    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_merge_drop_first_call_from_participant(
142            self):
143        """ Test nsa 5g VoLTE Conference Call among three phones.
144
145        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
146        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
147        3. On PhoneA, merge to conference call.
148        4. End call on PhoneB, verify call continues.
149        5. End call on PhoneC, verify call end on PhoneA.
150
151        Returns:
152            True if pass; False if fail.
153        """
154        ads = self.android_devices
155        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
156            log=self.log,
157            ads=ads,
158            num_swaps=0,
159            phone_setup_a=provision_device_for_5g,
160            phone_setup_b=provision_device_for_5g,
161            phone_setup_c=provision_device_for_5g,
162            verify_phone_a_network_subscription=is_phone_in_call_volte,
163            verify_phone_b_network_subscription=is_phone_in_call_volte,
164            verify_phone_c_network_subscription=is_phone_in_call_volte)
165        if call_ab_id is None or call_ac_id is None:
166            return False
167
168        return _test_ims_conference_merge_drop_first_call_from_participant(
169            self.log, ads, call_ab_id, call_ac_id)
170
171    @TelephonyBaseTest.tel_test_wrap
172    @test_tracker_info(uuid="9ae61738-925b-44f8-b3a7-0e58f2ebd6ec")
173    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_merge_drop_first_call_from_host(
174            self):
175        """ Test nsa 5g VoLTE Conference Call among three phones.
176
177        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
178        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
179        3. On PhoneA, merge to conference call.
180        4. On PhoneA disconnect call between A-B, verify call continues.
181        5. On PhoneA disconnect call between A-C, verify call continues.
182
183        Returns:
184            True if pass; False if fail.
185        """
186        ads = self.android_devices
187        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
188            log=self.log,
189            ads=ads,
190            num_swaps=0,
191            phone_setup_a=provision_device_for_5g,
192            phone_setup_b=provision_device_for_5g,
193            phone_setup_c=provision_device_for_5g,
194            verify_phone_a_network_subscription=is_phone_in_call_volte,
195            verify_phone_b_network_subscription=is_phone_in_call_volte,
196            verify_phone_c_network_subscription=is_phone_in_call_volte)
197        if call_ab_id is None or call_ac_id is None:
198            return False
199
200        return _test_ims_conference_merge_drop_first_call_from_host(
201            self.log, ads, call_ab_id, call_ac_id)
202
203    @TelephonyBaseTest.tel_test_wrap
204    @test_tracker_info(uuid="e3488699-9eb1-4a66-a2bd-b229c51e63c9")
205    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_merge_drop_second_call_from_participant(
206            self):
207        """ Test nsa 5g VoLTE Conference Call among three phones.
208
209        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
210        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
211        3. On PhoneA, merge to conference call.
212        4. End call on PhoneC, verify call continues.
213        5. End call on PhoneB, verify call end on PhoneA.
214
215        Returns:
216            True if pass; False if fail.
217        """
218        ads = self.android_devices
219        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
220            log=self.log,
221            ads=ads,
222            num_swaps=0,
223            phone_setup_a=provision_device_for_5g,
224            phone_setup_b=provision_device_for_5g,
225            phone_setup_c=provision_device_for_5g,
226            verify_phone_a_network_subscription=is_phone_in_call_volte,
227            verify_phone_b_network_subscription=is_phone_in_call_volte,
228            verify_phone_c_network_subscription=is_phone_in_call_volte)
229        if call_ab_id is None or call_ac_id is None:
230            return False
231
232        return _test_ims_conference_merge_drop_second_call_from_participant(
233            self.log, ads, call_ab_id, call_ac_id)
234
235    @TelephonyBaseTest.tel_test_wrap
236    @test_tracker_info(uuid="15b23934-ac8c-4c3a-9967-c19e46c0d86b")
237    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_merge_drop_second_call_from_host(
238            self):
239        """ Test nsa 5g VoLTE Conference Call among three phones.
240
241        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
242        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
243        3. On PhoneA, merge to conference call.
244        4. On PhoneA disconnect call between A-C, verify call continues.
245        5. On PhoneA disconnect call between A-B, verify call continues.
246
247        Returns:
248            True if pass; False if fail.
249        """
250        ads = self.android_devices
251        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
252            log=self.log,
253            ads=ads,
254            num_swaps=0,
255            phone_setup_a=provision_device_for_5g,
256            phone_setup_b=provision_device_for_5g,
257            phone_setup_c=provision_device_for_5g,
258            verify_phone_a_network_subscription=is_phone_in_call_volte,
259            verify_phone_b_network_subscription=is_phone_in_call_volte,
260            verify_phone_c_network_subscription=is_phone_in_call_volte)
261        if call_ab_id is None or call_ac_id is None:
262            return False
263
264        return _test_ims_conference_merge_drop_second_call_from_host(
265            self.log, ads, call_ab_id, call_ac_id)
266
267    @TelephonyBaseTest.tel_test_wrap
268    @test_tracker_info(uuid="2d0b60db-44cd-48c2-8361-6a3af051eb22")
269    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_merge_drop_first_call_from_participant(
270            self):
271        """ Test nsa 5g VoLTE Conference Call among three phones.
272
273        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
274        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
275        3. On PhoneA, merge to conference call.
276        4. End call on PhoneB, verify call continues.
277        5. End call on PhoneC, verify call end on PhoneA.
278
279        Returns:
280            True if pass; False if fail.
281        """
282        ads = self.android_devices
283        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
284            log=self.log,
285            ads=ads,
286            num_swaps=0,
287            phone_setup_a=provision_device_for_5g,
288            phone_setup_b=provision_device_for_5g,
289            phone_setup_c=provision_device_for_5g,
290            verify_phone_a_network_subscription=is_phone_in_call_volte,
291            verify_phone_b_network_subscription=is_phone_in_call_volte,
292            verify_phone_c_network_subscription=is_phone_in_call_volte)
293        if call_ab_id is None or call_ac_id is None:
294            return False
295
296        return _test_ims_conference_merge_drop_first_call_from_participant(
297            self.log, ads, call_ab_id, call_ac_id)
298
299    @TelephonyBaseTest.tel_test_wrap
300    @test_tracker_info(uuid="c6b47773-70f2-413c-8f6c-29dc4abce44f")
301    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_merge_drop_first_call_from_host(
302            self):
303        """ Test nsa 5g VoLTE Conference Call among three phones.
304
305        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
306        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
307        3. On PhoneA, merge to conference call.
308        4. On PhoneA disconnect call between A-B, verify call continues.
309        5. On PhoneA disconnect call between A-C, verify call continues.
310
311        Returns:
312            True if pass; False if fail.
313        """
314        ads = self.android_devices
315        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
316            log=self.log,
317            ads=ads,
318            num_swaps=0,
319            phone_setup_a=provision_device_for_5g,
320            phone_setup_b=provision_device_for_5g,
321            phone_setup_c=provision_device_for_5g,
322            verify_phone_a_network_subscription=is_phone_in_call_volte,
323            verify_phone_b_network_subscription=is_phone_in_call_volte,
324            verify_phone_c_network_subscription=is_phone_in_call_volte)
325        if call_ab_id is None or call_ac_id is None:
326            return False
327
328        return _test_ims_conference_merge_drop_first_call_from_host(
329            self.log, ads, call_ab_id, call_ac_id)
330
331    @TelephonyBaseTest.tel_test_wrap
332    @test_tracker_info(uuid="47fe393b-9605-4c52-b322-c3baeb6aae3e")
333    def test_5g_nsa_volte_mt_mt_add_5g_nsa_volte_merge_drop_second_call_from_participant(
334            self):
335        """ Test nsa 5g VoLTE Conference Call among three phones.
336
337        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
338        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
339        3. On PhoneA, merge to conference call.
340        4. End call on PhoneC, verify call continues.
341        5. End call on PhoneB, verify call end on PhoneA.
342
343        Returns:
344            True if pass; False if fail.
345        """
346        ads = self.android_devices
347        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
348            log=self.log,
349            ads=ads,
350            num_swaps=0,
351            phone_setup_a=provision_device_for_5g,
352            phone_setup_b=provision_device_for_5g,
353            phone_setup_c=provision_device_for_5g,
354            verify_phone_a_network_subscription=is_phone_in_call_volte,
355            verify_phone_b_network_subscription=is_phone_in_call_volte,
356            verify_phone_c_network_subscription=is_phone_in_call_volte)
357        if call_ab_id is None or call_ac_id is None:
358            return False
359
360        return _test_ims_conference_merge_drop_second_call_from_participant(
361            self.log, ads, call_ab_id, call_ac_id)
362
363    @TelephonyBaseTest.tel_test_wrap
364    @test_tracker_info(uuid="7d633e59-2918-4e7c-b01d-576bc2f31ab3")
365    def test_5g_nsa_volte_mt_mt_add_5g_nsa_volte_merge_drop_second_call_from_host(
366            self):
367        """ Test nsa 5g VoLTE Conference Call among three phones.
368
369        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
370        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
371        3. On PhoneA, merge to conference call.
372        4. On PhoneA disconnect call between A-C, verify call continues.
373        5. On PhoneA disconnect call between A-B, verify call continues.
374
375        Returns:
376            True if pass; False if fail.
377        """
378        ads = self.android_devices
379        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
380            log=self.log,
381            ads=ads,
382            num_swaps=0,
383            phone_setup_a=provision_device_for_5g,
384            phone_setup_b=provision_device_for_5g,
385            phone_setup_c=provision_device_for_5g,
386            verify_phone_a_network_subscription=is_phone_in_call_volte,
387            verify_phone_b_network_subscription=is_phone_in_call_volte,
388            verify_phone_c_network_subscription=is_phone_in_call_volte)
389        if call_ab_id is None or call_ac_id is None:
390            return False
391
392        return _test_ims_conference_merge_drop_second_call_from_host(
393            self.log, ads, call_ab_id, call_ac_id)
394
395    @TelephonyBaseTest.tel_test_wrap
396    @test_tracker_info(uuid="23faa690-e96f-40bc-ab2c-7c4e51f1323c")
397    def test_5g_nsa_volte_mt_mt_add_5g_nsa_volte_merge_drop_first_call_from_participant(
398            self):
399        """ Test nsa 5g VoLTE Conference Call among three phones.
400
401        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
402        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
403        3. On PhoneA, merge to conference call.
404        4. End call on PhoneB, verify call continues.
405        5. End call on PhoneC, verify call end on PhoneA.
406
407        Returns:
408            True if pass; False if fail.
409        """
410        ads = self.android_devices
411        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
412            log=self.log,
413            ads=ads,
414            num_swaps=0,
415            phone_setup_a=provision_device_for_5g,
416            phone_setup_b=provision_device_for_5g,
417            phone_setup_c=provision_device_for_5g,
418            verify_phone_a_network_subscription=is_phone_in_call_volte,
419            verify_phone_b_network_subscription=is_phone_in_call_volte,
420            verify_phone_c_network_subscription=is_phone_in_call_volte)
421        if call_ab_id is None or call_ac_id is None:
422            return False
423
424        return _test_ims_conference_merge_drop_first_call_from_participant(
425            self.log, ads, call_ab_id, call_ac_id)
426
427    @TelephonyBaseTest.tel_test_wrap
428    @test_tracker_info(uuid="67dff58b-8111-41ba-9b8e-f06056b0db0a")
429    def test_5g_nsa_volte_mt_mt_add_5g_nsa_volte_merge_drop_first_call_from_host(
430            self):
431        """ Test nsa 5g VoLTE Conference Call among three phones.
432
433        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
434        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
435        3. On PhoneA, merge to conference call.
436        4. On PhoneA disconnect call between A-B, verify call continues.
437        5. On PhoneA disconnect call between A-C, verify call continues.
438
439        Returns:
440            True if pass; False if fail.
441        """
442        ads = self.android_devices
443        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
444            log=self.log,
445            ads=ads,
446            num_swaps=0,
447            phone_setup_a=provision_device_for_5g,
448            phone_setup_b=provision_device_for_5g,
449            phone_setup_c=provision_device_for_5g,
450            verify_phone_a_network_subscription=is_phone_in_call_volte,
451            verify_phone_b_network_subscription=is_phone_in_call_volte,
452            verify_phone_c_network_subscription=is_phone_in_call_volte)
453        if call_ab_id is None or call_ac_id is None:
454            return False
455
456        return _test_ims_conference_merge_drop_first_call_from_host(
457            self.log, ads, call_ab_id, call_ac_id)
458
459    @TelephonyBaseTest.tel_test_wrap
460    @test_tracker_info(uuid="4cf986be-d63c-472e-9702-9a30bf0d4f79")
461    def test_5g_nsa_volte_mo_mo_add_4g_volte_merge_drop_second_call_from_participant(
462            self):
463        """ Test nsa 5g VoLTE Conference Call among three phones.
464
465        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
466        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (VoLTE), accept on PhoneC.
467        3. On PhoneA, merge to conference call.
468        4. End call on PhoneC, verify call continues.
469        5. End call on PhoneB, verify call end on PhoneA.
470
471        Returns:
472            True if pass; False if fail.
473        """
474        ads = self.android_devices
475        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
476            log=self.log,
477            ads=ads,
478            num_swaps=0,
479            phone_setup_a=provision_device_for_5g,
480            phone_setup_b=phone_setup_volte,
481            phone_setup_c=phone_setup_volte,
482            verify_phone_a_network_subscription=is_phone_in_call_volte,
483            verify_phone_b_network_subscription=is_phone_in_call_volte,
484            verify_phone_c_network_subscription=is_phone_in_call_volte)
485        if call_ab_id is None or call_ac_id is None:
486            return False
487
488        return _test_ims_conference_merge_drop_second_call_from_participant(
489            self.log, ads, call_ab_id, call_ac_id)
490
491    @TelephonyBaseTest.tel_test_wrap
492    @test_tracker_info(uuid="d77bd012-390d-433a-a705-b0a4d263d73c")
493    def test_5g_nsa_volte_mo_mo_add_4g_volte_merge_drop_second_call_from_host(
494            self):
495        """ Test nsa 5g VoLTE Conference Call among three phones.
496
497        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
498        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (VoLTE), accept on PhoneC.
499        3. On PhoneA, merge to conference call.
500        4. On PhoneA disconnect call between A-C, verify call continues.
501        5. On PhoneA disconnect call between A-B, verify call continues.
502
503        Returns:
504            True if pass; False if fail.
505        """
506        ads = self.android_devices
507        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
508            log=self.log,
509            ads=ads,
510            num_swaps=0,
511            phone_setup_a=provision_device_for_5g,
512            phone_setup_b=phone_setup_volte,
513            phone_setup_c=phone_setup_volte,
514            verify_phone_a_network_subscription=is_phone_in_call_volte,
515            verify_phone_b_network_subscription=is_phone_in_call_volte,
516            verify_phone_c_network_subscription=is_phone_in_call_volte)
517        if call_ab_id is None or call_ac_id is None:
518            return False
519
520        return _test_ims_conference_merge_drop_second_call_from_host(
521            self.log, ads, call_ab_id, call_ac_id)
522
523    @TelephonyBaseTest.tel_test_wrap
524    @test_tracker_info(uuid="3d3945bc-39c3-42dc-9deb-a3f7fb46bba9")
525    def test_5g_nsa_volte_mo_mo_add_4g_volte_merge_drop_first_call_from_participant(
526            self):
527        """ Test nsa 5g VoLTE Conference Call among three phones.
528
529        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
530        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (VoLTE), accept on PhoneC.
531        3. On PhoneA, merge to conference call.
532        4. End call on PhoneB, verify call continues.
533        5. End call on PhoneC, verify call end on PhoneA.
534
535        Returns:
536            True if pass; False if fail.
537        """
538        ads = self.android_devices
539        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
540            log=self.log,
541            ads=ads,
542            num_swaps=0,
543            phone_setup_a=provision_device_for_5g,
544            phone_setup_b=phone_setup_volte,
545            phone_setup_c=phone_setup_volte,
546            verify_phone_a_network_subscription=is_phone_in_call_volte,
547            verify_phone_b_network_subscription=is_phone_in_call_volte,
548            verify_phone_c_network_subscription=is_phone_in_call_volte)
549        if call_ab_id is None or call_ac_id is None:
550            return False
551
552        return _test_ims_conference_merge_drop_first_call_from_participant(
553            self.log, ads, call_ab_id, call_ac_id)
554
555    @TelephonyBaseTest.tel_test_wrap
556    @test_tracker_info(uuid="6bce0033-da88-4601-bc2f-7fd930b4cc6f")
557    def test_5g_nsa_volte_mo_mo_add_4g_volte_merge_drop_first_call_from_host(
558            self):
559        """ Test nsa 5g VoLTE Conference Call among three phones.
560
561        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
562        2. Call from PhoneA (nsa 5G VoLTE) to PhoneC (VoLTE), accept on PhoneC.
563        3. On PhoneA, merge to conference call.
564        4. On PhoneA disconnect call between A-B, verify call continues.
565        5. On PhoneA disconnect call between A-C, verify call continues.
566
567        Returns:
568            True if pass; False if fail.
569        """
570        ads = self.android_devices
571        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
572            log=self.log,
573            ads=ads,
574            num_swaps=0,
575            phone_setup_a=provision_device_for_5g,
576            phone_setup_b=phone_setup_volte,
577            phone_setup_c=phone_setup_volte,
578            verify_phone_a_network_subscription=is_phone_in_call_volte,
579            verify_phone_b_network_subscription=is_phone_in_call_volte,
580            verify_phone_c_network_subscription=is_phone_in_call_volte)
581        if call_ab_id is None or call_ac_id is None:
582            return False
583
584        return _test_ims_conference_merge_drop_first_call_from_host(
585            self.log, ads, call_ab_id, call_ac_id)
586
587    @TelephonyBaseTest.tel_test_wrap
588    @test_tracker_info(uuid="c76be000-eda1-452e-a813-5f2b3c1ea85d")
589    def test_5g_nsa_volte_mo_mt_add_4g_volte_merge_drop_second_call_from_participant(
590            self):
591        """ Test nsa 5g VoLTE Conference Call among three phones.
592
593        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
594        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
595        3. On PhoneA, merge to conference call.
596        4. End call on PhoneC, verify call continues.
597        5. End call on PhoneB, verify call end on PhoneA.
598
599        Returns:
600            True if pass; False if fail.
601        """
602        ads = self.android_devices
603        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
604            log=self.log,
605            ads=ads,
606            num_swaps=0,
607            phone_setup_a=provision_device_for_5g,
608            phone_setup_b=phone_setup_volte,
609            phone_setup_c=phone_setup_volte,
610            verify_phone_a_network_subscription=is_phone_in_call_volte,
611            verify_phone_b_network_subscription=is_phone_in_call_volte,
612            verify_phone_c_network_subscription=is_phone_in_call_volte)
613        if call_ab_id is None or call_ac_id is None:
614            return False
615
616        return _test_ims_conference_merge_drop_second_call_from_participant(
617            self.log, ads, call_ab_id, call_ac_id)
618
619    @TelephonyBaseTest.tel_test_wrap
620    @test_tracker_info(uuid="ea104940-872a-4cf7-a47c-db620762c818")
621    def test_5g_nsa_volte_mo_mt_add_4g_volte_merge_drop_second_call_from_host(
622            self):
623        """ Test nsa 5g VoLTE Conference Call among three phones.
624
625        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
626        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
627        3. On PhoneA, merge to conference call.
628        4. On PhoneA disconnect call between A-C, verify call continues.
629        5. On PhoneA disconnect call between A-B, verify call continues.
630
631        Returns:
632            True if pass; False if fail.
633        """
634        ads = self.android_devices
635        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
636            log=self.log,
637            ads=ads,
638            num_swaps=0,
639            phone_setup_a=provision_device_for_5g,
640            phone_setup_b=phone_setup_volte,
641            phone_setup_c=phone_setup_volte,
642            verify_phone_a_network_subscription=is_phone_in_call_volte,
643            verify_phone_b_network_subscription=is_phone_in_call_volte,
644            verify_phone_c_network_subscription=is_phone_in_call_volte)
645        if call_ab_id is None or call_ac_id is None:
646            return False
647
648        return _test_ims_conference_merge_drop_second_call_from_host(
649            self.log, ads, call_ab_id, call_ac_id)
650
651    @TelephonyBaseTest.tel_test_wrap
652    @test_tracker_info(uuid="1dde3ce7-cd02-4434-99b9-af025b5ada05")
653    def test_5g_nsa_volte_mo_mt_add_4g_volte_merge_drop_first_call_from_participant(
654            self):
655        """ Test nsa 5g VoLTE Conference Call among three phones.
656
657        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
658        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
659        3. On PhoneA, merge to conference call.
660        4. End call on PhoneB, verify call continues.
661        5. End call on PhoneC, verify call end on PhoneA.
662
663        Returns:
664            True if pass; False if fail.
665        """
666        ads = self.android_devices
667        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
668            log=self.log,
669            ads=ads,
670            num_swaps=0,
671            phone_setup_a=provision_device_for_5g,
672            phone_setup_b=phone_setup_volte,
673            phone_setup_c=phone_setup_volte,
674            verify_phone_a_network_subscription=is_phone_in_call_volte,
675            verify_phone_b_network_subscription=is_phone_in_call_volte,
676            verify_phone_c_network_subscription=is_phone_in_call_volte)
677        if call_ab_id is None or call_ac_id is None:
678            return False
679
680        return _test_ims_conference_merge_drop_first_call_from_participant(
681            self.log, ads, call_ab_id, call_ac_id)
682
683    @TelephonyBaseTest.tel_test_wrap
684    @test_tracker_info(uuid="3ae5aee3-94c2-40ad-b8a1-c3e05a6c8365")
685    def test_5g_nsa_volte_mo_mt_add_4g_volte_merge_drop_first_call_from_host(
686            self):
687        """ Test nsa 5g VoLTE Conference Call among three phones.
688
689        1. Call from PhoneA (nsa 5G VoLTE) to PhoneB (VoLTE), accept on PhoneB.
690        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
691        3. On PhoneA, merge to conference call.
692        4. On PhoneA disconnect call between A-B, verify call continues.
693        5. On PhoneA disconnect call between A-C, verify call continues.
694
695        Returns:
696            True if pass; False if fail.
697        """
698        ads = self.android_devices
699        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
700            log=self.log,
701            ads=ads,
702            num_swaps=0,
703            phone_setup_a=provision_device_for_5g,
704            phone_setup_b=phone_setup_volte,
705            phone_setup_c=phone_setup_volte,
706            verify_phone_a_network_subscription=is_phone_in_call_volte,
707            verify_phone_b_network_subscription=is_phone_in_call_volte,
708            verify_phone_c_network_subscription=is_phone_in_call_volte)
709        if call_ab_id is None or call_ac_id is None:
710            return False
711
712        return _test_ims_conference_merge_drop_first_call_from_host(
713            self.log, ads, call_ab_id, call_ac_id)
714
715    @TelephonyBaseTest.tel_test_wrap
716    @test_tracker_info(uuid="f45fb3c8-40b5-4731-9743-c6c63460ff9e")
717    def test_5g_nsa_volte_mt_mt_add_4g_volte_merge_drop_second_call_from_participant(
718            self):
719        """ Test nsa 5g VoLTE Conference Call among three phones.
720
721        1. Call from PhoneB (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
722        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
723        3. On PhoneA, merge to conference call.
724        4. End call on PhoneC, verify call continues.
725        5. End call on PhoneB, verify call end on PhoneA.
726
727        Returns:
728            True if pass; False if fail.
729        """
730        ads = self.android_devices
731        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
732            log=self.log,
733            ads=ads,
734            num_swaps=0,
735            phone_setup_a=provision_device_for_5g,
736            phone_setup_b=phone_setup_volte,
737            phone_setup_c=phone_setup_volte,
738            verify_phone_a_network_subscription=is_phone_in_call_volte,
739            verify_phone_b_network_subscription=is_phone_in_call_volte,
740            verify_phone_c_network_subscription=is_phone_in_call_volte)
741        if call_ab_id is None or call_ac_id is None:
742            return False
743
744        return _test_ims_conference_merge_drop_second_call_from_participant(
745            self.log, ads, call_ab_id, call_ac_id)
746
747    @TelephonyBaseTest.tel_test_wrap
748    @test_tracker_info(uuid="1ae31dcf-b5e5-44f1-aec7-472fa6300c16")
749    def test_5g_nsa_volte_mt_mt_add_4g_volte_merge_drop_second_call_from_host(
750            self):
751        """ Test nsa 5g VoLTE Conference Call among three phones.
752
753        1. Call from PhoneB (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
754        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
755        3. On PhoneA, merge to conference call.
756        4. On PhoneA disconnect call between A-C, verify call continues.
757        5. On PhoneA disconnect call between A-B, verify call continues.
758
759        Returns:
760            True if pass; False if fail.
761        """
762        ads = self.android_devices
763        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
764            log=self.log,
765            ads=ads,
766            num_swaps=0,
767            phone_setup_a=provision_device_for_5g,
768            phone_setup_b=phone_setup_volte,
769            phone_setup_c=phone_setup_volte,
770            verify_phone_a_network_subscription=is_phone_in_call_volte,
771            verify_phone_b_network_subscription=is_phone_in_call_volte,
772            verify_phone_c_network_subscription=is_phone_in_call_volte)
773        if call_ab_id is None or call_ac_id is None:
774            return False
775
776        return _test_ims_conference_merge_drop_second_call_from_host(
777            self.log, ads, call_ab_id, call_ac_id)
778
779    @TelephonyBaseTest.tel_test_wrap
780    @test_tracker_info(uuid="b35ec011-e98c-4b79-98ea-7d6acf63c3fe")
781    def test_5g_nsa_volte_mt_mt_add_4g_volte_merge_drop_first_call_from_participant(
782            self):
783        """ Test nsa 5g VoLTE Conference Call among three phones.
784
785        1. Call from PhoneB (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
786        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
787        3. On PhoneA, merge to conference call.
788        4. End call on PhoneB, verify call continues.
789        5. End call on PhoneC, verify call end on PhoneA.
790
791        Returns:
792            True if pass; False if fail.
793        """
794        ads = self.android_devices
795        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
796            log=self.log,
797            ads=ads,
798            num_swaps=0,
799            phone_setup_a=provision_device_for_5g,
800            phone_setup_b=phone_setup_volte,
801            phone_setup_c=phone_setup_volte,
802            verify_phone_a_network_subscription=is_phone_in_call_volte,
803            verify_phone_b_network_subscription=is_phone_in_call_volte,
804            verify_phone_c_network_subscription=is_phone_in_call_volte)
805        if call_ab_id is None or call_ac_id is None:
806            return False
807
808        return _test_ims_conference_merge_drop_first_call_from_participant(
809            self.log, ads, call_ab_id, call_ac_id)
810
811    @TelephonyBaseTest.tel_test_wrap
812    @test_tracker_info(uuid="22db778c-bedb-4099-8764-f2832d87dcd9")
813    def test_5g_nsa_volte_mt_mt_add_4g_volte_merge_drop_first_call_from_host(
814            self):
815        """ Test nsa 5g VoLTE Conference Call among three phones.
816
817        1. Call from PhoneB (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
818        2. Call from PhoneC (VoLTE) to PhoneA (nsa 5G VoLTE), accept on PhoneA.
819        3. On PhoneA, merge to conference call.
820        4. On PhoneA disconnect call between A-B, verify call continues.
821        5. On PhoneA disconnect call between A-C, verify call continues.
822
823        Returns:
824            True if pass; False if fail.
825        """
826        ads = self.android_devices
827        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
828            log=self.log,
829            ads=ads,
830            num_swaps=0,
831            phone_setup_a=provision_device_for_5g,
832            phone_setup_b=phone_setup_volte,
833            phone_setup_c=phone_setup_volte,
834            verify_phone_a_network_subscription=is_phone_in_call_volte,
835            verify_phone_b_network_subscription=is_phone_in_call_volte,
836            verify_phone_c_network_subscription=is_phone_in_call_volte)
837        if call_ab_id is None or call_ac_id is None:
838            return False
839
840        return _test_ims_conference_merge_drop_first_call_from_host(
841            self.log, ads, call_ab_id, call_ac_id)
842
843    @TelephonyBaseTest.tel_test_wrap
844    @test_tracker_info(uuid="e98ca225-7c65-4c61-bde7-9c3ef350dc30")
845    def test_4g_volte_mo_mo_add_5g_nsa_volte_merge_drop_second_call_from_participant(
846            self):
847        """ Test nsa 5g VoLTE Conference Call among three phones.
848
849        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
850        2. Call from PhoneA (VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
851        3. On PhoneA, merge to conference call.
852        4. End call on PhoneC, verify call continues.
853        5. End call on PhoneB, verify call end on PhoneA.
854
855        Returns:
856            True if pass; False if fail.
857        """
858        ads = self.android_devices
859        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
860            log=self.log,
861            ads=ads,
862            num_swaps=0,
863            phone_setup_a=phone_setup_volte,
864            phone_setup_b=provision_device_for_5g,
865            phone_setup_c=provision_device_for_5g,
866            verify_phone_a_network_subscription=is_phone_in_call_volte,
867            verify_phone_b_network_subscription=is_phone_in_call_volte,
868            verify_phone_c_network_subscription=is_phone_in_call_volte)
869        if call_ab_id is None or call_ac_id is None:
870            return False
871
872        return _test_ims_conference_merge_drop_second_call_from_participant(
873            self.log, ads, call_ab_id, call_ac_id)
874
875    @TelephonyBaseTest.tel_test_wrap
876    @test_tracker_info(uuid="3d7cf9ce-7658-46f7-a852-c429cd772bda")
877    def test_4g_volte_mo_mo_add_5g_nsa_volte_merge_drop_second_call_from_host(
878            self):
879        """ Test nsa 5g VoLTE Conference Call among three phones.
880
881        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
882        2. Call from PhoneA (VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
883        3. On PhoneA, merge to conference call.
884        4. On PhoneA disconnect call between A-C, verify call continues.
885        5. On PhoneA disconnect call between A-B, verify call continues.
886
887        Returns:
888            True if pass; False if fail.
889        """
890        ads = self.android_devices
891        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
892            log=self.log,
893            ads=ads,
894            num_swaps=0,
895            phone_setup_a=phone_setup_volte,
896            phone_setup_b=provision_device_for_5g,
897            phone_setup_c=provision_device_for_5g,
898            verify_phone_a_network_subscription=is_phone_in_call_volte,
899            verify_phone_b_network_subscription=is_phone_in_call_volte,
900            verify_phone_c_network_subscription=is_phone_in_call_volte)
901        if call_ab_id is None or call_ac_id is None:
902            return False
903
904        return _test_ims_conference_merge_drop_second_call_from_host(
905            self.log, ads, call_ab_id, call_ac_id)
906
907    @TelephonyBaseTest.tel_test_wrap
908    @test_tracker_info(uuid="5803ba4f-4b73-4f88-a9c4-1b61a4afd84b")
909    def test_4g_volte_mo_mo_add_5g_nsa_volte_merge_drop_first_call_from_participant(
910            self):
911        """ Test nsa 5g VoLTE Conference Call among three phones.
912
913        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
914        2. Call from PhoneA (VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
915        3. On PhoneA, merge to conference call.
916        4. End call on PhoneB, verify call continues.
917        5. End call on PhoneC, verify call end on PhoneA.
918
919        Returns:
920            True if pass; False if fail.
921        """
922        ads = self.android_devices
923        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
924            log=self.log,
925            ads=ads,
926            num_swaps=0,
927            phone_setup_a=phone_setup_volte,
928            phone_setup_b=provision_device_for_5g,
929            phone_setup_c=provision_device_for_5g,
930            verify_phone_a_network_subscription=is_phone_in_call_volte,
931            verify_phone_b_network_subscription=is_phone_in_call_volte,
932            verify_phone_c_network_subscription=is_phone_in_call_volte)
933        if call_ab_id is None or call_ac_id is None:
934            return False
935
936        return _test_ims_conference_merge_drop_first_call_from_participant(
937            self.log, ads, call_ab_id, call_ac_id)
938
939    @TelephonyBaseTest.tel_test_wrap
940    @test_tracker_info(uuid="1f44800c-2bb2-46a3-9011-818f00e75e3f")
941    def test_4g_volte_mo_mo_add_5g_nsa_volte_merge_drop_first_call_from_host(
942            self):
943        """ Test nsa 5g VoLTE Conference Call among three phones.
944
945        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
946        2. Call from PhoneA (VoLTE) to PhoneC (nsa 5G VoLTE), accept on PhoneC.
947        3. On PhoneA, merge to conference call.
948        4. On PhoneA disconnect call between A-B, verify call continues.
949        5. On PhoneA disconnect call between A-C, verify call continues.
950
951        Returns:
952            True if pass; False if fail.
953        """
954        ads = self.android_devices
955        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
956            log=self.log,
957            ads=ads,
958            num_swaps=0,
959            phone_setup_a=phone_setup_volte,
960            phone_setup_b=provision_device_for_5g,
961            phone_setup_c=provision_device_for_5g,
962            verify_phone_a_network_subscription=is_phone_in_call_volte,
963            verify_phone_b_network_subscription=is_phone_in_call_volte,
964            verify_phone_c_network_subscription=is_phone_in_call_volte)
965        if call_ab_id is None or call_ac_id is None:
966            return False
967
968        return _test_ims_conference_merge_drop_first_call_from_host(
969            self.log, ads, call_ab_id, call_ac_id)
970
971    @TelephonyBaseTest.tel_test_wrap
972    @test_tracker_info(uuid="fbc13772-314d-4b9a-8940-6edfe577c9f4")
973    def test_4g_volte_mo_mt_add_5g_nsa_volte_merge_drop_second_call_from_participant(
974            self):
975        """ Test nsa 5g VoLTE Conference Call among three phones.
976
977        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
978        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
979        3. On PhoneA, merge to conference call.
980        4. End call on PhoneC, verify call continues.
981        5. End call on PhoneB, verify call end on PhoneA.
982
983        Returns:
984            True if pass; False if fail.
985        """
986        ads = self.android_devices
987        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
988            log=self.log,
989            ads=ads,
990            num_swaps=0,
991            phone_setup_a=phone_setup_volte,
992            phone_setup_b=provision_device_for_5g,
993            phone_setup_c=provision_device_for_5g,
994            verify_phone_a_network_subscription=is_phone_in_call_volte,
995            verify_phone_b_network_subscription=is_phone_in_call_volte,
996            verify_phone_c_network_subscription=is_phone_in_call_volte)
997        if call_ab_id is None or call_ac_id is None:
998            return False
999
1000        return _test_ims_conference_merge_drop_second_call_from_participant(
1001            self.log, ads, call_ab_id, call_ac_id)
1002
1003    @TelephonyBaseTest.tel_test_wrap
1004    @test_tracker_info(uuid="7b4e7c11-d633-4dc5-8fb1-25ad1ef4a4e8")
1005    def test_4g_volte_mo_mt_add_5g_nsa_volte_merge_drop_second_call_from_host(
1006            self):
1007        """ Test nsa 5g VoLTE Conference Call among three phones.
1008
1009        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
1010        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1011        3. On PhoneA, merge to conference call.
1012        4. On PhoneA disconnect call between A-C, verify call continues.
1013        5. On PhoneA disconnect call between A-B, verify call continues.
1014
1015        Returns:
1016            True if pass; False if fail.
1017        """
1018        ads = self.android_devices
1019        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1020            log=self.log,
1021            ads=ads,
1022            num_swaps=0,
1023            phone_setup_a=phone_setup_volte,
1024            phone_setup_b=provision_device_for_5g,
1025            phone_setup_c=provision_device_for_5g,
1026            verify_phone_a_network_subscription=is_phone_in_call_volte,
1027            verify_phone_b_network_subscription=is_phone_in_call_volte,
1028            verify_phone_c_network_subscription=is_phone_in_call_volte)
1029        if call_ab_id is None or call_ac_id is None:
1030            return False
1031
1032        return _test_ims_conference_merge_drop_second_call_from_host(
1033            self.log, ads, call_ab_id, call_ac_id)
1034
1035    @TelephonyBaseTest.tel_test_wrap
1036    @test_tracker_info(uuid="98adc3f4-ab57-4485-946f-08c1e8a69efb")
1037    def test_4g_volte_mo_mt_add_5g_nsa_volte_merge_drop_first_call_from_participant(
1038            self):
1039        """ Test nsa 5g VoLTE Conference Call among three phones.
1040
1041        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
1042        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1043        3. On PhoneA, merge to conference call.
1044        4. End call on PhoneB, verify call continues.
1045        5. End call on PhoneC, verify call end on PhoneA.
1046
1047        Returns:
1048            True if pass; False if fail.
1049        """
1050        ads = self.android_devices
1051        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1052            log=self.log,
1053            ads=ads,
1054            num_swaps=0,
1055            phone_setup_a=phone_setup_volte,
1056            phone_setup_b=provision_device_for_5g,
1057            phone_setup_c=provision_device_for_5g,
1058            verify_phone_a_network_subscription=is_phone_in_call_volte,
1059            verify_phone_b_network_subscription=is_phone_in_call_volte,
1060            verify_phone_c_network_subscription=is_phone_in_call_volte)
1061        if call_ab_id is None or call_ac_id is None:
1062            return False
1063
1064        return _test_ims_conference_merge_drop_first_call_from_participant(
1065            self.log, ads, call_ab_id, call_ac_id)
1066
1067    @TelephonyBaseTest.tel_test_wrap
1068    @test_tracker_info(uuid="93adad3d-c3ca-4fc1-88ec-e32c5330efd6")
1069    def test_4g_volte_mo_mt_add_5g_nsa_volte_merge_drop_first_call_from_host(
1070            self):
1071        """ Test nsa 5g VoLTE Conference Call among three phones.
1072
1073        1. Call from PhoneA (VoLTE) to PhoneB (nsa 5G VoLTE), accept on PhoneB.
1074        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1075        3. On PhoneA, merge to conference call.
1076        4. On PhoneA disconnect call between A-B, verify call continues.
1077        5. On PhoneA disconnect call between A-C, verify call continues.
1078
1079        Returns:
1080            True if pass; False if fail.
1081        """
1082        ads = self.android_devices
1083        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1084            log=self.log,
1085            ads=ads,
1086            num_swaps=0,
1087            phone_setup_a=phone_setup_volte,
1088            phone_setup_b=provision_device_for_5g,
1089            phone_setup_c=provision_device_for_5g,
1090            verify_phone_a_network_subscription=is_phone_in_call_volte,
1091            verify_phone_b_network_subscription=is_phone_in_call_volte,
1092            verify_phone_c_network_subscription=is_phone_in_call_volte)
1093        if call_ab_id is None or call_ac_id is None:
1094            return False
1095
1096        return _test_ims_conference_merge_drop_first_call_from_host(
1097            self.log, ads, call_ab_id, call_ac_id)
1098
1099    @TelephonyBaseTest.tel_test_wrap
1100    @test_tracker_info(uuid="6064eed6-0b23-4089-af30-f0c1f3ea844e")
1101    def test_4g_volte_mt_mt_add_5g_nsa_volte_merge_drop_second_call_from_participant(
1102            self):
1103        """ Test nsa 5g VoLTE Conference Call among three phones.
1104
1105        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1106        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1107        3. On PhoneA, merge to conference call.
1108        4. End call on PhoneC, verify call continues.
1109        5. End call on PhoneB, verify call end on PhoneA.
1110
1111        Returns:
1112            True if pass; False if fail.
1113        """
1114        ads = self.android_devices
1115        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1116            log=self.log,
1117            ads=ads,
1118            num_swaps=0,
1119            phone_setup_a=phone_setup_volte,
1120            phone_setup_b=provision_device_for_5g,
1121            phone_setup_c=provision_device_for_5g,
1122            verify_phone_a_network_subscription=is_phone_in_call_volte,
1123            verify_phone_b_network_subscription=is_phone_in_call_volte,
1124            verify_phone_c_network_subscription=is_phone_in_call_volte)
1125        if call_ab_id is None or call_ac_id is None:
1126            return False
1127
1128        return _test_ims_conference_merge_drop_second_call_from_participant(
1129            self.log, ads, call_ab_id, call_ac_id)
1130
1131    @TelephonyBaseTest.tel_test_wrap
1132    @test_tracker_info(uuid="845e0521-fcb9-4609-a325-3ecb7681e3d8")
1133    def test_4g_volte_mt_mt_add_5g_nsa_volte_merge_drop_second_call_from_host(
1134            self):
1135        """ Test nsa 5g VoLTE Conference Call among three phones.
1136
1137        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1138        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1139        3. On PhoneA, merge to conference call.
1140        4. On PhoneA disconnect call between A-C, verify call continues.
1141        5. On PhoneA disconnect call between A-B, verify call continues.
1142
1143        Returns:
1144            True if pass; False if fail.
1145        """
1146        ads = self.android_devices
1147        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1148            log=self.log,
1149            ads=ads,
1150            num_swaps=0,
1151            phone_setup_a=phone_setup_volte,
1152            phone_setup_b=provision_device_for_5g,
1153            phone_setup_c=provision_device_for_5g,
1154            verify_phone_a_network_subscription=is_phone_in_call_volte,
1155            verify_phone_b_network_subscription=is_phone_in_call_volte,
1156            verify_phone_c_network_subscription=is_phone_in_call_volte)
1157        if call_ab_id is None or call_ac_id is None:
1158            return False
1159
1160        return _test_ims_conference_merge_drop_second_call_from_host(
1161            self.log, ads, call_ab_id, call_ac_id)
1162
1163    @TelephonyBaseTest.tel_test_wrap
1164    @test_tracker_info(uuid="c676851a-e723-420f-be64-b4dbcab9cbea")
1165    def test_4g_volte_mt_mt_add_5g_nsa_volte_merge_drop_first_call_from_participant(
1166            self):
1167        """ Test nsa 5g VoLTE Conference Call among three phones.
1168
1169        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1170        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1171        3. On PhoneA, merge to conference call.
1172        4. End call on PhoneB, verify call continues.
1173        5. End call on PhoneC, verify call end on PhoneA.
1174
1175        Returns:
1176            True if pass; False if fail.
1177        """
1178        ads = self.android_devices
1179        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1180            log=self.log,
1181            ads=ads,
1182            num_swaps=0,
1183            phone_setup_a=phone_setup_volte,
1184            phone_setup_b=provision_device_for_5g,
1185            phone_setup_c=provision_device_for_5g,
1186            verify_phone_a_network_subscription=is_phone_in_call_volte,
1187            verify_phone_b_network_subscription=is_phone_in_call_volte,
1188            verify_phone_c_network_subscription=is_phone_in_call_volte)
1189        if call_ab_id is None or call_ac_id is None:
1190            return False
1191
1192        return _test_ims_conference_merge_drop_first_call_from_participant(
1193            self.log, ads, call_ab_id, call_ac_id)
1194
1195    @TelephonyBaseTest.tel_test_wrap
1196    @test_tracker_info(uuid="a2aac8d9-5f87-4d95-a4d3-d8b174652a0e")
1197    def test_4g_volte_mt_mt_add_5g_nsa_volte_merge_drop_first_call_from_host(
1198            self):
1199        """ Test nsa 5g VoLTE Conference Call among three phones.
1200
1201        1. Call from PhoneB (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1202        2. Call from PhoneC (nsa 5G VoLTE) to PhoneA (VoLTE), accept on PhoneA.
1203        3. On PhoneA, merge to conference call.
1204        4. On PhoneA disconnect call between A-B, verify call continues.
1205        5. On PhoneA disconnect call between A-C, verify call continues.
1206
1207        Returns:
1208            True if pass; False if fail.
1209        """
1210        ads = self.android_devices
1211        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1212            log=self.log,
1213            ads=ads,
1214            num_swaps=0,
1215            phone_setup_a=phone_setup_volte,
1216            phone_setup_b=provision_device_for_5g,
1217            phone_setup_c=provision_device_for_5g,
1218            verify_phone_a_network_subscription=is_phone_in_call_volte,
1219            verify_phone_b_network_subscription=is_phone_in_call_volte,
1220            verify_phone_c_network_subscription=is_phone_in_call_volte)
1221        if call_ab_id is None or call_ac_id is None:
1222            return False
1223
1224        return _test_ims_conference_merge_drop_first_call_from_host(
1225            self.log, ads, call_ab_id, call_ac_id)
1226
1227    @TelephonyBaseTest.tel_test_wrap
1228    @test_tracker_info(uuid="9c1a213f-8c85-4234-a974-2add9f698389")
1229    def test_5g_nsa_volte_mo_mo_add_wcdma_merge_drop_second_call_from_participant(
1230            self):
1231        """ Test nsa 5g VoLTE Conference Call among three phones.
1232
1233        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1234        2. Call from PhoneA (nsa 5g VoLTE) to PhoneC (WCDMA), accept on PhoneC.
1235        3. On PhoneA, merge to conference call.
1236        4. End call on PhoneC, verify call continues.
1237        5. End call on PhoneB, verify call end on PhoneA.
1238
1239        Returns:
1240            True if pass; False if fail.
1241        """
1242        ads = self.android_devices
1243        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1244            log=self.log,
1245            ads=ads,
1246            num_swaps=0,
1247            phone_setup_a=provision_device_for_5g,
1248            phone_setup_b=phone_setup_voice_3g,
1249            phone_setup_c=phone_setup_voice_3g,
1250            verify_phone_a_network_subscription=is_phone_in_call_volte,
1251            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1252            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1253        if call_ab_id is None or call_ac_id is None:
1254            return False
1255
1256        return _test_ims_conference_merge_drop_second_call_from_participant(
1257            self.log, ads, call_ab_id, call_ac_id)
1258
1259    @TelephonyBaseTest.tel_test_wrap
1260    @test_tracker_info(uuid="53882070-35d3-4b8b-bc09-4debce8a094c")
1261    def test_5g_nsa_volte_mo_mo_add_wcdma_merge_drop_second_call_from_host(
1262            self):
1263        """ Test nsa 5g VoLTE Conference Call among three phones.
1264
1265        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1266        2. Call from PhoneA (nsa 5g VoLTE) to PhoneC (WCDMA), accept on PhoneC.
1267        3. On PhoneA, merge to conference call.
1268        4. On PhoneA disconnect call between A-C, verify call continues.
1269        5. On PhoneA disconnect call between A-B, verify call continues.
1270
1271        Returns:
1272            True if pass; False if fail.
1273        """
1274        ads = self.android_devices
1275        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1276            log=self.log,
1277            ads=ads,
1278            num_swaps=0,
1279            phone_setup_a=provision_device_for_5g,
1280            phone_setup_b=phone_setup_voice_3g,
1281            phone_setup_c=phone_setup_voice_3g,
1282            verify_phone_a_network_subscription=is_phone_in_call_volte,
1283            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1284            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1285        if call_ab_id is None or call_ac_id is None:
1286            return False
1287
1288        return _test_ims_conference_merge_drop_second_call_from_host(
1289            self.log, ads, call_ab_id, call_ac_id)
1290
1291    @TelephonyBaseTest.tel_test_wrap
1292    @test_tracker_info(uuid="a69588a5-3e08-4d33-92f7-5397c4d1c58d")
1293    def test_5g_nsa_volte_mo_mo_add_wcdma_merge_drop_first_call_from_participant(
1294            self):
1295        """ Test nsa 5g VoLTE Conference Call among three phones.
1296
1297        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1298        2. Call from PhoneA (nsa 5g VoLTE) to PhoneC (WCDMA), accept on PhoneC.
1299        3. On PhoneA, merge to conference call.
1300        4. End call on PhoneB, verify call continues.
1301        5. End call on PhoneC, verify call end on PhoneA.
1302
1303        Returns:
1304            True if pass; False if fail.
1305        """
1306        ads = self.android_devices
1307        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1308            log=self.log,
1309            ads=ads,
1310            num_swaps=0,
1311            phone_setup_a=provision_device_for_5g,
1312            phone_setup_b=phone_setup_voice_3g,
1313            phone_setup_c=phone_setup_voice_3g,
1314            verify_phone_a_network_subscription=is_phone_in_call_volte,
1315            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1316            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1317        if call_ab_id is None or call_ac_id is None:
1318            return False
1319
1320        return _test_ims_conference_merge_drop_first_call_from_participant(
1321            self.log, ads, call_ab_id, call_ac_id)
1322
1323    @TelephonyBaseTest.tel_test_wrap
1324    @test_tracker_info(uuid="da541f3e-6054-4f92-bbe4-242d03d90da2")
1325    def test_5g_nsa_volte_mo_mo_add_wcdma_merge_drop_first_call_from_host(
1326            self):
1327        """ Test nsa 5g VoLTE Conference Call among three phones.
1328
1329        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1330        2. Call from PhoneA (nsa 5g VoLTE) to PhoneC (WCDMA), accept on PhoneC.
1331        3. On PhoneA, merge to conference call.
1332        4. On PhoneA disconnect call between A-B, verify call continues.
1333        5. On PhoneA disconnect call between A-C, verify call continues.
1334
1335        Returns:
1336            True if pass; False if fail.
1337        """
1338        ads = self.android_devices
1339        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1340            log=self.log,
1341            ads=ads,
1342            num_swaps=0,
1343            phone_setup_a=provision_device_for_5g,
1344            phone_setup_b=phone_setup_voice_3g,
1345            phone_setup_c=phone_setup_voice_3g,
1346            verify_phone_a_network_subscription=is_phone_in_call_volte,
1347            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1348            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1349        if call_ab_id is None or call_ac_id is None:
1350            return False
1351
1352        return _test_ims_conference_merge_drop_first_call_from_host(
1353            self.log, ads, call_ab_id, call_ac_id)
1354
1355    @TelephonyBaseTest.tel_test_wrap
1356    @test_tracker_info(uuid="54269ba5-bb78-428e-afd0-cba5783d797a")
1357    def test_5g_nsa_volte_mo_mt_add_wcdma_merge_drop_second_call_from_participant(
1358            self):
1359        """ Test nsa 5g VoLTE Conference Call among three phones.
1360
1361        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1362        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1363        3. On PhoneA, merge to conference call.
1364        4. End call on PhoneC, verify call continues.
1365        5. End call on PhoneB, verify call end on PhoneA.
1366
1367        Returns:
1368            True if pass; False if fail.
1369        """
1370        ads = self.android_devices
1371        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1372            log=self.log,
1373            ads=ads,
1374            num_swaps=0,
1375            phone_setup_a=provision_device_for_5g,
1376            phone_setup_b=phone_setup_voice_3g,
1377            phone_setup_c=phone_setup_voice_3g,
1378            verify_phone_a_network_subscription=is_phone_in_call_volte,
1379            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1380            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1381        if call_ab_id is None or call_ac_id is None:
1382            return False
1383
1384        return _test_ims_conference_merge_drop_second_call_from_participant(
1385            self.log, ads, call_ab_id, call_ac_id)
1386
1387    @TelephonyBaseTest.tel_test_wrap
1388    @test_tracker_info(uuid="d2bf3176-f9e8-4d2a-ad2a-c49fed9fd913")
1389    def test_5g_nsa_volte_mo_mt_add_wcdma_merge_drop_second_call_from_host(
1390            self):
1391        """ Test nsa 5g VoLTE Conference Call among three phones.
1392
1393        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1394        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1395        3. On PhoneA, merge to conference call.
1396        4. On PhoneA disconnect call between A-C, verify call continues.
1397        5. On PhoneA disconnect call between A-B, verify call continues.
1398
1399        Returns:
1400            True if pass; False if fail.
1401        """
1402        ads = self.android_devices
1403        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1404            log=self.log,
1405            ads=ads,
1406            num_swaps=0,
1407            phone_setup_a=provision_device_for_5g,
1408            phone_setup_b=phone_setup_voice_3g,
1409            phone_setup_c=phone_setup_voice_3g,
1410            verify_phone_a_network_subscription=is_phone_in_call_volte,
1411            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1412            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1413        if call_ab_id is None or call_ac_id is None:
1414            return False
1415
1416        return _test_ims_conference_merge_drop_second_call_from_host(
1417            self.log, ads, call_ab_id, call_ac_id)
1418
1419    @TelephonyBaseTest.tel_test_wrap
1420    @test_tracker_info(uuid="93c54a43-6b64-404a-9306-b9a74b563e41")
1421    def test_5g_nsa_volte_mo_mt_add_wcdma_merge_drop_first_call_from_participant(
1422            self):
1423        """ Test nsa 5g VoLTE Conference Call among three phones.
1424
1425        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1426        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1427        3. On PhoneA, merge to conference call.
1428        4. End call on PhoneB, verify call continues.
1429        5. End call on PhoneC, verify call end on PhoneA.
1430
1431        Returns:
1432            True if pass; False if fail.
1433        """
1434        ads = self.android_devices
1435        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1436            log=self.log,
1437            ads=ads,
1438            num_swaps=0,
1439            phone_setup_a=provision_device_for_5g,
1440            phone_setup_b=phone_setup_voice_3g,
1441            phone_setup_c=phone_setup_voice_3g,
1442            verify_phone_a_network_subscription=is_phone_in_call_volte,
1443            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1444            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1445        if call_ab_id is None or call_ac_id is None:
1446            return False
1447
1448        return _test_ims_conference_merge_drop_first_call_from_participant(
1449            self.log, ads, call_ab_id, call_ac_id)
1450
1451    @TelephonyBaseTest.tel_test_wrap
1452    @test_tracker_info(uuid="8e699115-1513-4c86-acd4-099b05acb859")
1453    def test_5g_nsa_volte_mo_mt_add_wcdma_merge_drop_first_call_from_host(
1454            self):
1455        """ Test nsa 5g VoLTE Conference Call among three phones.
1456
1457        1. Call from PhoneA (nsa 5g VoLTE) to PhoneB (WCDMA), accept on PhoneB.
1458        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1459        3. On PhoneA, merge to conference call.
1460        4. On PhoneA disconnect call between A-B, verify call continues.
1461        5. On PhoneA disconnect call between A-C, verify call continues.
1462
1463        Returns:
1464            True if pass; False if fail.
1465        """
1466        ads = self.android_devices
1467        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1468            log=self.log,
1469            ads=ads,
1470            num_swaps=0,
1471            phone_setup_a=provision_device_for_5g,
1472            phone_setup_b=phone_setup_voice_3g,
1473            phone_setup_c=phone_setup_voice_3g,
1474            verify_phone_a_network_subscription=is_phone_in_call_volte,
1475            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1476            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1477        if call_ab_id is None or call_ac_id is None:
1478            return False
1479
1480        return _test_ims_conference_merge_drop_first_call_from_host(
1481            self.log, ads, call_ab_id, call_ac_id)
1482
1483    @TelephonyBaseTest.tel_test_wrap
1484    @test_tracker_info(uuid="48edf043-1f45-4490-85fc-36ec49328768")
1485    def test_5g_nsa_volte_mt_mt_add_wcdma_merge_drop_second_call_from_participant(
1486            self):
1487        """ Test nsa 5g VoLTE Conference Call among three phones.
1488
1489        1. Call from PhoneB (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1490        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1491        3. On PhoneA, merge to conference call.
1492        4. End call on PhoneC, verify call continues.
1493        5. End call on PhoneB, verify call end on PhoneA.
1494
1495        Returns:
1496            True if pass; False if fail.
1497        """
1498        ads = self.android_devices
1499        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1500            log=self.log,
1501            ads=ads,
1502            num_swaps=0,
1503            phone_setup_a=provision_device_for_5g,
1504            phone_setup_b=phone_setup_voice_3g,
1505            phone_setup_c=phone_setup_voice_3g,
1506            verify_phone_a_network_subscription=is_phone_in_call_volte,
1507            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1508            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1509        if call_ab_id is None or call_ac_id is None:
1510            return False
1511
1512        return _test_ims_conference_merge_drop_second_call_from_participant(
1513            self.log, ads, call_ab_id, call_ac_id)
1514
1515    @TelephonyBaseTest.tel_test_wrap
1516    @test_tracker_info(uuid="a276b9d4-ddef-4712-9f96-aa4b71c7b35d")
1517    def test_5g_nsa_volte_mt_mt_add_wcdma_merge_drop_second_call_from_host(
1518            self):
1519        """ Test nsa 5g VoLTE Conference Call among three phones.
1520
1521        1. Call from PhoneB (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1522        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1523        3. On PhoneA, merge to conference call.
1524        4. On PhoneA disconnect call between A-C, verify call continues.
1525        5. On PhoneA disconnect call between A-B, verify call continues.
1526
1527        Returns:
1528            True if pass; False if fail.
1529        """
1530        ads = self.android_devices
1531        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1532            log=self.log,
1533            ads=ads,
1534            num_swaps=0,
1535            phone_setup_a=provision_device_for_5g,
1536            phone_setup_b=phone_setup_voice_3g,
1537            phone_setup_c=phone_setup_voice_3g,
1538            verify_phone_a_network_subscription=is_phone_in_call_volte,
1539            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1540            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1541        if call_ab_id is None or call_ac_id is None:
1542            return False
1543
1544        return _test_ims_conference_merge_drop_second_call_from_host(
1545            self.log, self.android_devices, call_ab_id, call_ac_id)
1546
1547    @TelephonyBaseTest.tel_test_wrap
1548    @test_tracker_info(uuid="d702a65e-c2c9-44cf-be13-16ae56377647")
1549    def test_5g_nsa_volte_mt_mt_add_wcdma_merge_drop_first_call_from_participant(
1550            self):
1551        """ Test nsa 5g VoLTE Conference Call among three phones.
1552
1553        1. Call from PhoneB (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1554        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1555        3. On PhoneA, merge to conference call.
1556        4. End call on PhoneB, verify call continues.
1557        5. End call on PhoneC, verify call end on PhoneA.
1558
1559        Returns:
1560            True if pass; False if fail.
1561        """
1562        ads = self.android_devices
1563        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1564            log=self.log,
1565            ads=ads,
1566            num_swaps=0,
1567            phone_setup_a=provision_device_for_5g,
1568            phone_setup_b=phone_setup_voice_3g,
1569            phone_setup_c=phone_setup_voice_3g,
1570            verify_phone_a_network_subscription=is_phone_in_call_volte,
1571            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1572            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1573        if call_ab_id is None or call_ac_id is None:
1574            return False
1575
1576        return _test_ims_conference_merge_drop_first_call_from_participant(
1577            self.log, ads, call_ab_id, call_ac_id)
1578
1579    @TelephonyBaseTest.tel_test_wrap
1580    @test_tracker_info(uuid="dd3df9eb-a600-4397-b257-b8465592af82")
1581    def test_5g_nsa_volte_mt_mt_add_wcdma_merge_drop_first_call_from_host(
1582            self):
1583        """ Test nsa 5g VoLTE Conference Call among three phones.
1584
1585        1. Call from PhoneB (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1586        2. Call from PhoneC (WCDMA) to PhoneA (nsa 5g VoLTE), accept on PhoneA.
1587        3. On PhoneA, merge to conference call.
1588        4. On PhoneA disconnect call between A-B, verify call continues.
1589        5. On PhoneA disconnect call between A-C, verify call continues.
1590
1591        Returns:
1592            True if pass; False if fail.
1593        """
1594        ads = self.android_devices
1595        call_ab_id, call_ac_id = _test_call_mt_mt_add_swap_x(
1596            log=self.log,
1597            ads=ads,
1598            num_swaps=0,
1599            phone_setup_a=provision_device_for_5g,
1600            phone_setup_b=phone_setup_voice_3g,
1601            phone_setup_c=phone_setup_voice_3g,
1602            verify_phone_a_network_subscription=is_phone_in_call_volte,
1603            verify_phone_b_network_subscription=is_phone_in_call_wcdma,
1604            verify_phone_c_network_subscription=is_phone_in_call_wcdma)
1605        if call_ab_id is None or call_ac_id is None:
1606            return False
1607
1608        return _test_ims_conference_merge_drop_first_call_from_host(
1609            self.log, ads, call_ab_id, call_ac_id)
1610
1611    @TelephonyBaseTest.tel_test_wrap
1612    @test_tracker_info(uuid="d1174d8f-80e4-4adf-8866-e00ac7706849")
1613    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_swap_twice_drop_held(self):
1614        """Test swap feature in nsa 5g VoLTE call.
1615
1616        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1617        PhoneA (nsa 5g VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
1618        Swap active call on PhoneA.
1619        Swap active call on PhoneA.
1620        Hangup call from PhoneB, check if call continues between AC.
1621
1622        Returns:
1623            True if pass; False if fail.
1624
1625        """
1626        ads = self.android_devices
1627
1628        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1629            log=self.log,
1630            ads=ads,
1631            num_swaps=2,
1632            phone_setup_a=provision_device_for_5g,
1633            phone_setup_b=provision_device_for_5g,
1634            phone_setup_c=provision_device_for_5g,
1635            verify_phone_a_network_subscription=is_phone_in_call_volte,
1636            verify_phone_b_network_subscription=is_phone_in_call_volte,
1637            verify_phone_c_network_subscription=is_phone_in_call_volte)
1638        if call_ab_id is None or call_ac_id is None:
1639            return False
1640
1641        return _three_phone_hangup_call_verify_call_state(
1642            log=self.log,
1643            ad_hangup=ads[1],
1644            ad_verify=ads[0],
1645            call_id=call_ac_id,
1646            call_state=CALL_STATE_ACTIVE,
1647            ads_active=[ads[0], ads[2]])
1648
1649    @TelephonyBaseTest.tel_test_wrap
1650    @test_tracker_info(uuid="c631b985-1fc4-4de6-95cd-00258283ef62")
1651    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_swap_twice_drop_active(self):
1652        """Test swap feature in nsa 5g VoLTE call.
1653
1654        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1655        PhoneA (nsa 5g VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
1656        Swap active call on PhoneA.
1657        Swap active call on PhoneA.
1658        Hangup call from PhoneC, check if call continues between AB.
1659
1660        Returns:
1661            True if pass; False if fail.
1662        """
1663        ads = self.android_devices
1664
1665        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1666            log=self.log,
1667            ads=ads,
1668            num_swaps=2,
1669            phone_setup_a=provision_device_for_5g,
1670            phone_setup_b=provision_device_for_5g,
1671            phone_setup_c=provision_device_for_5g,
1672            verify_phone_a_network_subscription=is_phone_in_call_volte,
1673            verify_phone_b_network_subscription=is_phone_in_call_volte,
1674            verify_phone_c_network_subscription=is_phone_in_call_volte)
1675        if call_ab_id is None or call_ac_id is None:
1676            return False
1677
1678        return _three_phone_hangup_call_verify_call_state(
1679            log=self.log,
1680            ad_hangup=ads[2],
1681            ad_verify=ads[0],
1682            call_id=call_ab_id,
1683            call_state=_get_expected_call_state(ads[0]),
1684            ads_active=[ads[0], ads[1]])
1685
1686    @TelephonyBaseTest.tel_test_wrap
1687    @test_tracker_info(uuid="0af58d3e-a7cc-4e5b-89df-b002deee022a")
1688    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_swap_twice_drop_held(self):
1689        """Test swap feature in nsa 5g VoLTE call.
1690
1691        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1692        PhoneC (nsa 5g VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
1693        Swap active call on PhoneA.
1694        Swap active call on PhoneA.
1695        Hangup call from PhoneB, check if call continues between AC.
1696
1697        Returns:
1698            True if pass; False if fail.
1699        """
1700        ads = self.android_devices
1701
1702        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1703            log=self.log,
1704            ads=ads,
1705            num_swaps=2,
1706            phone_setup_a=provision_device_for_5g,
1707            phone_setup_b=provision_device_for_5g,
1708            phone_setup_c=provision_device_for_5g,
1709            verify_phone_a_network_subscription=is_phone_in_call_volte,
1710            verify_phone_b_network_subscription=is_phone_in_call_volte,
1711            verify_phone_c_network_subscription=is_phone_in_call_volte)
1712        if call_ab_id is None or call_ac_id is None:
1713            return False
1714
1715        return _three_phone_hangup_call_verify_call_state(
1716            log=self.log,
1717            ad_hangup=ads[1],
1718            ad_verify=ads[0],
1719            call_id=call_ac_id,
1720            call_state=CALL_STATE_ACTIVE,
1721            ads_active=[ads[0], ads[2]])
1722
1723    @TelephonyBaseTest.tel_test_wrap
1724    @test_tracker_info(uuid="d00d0b87-4df2-40af-9b5e-dd425ec5ca4f")
1725    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_swap_twice_drop_active(self):
1726        """Test swap feature in nsa 5g VoLTE call.
1727
1728        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1729        PhoneC (nsa 5g VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
1730        Swap active call on PhoneA.
1731        Swap active call on PhoneA.
1732        Hangup call from PhoneC, check if call continues between AB.
1733
1734        Returns:
1735            True if pass; False if fail.
1736        """
1737        ads = self.android_devices
1738
1739        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1740            log=self.log,
1741            ads=ads,
1742            num_swaps=2,
1743            phone_setup_a=provision_device_for_5g,
1744            phone_setup_b=provision_device_for_5g,
1745            phone_setup_c=provision_device_for_5g,
1746            verify_phone_a_network_subscription=is_phone_in_call_volte,
1747            verify_phone_b_network_subscription=is_phone_in_call_volte,
1748            verify_phone_c_network_subscription=is_phone_in_call_volte)
1749        if call_ab_id is None or call_ac_id is None:
1750            return False
1751
1752        return _three_phone_hangup_call_verify_call_state(
1753            log=self.log,
1754            ad_hangup=ads[2],
1755            ad_verify=ads[0],
1756            call_id=call_ab_id,
1757            call_state=_get_expected_call_state(ads[0]),
1758            ads_active=[ads[0], ads[1]])
1759
1760    @TelephonyBaseTest.tel_test_wrap
1761    @test_tracker_info(uuid="dc46308c-197f-4372-afca-b2ec131dcc34")
1762    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_swap_once_drop_held(self):
1763        """Test swap feature in nsa 5g VoLTE call.
1764
1765        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1766        PhoneA (nsa 5g VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
1767        Swap active call on PhoneA.
1768        Hangup call from PhoneC, check if call continues between AB.
1769
1770        Returns:
1771            True if pass; False if fail.
1772        """
1773        ads = self.android_devices
1774
1775        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1776            log=self.log,
1777            ads=ads,
1778            num_swaps=1,
1779            phone_setup_a=provision_device_for_5g,
1780            phone_setup_b=provision_device_for_5g,
1781            phone_setup_c=provision_device_for_5g,
1782            verify_phone_a_network_subscription=is_phone_in_call_volte,
1783            verify_phone_b_network_subscription=is_phone_in_call_volte,
1784            verify_phone_c_network_subscription=is_phone_in_call_volte)
1785        if call_ab_id is None or call_ac_id is None:
1786            return False
1787
1788        return _three_phone_hangup_call_verify_call_state(
1789            log=self.log,
1790            ad_hangup=ads[2],
1791            ad_verify=ads[0],
1792            call_id=call_ab_id,
1793            call_state=CALL_STATE_ACTIVE,
1794            ads_active=[ads[0], ads[1]])
1795
1796    @TelephonyBaseTest.tel_test_wrap
1797    @test_tracker_info(uuid="471cc6d1-03aa-41a0-b13a-fdd696f17fca")
1798    def test_5g_nsa_volte_mo_mo_add_5g_nsa_volte_swap_once_drop_active(self):
1799        """Test swap feature in nsa 5g VoLTE call.
1800
1801        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1802        PhoneA (nsa 5g VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
1803        Swap active call on PhoneA.
1804        Hangup call from PhoneB, check if call continues between AC.
1805
1806        Returns:
1807            True if pass; False if fail.
1808        """
1809        ads = self.android_devices
1810
1811        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1812            log=self.log,
1813            ads=ads,
1814            num_swaps=1,
1815            phone_setup_a=provision_device_for_5g,
1816            phone_setup_b=provision_device_for_5g,
1817            phone_setup_c=provision_device_for_5g,
1818            verify_phone_a_network_subscription=is_phone_in_call_volte,
1819            verify_phone_b_network_subscription=is_phone_in_call_volte,
1820            verify_phone_c_network_subscription=is_phone_in_call_volte)
1821        if call_ab_id is None or call_ac_id is None:
1822            return False
1823
1824        return _three_phone_hangup_call_verify_call_state(
1825            log=self.log,
1826            ad_hangup=ads[1],
1827            ad_verify=ads[0],
1828            call_id=call_ac_id,
1829            call_state=_get_expected_call_state(ads[0]),
1830            ads_active=[ads[0], ads[2]])
1831
1832    @TelephonyBaseTest.tel_test_wrap
1833    @test_tracker_info(uuid="bb9d69eb-40f4-494d-9399-7dbd046962e3")
1834    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_swap_once_drop_held(self):
1835        """Test swap feature in nsa 5g VoLTE call.
1836
1837        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1838        PhoneC (nsa 5g VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
1839        Swap active call on PhoneA.
1840        Hangup call from PhoneC, check if call continues between AB.
1841
1842        Returns:
1843            True if pass; False if fail.
1844        """
1845        ads = self.android_devices
1846
1847        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1848            log=self.log,
1849            ads=ads,
1850            num_swaps=1,
1851            phone_setup_a=provision_device_for_5g,
1852            phone_setup_b=provision_device_for_5g,
1853            phone_setup_c=provision_device_for_5g,
1854            verify_phone_a_network_subscription=is_phone_in_call_volte,
1855            verify_phone_b_network_subscription=is_phone_in_call_volte,
1856            verify_phone_c_network_subscription=is_phone_in_call_volte)
1857        if call_ab_id is None or call_ac_id is None:
1858            return False
1859        return _three_phone_hangup_call_verify_call_state(
1860            log=self.log,
1861            ad_hangup=ads[2],
1862            ad_verify=ads[0],
1863            call_id=call_ab_id,
1864            call_state=CALL_STATE_ACTIVE,
1865            ads_active=[ads[0], ads[1]])
1866
1867    @TelephonyBaseTest.tel_test_wrap
1868    @test_tracker_info(uuid="33c9e964-c9d4-4cbc-894f-8682122598a7")
1869    def test_5g_nsa_volte_mo_mt_add_5g_nsa_volte_swap_once_drop_active(self):
1870        """Test swap feature in nsa 5g VoLTE call.
1871
1872        PhoneA (nsa 5g VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
1873        PhoneC (nsa 5g VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
1874        Swap active call on PhoneA.
1875        Hangup call from PhoneB, check if call continues between AC.
1876
1877        Returns:
1878            True if pass; False if fail.
1879        """
1880        ads = self.android_devices
1881
1882        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1883            log=self.log,
1884            ads=ads,
1885            num_swaps=1,
1886            phone_setup_a=provision_device_for_5g,
1887            phone_setup_b=provision_device_for_5g,
1888            phone_setup_c=provision_device_for_5g,
1889            verify_phone_a_network_subscription=is_phone_in_call_volte,
1890            verify_phone_b_network_subscription=is_phone_in_call_volte,
1891            verify_phone_c_network_subscription=is_phone_in_call_volte)
1892        if call_ab_id is None or call_ac_id is None:
1893            return False
1894
1895        return _three_phone_hangup_call_verify_call_state(
1896            log=self.log,
1897            ad_hangup=ads[1],
1898            ad_verify=ads[0],
1899            call_id=call_ac_id,
1900            call_state=_get_expected_call_state(ads[0]),
1901            ads_active=[ads[0], ads[2]])
1902
1903    @TelephonyBaseTest.tel_test_wrap
1904    @test_tracker_info(uuid="43e4cc02-93d9-4540-97b6-f5656d7d669f")
1905    def test_5g_nsa_volte_mo_mo_add_4g_volte_swap_twice_drop_held(self):
1906        """Test swap feature in nsa 5g VoLTE call.
1907
1908        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
1909        PhoneA (nsa 5g VoLTE) call PhoneC (VoLTE), accept on PhoneC.
1910        Swap active call on PhoneA.
1911        Swap active call on PhoneA.
1912        Hangup call from PhoneB, check if call continues between AC.
1913
1914        Returns:
1915            True if pass; False if fail.
1916        """
1917        ads = self.android_devices
1918
1919        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1920            log=self.log,
1921            ads=ads,
1922            num_swaps=2,
1923            phone_setup_a=provision_device_for_5g,
1924            phone_setup_b=phone_setup_volte,
1925            phone_setup_c=phone_setup_volte,
1926            verify_phone_a_network_subscription=is_phone_in_call_volte,
1927            verify_phone_b_network_subscription=is_phone_in_call_volte,
1928            verify_phone_c_network_subscription=is_phone_in_call_volte)
1929        if call_ab_id is None or call_ac_id is None:
1930            return False
1931
1932        return _three_phone_hangup_call_verify_call_state(
1933            log=self.log,
1934            ad_hangup=ads[1],
1935            ad_verify=ads[0],
1936            call_id=call_ac_id,
1937            call_state=CALL_STATE_ACTIVE,
1938            ads_active=[ads[0], ads[2]])
1939
1940    @TelephonyBaseTest.tel_test_wrap
1941    @test_tracker_info(uuid="f3081bbd-9f18-4c0b-a1ab-630d5e622259")
1942    def test_5g_nsa_volte_mo_mo_add_4g_volte_swap_twice_drop_active(self):
1943        """Test swap feature in nsa 5g VoLTE call.
1944
1945        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
1946        PhoneA (nsa 5g VoLTE) call PhoneC (VoLTE), accept on PhoneC.
1947        Swap active call on PhoneA.
1948        Swap active call on PhoneA.
1949        Hangup call from PhoneC, check if call continues between AB.
1950
1951        Returns:
1952            True if pass; False if fail.
1953        """
1954        ads = self.android_devices
1955
1956        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
1957            log=self.log,
1958            ads=ads,
1959            num_swaps=2,
1960            phone_setup_a=provision_device_for_5g,
1961            phone_setup_b=phone_setup_volte,
1962            phone_setup_c=phone_setup_volte,
1963            verify_phone_a_network_subscription=is_phone_in_call_volte,
1964            verify_phone_b_network_subscription=is_phone_in_call_volte,
1965            verify_phone_c_network_subscription=is_phone_in_call_volte)
1966        if call_ab_id is None or call_ac_id is None:
1967            return False
1968
1969        return _three_phone_hangup_call_verify_call_state(
1970            log=self.log,
1971            ad_hangup=ads[2],
1972            ad_verify=ads[0],
1973            call_id=call_ab_id,
1974            call_state=_get_expected_call_state(ads[0]),
1975            ads_active=[ads[0], ads[1]])
1976
1977    @TelephonyBaseTest.tel_test_wrap
1978    @test_tracker_info(uuid="ff4a731b-3bf9-45d5-beeb-e8ad53ceb722")
1979    def test_5g_nsa_volte_mo_mt_add_4g_volte_swap_twice_drop_held(self):
1980        """Test swap feature in nsa 5g VoLTE call.
1981
1982        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
1983        PhoneC (VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
1984        Swap active call on PhoneA.
1985        Swap active call on PhoneA.
1986        Hangup call from PhoneB, check if call continues between AC.
1987
1988        Returns:
1989            True if pass; False if fail.
1990        """
1991        ads = self.android_devices
1992
1993        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
1994            log=self.log,
1995            ads=ads,
1996            num_swaps=2,
1997            phone_setup_a=provision_device_for_5g,
1998            phone_setup_b=phone_setup_volte,
1999            phone_setup_c=phone_setup_volte,
2000            verify_phone_a_network_subscription=is_phone_in_call_volte,
2001            verify_phone_b_network_subscription=is_phone_in_call_volte,
2002            verify_phone_c_network_subscription=is_phone_in_call_volte)
2003        if call_ab_id is None or call_ac_id is None:
2004            return False
2005
2006        return _three_phone_hangup_call_verify_call_state(
2007            log=self.log,
2008            ad_hangup=ads[1],
2009            ad_verify=ads[0],
2010            call_id=call_ac_id,
2011            call_state=CALL_STATE_ACTIVE,
2012            ads_active=[ads[0], ads[2]])
2013
2014    @TelephonyBaseTest.tel_test_wrap
2015    @test_tracker_info(uuid="9ebae664-41bb-45fe-8f52-08c2dabab659")
2016    def test_5g_nsa_volte_mo_mt_add_4g_volte_swap_twice_drop_active(self):
2017        """Test swap feature in nsa 5g VoLTE call.
2018
2019        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
2020        PhoneC (VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
2021        Swap active call on PhoneA.
2022        Swap active call on PhoneA.
2023        Hangup call from PhoneC, check if call continues between AB.
2024
2025        Returns:
2026            True if pass; False if fail.
2027        """
2028        ads = self.android_devices
2029
2030        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2031            log=self.log,
2032            ads=ads,
2033            num_swaps=2,
2034            phone_setup_a=provision_device_for_5g,
2035            phone_setup_b=phone_setup_volte,
2036            phone_setup_c=phone_setup_volte,
2037            verify_phone_a_network_subscription=is_phone_in_call_volte,
2038            verify_phone_b_network_subscription=is_phone_in_call_volte,
2039            verify_phone_c_network_subscription=is_phone_in_call_volte)
2040        if call_ab_id is None or call_ac_id is None:
2041            return False
2042
2043        return _three_phone_hangup_call_verify_call_state(
2044            log=self.log,
2045            ad_hangup=ads[2],
2046            ad_verify=ads[0],
2047            call_id=call_ab_id,
2048            call_state=_get_expected_call_state(ads[0]),
2049            ads_active=[ads[0], ads[1]])
2050
2051    @TelephonyBaseTest.tel_test_wrap
2052    @test_tracker_info(uuid="b8ae81dd-3f67-4c2c-aec0-d6368efb872e")
2053    def test_5g_nsa_volte_mo_mo_add_4g_volte_swap_once_drop_held(self):
2054        """Test swap feature in nsa 5g VoLTE call.
2055
2056        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
2057        PhoneA (nsa 5g VoLTE) call PhoneC (VoLTE), accept on PhoneC.
2058        Swap active call on PhoneA.
2059        Hangup call from PhoneC, check if call continues between AB.
2060
2061        Returns:
2062            True if pass; False if fail.
2063        """
2064        ads = self.android_devices
2065
2066        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2067            log=self.log,
2068            ads=ads,
2069            num_swaps=1,
2070            phone_setup_a=provision_device_for_5g,
2071            phone_setup_b=phone_setup_volte,
2072            phone_setup_c=phone_setup_volte,
2073            verify_phone_a_network_subscription=is_phone_in_call_volte,
2074            verify_phone_b_network_subscription=is_phone_in_call_volte,
2075            verify_phone_c_network_subscription=is_phone_in_call_volte)
2076        if call_ab_id is None or call_ac_id is None:
2077            return False
2078
2079        return _three_phone_hangup_call_verify_call_state(
2080            log=self.log,
2081            ad_hangup=ads[2],
2082            ad_verify=ads[0],
2083            call_id=call_ab_id,
2084            call_state=CALL_STATE_ACTIVE,
2085            ads_active=[ads[0], ads[1]])
2086
2087    @TelephonyBaseTest.tel_test_wrap
2088    @test_tracker_info(uuid="2c588e87-8b69-4a8e-b55a-4e101806297c")
2089    def test_5g_nsa_volte_mo_mo_add_4g_volte_swap_once_drop_active(self):
2090        """Test swap feature in nsa 5g VoLTE call.
2091
2092        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
2093        PhoneA (nsa 5g VoLTE) call PhoneC (VoLTE), accept on PhoneC.
2094        Swap active call on PhoneA.
2095        Hangup call from PhoneB, check if call continues between AC.
2096
2097        Returns:
2098            True if pass; False if fail.
2099        """
2100        ads = self.android_devices
2101
2102        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2103            log=self.log,
2104            ads=ads,
2105            num_swaps=1,
2106            phone_setup_a=provision_device_for_5g,
2107            phone_setup_b=phone_setup_volte,
2108            phone_setup_c=phone_setup_volte,
2109            verify_phone_a_network_subscription=is_phone_in_call_volte,
2110            verify_phone_b_network_subscription=is_phone_in_call_volte,
2111            verify_phone_c_network_subscription=is_phone_in_call_volte)
2112        if call_ab_id is None or call_ac_id is None:
2113            return False
2114
2115        return _three_phone_hangup_call_verify_call_state(
2116            log=self.log,
2117            ad_hangup=ads[1],
2118            ad_verify=ads[0],
2119            call_id=call_ac_id,
2120            call_state=_get_expected_call_state(ads[0]),
2121            ads_active=[ads[0], ads[2]])
2122
2123    @TelephonyBaseTest.tel_test_wrap
2124    @test_tracker_info(uuid="367e8d25-5a9d-4c0d-914d-c241399bb343")
2125    def test_5g_nsa_volte_mo_mt_add_4g_volte_swap_once_drop_held(self):
2126        """Test swap feature in nsa 5g VoLTE call.
2127
2128        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
2129        PhoneC (VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
2130        Swap active call on PhoneA.
2131        Hangup call from PhoneC, check if call continues between AB.
2132
2133        Returns:
2134            True if pass; False if fail.
2135        """
2136        ads = self.android_devices
2137
2138        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2139            log=self.log,
2140            ads=ads,
2141            num_swaps=1,
2142            phone_setup_a=provision_device_for_5g,
2143            phone_setup_b=phone_setup_volte,
2144            phone_setup_c=phone_setup_volte,
2145            verify_phone_a_network_subscription=is_phone_in_call_volte,
2146            verify_phone_b_network_subscription=is_phone_in_call_volte,
2147            verify_phone_c_network_subscription=is_phone_in_call_volte)
2148        if call_ab_id is None or call_ac_id is None:
2149            return False
2150        return _three_phone_hangup_call_verify_call_state(
2151            log=self.log,
2152            ad_hangup=ads[2],
2153            ad_verify=ads[0],
2154            call_id=call_ab_id,
2155            call_state=CALL_STATE_ACTIVE,
2156            ads_active=[ads[0], ads[1]])
2157
2158    @TelephonyBaseTest.tel_test_wrap
2159    @test_tracker_info(uuid="8a8f915e-025a-4992-b05d-bf74173e3852")
2160    def test_5g_nsa_volte_mo_mt_add_4g_volte_swap_once_drop_active(self):
2161        """Test swap feature in nsa 5g VoLTE call.
2162
2163        PhoneA (nsa 5g VoLTE) call PhoneB (VoLTE), accept on PhoneB.
2164        PhoneC (VoLTE) call PhoneA (nsa 5g VoLTE), accept on PhoneA.
2165        Swap active call on PhoneA.
2166        Hangup call from PhoneB, check if call continues between AC.
2167
2168        Returns:
2169            True if pass; False if fail.
2170        """
2171        ads = self.android_devices
2172
2173        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2174            log=self.log,
2175            ads=ads,
2176            num_swaps=1,
2177            phone_setup_a=provision_device_for_5g,
2178            phone_setup_b=phone_setup_volte,
2179            phone_setup_c=phone_setup_volte,
2180            verify_phone_a_network_subscription=is_phone_in_call_volte,
2181            verify_phone_b_network_subscription=is_phone_in_call_volte,
2182            verify_phone_c_network_subscription=is_phone_in_call_volte)
2183        if call_ab_id is None or call_ac_id is None:
2184            return False
2185
2186        return _three_phone_hangup_call_verify_call_state(
2187            log=self.log,
2188            ad_hangup=ads[1],
2189            ad_verify=ads[0],
2190            call_id=call_ac_id,
2191            call_state=_get_expected_call_state(ads[0]),
2192            ads_active=[ads[0], ads[2]])
2193
2194    @TelephonyBaseTest.tel_test_wrap
2195    @test_tracker_info(uuid="880c3f9e-1a97-489a-80b1-db4c9aaa7be0")
2196    def test_4g_volte_mo_mo_add_5g_nsa_volte_swap_twice_drop_held(self):
2197        """Test swap feature in nsa 5g VoLTE call.
2198
2199        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2200        PhoneA (VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
2201        Swap active call on PhoneA.
2202        Swap active call on PhoneA.
2203        Hangup call from PhoneB, check if call continues between AC.
2204
2205        Returns:
2206            True if pass; False if fail.
2207        """
2208        ads = self.android_devices
2209
2210        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2211            log=self.log,
2212            ads=ads,
2213            num_swaps=2,
2214            phone_setup_a=phone_setup_volte,
2215            phone_setup_b=provision_device_for_5g,
2216            phone_setup_c=provision_device_for_5g,
2217            verify_phone_a_network_subscription=is_phone_in_call_volte,
2218            verify_phone_b_network_subscription=is_phone_in_call_volte,
2219            verify_phone_c_network_subscription=is_phone_in_call_volte)
2220        if call_ab_id is None or call_ac_id is None:
2221            return False
2222
2223        return _three_phone_hangup_call_verify_call_state(
2224            log=self.log,
2225            ad_hangup=ads[1],
2226            ad_verify=ads[0],
2227            call_id=call_ac_id,
2228            call_state=CALL_STATE_ACTIVE,
2229            ads_active=[ads[0], ads[2]])
2230
2231    @TelephonyBaseTest.tel_test_wrap
2232    @test_tracker_info(uuid="b869f455-bf1b-4f03-bba3-a6f029f9f594")
2233    def test_4g_volte_mo_mo_add_5g_nsa_volte_swap_twice_drop_active(self):
2234        """Test swap feature in nsa 5g VoLTE call.
2235
2236        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2237        PhoneA (VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
2238        Swap active call on PhoneA.
2239        Swap active call on PhoneA.
2240        Hangup call from PhoneC, check if call continues between AB.
2241
2242        Returns:
2243            True if pass; False if fail.
2244        """
2245        ads = self.android_devices
2246
2247        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2248            log=self.log,
2249            ads=ads,
2250            num_swaps=2,
2251            phone_setup_a=phone_setup_volte,
2252            phone_setup_b=provision_device_for_5g,
2253            phone_setup_c=provision_device_for_5g,
2254            verify_phone_a_network_subscription=is_phone_in_call_volte,
2255            verify_phone_b_network_subscription=is_phone_in_call_volte,
2256            verify_phone_c_network_subscription=is_phone_in_call_volte)
2257        if call_ab_id is None or call_ac_id is None:
2258            return False
2259
2260        return _three_phone_hangup_call_verify_call_state(
2261            log=self.log,
2262            ad_hangup=ads[2],
2263            ad_verify=ads[0],
2264            call_id=call_ab_id,
2265            call_state=_get_expected_call_state(ads[0]),
2266            ads_active=[ads[0], ads[1]])
2267
2268    @TelephonyBaseTest.tel_test_wrap
2269    @test_tracker_info(uuid="32ce220a-7abe-40f4-bd59-e948e7e8f735")
2270    def test_4g_volte_mo_mt_add_5g_nsa_volte_swap_twice_drop_held(self):
2271        """Test swap feature in nsa 5g VoLTE call.
2272
2273        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2274        PhoneC (nsa 5g VoLTE) call PhoneA (VoLTE), accept on PhoneA.
2275        Swap active call on PhoneA.
2276        Swap active call on PhoneA.
2277        Hangup call from PhoneB, check if call continues between AC.
2278
2279        Returns:
2280            True if pass; False if fail.
2281        """
2282        ads = self.android_devices
2283
2284        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2285            log=self.log,
2286            ads=ads,
2287            num_swaps=2,
2288            phone_setup_a=phone_setup_volte,
2289            phone_setup_b=provision_device_for_5g,
2290            phone_setup_c=provision_device_for_5g,
2291            verify_phone_a_network_subscription=is_phone_in_call_volte,
2292            verify_phone_b_network_subscription=is_phone_in_call_volte,
2293            verify_phone_c_network_subscription=is_phone_in_call_volte)
2294        if call_ab_id is None or call_ac_id is None:
2295            return False
2296
2297        return _three_phone_hangup_call_verify_call_state(
2298            log=self.log,
2299            ad_hangup=ads[1],
2300            ad_verify=ads[0],
2301            call_id=call_ac_id,
2302            call_state=CALL_STATE_ACTIVE,
2303            ads_active=[ads[0], ads[2]])
2304
2305    @TelephonyBaseTest.tel_test_wrap
2306    @test_tracker_info(uuid="0b6bc57b-4dfb-4d2a-9160-fbebcecd8970")
2307    def test_4g_volte_mo_mt_add_5g_nsa_volte_swap_twice_drop_active(self):
2308        """Test swap feature in nsa 5g VoLTE call.
2309
2310        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2311        PhoneC (nsa 5g VoLTE) call PhoneA (VoLTE), accept on PhoneA.
2312        Swap active call on PhoneA.
2313        Swap active call on PhoneA.
2314        Hangup call from PhoneC, check if call continues between AB.
2315
2316        Returns:
2317            True if pass; False if fail.
2318        """
2319        ads = self.android_devices
2320
2321        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2322            log=self.log,
2323            ads=ads,
2324            num_swaps=2,
2325            phone_setup_a=phone_setup_volte,
2326            phone_setup_b=provision_device_for_5g,
2327            phone_setup_c=provision_device_for_5g,
2328            verify_phone_a_network_subscription=is_phone_in_call_volte,
2329            verify_phone_b_network_subscription=is_phone_in_call_volte,
2330            verify_phone_c_network_subscription=is_phone_in_call_volte)
2331        if call_ab_id is None or call_ac_id is None:
2332            return False
2333
2334        return _three_phone_hangup_call_verify_call_state(
2335            log=self.log,
2336            ad_hangup=ads[2],
2337            ad_verify=ads[0],
2338            call_id=call_ab_id,
2339            call_state=_get_expected_call_state(ads[0]),
2340            ads_active=[ads[0], ads[1]])
2341
2342    @TelephonyBaseTest.tel_test_wrap
2343    @test_tracker_info(uuid="1d70289e-bbef-420a-b484-77c5573cc8fb")
2344    def test_4g_volte_mo_mo_add_5g_nsa_volte_swap_once_drop_held(self):
2345        """Test swap feature in nsa 5g VoLTE call.
2346
2347        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2348        PhoneA (VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
2349        Swap active call on PhoneA.
2350        Hangup call from PhoneC, check if call continues between AB.
2351
2352        Returns:
2353            True if pass; False if fail.
2354        """
2355        ads = self.android_devices
2356
2357        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2358            log=self.log,
2359            ads=ads,
2360            num_swaps=1,
2361            phone_setup_a=phone_setup_volte,
2362            phone_setup_b=provision_device_for_5g,
2363            phone_setup_c=provision_device_for_5g,
2364            verify_phone_a_network_subscription=is_phone_in_call_volte,
2365            verify_phone_b_network_subscription=is_phone_in_call_volte,
2366            verify_phone_c_network_subscription=is_phone_in_call_volte)
2367        if call_ab_id is None or call_ac_id is None:
2368            return False
2369
2370        return _three_phone_hangup_call_verify_call_state(
2371            log=self.log,
2372            ad_hangup=ads[2],
2373            ad_verify=ads[0],
2374            call_id=call_ab_id,
2375            call_state=CALL_STATE_ACTIVE,
2376            ads_active=[ads[0], ads[1]])
2377
2378    @TelephonyBaseTest.tel_test_wrap
2379    @test_tracker_info(uuid="3a62d358-ccb6-43fc-acb5-469dc9c5d5b2")
2380    def test_4g_volte_mo_mo_add_5g_nsa_volte_swap_once_drop_active(self):
2381        """Test swap feature in nsa 5g VoLTE call.
2382
2383        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2384        PhoneA (VoLTE) call PhoneC (nsa 5g VoLTE), accept on PhoneC.
2385        Swap active call on PhoneA.
2386        Swap active call on PhoneA.
2387        Hangup call from PhoneB, check if call continues between AC.
2388
2389        Returns:
2390            True if pass; False if fail.
2391        """
2392        ads = self.android_devices
2393
2394        call_ab_id, call_ac_id = _test_call_mo_mo_add_swap_x(
2395            log=self.log,
2396            ads=ads,
2397            num_swaps=1,
2398            phone_setup_a=phone_setup_volte,
2399            phone_setup_b=provision_device_for_5g,
2400            phone_setup_c=provision_device_for_5g,
2401            verify_phone_a_network_subscription=is_phone_in_call_volte,
2402            verify_phone_b_network_subscription=is_phone_in_call_volte,
2403            verify_phone_c_network_subscription=is_phone_in_call_volte)
2404        if call_ab_id is None or call_ac_id is None:
2405            return False
2406
2407        return _three_phone_hangup_call_verify_call_state(
2408            log=self.log,
2409            ad_hangup=ads[1],
2410            ad_verify=ads[0],
2411            call_id=call_ac_id,
2412            call_state=_get_expected_call_state(ads[0]),
2413            ads_active=[ads[0], ads[2]])
2414
2415    @TelephonyBaseTest.tel_test_wrap
2416    @test_tracker_info(uuid="52e0a840-3fb3-4351-b2f0-d67cf9928a16")
2417    def test_4g_volte_mo_mt_add_5g_nsa_volte_swap_once_drop_held(self):
2418        """Test swap feature in nsa 5g VoLTE call.
2419
2420        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2421        PhoneC (nsa 5g VoLTE) call PhoneA (VoLTE), accept on PhoneA.
2422        Swap active call on PhoneA.
2423        Hangup call from PhoneC, check if call continues between AB.
2424
2425        Returns:
2426            True if pass; False if fail.
2427        """
2428        ads = self.android_devices
2429
2430        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2431            log=self.log,
2432            ads=ads,
2433            num_swaps=1,
2434            phone_setup_a=phone_setup_volte,
2435            phone_setup_b=provision_device_for_5g,
2436            phone_setup_c=provision_device_for_5g,
2437            verify_phone_a_network_subscription=is_phone_in_call_volte,
2438            verify_phone_b_network_subscription=is_phone_in_call_volte,
2439            verify_phone_c_network_subscription=is_phone_in_call_volte)
2440        if call_ab_id is None or call_ac_id is None:
2441            return False
2442        return _three_phone_hangup_call_verify_call_state(
2443            log=self.log,
2444            ad_hangup=ads[2],
2445            ad_verify=ads[0],
2446            call_id=call_ab_id,
2447            call_state=CALL_STATE_ACTIVE,
2448            ads_active=[ads[0], ads[1]])
2449
2450    @TelephonyBaseTest.tel_test_wrap
2451    @test_tracker_info(uuid="6b63555a-c009-4431-be14-abc546cff911")
2452    def test_4g_volte_mo_mt_add_5g_nsa_volte_swap_once_drop_active(self):
2453        """Test swap feature in nsa 5g VoLTE call.
2454
2455        PhoneA (VoLTE) call PhoneB (nsa 5g VoLTE), accept on PhoneB.
2456        PhoneC (nsa 5g VoLTE) call PhoneA (VoLTE), accept on PhoneA.
2457        Swap active call on PhoneA.
2458        Hangup call from PhoneB, check if call continues between AC.
2459
2460        Returns:
2461            True if pass; False if fail.
2462        """
2463        ads = self.android_devices
2464
2465        call_ab_id, call_ac_id = _test_call_mo_mt_add_swap_x(
2466            log=self.log,
2467            ads=ads,
2468            num_swaps=1,
2469            phone_setup_a=phone_setup_volte,
2470            phone_setup_b=provision_device_for_5g,
2471            phone_setup_c=provision_device_for_5g,
2472            verify_phone_a_network_subscription=is_phone_in_call_volte,
2473            verify_phone_b_network_subscription=is_phone_in_call_volte,
2474            verify_phone_c_network_subscription=is_phone_in_call_volte)
2475        if call_ab_id is None or call_ac_id is None:
2476            return False
2477
2478        return _three_phone_hangup_call_verify_call_state(
2479            log=self.log,
2480            ad_hangup=ads[1],
2481            ad_verify=ads[0],
2482            call_id=call_ac_id,
2483            call_state=_get_expected_call_state(ads[0]),
2484            ads_active=[ads[0], ads[2]])
2485
2486    @TelephonyBaseTest.tel_test_wrap
2487    @test_tracker_info(uuid="f4990e20-4a40-4238-9a2a-a75d9be3d354")
2488    def test_5g_nsa_volte_call_forwarding_unconditional(self):
2489
2490        ads = self.android_devices
2491
2492        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2493                 (phone_setup_voice_general, (self.log, ads[1])),
2494                 (phone_setup_voice_general, (self.log, ads[2]))]
2495        if not multithread_func(self.log, tasks):
2496            self.log.error("Phone Failed to Set Up Properly.")
2497            return False
2498
2499        return three_phone_call_forwarding_short_seq(
2500            self.log,
2501            ads[0],
2502            None,
2503            None,
2504            ads[1],
2505            ads[2],
2506            call_forwarding_type="unconditional")
2507
2508    @TelephonyBaseTest.tel_test_wrap
2509    @test_tracker_info(uuid="26b85c3f-5a38-465a-a6e3-dfd03c6ea315")
2510    def test_5g_nsa_volte_call_forwarding_busy(self):
2511
2512        ads = self.android_devices
2513
2514        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2515                 (phone_setup_voice_general, (self.log, ads[1])),
2516                 (phone_setup_voice_general, (self.log, ads[2]))]
2517        if not multithread_func(self.log, tasks):
2518            self.log.error("Phone Failed to Set Up Properly.")
2519            return False
2520
2521        return three_phone_call_forwarding_short_seq(
2522            self.log,
2523            ads[0],
2524            None,
2525            None,
2526            ads[1],
2527            ads[2],
2528            call_forwarding_type="busy")
2529
2530    @TelephonyBaseTest.tel_test_wrap
2531    @test_tracker_info(uuid="96638a39-efe2-40e2-afb6-6a97f87c4af5")
2532    def test_5g_nsa_volte_call_forwarding_not_answered(self):
2533
2534        ads = self.android_devices
2535
2536        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2537                 (phone_setup_voice_general, (self.log, ads[1])),
2538                 (phone_setup_voice_general, (self.log, ads[2]))]
2539        if not multithread_func(self.log, tasks):
2540            self.log.error("Phone Failed to Set Up Properly.")
2541            return False
2542
2543        return three_phone_call_forwarding_short_seq(
2544            self.log,
2545            ads[0],
2546            None,
2547            None,
2548            ads[1],
2549            ads[2],
2550            call_forwarding_type="not_answered")
2551
2552    @TelephonyBaseTest.tel_test_wrap
2553    @test_tracker_info(uuid="a13e586a-3345-49d8-9e84-ca33bd3fbd7d")
2554    def test_5g_nsa_volte_call_forwarding_not_reachable(self):
2555
2556        ads = self.android_devices
2557
2558        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2559                 (phone_setup_voice_general, (self.log, ads[1])),
2560                 (phone_setup_voice_general, (self.log, ads[2]))]
2561        if not multithread_func(self.log, tasks):
2562            self.log.error("Phone Failed to Set Up Properly.")
2563            return False
2564
2565        return three_phone_call_forwarding_short_seq(
2566            self.log,
2567            ads[0],
2568            None,
2569            None,
2570            ads[1],
2571            ads[2],
2572            call_forwarding_type="not_reachable")
2573
2574    @TelephonyBaseTest.tel_test_wrap
2575    @test_tracker_info(uuid="e9a6027b-7dd1-4dca-a700-e4d42c9c947d")
2576    def test_call_waiting_scenario_1(self):
2577        """ Call waiting scenario 1: 1st call ended first by caller1 during 2nd
2578        call incoming. 2nd call ended by caller2.
2579        """
2580        ads = self.android_devices
2581
2582        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2583                 (phone_setup_voice_general, (self.log, ads[1])),
2584                 (phone_setup_voice_general, (self.log, ads[2]))]
2585        if not multithread_func(self.log, tasks):
2586            self.log.error("Phone Failed to Set Up Properly.")
2587            return False
2588
2589        return three_phone_call_waiting_short_seq(self.log,
2590                                                  ads[0],
2591                                                  None,
2592                                                  None,
2593                                                  ads[1],
2594                                                  ads[2],
2595                                                  call_waiting=True,
2596                                                  scenario=1)
2597
2598    @TelephonyBaseTest.tel_test_wrap
2599    @test_tracker_info(uuid="3fe02cb7-68d7-4762-882a-02bff8ce32f9")
2600    def test_call_waiting_scenario_2(self):
2601        """ Call waiting scenario 2: 1st call ended first by caller1 during 2nd
2602        call incoming. 2nd call ended by callee.
2603        """
2604        ads = self.android_devices
2605
2606        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2607                 (phone_setup_voice_general, (self.log, ads[1])),
2608                 (phone_setup_voice_general, (self.log, ads[2]))]
2609        if not multithread_func(self.log, tasks):
2610            self.log.error("Phone Failed to Set Up Properly.")
2611            return False
2612
2613        return three_phone_call_waiting_short_seq(self.log,
2614                                                  ads[0],
2615                                                  None,
2616                                                  None,
2617                                                  ads[1],
2618                                                  ads[2],
2619                                                  call_waiting=True,
2620                                                  scenario=2)
2621
2622    @TelephonyBaseTest.tel_test_wrap
2623    @test_tracker_info(uuid="bf5eb9ad-1fa2-468d-99dc-3cbcee8c89f8")
2624    def test_call_waiting_scenario_3(self):
2625        """ Call waiting scenario 3: 1st call ended first by callee during 2nd
2626        call incoming. 2nd call ended by caller2.
2627        """
2628        ads = self.android_devices
2629
2630        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2631                 (phone_setup_voice_general, (self.log, ads[1])),
2632                 (phone_setup_voice_general, (self.log, ads[2]))]
2633        if not multithread_func(self.log, tasks):
2634            self.log.error("Phone Failed to Set Up Properly.")
2635            return False
2636
2637        return three_phone_call_waiting_short_seq(self.log,
2638                                                  ads[0],
2639                                                  None,
2640                                                  None,
2641                                                  ads[1],
2642                                                  ads[2],
2643                                                  call_waiting=True,
2644                                                  scenario=3)
2645
2646    @TelephonyBaseTest.tel_test_wrap
2647    @test_tracker_info(uuid="f2e4b6a9-6a6f-466c-884c-c0ef79d6ff01")
2648    def test_call_waiting_scenario_4(self):
2649        """Call waiting scenario 4: 1st call ended first by callee during 2nd
2650        call incoming. 2nd call ended by callee.
2651        """
2652        ads = self.android_devices
2653
2654        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2655                 (phone_setup_voice_general, (self.log, ads[1])),
2656                 (phone_setup_voice_general, (self.log, ads[2]))]
2657        if not multithread_func(self.log, tasks):
2658            self.log.error("Phone Failed to Set Up Properly.")
2659            return False
2660
2661        return three_phone_call_waiting_short_seq(self.log,
2662                                                  ads[0],
2663                                                  None,
2664                                                  None,
2665                                                  ads[1],
2666                                                  ads[2],
2667                                                  call_waiting=True,
2668                                                  scenario=4)
2669
2670    @TelephonyBaseTest.tel_test_wrap
2671    @test_tracker_info(uuid="f2d36f45-63f6-4e01-9844-6fa53c26def7")
2672    def test_call_waiting_scenario_5(self):
2673        """ Call waiting scenario 5: 1st call ended by caller1. 2nd call ended
2674        by caller2.
2675        """
2676        ads = self.android_devices
2677
2678        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2679                 (phone_setup_voice_general, (self.log, ads[1])),
2680                 (phone_setup_voice_general, (self.log, ads[2]))]
2681        if not multithread_func(self.log, tasks):
2682            self.log.error("Phone Failed to Set Up Properly.")
2683            return False
2684
2685        return three_phone_call_waiting_short_seq(self.log,
2686                                                  ads[0],
2687                                                  None,
2688                                                  None,
2689                                                  ads[1],
2690                                                  ads[2],
2691                                                  call_waiting=True,
2692                                                  scenario=5)
2693
2694    @TelephonyBaseTest.tel_test_wrap
2695    @test_tracker_info(uuid="7eb2a89d-30ad-4a34-8e63-87d0181b91aa")
2696    def test_call_waiting_scenario_6(self):
2697        """Call waiting scenario 6: 1st call ended by caller1. 2nd call ended by
2698        callee.
2699        """
2700        ads = self.android_devices
2701
2702        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2703                 (phone_setup_voice_general, (self.log, ads[1])),
2704                 (phone_setup_voice_general, (self.log, ads[2]))]
2705        if not multithread_func(self.log, tasks):
2706            self.log.error("Phone Failed to Set Up Properly.")
2707            return False
2708
2709        return three_phone_call_waiting_short_seq(self.log,
2710                                                  ads[0],
2711                                                  None,
2712                                                  None,
2713                                                  ads[1],
2714                                                  ads[2],
2715                                                  call_waiting=True,
2716                                                  scenario=6)
2717
2718    @TelephonyBaseTest.tel_test_wrap
2719    @test_tracker_info(uuid="c63882e5-5b72-4ca6-8e36-260c50f42028")
2720    def test_call_waiting_scenario_7(self):
2721        """ Call waiting scenario 7: 1st call ended by callee. 2nd call ended by
2722        caller2.
2723        """
2724        ads = self.android_devices
2725
2726        tasks = [(phone_setup_voice_general, (self.log, ads[0])),
2727                 (phone_setup_voice_general, (self.log, ads[1])),
2728                 (phone_setup_voice_general, (self.log, ads[2]))]
2729        if not multithread_func(self.log, tasks):
2730            self.log.error("Phone Failed to Set Up Properly.")
2731            return False
2732
2733        return three_phone_call_waiting_short_seq(self.log,
2734                                                  ads[0],
2735                                                  None,
2736                                                  None,
2737                                                  ads[1],
2738                                                  ads[2],
2739                                                  call_waiting=True,
2740                                                  scenario=7)
2741
2742    @TelephonyBaseTest.tel_test_wrap
2743    @test_tracker_info(uuid="f9be652f-a307-4fa5-9b30-ea78404110bd")
2744    def test_call_waiting_scenario_8(self):
2745        """Call waiting scenario 8: 1st call ended by callee. 2nd call ended by
2746        callee.
2747        """
2748        ads = self.android_devices
2749
2750        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2751                 (phone_setup_voice_general, (self.log, ads[1])),
2752                 (phone_setup_voice_general, (self.log, ads[2]))]
2753        if not multithread_func(self.log, tasks):
2754            self.log.error("Phone Failed to Set Up Properly.")
2755            return False
2756
2757        return three_phone_call_waiting_short_seq(self.log,
2758                                                  ads[0],
2759                                                  None,
2760                                                  None,
2761                                                  ads[1],
2762                                                  ads[2],
2763                                                  call_waiting=True,
2764                                                  scenario=8)
2765
2766    @TelephonyBaseTest.tel_test_wrap
2767    @test_tracker_info(uuid="b2e816b5-8e8f-4863-981c-47847d9527e0")
2768    def test_call_waiting_deactivated(self):
2769
2770        ads = self.android_devices
2771
2772        tasks = [(phone_setup_volte, (self.log, ads[0], GEN_5G)),
2773                 (phone_setup_voice_general, (self.log, ads[1])),
2774                 (phone_setup_voice_general, (self.log, ads[2]))]
2775        if not multithread_func(self.log, tasks):
2776            self.log.error("Phone Failed to Set Up Properly.")
2777            return False
2778
2779        return three_phone_call_waiting_short_seq(self.log,
2780                                                  ads[0],
2781                                                  None,
2782                                                  None,
2783                                                  ads[1],
2784                                                  ads[2],
2785                                                  call_waiting=False)
2786