• 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 IMS Settings
18"""
19
20import time
21
22from acts import signals
23from acts.test_decorators import test_tracker_info
24from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
25from acts_contrib.test_utils.tel.tel_defines import CarrierConfigs
26from acts_contrib.test_utils.tel.tel_defines import CAPABILITY_VOLTE
27from acts_contrib.test_utils.tel.tel_defines import CAPABILITY_WFC
28from acts_contrib.test_utils.tel.tel_defines import MAX_WAIT_TIME_WIFI_CONNECTION
29from acts_contrib.test_utils.tel.tel_defines import NETWORK_SERVICE_DATA
30from acts_contrib.test_utils.tel.tel_defines import MAX_WAIT_TIME_IMS_REGISTRATION
31from acts_contrib.test_utils.tel.tel_defines import MAX_WAIT_TIME_WFC_ENABLED
32from acts_contrib.test_utils.tel.tel_defines import RAT_FAMILY_WLAN
33from acts_contrib.test_utils.tel.tel_defines import RAT_LTE
34from acts_contrib.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED
35from acts_contrib.test_utils.tel.tel_defines import WFC_MODE_DISABLED
36from acts_contrib.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
37from acts_contrib.test_utils.tel.tel_bootloader_utils import fastboot_wipe
38from acts_contrib.test_utils.tel.tel_data_utils import wait_for_wifi_data_connection
39from acts_contrib.test_utils.tel.tel_ims_utils import set_wfc_mode
40from acts_contrib.test_utils.tel.tel_ims_utils import toggle_volte
41from acts_contrib.test_utils.tel.tel_ims_utils import wait_for_ims_registered
42from acts_contrib.test_utils.tel.tel_ims_utils import wait_for_wfc_enabled
43from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_voice_3g
44from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_csfb
45from acts_contrib.test_utils.tel.tel_phone_setup_utils import phone_setup_volte
46from acts_contrib.test_utils.tel.tel_phone_setup_utils import wait_for_network_rat
47from acts_contrib.test_utils.tel.tel_phone_setup_utils import wait_for_not_network_rat
48from acts_contrib.test_utils.tel.tel_subscription_utils import get_outgoing_voice_sub_id
49from acts_contrib.test_utils.tel.tel_test_utils import dumpsys_carrier_config
50from acts_contrib.test_utils.tel.tel_test_utils import is_droid_in_rat_family
51from acts_contrib.test_utils.tel.tel_test_utils import revert_default_telephony_setting
52from acts_contrib.test_utils.tel.tel_test_utils import toggle_airplane_mode_by_adb
53from acts_contrib.test_utils.tel.tel_test_utils import verify_default_telephony_setting
54from acts_contrib.test_utils.tel.tel_test_utils import verify_internet_connection
55from acts_contrib.test_utils.tel.tel_voice_utils import change_ims_setting
56from acts_contrib.test_utils.tel.tel_voice_utils import verify_default_ims_setting
57from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_SSID_KEY
58from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_PWD_KEY
59from acts_contrib.test_utils.tel.tel_wifi_utils import wifi_reset
60from acts_contrib.test_utils.tel.tel_wifi_utils import wifi_toggle_state
61
62
63class TelLiveImsSettingsTest(TelephonyBaseTest):
64    def setup_class(self):
65        TelephonyBaseTest.setup_class(self)
66        self.dut = self.android_devices[0]
67        self.dut_client = self.android_devices[1]
68        self.subid = get_outgoing_voice_sub_id(self.dut)
69        self.carrier_configs = dumpsys_carrier_config(self.dut)[self.subid]
70        self.dut_capabilities = self.dut.telephony["subscription"][
71            self.subid].get("capabilities", [])
72        self.dut.log.info("DUT capabilities: %s", self.dut_capabilities)
73        if CAPABILITY_VOLTE not in self.dut_capabilities:
74            raise signals.TestAbortClass("VoLTE is not supported")
75        if CAPABILITY_WFC not in self.dut_capabilities:
76            raise signals.TestAbortClass("WFC is not supported")
77
78        self.default_volte = (CAPABILITY_VOLTE in self.dut_capabilities) and (
79            self.carrier_configs[CarrierConfigs.
80                                 ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL])
81        self.default_wfc_enabled = (
82            CAPABILITY_WFC in self.dut_capabilities
83        ) and (
84            self.carrier_configs[CarrierConfigs.DEFAULT_WFC_IMS_ENABLED_BOOL])
85        self.default_wfc_mode = self.carrier_configs.get(
86            CarrierConfigs.DEFAULT_WFC_IMS_MODE_INT, None)
87        self.dut_wfc_modes = self.dut.telephony[
88            "subscription"][self.subid].get("wfc_modes", [])
89
90
91    @test_tracker_info(uuid="a3a680ba-d1e0-4770-a38c-4de8f15f9171")
92    @TelephonyBaseTest.tel_test_wrap
93    def test_lte_volte_wifi_connected_toggle_wfc(self):
94        """Test for WiFi Calling settings:
95        LTE + VoLTE Enabled + WiFi Connected, Toggling WFC
96
97        Steps:
98        1. Setup DUT Idle, LTE network type, VoLTE enabled.
99        2. Make sure DUT WiFi connected, WFC disabled.
100        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
101            report iwlan rat.
102        4. Set DUT WFC disabled, verify DUT WFC unavailable,
103            not report iwlan rat.
104
105        Expected Results:
106        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
107        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
108        """
109        if not phone_setup_volte(self.log, self.dut):
110            self.log.error("Failed to setup VoLTE")
111            return False
112        if not change_ims_setting(log=self.log,
113                                       ad=self.dut,
114                                       dut_client= self.dut_client,
115                                       wifi_network_ssid=self.wifi_network_ssid,
116                                       wifi_network_pass=self.wifi_network_pass,
117                                       dut_capabilities=self.dut_capabilities,
118                                       subid=self.subid,
119                                       airplane_mode=False,
120                                       wifi_enabled=True,
121                                       volte_enabled=True,
122                                       wfc_enabled=True,
123                                       nw_gen=RAT_LTE,
124                                       wfc_mode=self.default_wfc_mode):
125            return False
126        if not change_ims_setting(log=self.log,
127                                       ad=self.dut,
128                                       dut_client= self.dut_client,
129                                       wifi_network_ssid=self.wifi_network_ssid,
130                                       wifi_network_pass=self.wifi_network_pass,
131                                       dut_capabilities=self.dut_capabilities,
132                                       subid=self.subid,
133                                       airplane_mode=False,
134                                       wifi_enabled=True,
135                                       volte_enabled=True,
136                                       wfc_enabled=False,
137                                       nw_gen=RAT_LTE,
138                                       wfc_mode=None):
139            return False
140        return change_ims_setting(log=self.log,
141                                       ad=self.dut,
142                                       dut_client= self.dut_client,
143                                       wifi_network_ssid=self.wifi_network_ssid,
144                                       wifi_network_pass=self.wifi_network_pass,
145                                       dut_capabilities=self.dut_capabilities,
146                                       subid=self.subid,
147                                       airplane_mode=False,
148                                       wifi_enabled=True,
149                                       volte_enabled=True,
150                                       wfc_enabled=True,
151                                       nw_gen=RAT_LTE,
152                                       wfc_mode=None)
153
154    @test_tracker_info(uuid="d3ffae75-ae4a-4ed8-9337-9155c413311d")
155    @TelephonyBaseTest.tel_test_wrap
156    def test_lte_wifi_connected_toggle_wfc(self):
157        """Test for WiFi Calling settings:
158        LTE + VoLTE Disabled + WiFi Connected, Toggling WFC
159
160        Steps:
161        1. Setup DUT Idle, LTE network type, VoLTE disabled.
162        2. Make sure DUT WiFi connected, WFC disabled.
163        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
164            report iwlan rat.
165        4. Set DUT WFC disabled, verify DUT WFC unavailable,
166            not report iwlan rat.
167
168        Expected Results:
169        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
170        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
171        """
172        if not phone_setup_csfb(self.log, self.dut):
173            self.log.error("Failed to setup LTE")
174            return False
175        if not change_ims_setting(log=self.log,
176                                   ad=self.dut,
177                                   dut_client= self.dut_client,
178                                   wifi_network_ssid=self.wifi_network_ssid,
179                                   wifi_network_pass=self.wifi_network_pass,
180                                   dut_capabilities=self.dut_capabilities,
181                                   subid=self.subid,
182                                   airplane_mode=False,
183                                   wifi_enabled=True,
184                                   volte_enabled=False,
185                                   wfc_enabled=True,
186                                   nw_gen=RAT_LTE,
187                                   wfc_mode=self.default_wfc_mode):
188            return False
189        if not change_ims_setting(log=self.log,
190                                       ad=self.dut,
191                                       dut_client= self.dut_client,
192                                       wifi_network_ssid=self.wifi_network_ssid,
193                                       wifi_network_pass=self.wifi_network_pass,
194                                       dut_capabilities=self.dut_capabilities,
195                                       subid=self.subid,
196                                       airplane_mode=False,
197                                       wifi_enabled=True,
198                                       volte_enabled=False,
199                                       wfc_enabled=False,
200                                       nw_gen=RAT_LTE,
201                                       wfc_mode=None):
202            return False
203        return change_ims_setting(log=self.log,
204                                       ad=self.dut,
205                                       dut_client= self.dut_client,
206                                       wifi_network_ssid=self.wifi_network_ssid,
207                                       wifi_network_pass=self.wifi_network_pass,
208                                       dut_capabilities=self.dut_capabilities,
209                                       subid=self.subid,
210                                       airplane_mode=False,
211                                       wifi_enabled=True,
212                                       volte_enabled=False,
213                                       wfc_enabled=True,
214                                       nw_gen=RAT_LTE,
215                                       wfc_mode=None)
216
217    @test_tracker_info(uuid="29d2d7b7-1c31-4a2c-896a-3f6756c620ac")
218    @TelephonyBaseTest.tel_test_wrap
219    def test_3g_wifi_connected_toggle_wfc(self):
220        """Test for WiFi Calling settings:
221        3G + WiFi Connected, Toggling WFC
222
223        Steps:
224        1. Setup DUT Idle, 3G network type.
225        2. Make sure DUT WiFi connected, WFC disabled.
226        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
227            report iwlan rat.
228        4. Set DUT WFC disabled, verify DUT WFC unavailable,
229            not report iwlan rat.
230
231        Expected Results:
232        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
233        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
234        """
235        if not phone_setup_voice_3g(self.log, self.dut):
236            self.log.error("Failed to setup 3G")
237            return False
238        if not change_ims_setting(log=self.log,
239                                       ad=self.dut,
240                                       dut_client= self.dut_client,
241                                       wifi_network_ssid=self.wifi_network_ssid,
242                                       wifi_network_pass=self.wifi_network_pass,
243                                       dut_capabilities=self.dut_capabilities,
244                                       subid=self.subid,
245                                       airplane_mode=False,
246                                       wifi_enabled=True,
247                                       volte_enabled=False,
248                                       wfc_enabled=True,
249                                       nw_gen=RAT_LTE,
250                                       wfc_mode=self.default_wfc_mode):
251            return False
252        if not change_ims_setting(log=self.log,
253                                       ad=self.dut,
254                                       dut_client= self.dut_client,
255                                       wifi_network_ssid=self.wifi_network_ssid,
256                                       wifi_network_pass=self.wifi_network_pass,
257                                       dut_capabilities=self.dut_capabilities,
258                                       subid=self.subid,
259                                       airplane_mode=False,
260                                       wifi_enabled=True,
261                                       volte_enabled=False,
262                                       wfc_enabled=False,
263                                       nw_gen=RAT_LTE,
264                                       wfc_mode=None):
265            return False
266        return change_ims_setting(log=self.log,
267                                       ad=self.dut,
268                                       dut_client= self.dut_client,
269                                       wifi_network_ssid=self.wifi_network_ssid,
270                                       wifi_network_pass=self.wifi_network_pass,
271                                       dut_capabilities=self.dut_capabilities,
272                                       subid=self.subid,
273                                       airplane_mode=False,
274                                       wifi_enabled=True,
275                                       volte_enabled=False,
276                                       wfc_enabled=True,
277                                       nw_gen=RAT_LTE,
278                                       wfc_mode=None)
279
280    @test_tracker_info(uuid="ce2c0208-9ea0-4b31-91f4-d06a62cb927a")
281    @TelephonyBaseTest.tel_test_wrap
282    def test_apm_wifi_connected_toggle_wfc(self):
283        """Test for WiFi Calling settings:
284        APM + WiFi Connected, Toggling WFC
285
286        Steps:
287        1. Setup DUT Idle, Airplane mode.
288        2. Make sure DUT WiFi connected, WFC disabled.
289        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
290            report iwlan rat.
291        4. Set DUT WFC disabled, verify DUT WFC unavailable,
292            not report iwlan rat.
293
294        Expected Results:
295        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
296        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
297        """
298        if not change_ims_setting(log=self.log,
299                                       ad=self.dut,
300                                       dut_client= self.dut_client,
301                                       wifi_network_ssid=self.wifi_network_ssid,
302                                       wifi_network_pass=self.wifi_network_pass,
303                                       dut_capabilities=self.dut_capabilities,
304                                       subid=self.subid,
305                                       airplane_mode=True,
306                                       wifi_enabled=True,
307                                       volte_enabled=True,
308                                       wfc_enabled=True,
309                                       nw_gen=RAT_LTE,
310                                       wfc_mode=self.default_wfc_mode):
311            return False
312        if not change_ims_setting(log=self.log,
313                                       ad=self.dut,
314                                       dut_client= self.dut_client,
315                                       wifi_network_ssid=self.wifi_network_ssid,
316                                       wifi_network_pass=self.wifi_network_pass,
317                                       dut_capabilities=self.dut_capabilities,
318                                       subid=self.subid,
319                                       airplane_mode=True,
320                                       wifi_enabled=True,
321                                       volte_enabled=True,
322                                       wfc_enabled=False,
323                                       nw_gen=RAT_LTE,
324                                       wfc_mode=None):
325            return False
326        return change_ims_setting(log=self.log,
327                                       ad=self.dut,
328                                       dut_client= self.dut_client,
329                                       wifi_network_ssid=self.wifi_network_ssid,
330                                       wifi_network_pass=self.wifi_network_pass,
331                                       dut_capabilities=self.dut_capabilities,
332                                       subid=self.subid,
333                                       airplane_mode=True,
334                                       wifi_enabled=True,
335                                       volte_enabled=True,
336                                       wfc_enabled=True,
337                                       nw_gen=RAT_LTE,
338                                       wfc_mode=None)
339
340    @test_tracker_info(uuid="681e2448-32a2-434d-abd6-0bc2ab5afd9c")
341    @TelephonyBaseTest.tel_test_wrap
342    def test_lte_volte_wfc_enabled_toggle_wifi(self):
343        """Test for WiFi Calling settings:
344        LTE + VoLTE Enabled + WFC enabled, Toggling WiFi
345
346        Steps:
347        1. Setup DUT Idle, LTE network type, VoLTE enabled.
348        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
349        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
350        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
351
352        Expected Results:
353        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
354        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
355        """
356        if not phone_setup_volte(self.log, self.dut):
357            self.log.error("Failed to setup VoLTE")
358            return False
359        if not change_ims_setting(log=self.log,
360                                       ad=self.dut,
361                                       dut_client= self.dut_client,
362                                       wifi_network_ssid=self.wifi_network_ssid,
363                                       wifi_network_pass=self.wifi_network_pass,
364                                       dut_capabilities=self.dut_capabilities,
365                                       subid=self.subid,
366                                       airplane_mode=False,
367                                       wifi_enabled=True,
368                                       volte_enabled=True,
369                                       wfc_enabled=True,
370                                       nw_gen=RAT_LTE,
371                                       wfc_mode=self.default_wfc_mode):
372            return False
373        if not change_ims_setting(log=self.log,
374                                       ad=self.dut,
375                                       dut_client= self.dut_client,
376                                       wifi_network_ssid=self.wifi_network_ssid,
377                                       wifi_network_pass=self.wifi_network_pass,
378                                       dut_capabilities=self.dut_capabilities,
379                                       subid=self.subid,
380                                       airplane_mode=False,
381                                       wifi_enabled=True,
382                                       volte_enabled=True,
383                                       wfc_enabled=False,
384                                       nw_gen=RAT_LTE,
385                                       wfc_mode=None):
386            return False
387        return change_ims_setting(log=self.log,
388                                       ad=self.dut,
389                                       dut_client= self.dut_client,
390                                       wifi_network_ssid=self.wifi_network_ssid,
391                                       wifi_network_pass=self.wifi_network_pass,
392                                       dut_capabilities=self.dut_capabilities,
393                                       subid=self.subid,
394                                       airplane_mode=False,
395                                       wifi_enabled=True,
396                                       volte_enabled=True,
397                                       wfc_enabled=True,
398                                       nw_gen=RAT_LTE,
399                                       wfc_mode=None)
400
401    @test_tracker_info(uuid="63922066-9caa-42e6-bc9f-49f5ac01cbe2")
402    @TelephonyBaseTest.tel_test_wrap
403    def test_lte_wfc_enabled_toggle_wifi(self):
404        """Test for WiFi Calling settings:
405        LTE + VoLTE Disabled + WFC enabled, Toggling WiFi
406
407        Steps:
408        1. Setup DUT Idle, LTE network type, VoLTE disabled.
409        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
410        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
411        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
412
413        Expected Results:
414        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
415        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
416        """
417        if not phone_setup_csfb(self.log, self.dut):
418            self.log.error("Failed to setup CSFB")
419            return False
420        if not change_ims_setting(log=self.log,
421                                       ad=self.dut,
422                                       dut_client= self.dut_client,
423                                       wifi_network_ssid=self.wifi_network_ssid,
424                                       wifi_network_pass=self.wifi_network_pass,
425                                       dut_capabilities=self.dut_capabilities,
426                                       subid=self.subid,
427                                       airplane_mode=False,
428                                       wifi_enabled=True,
429                                       volte_enabled=False,
430                                       wfc_enabled=True,
431                                       nw_gen=RAT_LTE,
432                                       wfc_mode=self.default_wfc_mode):
433            return False
434        if not change_ims_setting(log=self.log,
435                                       ad=self.dut,
436                                       dut_client= self.dut_client,
437                                       wifi_network_ssid=self.wifi_network_ssid,
438                                       wifi_network_pass=self.wifi_network_pass,
439                                       dut_capabilities=self.dut_capabilities,
440                                       subid=self.subid,
441                                       airplane_mode=False,
442                                       wifi_enabled=False,
443                                       volte_enabled=False,
444                                       wfc_enabled=True,
445                                       nw_gen=RAT_LTE,
446                                       wfc_mode=None):
447            return False
448        return change_ims_setting(log=self.log,
449                                       ad=self.dut,
450                                       dut_client= self.dut_client,
451                                       wifi_network_ssid=self.wifi_network_ssid,
452                                       wifi_network_pass=self.wifi_network_pass,
453                                       dut_capabilities=self.dut_capabilities,
454                                       subid=self.subid,
455                                       airplane_mode=False,
456                                       wifi_enabled=True,
457                                       volte_enabled=False,
458                                       wfc_enabled=True,
459                                       nw_gen=RAT_LTE,
460                                       wfc_mode=None)
461
462    @test_tracker_info(uuid="8a80a446-2116-4b19-b0ef-f771f30a6d15")
463    @TelephonyBaseTest.tel_test_wrap
464    def test_3g_wfc_enabled_toggle_wifi(self):
465        """Test for WiFi Calling settings:
466        3G + WFC enabled, Toggling WiFi
467
468        Steps:
469        1. Setup DUT Idle, 3G network type.
470        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
471        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
472        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
473
474        Expected Results:
475        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
476        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
477        """
478        if not phone_setup_voice_3g(self.log, self.dut):
479            self.log.error("Failed to setup 3G")
480            return False
481        if not change_ims_setting(log=self.log,
482                                       ad=self.dut,
483                                       dut_client= self.dut_client,
484                                       wifi_network_ssid=self.wifi_network_ssid,
485                                       wifi_network_pass=self.wifi_network_pass,
486                                       dut_capabilities=self.dut_capabilities,
487                                       subid=self.subid,
488                                       airplane_mode=False,
489                                       wifi_enabled=True,
490                                       volte_enabled=False,
491                                       wfc_enabled=True,
492                                       nw_gen=RAT_LTE,
493                                       wfc_mode=self.default_wfc_mode):
494            return False
495        if not change_ims_setting(log=self.log,
496                                       ad=self.dut,
497                                       dut_client= self.dut_client,
498                                       wifi_network_ssid=self.wifi_network_ssid,
499                                       wifi_network_pass=self.wifi_network_pass,
500                                       dut_capabilities=self.dut_capabilities,
501                                       subid=self.subid,
502                                       airplane_mode=False,
503                                       wifi_enabled=False,
504                                       volte_enabled=False,
505                                       wfc_enabled=True,
506                                       nw_gen=RAT_LTE,
507                                       wfc_mode=None):
508            return False
509        return change_ims_setting(log=self.log,
510                                       ad=self.dut,
511                                       dut_client= self.dut_client,
512                                       wifi_network_ssid=self.wifi_network_ssid,
513                                       wifi_network_pass=self.wifi_network_pass,
514                                       dut_capabilities=self.dut_capabilities,
515                                       subid=self.subid,
516                                       airplane_mode=False,
517                                       wifi_enabled=True,
518                                       volte_enabled=False,
519                                       wfc_enabled=True,
520                                       nw_gen=RAT_LTE,
521                                       wfc_mode=None)
522
523    @test_tracker_info(uuid="9889eebf-cde6-4f47-aec0-9cb204fdf2e5")
524    @TelephonyBaseTest.tel_test_wrap
525    def test_apm_wfc_enabled_toggle_wifi(self):
526        """Test for WiFi Calling settings:
527        APM + WFC enabled, Toggling WiFi
528
529        Steps:
530        1. Setup DUT Idle, Airplane mode.
531        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
532        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
533        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
534
535        Expected Results:
536        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
537        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
538        """
539        if not change_ims_setting(log=self.log,
540                                       ad=self.dut,
541                                       dut_client= self.dut_client,
542                                       wifi_network_ssid=self.wifi_network_ssid,
543                                       wifi_network_pass=self.wifi_network_pass,
544                                       dut_capabilities=self.dut_capabilities,
545                                       subid=self.subid,
546                                       airplane_mode=True,
547                                       wifi_enabled=True,
548                                       volte_enabled=True,
549                                       wfc_enabled=True,
550                                       nw_gen=RAT_LTE,
551                                       wfc_mode=self.default_wfc_mode):
552            return False
553        if not change_ims_setting(log=self.log,
554                                       ad=self.dut,
555                                       dut_client= self.dut_client,
556                                       wifi_network_ssid=self.wifi_network_ssid,
557                                       wifi_network_pass=self.wifi_network_pass,
558                                       dut_capabilities=self.dut_capabilities,
559                                       subid=self.subid,
560                                       airplane_mode=True,
561                                       wifi_enabled=False,
562                                       volte_enabled=True,
563                                       wfc_enabled=True,
564                                       nw_gen=RAT_LTE,
565                                       wfc_mode=None):
566            return False
567        return change_ims_setting(log=self.log,
568                                       ad=self.dut,
569                                       dut_client= self.dut_client,
570                                       wifi_network_ssid=self.wifi_network_ssid,
571                                       wifi_network_pass=self.wifi_network_pass,
572                                       dut_capabilities=self.dut_capabilities,
573                                       subid=self.subid,
574                                       airplane_mode=True,
575                                       wifi_enabled=True,
576                                       volte_enabled=True,
577                                       wfc_enabled=True,
578                                       nw_gen=RAT_LTE,
579                                       wfc_mode=None)
580
581    @test_tracker_info(uuid="9b23e04b-4f70-4e73-88e7-6376262c739d")
582    @TelephonyBaseTest.tel_test_wrap
583    def test_lte_wfc_enabled_wifi_connected_toggle_volte(self):
584        """Test for WiFi Calling settings:
585        LTE + VoLTE Enabled + WiFi Connected + WFC enabled, toggle VoLTE setting
586
587        Steps:
588        1. Setup DUT Idle, LTE network type, VoLTE enabled.
589        2. Make sure DUT WiFi connected, WFC enabled (WiFi Preferred).
590            Verify DUT WFC available, report iwlan rat.
591        3. Disable VoLTE on DUT, verify in 2 minutes period,
592            DUT does not lost WiFi Calling, DUT still report WFC available,
593            rat iwlan.
594        4. Enable VoLTE on DUT, verify in 2 minutes period,
595            DUT does not lost WiFi Calling, DUT still report WFC available,
596            rat iwlan.
597
598        Expected Results:
599        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
600        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
601        4. DUT WiFi Calling feature bit return True, network rat is iwlan.
602        """
603        if not phone_setup_volte(self.log, self.dut):
604            self.dut.log.error("Failed to setup VoLTE.")
605            return False
606        if not change_ims_setting(log=self.log,
607                                       ad=self.dut,
608                                       dut_client= self.dut_client,
609                                       wifi_network_ssid=self.wifi_network_ssid,
610                                       wifi_network_pass=self.wifi_network_pass,
611                                       dut_capabilities=self.dut_capabilities,
612                                       subid=self.subid,
613                                       airplane_mode=False,
614                                       wifi_enabled=True,
615                                       volte_enabled=True,
616                                       wfc_enabled=True,
617                                       nw_gen=RAT_LTE,
618                                       wfc_mode=self.default_wfc_mode):
619            return False
620        if not change_ims_setting(log=self.log,
621                                       ad=self.dut,
622                                       dut_client= self.dut_client,
623                                       wifi_network_ssid=self.wifi_network_ssid,
624                                       wifi_network_pass=self.wifi_network_pass,
625                                       dut_capabilities=self.dut_capabilities,
626                                       subid=self.subid,
627                                       airplane_mode=False,
628                                       wifi_enabled=True,
629                                       volte_enabled=False,
630                                       wfc_enabled=True,
631                                       nw_gen=RAT_LTE,
632                                       wfc_mode=None):
633            return False
634        return change_ims_setting(log=self.log,
635                                       ad=self.dut,
636                                       dut_client= self.dut_client,
637                                       wifi_network_ssid=self.wifi_network_ssid,
638                                       wifi_network_pass=self.wifi_network_pass,
639                                       dut_capabilities=self.dut_capabilities,
640                                       subid=self.subid,
641                                       airplane_mode=False,
642                                       wifi_enabled=True,
643                                       volte_enabled=True,
644                                       wfc_enabled=True,
645                                       nw_gen=RAT_LTE,
646                                       wfc_mode=None)
647
648    @test_tracker_info(uuid="04bdfda4-06f7-41df-9352-a8534bc2a67a")
649    @TelephonyBaseTest.tel_test_wrap
650    def test_lte_volte_wfc_wifi_preferred_to_cellular_preferred(self):
651        """Test for WiFi Calling settings:
652        LTE + VoLTE Enabled + WiFi Connected + WiFi Preferred,
653        change WFC to Cellular Preferred
654
655        Steps:
656        1. Setup DUT Idle, LTE network type, VoLTE enabled.
657        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
658            Verify DUT WFC available, report iwlan rat.
659        3. Change WFC setting to Cellular Preferred.
660        4. Verify DUT report WFC not available.
661
662        Expected Results:
663        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
664        4. DUT WiFI Calling feature bit return False, network rat is not iwlan.
665        """
666        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
667            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
668        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
669            raise signals.TestSkip(
670                "WFC_MODE_CELLULAR_PREFERRED is not supported")
671        if not phone_setup_volte(self.log, self.dut):
672            self.dut.log.error("Failed to setup VoLTE.")
673            return False
674        if not change_ims_setting(log=self.log,
675                                       ad=self.dut,
676                                       dut_client= self.dut_client,
677                                       wifi_network_ssid=self.wifi_network_ssid,
678                                       wifi_network_pass=self.wifi_network_pass,
679                                       dut_capabilities=self.dut_capabilities,
680                                       subid=self.subid,
681                                       airplane_mode=False,
682                                       wifi_enabled=True,
683                                       volte_enabled=True,
684                                       wfc_enabled=True,
685                                       nw_gen=RAT_LTE,
686                                       wfc_mode=WFC_MODE_WIFI_PREFERRED):
687            return False
688        return change_ims_setting(log=self.log,
689                                       ad=self.dut,
690                                       dut_client= self.dut_client,
691                                       wifi_network_ssid=self.wifi_network_ssid,
692                                       wifi_network_pass=self.wifi_network_pass,
693                                       dut_capabilities=self.dut_capabilities,
694                                       subid=self.subid,
695                                       airplane_mode=False,
696                                       wifi_enabled=True,
697                                       volte_enabled=True,
698                                       wfc_enabled=True,
699                                       nw_gen=RAT_LTE,
700                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED)
701
702    @test_tracker_info(uuid="80d26bdb-992a-4b30-ad51-68308d5af168")
703    @TelephonyBaseTest.tel_test_wrap
704    def test_lte_wfc_wifi_preferred_to_cellular_preferred(self):
705        """Test for WiFi Calling settings:
706        LTE + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred
707
708        Steps:
709        1. Setup DUT Idle, LTE network type, VoLTE disabled.
710        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
711            Verify DUT WFC available, report iwlan rat.
712        3. Change WFC setting to Cellular Preferred.
713        4. Verify DUT report WFC not available.
714
715        Expected Results:
716        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
717        4. DUT WiFI Calling feature bit return False, network rat is not iwlan.
718        """
719        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
720            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
721        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
722            raise signals.TestSkip(
723                "WFC_MODE_CELLULAR_PREFERRED is not supported")
724        if not phone_setup_csfb(self.log, self.dut):
725            self.dut.log.error("Failed to setup LTE.")
726            return False
727        if not change_ims_setting(log=self.log,
728                                       ad=self.dut,
729                                       dut_client= self.dut_client,
730                                       wifi_network_ssid=self.wifi_network_ssid,
731                                       wifi_network_pass=self.wifi_network_pass,
732                                       dut_capabilities=self.dut_capabilities,
733                                       subid=self.subid,
734                                       airplane_mode=False,
735                                       wifi_enabled=True,
736                                       volte_enabled=False,
737                                       wfc_enabled=True,
738                                       nw_gen=RAT_LTE,
739                                       wfc_mode=WFC_MODE_WIFI_PREFERRED):
740            return False
741        return change_ims_setting(log=self.log,
742                                       ad=self.dut,
743                                       dut_client= self.dut_client,
744                                       wifi_network_ssid=self.wifi_network_ssid,
745                                       wifi_network_pass=self.wifi_network_pass,
746                                       dut_capabilities=self.dut_capabilities,
747                                       subid=self.subid,
748                                       airplane_mode=False,
749                                       wifi_enabled=True,
750                                       volte_enabled=False,
751                                       wfc_enabled=True,
752                                       nw_gen=RAT_LTE,
753                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED)
754
755    @test_tracker_info(uuid="d486c7e3-3d2b-4552-8af8-7b19f6347427")
756    @TelephonyBaseTest.tel_test_wrap
757    def test_3g_wfc_wifi_preferred_to_cellular_preferred(self):
758        """Test for WiFi Calling settings:
759        3G + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred
760
761        Steps:
762        1. Setup DUT Idle, 3G network type.
763        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
764            Verify DUT WFC available, report iwlan rat.
765        3. Change WFC setting to Cellular Preferred.
766        4. Verify DUT report WFC not available.
767
768        Expected Results:
769        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
770        4. DUT WiFI Calling feature bit return False, network rat is not iwlan.
771        """
772        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
773            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
774        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
775            raise signals.TestSkip(
776                "WFC_MODE_CELLULAR_PREFERRED is not supported")
777        if not phone_setup_voice_3g(self.dut.log, self.dut):
778            self.dut.log.error("Failed to setup 3G.")
779            return False
780        if not change_ims_setting(log=self.log,
781                                       ad=self.dut,
782                                       dut_client= self.dut_client,
783                                       wifi_network_ssid=self.wifi_network_ssid,
784                                       wifi_network_pass=self.wifi_network_pass,
785                                       dut_capabilities=self.dut_capabilities,
786                                       subid=self.subid,
787                                       airplane_mode=False,
788                                       wifi_enabled=True,
789                                       volte_enabled=False,
790                                       wfc_enabled=True,
791                                       nw_gen=RAT_LTE,
792                                       wfc_mode=WFC_MODE_WIFI_PREFERRED):
793            return False
794        return change_ims_setting(log=self.log,
795                                       ad=self.dut,
796                                       dut_client= self.dut_client,
797                                       wifi_network_ssid=self.wifi_network_ssid,
798                                       wifi_network_pass=self.wifi_network_pass,
799                                       dut_capabilities=self.dut_capabilities,
800                                       subid=self.subid,
801                                       airplane_mode=False,
802                                       wifi_enabled=True,
803                                       volte_enabled=False,
804                                       wfc_enabled=True,
805                                       nw_gen=RAT_LTE,
806                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED)
807
808    @test_tracker_info(uuid="0feb0add-8e22-4c86-b13e-be68659cdd87")
809    @TelephonyBaseTest.tel_test_wrap
810    def test_apm_wfc_wifi_preferred_to_cellular_preferred(self):
811        """Test for WiFi Calling settings:
812        APM + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred
813
814        Steps:
815        1. Setup DUT Idle, airplane mode.
816        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
817            Verify DUT WFC available, report iwlan rat.
818        3. Change WFC setting to Cellular Preferred.
819        4. Verify DUT report WFC not available.
820
821        Expected Results:
822        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
823        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
824        """
825        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
826            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
827        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
828            raise signals.TestSkip(
829                "WFC_MODE_CELLULAR_PREFERRED is not supported")
830        if not change_ims_setting(log=self.log,
831                                       ad=self.dut,
832                                       dut_client= self.dut_client,
833                                       wifi_network_ssid=self.wifi_network_ssid,
834                                       wifi_network_pass=self.wifi_network_pass,
835                                       dut_capabilities=self.dut_capabilities,
836                                       subid=self.subid,
837                                       airplane_mode=True,
838                                       wifi_enabled=True,
839                                       volte_enabled=True,
840                                       wfc_enabled=True,
841                                       nw_gen=RAT_LTE,
842                                       wfc_mode=WFC_MODE_WIFI_PREFERRED):
843            return False
844        return change_ims_setting(log=self.log,
845                                       ad=self.dut,
846                                       dut_client= self.dut_client,
847                                       wifi_network_ssid=self.wifi_network_ssid,
848                                       wifi_network_pass=self.wifi_network_pass,
849                                       dut_capabilities=self.dut_capabilities,
850                                       subid=self.subid,
851                                       airplane_mode=True,
852                                       wifi_enabled=True,
853                                       volte_enabled=True,
854                                       wfc_enabled=True,
855                                       nw_gen=RAT_LTE,
856                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED)
857
858    @test_tracker_info(uuid="9c8f359f-a084-4413-b8a9-34771af166c5")
859    @TelephonyBaseTest.tel_test_wrap
860    def test_lte_volte_wfc_cellular_preferred_to_wifi_preferred(self):
861        """Test for WiFi Calling settings:
862        LTE + VoLTE Enabled + WiFi Connected + Cellular Preferred,
863        change WFC to WiFi Preferred
864
865        Steps:
866        1. Setup DUT Idle, LTE network type, VoLTE enabled.
867        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
868            Verify DUT WFC not available.
869        3. Change WFC setting to WiFi Preferred.
870        4. Verify DUT report WFC available.
871
872        Expected Results:
873        2. DUT WiFi Calling feature bit return False, network rat is not iwlan.
874        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
875        """
876        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
877            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
878        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
879            raise signals.TestSkip(
880                "WFC_MODE_CELLULAR_PREFERRED is not supported")
881        if not phone_setup_volte(self.log, self.dut):
882            self.dut.log.error("Failed to setup VoLTE.")
883            return False
884        if not change_ims_setting(log=self.log,
885                                       ad=self.dut,
886                                       dut_client= self.dut_client,
887                                       wifi_network_ssid=self.wifi_network_ssid,
888                                       wifi_network_pass=self.wifi_network_pass,
889                                       dut_capabilities=self.dut_capabilities,
890                                       subid=self.subid,
891                                       airplane_mode=False,
892                                       wifi_enabled=True,
893                                       volte_enabled=True,
894                                       wfc_enabled=True,
895                                       nw_gen=RAT_LTE,
896                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
897            return False
898        return change_ims_setting(log=self.log,
899                                       ad=self.dut,
900                                       dut_client= self.dut_client,
901                                       wifi_network_ssid=self.wifi_network_ssid,
902                                       wifi_network_pass=self.wifi_network_pass,
903                                       dut_capabilities=self.dut_capabilities,
904                                       subid=self.subid,
905                                       airplane_mode=False,
906                                       wifi_enabled=True,
907                                       volte_enabled=True,
908                                       wfc_enabled=True,
909                                       nw_gen=RAT_LTE,
910                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
911
912    @test_tracker_info(uuid="1894e685-63cf-43aa-91ed-938782ca35a9")
913    @TelephonyBaseTest.tel_test_wrap
914    def test_lte_wfc_cellular_preferred_to_wifi_preferred(self):
915        """Test for WiFi Calling settings:
916        LTE + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred
917
918        Steps:
919        1. Setup DUT Idle, LTE network type, VoLTE disabled.
920        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
921            Verify DUT WFC not available.
922        3. Change WFC setting to WiFi Preferred.
923        4. Verify DUT report WFC available.
924
925        Expected Results:
926        2. DUT WiFi Calling feature bit return False, network rat is not iwlan.
927        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
928        """
929        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
930            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
931        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
932            raise signals.TestSkip(
933                "WFC_MODE_CELLULAR_PREFERRED is not supported")
934        if not phone_setup_csfb(self.log, self.dut):
935            self.dut.log.error("Failed to setup LTE.")
936            return False
937        if not change_ims_setting(log=self.log,
938                                       ad=self.dut,
939                                       dut_client= self.dut_client,
940                                       wifi_network_ssid=self.wifi_network_ssid,
941                                       wifi_network_pass=self.wifi_network_pass,
942                                       dut_capabilities=self.dut_capabilities,
943                                       subid=self.subid,
944                                       airplane_mode=False,
945                                       wifi_enabled=True,
946                                       volte_enabled=False,
947                                       wfc_enabled=True,
948                                       nw_gen=RAT_LTE,
949                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
950            return False
951        return change_ims_setting(log=self.log,
952                                       ad=self.dut,
953                                       dut_client= self.dut_client,
954                                       wifi_network_ssid=self.wifi_network_ssid,
955                                       wifi_network_pass=self.wifi_network_pass,
956                                       dut_capabilities=self.dut_capabilities,
957                                       subid=self.subid,
958                                       airplane_mode=False,
959                                       wifi_enabled=True,
960                                       volte_enabled=False,
961                                       wfc_enabled=True,
962                                       nw_gen=RAT_LTE,
963                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
964
965    @test_tracker_info(uuid="e7fb6a6c-4672-44da-bca2-78b4d96dea9e")
966    @TelephonyBaseTest.tel_test_wrap
967    def test_3g_wfc_cellular_preferred_to_wifi_preferred(self):
968        """Test for WiFi Calling settings:
969        3G + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred
970
971        Steps:
972        1. Setup DUT Idle, 3G network type.
973        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
974            Verify DUT WFC not available.
975        3. Change WFC setting to WiFi Preferred.
976        4. Verify DUT report WFC available.
977
978        Expected Results:
979        2. DUT WiFi Calling feature bit return False, network rat is not iwlan.
980        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
981        """
982        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
983            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
984        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
985            raise signals.TestSkip(
986                "WFC_MODE_CELLULAR_PREFERRED is not supported")
987        if not phone_setup_voice_3g(self.log, self.dut):
988            self.dut.log.error("Failed to setup 3G.")
989            return False
990        if not change_ims_setting(log=self.log,
991                                       ad=self.dut,
992                                       dut_client= self.dut_client,
993                                       wifi_network_ssid=self.wifi_network_ssid,
994                                       wifi_network_pass=self.wifi_network_pass,
995                                       dut_capabilities=self.dut_capabilities,
996                                       subid=self.subid,
997                                       airplane_mode=False,
998                                       wifi_enabled=True,
999                                       volte_enabled=False,
1000                                       wfc_enabled=True,
1001                                       nw_gen=RAT_LTE,
1002                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
1003            return False
1004        return change_ims_setting(log=self.log,
1005                                       ad=self.dut,
1006                                       dut_client= self.dut_client,
1007                                       wifi_network_ssid=self.wifi_network_ssid,
1008                                       wifi_network_pass=self.wifi_network_pass,
1009                                       dut_capabilities=self.dut_capabilities,
1010                                       subid=self.subid,
1011                                       airplane_mode=False,
1012                                       wifi_enabled=True,
1013                                       volte_enabled=False,
1014                                       wfc_enabled=True,
1015                                       nw_gen=RAT_LTE,
1016                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
1017
1018    @test_tracker_info(uuid="46262b2d-5de9-4984-87e8-42f44469289e")
1019    @TelephonyBaseTest.tel_test_wrap
1020    def test_apm_wfc_cellular_preferred_to_wifi_preferred(self):
1021        """Test for WiFi Calling settings:
1022        APM + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred
1023
1024        Steps:
1025        1. Setup DUT Idle, airplane mode.
1026        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
1027            Verify DUT WFC not available.
1028        3. Change WFC setting to WiFi Preferred.
1029        4. Verify DUT report WFC available.
1030
1031        Expected Results:
1032        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
1033        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
1034        """
1035        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
1036            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
1037        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
1038            raise signals.TestSkip(
1039                "WFC_MODE_CELLULAR_PREFERRED is not supported")
1040        if not change_ims_setting(log=self.log,
1041                                       ad=self.dut,
1042                                       dut_client= self.dut_client,
1043                                       wifi_network_ssid=self.wifi_network_ssid,
1044                                       wifi_network_pass=self.wifi_network_pass,
1045                                       dut_capabilities=self.dut_capabilities,
1046                                       subid=self.subid,
1047                                       airplane_mode=True,
1048                                       wifi_enabled=True,
1049                                       volte_enabled=True,
1050                                       wfc_enabled=True,
1051                                       nw_gen=RAT_LTE,
1052                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
1053            return False
1054        return change_ims_setting(log=self.log,
1055                                       ad=self.dut,
1056                                       dut_client= self.dut_client,
1057                                       wifi_network_ssid=self.wifi_network_ssid,
1058                                       wifi_network_pass=self.wifi_network_pass,
1059                                       dut_capabilities=self.dut_capabilities,
1060                                       subid=self.subid,
1061                                       airplane_mode=True,
1062                                       wifi_enabled=True,
1063                                       volte_enabled=True,
1064                                       wfc_enabled=True,
1065                                       nw_gen=RAT_LTE,
1066                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
1067
1068    @test_tracker_info(uuid="5b514f51-fed9-475e-99d3-17d2165e11a1")
1069    @TelephonyBaseTest.tel_test_wrap
1070    def test_apm_wfc_wifi_preferred_turn_off_apm(self):
1071        """Test for WiFi Calling settings:
1072        APM + WiFi Connected + WiFi Preferred + turn off APM
1073
1074        Steps:
1075        1. Setup DUT Idle in Airplane mode.
1076        2. Make sure DUT WiFi connected, set WFC mode to WiFi preferred.
1077        3. verify DUT WFC available, report iwlan rat.
1078        4. Turn off airplane mode.
1079        5. Verify DUT WFC still available, report iwlan rat
1080
1081        Expected Results:
1082        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
1083        5. DUT WiFI Calling feature bit return True, network rat is iwlan.
1084        """
1085        if not change_ims_setting(log=self.log,
1086                                       ad=self.dut,
1087                                       dut_client= self.dut_client,
1088                                       wifi_network_ssid=self.wifi_network_ssid,
1089                                       wifi_network_pass=self.wifi_network_pass,
1090                                       dut_capabilities=self.dut_capabilities,
1091                                       subid=self.subid,
1092                                       airplane_mode=True,
1093                                       wifi_enabled=True,
1094                                       volte_enabled=True,
1095                                       wfc_enabled=True,
1096                                       nw_gen=RAT_LTE,
1097                                       wfc_mode=WFC_MODE_WIFI_PREFERRED):
1098            return False
1099        return change_ims_setting(log=self.log,
1100                                       ad=self.dut,
1101                                       dut_client= self.dut_client,
1102                                       wifi_network_ssid=self.wifi_network_ssid,
1103                                       wifi_network_pass=self.wifi_network_pass,
1104                                       dut_capabilities=self.dut_capabilities,
1105                                       subid=self.subid,
1106                                       airplane_mode=False,
1107                                       wifi_enabled=True,
1108                                       volte_enabled=True,
1109                                       wfc_enabled=True,
1110                                       nw_gen=RAT_LTE,
1111                                       wfc_mode=None)
1112
1113    @test_tracker_info(uuid="f328cff2-9dec-44b3-ba74-a662b76fcf2a")
1114    @TelephonyBaseTest.tel_test_wrap
1115    def test_apm_wfc_cellular_preferred_turn_off_apm(self):
1116        """Test for WiFi Calling settings:
1117        APM + WiFi Connected + Cellular Preferred + turn off APM
1118
1119        Steps:
1120        1. Setup DUT Idle in Airplane mode.
1121        2. Make sure DUT WiFi connected, set WFC mode to Cellular preferred.
1122        3. verify DUT WFC available, report iwlan rat.
1123        4. Turn off airplane mode.
1124        5. Verify DUT WFC not available, not report iwlan rat
1125
1126        Expected Results:
1127        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
1128        5. DUT WiFI Calling feature bit return False, network rat is not iwlan.
1129        """
1130        if not change_ims_setting(log=self.log,
1131                                       ad=self.dut,
1132                                       dut_client= self.dut_client,
1133                                       wifi_network_ssid=self.wifi_network_ssid,
1134                                       wifi_network_pass=self.wifi_network_pass,
1135                                       dut_capabilities=self.dut_capabilities,
1136                                       subid=self.subid,
1137                                       airplane_mode=True,
1138                                       wifi_enabled=True,
1139                                       volte_enabled=True,
1140                                       wfc_enabled=True,
1141                                       nw_gen=RAT_LTE,
1142                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
1143            return False
1144        return change_ims_setting(log=self.log,
1145                                       ad=self.dut,
1146                                       dut_client= self.dut_client,
1147                                       wifi_network_ssid=self.wifi_network_ssid,
1148                                       wifi_network_pass=self.wifi_network_pass,
1149                                       dut_capabilities=self.dut_capabilities,
1150                                       subid=self.subid,
1151                                       airplane_mode=False,
1152                                       wifi_enabled=True,
1153                                       volte_enabled=True,
1154                                       wfc_enabled=True,
1155                                       nw_gen=RAT_LTE,
1156                                       wfc_mode=None)
1157
1158    @test_tracker_info(uuid="7e30d219-42ee-4309-a95c-2b45b8831d26")
1159    @TelephonyBaseTest.tel_test_wrap
1160    def test_wfc_setup_timing(self):
1161        """ Measures the time delay in enabling WiFi calling
1162
1163        Steps:
1164        1. Make sure DUT idle.
1165        2. Turn on Airplane Mode, Set WiFi Calling to WiFi_Preferred.
1166        3. Turn on WiFi, connect to WiFi AP and measure time delay.
1167        4. Wait for WiFi connected, verify Internet and measure time delay.
1168        5. Wait for rat to be reported as iwlan and measure time delay.
1169        6. Wait for ims registered and measure time delay.
1170        7. Wait for WiFi Calling feature bit to be True and measure time delay.
1171
1172        Expected results:
1173        Time Delay in each step should be within pre-defined limit.
1174
1175        Returns:
1176            Currently always return True.
1177        """
1178        # TODO: b/26338119 Set pass/fail criteria
1179        time_values = {
1180            'start': 0,
1181            'wifi_enabled': 0,
1182            'wifi_connected': 0,
1183            'wifi_data': 0,
1184            'iwlan_rat': 0,
1185            'ims_registered': 0,
1186            'wfc_enabled': 0,
1187            'mo_call_success': 0
1188        }
1189
1190        wifi_reset(self.log, self.dut)
1191        toggle_airplane_mode_by_adb(self.log, self.dut, True)
1192
1193        set_wfc_mode(self.log, self.dut, WFC_MODE_WIFI_PREFERRED)
1194
1195        time_values['start'] = time.time()
1196
1197        self.dut.log.info("Start Time %ss", time_values['start'])
1198
1199        wifi_toggle_state(self.log, self.dut, True)
1200        time_values['wifi_enabled'] = time.time()
1201        self.dut.log.info("WiFi Enabled After %ss",
1202                          time_values['wifi_enabled'] - time_values['start'])
1203
1204        network = {WIFI_SSID_KEY: self.wifi_network_ssid}
1205        if self.wifi_network_pass:
1206            network[WIFI_PWD_KEY] = self.wifi_network_pass
1207        try:
1208            self.dut.droid.wifiConnectByConfig(network)
1209        except Exception:
1210            self.dut.log.info("Connecting to wifi by RPC wifiConnect instead")
1211            self.dut.droid.wifiConnect(network)
1212        self.dut.droid.wakeUpNow()
1213
1214        if not wait_for_wifi_data_connection(self.log, self.dut, True,
1215                                             MAX_WAIT_TIME_WIFI_CONNECTION):
1216            self.dut.log.error("Failed WiFi connection, aborting!")
1217            return False
1218        time_values['wifi_connected'] = time.time()
1219
1220        self.dut.log.info(
1221            "WiFi Connected After %ss",
1222            time_values['wifi_connected'] - time_values['wifi_enabled'])
1223
1224        if not verify_internet_connection(self.log, self.dut, retries=3):
1225            self.dut.log.error("Failed to get user-plane traffic, aborting!")
1226            return False
1227
1228        time_values['wifi_data'] = time.time()
1229        self.dut.log.info(
1230            "WifiData After %ss",
1231            time_values['wifi_data'] - time_values['wifi_connected'])
1232
1233        if not wait_for_network_rat(
1234                self.log,
1235                self.dut,
1236                RAT_FAMILY_WLAN,
1237                voice_or_data=NETWORK_SERVICE_DATA):
1238            self.dut.log.error("Failed to set-up iwlan, aborting!")
1239            if is_droid_in_rat_family(self.log, self.dut, RAT_FAMILY_WLAN,
1240                                      NETWORK_SERVICE_DATA):
1241                self.dut.log.error(
1242                    "Never received the event, but droid in iwlan")
1243            else:
1244                return False
1245        time_values['iwlan_rat'] = time.time()
1246        self.dut.log.info("iWLAN Reported After %ss",
1247                          time_values['iwlan_rat'] - time_values['wifi_data'])
1248
1249        if not wait_for_ims_registered(self.log, self.dut,
1250                                       MAX_WAIT_TIME_IMS_REGISTRATION):
1251            self.dut.log.error("Never received IMS registered, aborting")
1252            return False
1253        time_values['ims_registered'] = time.time()
1254        self.dut.log.info(
1255            "Ims Registered After %ss",
1256            time_values['ims_registered'] - time_values['iwlan_rat'])
1257
1258        if not wait_for_wfc_enabled(self.log, self.dut,
1259                                    MAX_WAIT_TIME_WFC_ENABLED):
1260            self.dut.log.error("Never received WFC feature, aborting")
1261            return False
1262
1263        time_values['wfc_enabled'] = time.time()
1264        self.dut.log.info(
1265            "Wifi Calling Feature Enabled After %ss",
1266            time_values['wfc_enabled'] - time_values['ims_registered'])
1267
1268        set_wfc_mode(self.log, self.dut, WFC_MODE_DISABLED)
1269
1270        wait_for_not_network_rat(
1271            self.log,
1272            self.dut,
1273            RAT_FAMILY_WLAN,
1274            voice_or_data=NETWORK_SERVICE_DATA)
1275
1276        self.dut.log.info("\n\n------------------summary-----------------")
1277        self.dut.log.info("WiFi Enabled After %.2f seconds",
1278                          time_values['wifi_enabled'] - time_values['start'])
1279        self.dut.log.info(
1280            "WiFi Connected After %.2f seconds",
1281            time_values['wifi_connected'] - time_values['wifi_enabled'])
1282        self.dut.log.info(
1283            "WifiData After %.2f s",
1284            time_values['wifi_data'] - time_values['wifi_connected'])
1285        self.dut.log.info("iWLAN Reported After %.2f seconds",
1286                          time_values['iwlan_rat'] - time_values['wifi_data'])
1287        self.dut.log.info(
1288            "Ims Registered After %.2f seconds",
1289            time_values['ims_registered'] - time_values['iwlan_rat'])
1290        self.dut.log.info(
1291            "Wifi Calling Feature Enabled After %.2f seconds",
1292            time_values['wfc_enabled'] - time_values['ims_registered'])
1293        self.dut.log.info("\n\n")
1294        return True
1295
1296    @test_tracker_info(uuid="135301ea-6d00-4233-98fd-cda706d61eb2")
1297    @TelephonyBaseTest.tel_test_wrap
1298    def test_ims_factory_reset(self):
1299        """Test VOLTE and WFC reset to factory default.
1300
1301        Steps:
1302        1. Setup VoLTE, WFC, APM is various mode.
1303        2. Call IMS factory reset.
1304        3. Verify VoLTE and WFC are back to factory default.
1305        4. Verify VoLTE, WFC Voice call can be made successful if enabled.
1306
1307        """
1308        result = True
1309        wifi_enabled = True
1310        for airplane_mode in (True, False):
1311            for volte_enabled in (True, False):
1312                for wfc_enabled in (True, False):
1313                    if wfc_enabled:
1314                        wfc_modes = self.dut_wfc_modes
1315                    else:
1316                        wfc_modes = [None]
1317                    for wfc_mode in wfc_modes:
1318                        if not change_ims_setting(log=self.log,
1319                                       ad=self.dut,
1320                                       dut_client= self.dut_client,
1321                                       wifi_network_ssid=self.wifi_network_ssid,
1322                                       wifi_network_pass=self.wifi_network_pass,
1323                                       dut_capabilities=self.dut_capabilities,
1324                                       subid=self.subid,
1325                                       airplane_mode=airplane_mode,
1326                                       wifi_enabled=wifi_enabled,
1327                                       volte_enabled=volte_enabled,
1328                                       wfc_enabled=wfc_enabled,
1329                                       nw_gen=RAT_LTE,
1330                                       wfc_mode=wfc_mode):
1331                            result = False
1332                        self.dut.log.info("Call IMS factory reset")
1333                        self.dut.droid.telephonyFactoryReset()
1334                        if not verify_default_ims_setting(log=self.log,
1335                                                       ad=self.dut,
1336                                                       dut_client= self.dut_client,
1337                                                       carrier_configs=self.carrier_configs,
1338                                                       default_wfc_enabled=self.default_wfc_enabled,
1339                                                       default_volte=self.default_volte,
1340                                                       wfc_mode=WFC_MODE_DISABLED):
1341                            result = False
1342        return result
1343
1344    @test_tracker_info(uuid="ce60740f-4d8e-4013-a7cf-65589e8a0893")
1345    @TelephonyBaseTest.tel_test_wrap
1346    def test_factory_reset_by_fastboot_wipe(self):
1347        """Verify the network setting after factory reset by wipe.
1348
1349        Steps:
1350        1. Config VoLTE, WFC, APM, data_roamingn, mobile_data,
1351           preferred_network_mode to non-factory default.
1352        2. Factory reset by fastboot wipe.
1353        3. Verify network configs back to factory default.
1354
1355        """
1356        self.dut.log.info("Set VoLTE off, WFC wifi preferred, APM on")
1357        toggle_volte(self.log, self.dut, False)
1358        revert_default_telephony_setting(self.dut)
1359        change_ims_setting(log=self.log,
1360                                       ad=self.dut,
1361                                       dut_client= self.dut_client,
1362                                       wifi_network_ssid=self.wifi_network_ssid,
1363                                       wifi_network_pass=self.wifi_network_pass,
1364                                       dut_capabilities=self.dut_capabilities,
1365                                       subid=self.subid,
1366                                       airplane_mode=True,
1367                                       wifi_enabled=True,
1368                                       volte_enabled=False,
1369                                       wfc_enabled=True,
1370                                       nw_gen=RAT_LTE,
1371                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
1372        self.dut.log.info("Wipe in fastboot")
1373        fastboot_wipe(self.dut)
1374        return verify_default_telephony_setting(
1375            self.dut) and (self.verify_default_ims_setting(WFC_MODE_DISABLED))
1376
1377
1378