• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2021 - Google
4#
5#   Licensed under the Apache License, Version 2.0 (the "License");
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an "AS IS" BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16"""
17    Test Script for 5G IMS Settings scenarios
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 NETWORK_SERVICE_VOICE
29from acts_contrib.test_utils.tel.tel_defines import RAT_NR
30from acts_contrib.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
31from acts_contrib.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED
32from acts_contrib.test_utils.tel.tel_subscription_utils import get_outgoing_voice_sub_id
33from acts_contrib.test_utils.tel.tel_test_utils import dumpsys_carrier_config
34from acts_contrib.test_utils.tel.tel_voice_utils import phone_setup_csfb
35from acts_contrib.test_utils.tel.tel_voice_utils import phone_setup_volte
36from acts_contrib.test_utils.tel.tel_5g_utils import is_current_network_5g_nsa
37from acts_contrib.test_utils.tel.tel_5g_test_utils import provision_device_for_5g
38from acts_contrib.test_utils.tel.tel_5g_test_utils import set_preferred_mode_for_5g
39from acts_contrib.test_utils.tel.tel_ims_utils import change_ims_setting
40
41
42class Nsa5gImsSettingsTest(TelephonyBaseTest):
43
44    def setup_class(self):
45        TelephonyBaseTest.setup_class(self)
46        self.dut = self.android_devices[0]
47        self.dut_client = self.android_devices[1]
48        self.skip_reset_between_cases = False
49        self.subid = get_outgoing_voice_sub_id(self.dut)
50        self.dut_capabilities = self.dut.telephony["subscription"][
51            self.subid].get("capabilities", [])
52        self.dut.log.info("DUT capabilities: %s", self.dut_capabilities)
53        if CAPABILITY_VOLTE not in self.dut_capabilities:
54            raise signals.TestAbortClass("VoLTE is not supported")
55        if CAPABILITY_WFC not in self.dut_capabilities:
56            raise signals.TestAbortClass("WFC is not supported")
57        self.carrier_configs = dumpsys_carrier_config(self.dut)[self.subid]
58        self.default_wfc_mode = self.carrier_configs.get(
59            CarrierConfigs.DEFAULT_WFC_IMS_MODE_INT, None)
60        self.dut_wfc_modes = self.dut.telephony[
61            "subscription"][self.subid].get("wfc_modes", [])
62
63
64    """ Tests Begin """
65
66    @test_tracker_info(uuid="9ed17e7b-c933-4b46-9349-a76fbcba3a24")
67    @TelephonyBaseTest.tel_test_wrap
68    def test_5g_nsa_volte_wifi_connected_toggle_wfc(self):
69        """Test for WiFi Calling settings:
70        nsa 5G + VoLTE Enabled + WiFi Connected, Toggling WFC
71
72        Steps:
73        1. Setup DUT Idle, 5G network type, VoLTE enabled.
74        2. Make sure DUT WiFi connected, WFC disabled.
75        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
76            report iwlan rat.
77        4. Set DUT WFC disabled, verify DUT WFC unavailable,
78            not report iwlan rat.
79
80        Expected Results:
81        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
82        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
83        """
84
85        if not phone_setup_volte(self.log, self.dut):
86            self.log.error("Failed to setup VoLTE")
87            return False
88
89        if not provision_device_for_5g(self.log, self.dut):
90            return False
91
92        if not change_ims_setting(log=self.log,
93                                ad=self.dut,
94                                dut_client= self.dut_client,
95                                wifi_network_ssid=self.wifi_network_ssid,
96                                wifi_network_pass=self.wifi_network_pass,
97                                subid=self.subid,
98                                dut_capabilities=self.dut_capabilities,
99                                airplane_mode=False,
100                                wifi_enabled=True,
101                                volte_enabled=True,
102                                wfc_enabled=True,
103                                nw_gen=RAT_NR,
104                                wfc_mode=self.default_wfc_mode):
105            return False
106        if not change_ims_setting(log=self.log,
107                                ad=self.dut,
108                                dut_client= self.dut_client,
109                                wifi_network_ssid=self.wifi_network_ssid,
110                                wifi_network_pass=self.wifi_network_pass,
111                                dut_capabilities=self.dut_capabilities,
112                                subid=self.subid,
113                                airplane_mode=False,
114                                wifi_enabled=True,
115                                volte_enabled=True,
116                                wfc_enabled=False,
117                                nw_gen=RAT_NR,
118                                wfc_mode=None):
119            return False
120        return change_ims_setting(log=self.log,
121                                ad=self.dut,
122                                dut_client= self.dut_client,
123                                wifi_network_ssid=self.wifi_network_ssid,
124                                wifi_network_pass=self.wifi_network_pass,
125                                dut_capabilities=self.dut_capabilities,
126                                subid=self.subid,
127                                airplane_mode=False,
128                                wifi_enabled=True,
129                                volte_enabled=True,
130                                wfc_enabled=True,
131                                nw_gen=RAT_NR,
132                                wfc_mode=None)
133
134
135    @test_tracker_info(uuid="425b16ec-869d-4a0b-a1bc-a3243503525f")
136    @TelephonyBaseTest.tel_test_wrap
137    def test_5g_nsa_wifi_connected_toggle_wfc(self):
138        """Test for WiFi Calling settings:
139        nsa 5G + VoLTE Disabled + WiFi Connected, Toggling WFC
140
141        Steps:
142        1. Setup DUT Idle, nsa 5G network type, VoLTE disabled.
143        2. Make sure DUT WiFi connected, WFC disabled.
144        3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available,
145            report iwlan rat.
146        4. Set DUT WFC disabled, verify DUT WFC unavailable,
147            not report iwlan rat.
148
149        Expected Results:
150        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
151        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
152        """
153
154        if not phone_setup_csfb(self.log, self.dut):
155            self.log.error("Phone Failed to setup Properly")
156            return False
157
158        if not provision_device_for_5g(self.log, self.dut):
159            return False
160
161        if not change_ims_setting(log=self.log,
162                                       ad=self.dut,
163                                       dut_client= self.dut_client,
164                                       wifi_network_ssid=self.wifi_network_ssid,
165                                       wifi_network_pass=self.wifi_network_pass,
166                                       dut_capabilities=self.dut_capabilities,
167                                       subid=self.subid,
168                                       airplane_mode=False,
169                                       wifi_enabled=True,
170                                       volte_enabled=False,
171                                       wfc_enabled=True,
172                                       nw_gen=RAT_NR,
173                                       wfc_mode=self.default_wfc_mode):
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=False,
186                                       nw_gen=RAT_NR,
187                                       wfc_mode=None):
188            return False
189        return 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=True,
200                                       nw_gen=RAT_NR,
201                                       wfc_mode=None)
202
203
204    @test_tracker_info(uuid="9405d8cf-5b73-4d47-a83d-da115caed177")
205    @TelephonyBaseTest.tel_test_wrap
206    def test_5g_nsa_volte_wfc_enabled_toggle_wifi(self):
207        """Test for WiFi Calling settings:
208        nsa 5G + VoLTE Enabled + WFC enabled, Toggling WiFi
209
210        Steps:
211        1. Setup DUT Idle, nsa 5G network type, VoLTE enabled.
212        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
213        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
214        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
215
216        Expected Results:
217        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
218        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
219        """
220        if not phone_setup_volte(self.log, self.dut):
221            self.log.error("Failed to setup VoLTE")
222            return False
223
224        ads = self.android_devices
225        if not provision_device_for_5g(self.log, ads):
226            return False
227
228        if not change_ims_setting(log=self.log,
229                                       ad=self.dut,
230                                       dut_client= self.dut_client,
231                                       wifi_network_ssid=self.wifi_network_ssid,
232                                       wifi_network_pass=self.wifi_network_pass,
233                                       dut_capabilities=self.dut_capabilities,
234                                       subid=self.subid,
235                                       airplane_mode=False,
236                                       wifi_enabled=True,
237                                       volte_enabled=True,
238                                       wfc_enabled=True,
239                                       nw_gen=RAT_NR,
240                                       wfc_mode=self.default_wfc_mode):
241            return False
242        if not change_ims_setting(log=self.log,
243                                       ad=self.dut,
244                                       dut_client= self.dut_client,
245                                       wifi_network_ssid=self.wifi_network_ssid,
246                                       wifi_network_pass=self.wifi_network_pass,
247                                       dut_capabilities=self.dut_capabilities,
248                                       subid=self.subid,
249                                       airplane_mode=False,
250                                       wifi_enabled=True,
251                                       volte_enabled=True,
252                                       wfc_enabled=False,
253                                       nw_gen=RAT_NR,
254                                       wfc_mode=None):
255            return False
256        return change_ims_setting(log=self.log,
257                                       ad=self.dut,
258                                       dut_client= self.dut_client,
259                                       wifi_network_ssid=self.wifi_network_ssid,
260                                       wifi_network_pass=self.wifi_network_pass,
261                                       dut_capabilities=self.dut_capabilities,
262                                       subid=self.subid,
263                                       airplane_mode=False,
264                                       wifi_enabled=True,
265                                       volte_enabled=True,
266                                       wfc_enabled=True,
267                                       nw_gen=RAT_NR,
268                                       wfc_mode=None)
269
270
271    @test_tracker_info(uuid="548f07a6-74e2-4071-ba41-2acf3cd51752")
272    @TelephonyBaseTest.tel_test_wrap
273    def test_5g_nsa_wfc_enabled_toggle_wifi(self):
274        """Test for WiFi Calling settings:
275        nsa 5G + VoLTE Disabled + WFC enabled, Toggling WiFi
276
277        Steps:
278        1. Setup DUT Idle, nsa 5G network type, VoLTE disabled.
279        2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred).
280        3. DUT connect WiFi, verify DUT WFC available, report iwlan rat.
281        4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat.
282
283        Expected Results:
284        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
285        4. DUT WiFi Calling feature bit return False, network rat is not iwlan.
286        """
287        if not phone_setup_csfb(self.log, self.dut):
288            self.log.error("Failed to setup CSFB")
289            return False
290
291        if not provision_device_for_5g(self.log, self.dut):
292            return False
293
294        if not change_ims_setting(log=self.log,
295                                       ad=self.dut,
296                                       dut_client= self.dut_client,
297                                       wifi_network_ssid=self.wifi_network_ssid,
298                                       wifi_network_pass=self.wifi_network_pass,
299                                       dut_capabilities=self.dut_capabilities,
300                                       subid=self.subid,
301                                       airplane_mode=False,
302                                       wifi_enabled=True,
303                                       volte_enabled=False,
304                                       wfc_enabled=True,
305                                       nw_gen=RAT_NR,
306                                       wfc_mode=self.default_wfc_mode):
307            return False
308        if not change_ims_setting(log=self.log,
309                                       ad=self.dut,
310                                       dut_client= self.dut_client,
311                                       wifi_network_ssid=self.wifi_network_ssid,
312                                       wifi_network_pass=self.wifi_network_pass,
313                                       dut_capabilities=self.dut_capabilities,
314                                       subid=self.subid,
315                                       airplane_mode=False,
316                                       wifi_enabled=False,
317                                       volte_enabled=False,
318                                       wfc_enabled=True,
319                                       nw_gen=RAT_NR,
320                                       wfc_mode=None):
321            return False
322        return change_ims_setting(log=self.log,
323                                       ad=self.dut,
324                                       dut_client= self.dut_client,
325                                       wifi_network_ssid=self.wifi_network_ssid,
326                                       wifi_network_pass=self.wifi_network_pass,
327                                       dut_capabilities=self.dut_capabilities,
328                                       subid=self.subid,
329                                       airplane_mode=False,
330                                       wifi_enabled=True,
331                                       volte_enabled=False,
332                                       wfc_enabled=True,
333                                       nw_gen=RAT_NR,
334                                       wfc_mode=None)
335
336
337    @test_tracker_info(uuid="f53f8403-b993-4a3b-8d3f-ffc87cdc856e")
338    @TelephonyBaseTest.tel_test_wrap
339    def test_5g_nsa_wfc_enabled_wifi_connected_toggle_volte(self):
340        """Test for WiFi Calling settings:
341        nsa 5G + VoLTE Enabled + WiFi Connected + WFC enabled, toggle VoLTE setting
342
343        Steps:
344        1. Setup DUT Idle, 5G network type, VoLTE enabled.
345        2. Make sure DUT WiFi connected, WFC enabled (WiFi Preferred).
346            Verify DUT WFC available, report iwlan rat.
347        3. Disable VoLTE on DUT, verify in 2 minutes period,
348            DUT does not lost WiFi Calling, DUT still report WFC available,
349            rat iwlan.
350        4. Enable VoLTE on DUT, verify in 2 minutes period,
351            DUT does not lost WiFi Calling, DUT still report WFC available,
352            rat iwlan.
353
354        Expected Results:
355        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
356        3. DUT WiFi Calling feature bit return True, network rat is iwlan.
357        4. DUT WiFi Calling feature bit return True, network rat is iwlan.
358        """
359        if not phone_setup_volte(self.log, self.dut):
360            self.dut.log.error("Phone Failed to setup properly")
361            return False
362
363        if not provision_device_for_5g(self.log, self.dut):
364            return False
365
366        if not change_ims_setting(log=self.log,
367                                       ad=self.dut,
368                                       dut_client= self.dut_client,
369                                       wifi_network_ssid=self.wifi_network_ssid,
370                                       wifi_network_pass=self.wifi_network_pass,
371                                       dut_capabilities=self.dut_capabilities,
372                                       subid=self.subid,
373                                       airplane_mode=False,
374                                       wifi_enabled=True,
375                                       volte_enabled=True,
376                                       wfc_enabled=True,
377                                       nw_gen=RAT_NR,
378                                       wfc_mode=self.default_wfc_mode):
379            return False
380        if not change_ims_setting(log=self.log,
381                                       ad=self.dut,
382                                       dut_client= self.dut_client,
383                                       wifi_network_ssid=self.wifi_network_ssid,
384                                       wifi_network_pass=self.wifi_network_pass,
385                                       dut_capabilities=self.dut_capabilities,
386                                       subid=self.subid,
387                                       airplane_mode=False,
388                                       wifi_enabled=True,
389                                       volte_enabled=False,
390                                       wfc_enabled=True,
391                                       wfc_mode=None):
392            return False
393        return change_ims_setting(log=self.log,
394                                       ad=self.dut,
395                                       dut_client= self.dut_client,
396                                       wifi_network_ssid=self.wifi_network_ssid,
397                                       wifi_network_pass=self.wifi_network_pass,
398                                       dut_capabilities=self.dut_capabilities,
399                                       subid=self.subid,
400                                       airplane_mode=False,
401                                       wifi_enabled=True,
402                                       volte_enabled=True,
403                                       wfc_enabled=True,
404                                       nw_gen=RAT_NR,
405                                       wfc_mode=None)
406
407
408    @test_tracker_info(uuid="9d951951-bc04-4db1-85e3-f0980f564fd3")
409    @TelephonyBaseTest.tel_test_wrap
410    def test_5g_nsa_volte_wfc_wifi_preferred_to_cellular_preferred(self):
411        """Test for WiFi Calling settings:
412        nsa 5G + VoLTE Enabled + WiFi Connected + WiFi Preferred,
413        change WFC to Cellular Preferred
414
415        Steps:
416        1. Setup DUT Idle, nsa 5G network type, VoLTE enabled.
417        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
418            Verify DUT WFC available, report iwlan rat.
419        3. Change WFC setting to Cellular Preferred.
420        4. Verify DUT report WFC not available.
421
422        Expected Results:
423        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
424        4. DUT WiFI Calling feature bit return False, network rat is not iwlan.
425        """
426        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
427            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
428        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
429            raise signals.TestSkip(
430                "WFC_MODE_CELLULAR_PREFERRED is not supported")
431
432        if not phone_setup_volte(self.log, self.dut):
433            self.dut.log.error("Phone Failed to setup properly.")
434            return False
435
436        if not provision_device_for_5g(self.log, self.dut):
437            return False
438
439        if not change_ims_setting(log=self.log,
440                                       ad=self.dut,
441                                       dut_client= self.dut_client,
442                                       wifi_network_ssid=self.wifi_network_ssid,
443                                       wifi_network_pass=self.wifi_network_pass,
444                                       dut_capabilities=self.dut_capabilities,
445                                       subid=self.subid,
446                                       airplane_mode=False,
447                                       wifi_enabled=True,
448                                       volte_enabled=True,
449                                       wfc_enabled=True,
450                                       nw_gen=RAT_NR,
451                                       wfc_mode=self.default_wfc_mode):
452            return False
453        return change_ims_setting(log=self.log,
454                                       ad=self.dut,
455                                       dut_client= self.dut_client,
456                                       wifi_network_ssid=self.wifi_network_ssid,
457                                       wifi_network_pass=self.wifi_network_pass,
458                                       dut_capabilities=self.dut_capabilities,
459                                       subid=self.subid,
460                                       airplane_mode=False,
461                                       wifi_enabled=True,
462                                       volte_enabled=True,
463                                       wfc_enabled=True,
464                                       nw_gen=RAT_NR,
465                                       wfc_mode= WFC_MODE_CELLULAR_PREFERRED)
466
467
468    @test_tracker_info(uuid="9d951951-bc04-4db1-85e3-f0980f564fd3")
469    @TelephonyBaseTest.tel_test_wrap
470    def test_5g_nsa_wfc_wifi_preferred_to_cellular_preferred(self):
471        """Test for WiFi Calling settings:
472        nsa 5G + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred
473
474        Steps:
475        1. Setup DUT Idle, nsa 5G network type, VoLTE disabled.
476        2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred.
477            Verify DUT WFC available, report iwlan rat.
478        3. Change WFC setting to Cellular Preferred.
479        4. Verify DUT report WFC not available.
480
481        Expected Results:
482        2. DUT WiFi Calling feature bit return True, network rat is iwlan.
483        4. DUT WiFI Calling feature bit return False, network rat is not iwlan.
484        """
485        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
486            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
487        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
488            raise signals.TestSkip(
489                "WFC_MODE_CELLULAR_PREFERRED is not supported")
490
491        if not phone_setup_csfb(self.log, self.dut):
492            self.dut.log.error("Failed to setup properly")
493            return False
494
495        if not provision_device_for_5g(self.log, self.dut):
496            return False
497
498        if not change_ims_setting(log=self.log,
499                                       ad=self.dut,
500                                       dut_client= self.dut_client,
501                                       wifi_network_ssid=self.wifi_network_ssid,
502                                       wifi_network_pass=self.wifi_network_pass,
503                                       dut_capabilities=self.dut_capabilities,
504                                       subid=self.subid,
505                                       airplane_mode=False,
506                                       wifi_enabled=True,
507                                       volte_enabled=False,
508                                       wfc_enabled=True,
509                                       nw_gen=RAT_NR,
510                                       wfc_mode= WFC_MODE_WIFI_PREFERRED):
511            return False
512        return change_ims_setting(log=self.log,
513                                       ad=self.dut,
514                                       dut_client= self.dut_client,
515                                       wifi_network_ssid=self.wifi_network_ssid,
516                                       wifi_network_pass=self.wifi_network_pass,
517                                       dut_capabilities=self.dut_capabilities,
518                                       subid=self.subid,
519                                       airplane_mode=False,
520                                       wifi_enabled=True,
521                                       volte_enabled=False,
522                                       wfc_enabled=True,
523                                       nw_gen=RAT_NR,
524                                       wfc_mode= WFC_MODE_CELLULAR_PREFERRED)
525
526
527    @test_tracker_info(uuid="bb3acfce-1ea9-40c2-9151-12fbc235e359")
528    @TelephonyBaseTest.tel_test_wrap
529    def test_5g_nsa_volte_wfc_cellular_preferred_to_wifi_preferred(self):
530        """Test for WiFi Calling settings:
531        nsa 5G + VoLTE Enabled + WiFi Connected + Cellular Preferred,
532        change WFC to WiFi Preferred
533
534        Steps:
535        1. Setup DUT Idle, nsa 5G network type, VoLTE enabled.
536        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
537            Verify DUT WFC not available.
538        3. Change WFC setting to WiFi Preferred.
539        4. Verify DUT report WFC available.
540
541        Expected Results:
542        2. DUT WiFi Calling feature bit return False, network rat is not iwlan.
543        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
544        """
545        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
546            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
547        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
548            raise signals.TestSkip(
549                "WFC_MODE_CELLULAR_PREFERRED is not supported")
550        if not phone_setup_volte(self.log, self.dut):
551            self.dut.log.error("Phone Failed to setup properly")
552            return False
553
554        if not provision_device_for_5g(self.log, self.dut):
555            return False
556
557        if not change_ims_setting(log=self.log,
558                                       ad=self.dut,
559                                       dut_client= self.dut_client,
560                                       wifi_network_ssid=self.wifi_network_ssid,
561                                       wifi_network_pass=self.wifi_network_pass,
562                                       dut_capabilities=self.dut_capabilities,
563                                       subid=self.subid,
564                                       airplane_mode=False,
565                                       wifi_enabled=True,
566                                       volte_enabled=True,
567                                       wfc_enabled=True,
568                                       nw_gen=RAT_NR,
569                                       wfc_mode= WFC_MODE_CELLULAR_PREFERRED):
570            return False
571        return change_ims_setting(log=self.log,
572                                       ad=self.dut,
573                                       dut_client= self.dut_client,
574                                       wifi_network_ssid=self.wifi_network_ssid,
575                                       wifi_network_pass=self.wifi_network_pass,
576                                       dut_capabilities=self.dut_capabilities,
577                                       subid=self.subid,
578                                       airplane_mode=False,
579                                       wifi_enabled=True,
580                                       volte_enabled=True,
581                                       wfc_enabled=True,
582                                       nw_gen=RAT_NR,
583                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
584
585
586    @test_tracker_info(uuid="d4dea8e0-5795-4769-80e2-29c0f951a84a")
587    @TelephonyBaseTest.tel_test_wrap
588    def test_5g_nsa_wfc_cellular_preferred_to_wifi_preferred(self):
589        """Test for WiFi Calling settings:
590        nsa 5G + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred
591
592        Steps:
593        1. Setup DUT Idle, nsa 5G network type, VoLTE disabled.
594        2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred.
595            Verify DUT WFC not available.
596        3. Change WFC setting to WiFi Preferred.
597        4. Verify DUT report WFC available.
598
599        Expected Results:
600        2. DUT WiFi Calling feature bit return False, network rat is not iwlan.
601        4. DUT WiFI Calling feature bit return True, network rat is iwlan.
602        """
603        if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes:
604            raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported")
605        if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes:
606            raise signals.TestSkip(
607                "WFC_MODE_CELLULAR_PREFERRED is not supported")
608
609        if not phone_setup_csfb(self.log, self.dut):
610            self.dut.log.error("Phone Failed to setup properly")
611            return False
612
613        if not provision_device_for_5g(self.log, self.dut):
614            return False
615
616        if not change_ims_setting(log=self.log,
617                                       ad=self.dut,
618                                       dut_client= self.dut_client,
619                                       wifi_network_ssid=self.wifi_network_ssid,
620                                       wifi_network_pass=self.wifi_network_pass,
621                                       dut_capabilities=self.dut_capabilities,
622                                       subid=self.subid,
623                                       airplane_mode=False,
624                                       wifi_enabled=True,
625                                       volte_enabled=False,
626                                       wfc_enabled=True,
627                                       nw_gen=RAT_NR,
628                                       wfc_mode=WFC_MODE_CELLULAR_PREFERRED):
629            return False
630        return change_ims_setting(log=self.log,
631                                       ad=self.dut,
632                                       dut_client= self.dut_client,
633                                       wifi_network_ssid=self.wifi_network_ssid,
634                                       wifi_network_pass=self.wifi_network_pass,
635                                       dut_capabilities=self.dut_capabilities,
636                                       subid=self.subid,
637                                       airplane_mode=False,
638                                       wifi_enabled=True,
639                                       volte_enabled=False,
640                                       wfc_enabled=True,
641                                       nw_gen=RAT_NR,
642                                       wfc_mode=WFC_MODE_WIFI_PREFERRED)
643
644
645