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