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.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest 25from acts.test_utils.tel.tel_defines import CarrierConfigs 26from acts.test_utils.tel.tel_defines import CAPABILITY_VOLTE 27from acts.test_utils.tel.tel_defines import CAPABILITY_WFC 28from acts.test_utils.tel.tel_defines import CAPABILITY_WFC_MODE_CHANGE 29from acts.test_utils.tel.tel_defines import GEN_4G 30from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_WIFI_CONNECTION 31from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_DATA 32from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_VOICE 33from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_IMS_REGISTRATION 34from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_WFC_ENABLED 35from acts.test_utils.tel.tel_defines import RAT_FAMILY_WLAN 36from acts.test_utils.tel.tel_defines import RAT_LTE 37from acts.test_utils.tel.tel_defines import RAT_UNKNOWN 38from acts.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED 39from acts.test_utils.tel.tel_defines import WFC_MODE_DISABLED 40from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_ONLY 41from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED 42from acts.test_utils.tel.tel_test_utils import call_setup_teardown 43from acts.test_utils.tel.tel_test_utils import dumpsys_carrier_config 44from acts.test_utils.tel.tel_test_utils import ensure_phone_subscription 45from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected 46from acts.test_utils.tel.tel_test_utils import fastboot_wipe 47from acts.test_utils.tel.tel_test_utils import get_user_config_profile 48from acts.test_utils.tel.tel_test_utils import is_droid_in_rat_family 49from acts.test_utils.tel.tel_test_utils import revert_default_telephony_setting 50from acts.test_utils.tel.tel_test_utils import set_wfc_mode 51from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode_by_adb 52from acts.test_utils.tel.tel_test_utils import toggle_volte 53from acts.test_utils.tel.tel_test_utils import toggle_wfc 54from acts.test_utils.tel.tel_test_utils import verify_default_telephony_setting 55from acts.test_utils.tel.tel_test_utils import verify_internet_connection 56from acts.test_utils.tel.tel_test_utils import wait_for_ims_registered 57from acts.test_utils.tel.tel_test_utils import wait_for_network_rat 58from acts.test_utils.tel.tel_test_utils import wait_for_not_network_rat 59from acts.test_utils.tel.tel_test_utils import wait_for_state 60from acts.test_utils.tel.tel_test_utils import wait_for_voice_attach 61from acts.test_utils.tel.tel_test_utils import wait_for_volte_enabled 62from acts.test_utils.tel.tel_test_utils import wait_for_wfc_disabled 63from acts.test_utils.tel.tel_test_utils import wait_for_wfc_enabled 64from acts.test_utils.tel.tel_test_utils import wait_for_wifi_data_connection 65from acts.test_utils.tel.tel_test_utils import wifi_reset 66from acts.test_utils.tel.tel_test_utils import wifi_toggle_state 67from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_iwlan 68from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_volte 69from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_3g 70from acts.test_utils.tel.tel_voice_utils import phone_setup_csfb 71from acts.test_utils.tel.tel_voice_utils import phone_setup_volte 72from acts.test_utils.tel.tel_test_utils import WIFI_SSID_KEY 73from acts.test_utils.tel.tel_test_utils import WIFI_PWD_KEY 74 75 76class TelLiveImsSettingsTest(TelephonyBaseTest): 77 def setup_class(self): 78 TelephonyBaseTest.setup_class(self) 79 self.dut = self.android_devices[0] 80 self.number_of_devices = 1 81 self.skip_reset_between_cases = False 82 self.carrier_configs = dumpsys_carrier_config(self.dut) 83 self.dut_capabilities = self.dut.telephony.get("capabilities", []) 84 self.dut.log.info("DUT capabilities: %s", self.dut_capabilities) 85 if CAPABILITY_VOLTE not in self.dut_capabilities: 86 raise signals.TestSkipClass("VoLTE is not supported") 87 if CAPABILITY_WFC not in self.dut_capabilities: 88 raise signals.TestSkipClass("WFC is not supported") 89 90 self.default_volte = (CAPABILITY_VOLTE in self.dut_capabilities) and ( 91 self.carrier_configs[CarrierConfigs. 92 ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL]) 93 self.default_wfc_enabled = ( 94 CAPABILITY_WFC in self.dut_capabilities 95 ) and ( 96 self.carrier_configs[CarrierConfigs.DEFAULT_WFC_IMS_ENABLED_BOOL]) 97 self.default_wfc_mode = self.carrier_configs.get( 98 CarrierConfigs.DEFAULT_WFC_IMS_MODE_INT, None) 99 self.dut_wfc_modes = self.dut.telephony.get("wfc_modes", []) 100 101 def check_call_in_wfc(self): 102 result = True 103 if not call_setup_teardown(self.log, self.android_devices[1], self.dut, 104 self.dut, None, is_phone_in_call_iwlan): 105 if not call_setup_teardown(self.log, self.android_devices[1], 106 self.dut, self.dut, None, 107 is_phone_in_call_iwlan): 108 self.dut.log.error("MT WFC call failed") 109 result = False 110 if not call_setup_teardown(self.log, self.dut, self.android_devices[1], 111 self.dut, is_phone_in_call_iwlan): 112 self.dut.log.error("MO WFC call failed") 113 result = False 114 return result 115 116 def check_call_in_volte(self): 117 result = True 118 if not call_setup_teardown(self.log, self.android_devices[1], self.dut, 119 self.dut, None, is_phone_in_call_volte): 120 if not call_setup_teardown(self.log, self.android_devices[1], 121 self.dut, self.dut, None, 122 is_phone_in_call_volte): 123 self.dut.log.error("MT VoLTE call failed") 124 result = False 125 if not call_setup_teardown(self.log, self.dut, self.android_devices[1], 126 self.dut, is_phone_in_call_volte): 127 self.dut.log.error("MO VoLTE call failed") 128 result = False 129 return result 130 131 def check_call(self): 132 result = True 133 if not call_setup_teardown(self.log, self.android_devices[1], self.dut, 134 self.dut): 135 if not call_setup_teardown(self.log, self.android_devices[1], 136 self.dut, self.dut): 137 self.dut.log.error("MT call failed") 138 result = False 139 if not call_setup_teardown(self.log, self.dut, self.android_devices[1], 140 self.dut): 141 self.dut.log.error("MO call failed") 142 result = False 143 return result 144 145 def change_ims_setting(self, 146 airplane_mode, 147 wifi_enabled, 148 volte_enabled, 149 wfc_enabled, 150 wfc_mode=None): 151 result = True 152 self.dut.log.info( 153 "Setting APM %s, WIFI %s, VoLTE %s, WFC %s, WFC mode %s", 154 airplane_mode, wifi_enabled, volte_enabled, wfc_enabled, wfc_mode) 155 toggle_airplane_mode_by_adb(self.log, self.dut, airplane_mode) 156 if wifi_enabled: 157 if not ensure_wifi_connected(self.log, self.dut, 158 self.wifi_network_ssid, 159 self.wifi_network_pass): 160 self.dut.log.error("Fail to connected to WiFi") 161 result = False 162 else: 163 if not wifi_toggle_state(self.log, self.dut, False): 164 self.dut.log.error("Failed to turn off WiFi.") 165 result = False 166 toggle_volte(self.log, self.dut, volte_enabled) 167 toggle_wfc(self.log, self.dut, wfc_enabled) 168 if wfc_mode: 169 set_wfc_mode(self.log, self.dut, wfc_mode) 170 wfc_mode = self.dut.droid.imsGetWfcMode() 171 if wifi_enabled or not airplane_mode: 172 if not ensure_phone_subscription(self.log, self.dut): 173 self.dut.log.error("Failed to find valid subscription") 174 result = False 175 if airplane_mode: 176 if (CAPABILITY_WFC in self.dut_capabilities) and (wifi_enabled 177 and wfc_enabled): 178 if not wait_for_wfc_enabled(self.log, self.dut): 179 result = False 180 elif not self.check_call_in_wfc(): 181 result = False 182 else: 183 if not wait_for_state( 184 self.dut.droid.telephonyGetCurrentVoiceNetworkType, 185 RAT_UNKNOWN): 186 self.dut.log.error( 187 "Voice RAT is %s not UNKNOWN", 188 self.dut.droid.telephonyGetCurrentVoiceNetworkType()) 189 result = False 190 else: 191 self.dut.log.info("Voice RAT is in UNKKNOWN") 192 else: 193 if (wifi_enabled and wfc_enabled) and ( 194 wfc_mode == WFC_MODE_WIFI_PREFERRED) and ( 195 CAPABILITY_WFC in self.dut_capabilities): 196 if not wait_for_wfc_enabled(self.log, self.dut): 197 result = False 198 if not wait_for_state( 199 self.dut.droid.telephonyGetCurrentVoiceNetworkType, 200 RAT_UNKNOWN): 201 self.dut.log.error( 202 "Voice RAT is %s, not UNKNOWN", 203 self.dut.droid.telephonyGetCurrentVoiceNetworkType()) 204 if not self.check_call_in_wfc(): 205 result = False 206 else: 207 if not wait_for_wfc_disabled(self.log, self.dut): 208 self.dut.log.error("WFC is not disabled") 209 result = False 210 if volte_enabled and CAPABILITY_VOLTE in self.dut_capabilities: 211 if not wait_for_volte_enabled(self.log, self.dut): 212 result = False 213 if not self.check_call_in_volte(): 214 result = False 215 else: 216 if not wait_for_not_network_rat( 217 self.log, 218 self.dut, 219 RAT_LTE, 220 voice_or_data=NETWORK_SERVICE_VOICE): 221 self.dut.log.error( 222 "Voice RAT is %s", 223 self.dut.droid.telephonyGetCurrentVoiceNetworkType( 224 )) 225 result = False 226 if not wait_for_voice_attach(self.log, self.dut): 227 result = False 228 if not self.check_call(): 229 result = False 230 user_config_profile = get_user_config_profile(self.dut) 231 self.dut.log.info("user_config_profile: %s ", 232 sorted(user_config_profile.items())) 233 return result 234 235 def verify_default_ims_setting(self): 236 result = True 237 airplane_mode = self.dut.droid.connectivityCheckAirplaneMode() 238 default_wfc_mode = self.carrier_configs.get( 239 CarrierConfigs.DEFAULT_WFC_IMS_MODE_INT, WFC_MODE_DISABLED) 240 if self.default_wfc_enabled: 241 wait_for_wfc_enabled(self.log, self.dut) 242 else: 243 wait_for_wfc_disabled(self.log, self.dut) 244 if airplane_mode: 245 wait_for_network_rat( 246 self.log, 247 self.dut, 248 RAT_UNKNOWN, 249 voice_or_data=NETWORK_SERVICE_VOICE) 250 else: 251 if self.default_volte: 252 wait_for_volte_enabled(self.log, self.dut) 253 else: 254 wait_for_not_network_rat( 255 self.log, 256 self.dut, 257 RAT_UNKNOWN, 258 voice_or_data=NETWORK_SERVICE_VOICE) 259 if not ensure_phone_subscription(self.log, self.dut): 260 ad.log.error("Failed to find valid subscription") 261 result = False 262 user_config_profile = get_user_config_profile(self.dut) 263 self.dut.log.info("user_config_profile = %s ", 264 sorted(user_config_profile.items())) 265 if user_config_profile["VoLTE Enabled"] != self.default_volte: 266 self.dut.log.error("VoLTE mode is not %s", self.default_volte) 267 result = False 268 else: 269 self.dut.log.info("VoLTE mode is %s as expected", 270 self.default_volte) 271 if user_config_profile["WFC Enabled"] != self.default_wfc_enabled: 272 self.dut.log.error("WFC enabled is not %s", default_wfc_enabled) 273 if user_config_profile["WFC Enabled"]: 274 if user_config_profile["WFC Mode"] != default_wfc_mode: 275 self.dut.log.error( 276 "WFC mode is not %s after IMS factory reset", 277 default_wfc_mode) 278 result = False 279 else: 280 self.dut.log.info("WFC mode is %s as expected", 281 default_wfc_mode) 282 if self.default_wfc_enabled and \ 283 default_wfc_mode == WFC_MODE_WIFI_PREFERRED: 284 if not self.check_call_in_wfc(): 285 result = False 286 elif not airplane_mode: 287 if self.default_volte: 288 if not self.check_call_in_volte(): 289 result = False 290 else: 291 if not self.check_call(): 292 result = False 293 if result == False: 294 user_config_profile = get_user_config_profile(self.dut) 295 self.dut.log.info("user_config_profile = %s ", 296 sorted(user_config_profile.items())) 297 return result 298 299 @test_tracker_info(uuid="a3a680ba-d1e0-4770-a38c-4de8f15f9171") 300 @TelephonyBaseTest.tel_test_wrap 301 def test_lte_volte_wifi_connected_toggle_wfc(self): 302 """Test for WiFi Calling settings: 303 LTE + VoLTE Enabled + WiFi Connected, Toggling WFC 304 305 Steps: 306 1. Setup DUT Idle, LTE network type, VoLTE enabled. 307 2. Make sure DUT WiFi connected, WFC disabled. 308 3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available, 309 report iwlan rat. 310 4. Set DUT WFC disabled, verify DUT WFC unavailable, 311 not report iwlan rat. 312 313 Expected Results: 314 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 315 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 316 """ 317 if not phone_setup_volte(self.log, self.dut): 318 self.log.error("Failed to setup VoLTE") 319 return False 320 if not self.change_ims_setting(False, True, True, True, 321 self.default_wfc_mode): 322 return False 323 if not self.change_ims_setting(False, True, True, False, None): 324 return False 325 return self.change_ims_setting(False, True, True, True, None) 326 327 @test_tracker_info(uuid="d3ffae75-ae4a-4ed8-9337-9155c413311d") 328 @TelephonyBaseTest.tel_test_wrap 329 def test_lte_wifi_connected_toggle_wfc(self): 330 """Test for WiFi Calling settings: 331 LTE + VoLTE Disabled + WiFi Connected, Toggling WFC 332 333 Steps: 334 1. Setup DUT Idle, LTE network type, VoLTE disabled. 335 2. Make sure DUT WiFi connected, WFC disabled. 336 3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available, 337 report iwlan rat. 338 4. Set DUT WFC disabled, verify DUT WFC unavailable, 339 not report iwlan rat. 340 341 Expected Results: 342 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 343 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 344 """ 345 if not phone_setup_csfb(self.log, self.dut): 346 self.log.error("Failed to setup LTE") 347 return False 348 if not self.change_ims_setting(False, True, False, True, 349 self.default_wfc_mode): 350 return False 351 if not self.change_ims_setting(False, True, False, False, None): 352 return False 353 return self.change_ims_setting(False, True, False, True, None) 354 355 @test_tracker_info(uuid="29d2d7b7-1c31-4a2c-896a-3f6756c620ac") 356 @TelephonyBaseTest.tel_test_wrap 357 def test_3g_wifi_connected_toggle_wfc(self): 358 """Test for WiFi Calling settings: 359 3G + WiFi Connected, Toggling WFC 360 361 Steps: 362 1. Setup DUT Idle, 3G network type. 363 2. Make sure DUT WiFi connected, WFC disabled. 364 3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available, 365 report iwlan rat. 366 4. Set DUT WFC disabled, verify DUT WFC unavailable, 367 not report iwlan rat. 368 369 Expected Results: 370 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 371 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 372 """ 373 if not phone_setup_voice_3g(self.log, self.dut): 374 self.log.error("Failed to setup 3G") 375 return False 376 if not self.change_ims_setting(False, True, False, True, 377 self.default_wfc_mode): 378 return False 379 if not self.change_ims_setting(False, True, False, False, None): 380 return False 381 return self.change_ims_setting(False, True, False, True, None) 382 383 @test_tracker_info(uuid="ce2c0208-9ea0-4b31-91f4-d06a62cb927a") 384 @TelephonyBaseTest.tel_test_wrap 385 def test_apm_wifi_connected_toggle_wfc(self): 386 """Test for WiFi Calling settings: 387 APM + WiFi Connected, Toggling WFC 388 389 Steps: 390 1. Setup DUT Idle, Airplane mode. 391 2. Make sure DUT WiFi connected, WFC disabled. 392 3. Set DUT WFC enabled (WiFi Preferred), verify DUT WFC available, 393 report iwlan rat. 394 4. Set DUT WFC disabled, verify DUT WFC unavailable, 395 not report iwlan rat. 396 397 Expected Results: 398 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 399 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 400 """ 401 if not self.change_ims_setting(True, True, True, True, 402 self.default_wfc_mode): 403 return False 404 if not self.change_ims_setting(True, True, True, False, None): 405 return False 406 return self.change_ims_setting(True, True, True, True, None) 407 408 @test_tracker_info(uuid="681e2448-32a2-434d-abd6-0bc2ab5afd9c") 409 @TelephonyBaseTest.tel_test_wrap 410 def test_lte_volte_wfc_enabled_toggle_wifi(self): 411 """Test for WiFi Calling settings: 412 LTE + VoLTE Enabled + WFC enabled, Toggling WiFi 413 414 Steps: 415 1. Setup DUT Idle, LTE network type, VoLTE enabled. 416 2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred). 417 3. DUT connect WiFi, verify DUT WFC available, report iwlan rat. 418 4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat. 419 420 Expected Results: 421 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 422 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 423 """ 424 if not phone_setup_volte(self.log, self.dut): 425 self.log.error("Failed to setup VoLTE") 426 return False 427 if not self.change_ims_setting(False, True, True, True, 428 self.default_wfc_mode): 429 return False 430 if not self.change_ims_setting(False, True, True, False, None): 431 return False 432 return self.change_ims_setting(False, True, True, True, None) 433 434 @test_tracker_info(uuid="63922066-9caa-42e6-bc9f-49f5ac01cbe2") 435 @TelephonyBaseTest.tel_test_wrap 436 def test_lte_wfc_enabled_toggle_wifi(self): 437 """Test for WiFi Calling settings: 438 LTE + VoLTE Disabled + WFC enabled, Toggling WiFi 439 440 Steps: 441 1. Setup DUT Idle, LTE network type, VoLTE disabled. 442 2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred). 443 3. DUT connect WiFi, verify DUT WFC available, report iwlan rat. 444 4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat. 445 446 Expected Results: 447 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 448 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 449 """ 450 if not phone_setup_csfb(self.log, self.dut): 451 self.log.error("Failed to setup CSFB") 452 return False 453 if not self.change_ims_setting(False, True, False, True, 454 self.default_wfc_mode): 455 return False 456 if not self.change_ims_setting(False, False, False, True, None): 457 return False 458 return self.change_ims_setting(False, True, False, True, None) 459 460 @test_tracker_info(uuid="8a80a446-2116-4b19-b0ef-f771f30a6d15") 461 @TelephonyBaseTest.tel_test_wrap 462 def test_3g_wfc_enabled_toggle_wifi(self): 463 """Test for WiFi Calling settings: 464 3G + WFC enabled, Toggling WiFi 465 466 Steps: 467 1. Setup DUT Idle, 3G network type. 468 2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred). 469 3. DUT connect WiFi, verify DUT WFC available, report iwlan rat. 470 4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat. 471 472 Expected Results: 473 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 474 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 475 """ 476 if not phone_setup_voice_3g(self.log, self.dut): 477 self.log.error("Failed to setup 3G") 478 return False 479 if not self.change_ims_setting(False, True, False, True, 480 self.default_wfc_mode): 481 return False 482 if not self.change_ims_setting(False, False, False, True, None): 483 return False 484 return self.change_ims_setting(False, True, False, True, None) 485 486 @test_tracker_info(uuid="9889eebf-cde6-4f47-aec0-9cb204fdf2e5") 487 @TelephonyBaseTest.tel_test_wrap 488 def test_apm_wfc_enabled_toggle_wifi(self): 489 """Test for WiFi Calling settings: 490 APM + WFC enabled, Toggling WiFi 491 492 Steps: 493 1. Setup DUT Idle, Airplane mode. 494 2. Make sure DUT WiFi disconnected, WFC enabled (WiFi Preferred). 495 3. DUT connect WiFi, verify DUT WFC available, report iwlan rat. 496 4. DUT disconnect WiFi,verify DUT WFC unavailable, not report iwlan rat. 497 498 Expected Results: 499 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 500 4. DUT WiFi Calling feature bit return False, network rat is not iwlan. 501 """ 502 if not self.change_ims_setting(True, True, True, True, 503 self.default_wfc_mode): 504 return False 505 if not self.change_ims_setting(True, False, True, True, None): 506 return False 507 return self.change_ims_setting(True, True, True, True, None) 508 509 @test_tracker_info(uuid="9b23e04b-4f70-4e73-88e7-6376262c739d") 510 @TelephonyBaseTest.tel_test_wrap 511 def test_lte_wfc_enabled_wifi_connected_toggle_volte(self): 512 """Test for WiFi Calling settings: 513 LTE + VoLTE Enabled + WiFi Connected + WFC enabled, toggle VoLTE setting 514 515 Steps: 516 1. Setup DUT Idle, LTE network type, VoLTE enabled. 517 2. Make sure DUT WiFi connected, WFC enabled (WiFi Preferred). 518 Verify DUT WFC available, report iwlan rat. 519 3. Disable VoLTE on DUT, verify in 2 minutes period, 520 DUT does not lost WiFi Calling, DUT still report WFC available, 521 rat iwlan. 522 4. Enable VoLTE on DUT, verify in 2 minutes period, 523 DUT does not lost WiFi Calling, DUT still report WFC available, 524 rat iwlan. 525 526 Expected Results: 527 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 528 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 529 4. DUT WiFi Calling feature bit return True, network rat is iwlan. 530 """ 531 if not phone_setup_volte(self.log, self.dut): 532 self.dut.log.error("Failed to setup VoLTE.") 533 return False 534 if not self.change_ims_setting(False, True, True, True, 535 self.default_wfc_mode): 536 return False 537 if not self.change_ims_setting(False, True, False, True, None): 538 return False 539 return self.change_ims_setting(False, True, True, True, None) 540 541 @test_tracker_info(uuid="04bdfda4-06f7-41df-9352-a8534bc2a67a") 542 @TelephonyBaseTest.tel_test_wrap 543 def test_lte_volte_wfc_wifi_preferred_to_cellular_preferred(self): 544 """Test for WiFi Calling settings: 545 LTE + VoLTE Enabled + WiFi Connected + WiFi Preferred, 546 change WFC to Cellular Preferred 547 548 Steps: 549 1. Setup DUT Idle, LTE network type, VoLTE enabled. 550 2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred. 551 Verify DUT WFC available, report iwlan rat. 552 3. Change WFC setting to Cellular Preferred. 553 4. Verify DUT report WFC not available. 554 555 Expected Results: 556 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 557 4. DUT WiFI Calling feature bit return False, network rat is not iwlan. 558 """ 559 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 560 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 561 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 562 raise signals.TestSkip( 563 "WFC_MODE_CELLULAR_PREFERRED is not supported") 564 if not phone_setup_volte(self.log, self.dut): 565 self.dut.log.error("Failed to setup VoLTE.") 566 return False 567 if not self.change_ims_setting(False, True, True, True, 568 WFC_MODE_WIFI_PREFERRED): 569 return False 570 return self.change_ims_setting(False, True, True, True, 571 WFC_MODE_CELLULAR_PREFERRED) 572 573 @test_tracker_info(uuid="80d26bdb-992a-4b30-ad51-68308d5af168") 574 @TelephonyBaseTest.tel_test_wrap 575 def test_lte_wfc_wifi_preferred_to_cellular_preferred(self): 576 """Test for WiFi Calling settings: 577 LTE + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred 578 579 Steps: 580 1. Setup DUT Idle, LTE network type, VoLTE disabled. 581 2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred. 582 Verify DUT WFC available, report iwlan rat. 583 3. Change WFC setting to Cellular Preferred. 584 4. Verify DUT report WFC not available. 585 586 Expected Results: 587 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 588 4. DUT WiFI Calling feature bit return False, network rat is not iwlan. 589 """ 590 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 591 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 592 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 593 raise signals.TestSkip( 594 "WFC_MODE_CELLULAR_PREFERRED is not supported") 595 if not phone_setup_csfb(self.log, self.dut): 596 self.dut.log.error("Failed to setup LTE.") 597 return False 598 if not self.change_ims_setting(False, True, False, True, 599 WFC_MODE_WIFI_PREFERRED): 600 return False 601 return self.change_ims_setting(False, True, False, True, 602 WFC_MODE_CELLULAR_PREFERRED) 603 604 @test_tracker_info(uuid="d486c7e3-3d2b-4552-8af8-7b19f6347427") 605 @TelephonyBaseTest.tel_test_wrap 606 def test_3g_wfc_wifi_preferred_to_cellular_preferred(self): 607 """Test for WiFi Calling settings: 608 3G + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred 609 610 Steps: 611 1. Setup DUT Idle, 3G network type. 612 2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred. 613 Verify DUT WFC available, report iwlan rat. 614 3. Change WFC setting to Cellular Preferred. 615 4. Verify DUT report WFC not available. 616 617 Expected Results: 618 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 619 4. DUT WiFI Calling feature bit return False, network rat is not iwlan. 620 """ 621 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 622 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 623 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 624 raise signals.TestSkip( 625 "WFC_MODE_CELLULAR_PREFERRED is not supported") 626 if not phone_setup_voice_3g(self.dut.log, self.dut): 627 self.dut.log.error("Failed to setup 3G.") 628 return False 629 if not self.change_ims_setting(False, True, False, True, 630 WFC_MODE_WIFI_PREFERRED): 631 return False 632 return self.change_ims_setting(False, True, False, True, 633 WFC_MODE_CELLULAR_PREFERRED) 634 635 @test_tracker_info(uuid="0feb0add-8e22-4c86-b13e-be68659cdd87") 636 @TelephonyBaseTest.tel_test_wrap 637 def test_apm_wfc_wifi_preferred_to_cellular_preferred(self): 638 """Test for WiFi Calling settings: 639 APM + WiFi Connected + WiFi Preferred, change WFC to Cellular Preferred 640 641 Steps: 642 1. Setup DUT Idle, airplane mode. 643 2. Make sure DUT WiFi connected, WFC is set to WiFi Preferred. 644 Verify DUT WFC available, report iwlan rat. 645 3. Change WFC setting to Cellular Preferred. 646 4. Verify DUT report WFC not available. 647 648 Expected Results: 649 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 650 4. DUT WiFI Calling feature bit return True, network rat is iwlan. 651 """ 652 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 653 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 654 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 655 raise signals.TestSkip( 656 "WFC_MODE_CELLULAR_PREFERRED is not supported") 657 if not self.change_ims_setting(True, True, True, True, 658 WFC_MODE_WIFI_PREFERRED): 659 return False 660 return self.change_ims_setting(True, True, True, True, 661 WFC_MODE_CELLULAR_PREFERRED) 662 663 @test_tracker_info(uuid="9c8f359f-a084-4413-b8a9-34771af166c5") 664 @TelephonyBaseTest.tel_test_wrap 665 def test_lte_volte_wfc_cellular_preferred_to_wifi_preferred(self): 666 """Test for WiFi Calling settings: 667 LTE + VoLTE Enabled + WiFi Connected + Cellular Preferred, 668 change WFC to WiFi Preferred 669 670 Steps: 671 1. Setup DUT Idle, LTE network type, VoLTE enabled. 672 2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred. 673 Verify DUT WFC not available. 674 3. Change WFC setting to WiFi Preferred. 675 4. Verify DUT report WFC available. 676 677 Expected Results: 678 2. DUT WiFi Calling feature bit return False, network rat is not iwlan. 679 4. DUT WiFI Calling feature bit return True, network rat is iwlan. 680 """ 681 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 682 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 683 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 684 raise signals.TestSkip( 685 "WFC_MODE_CELLULAR_PREFERRED is not supported") 686 if not phone_setup_volte(self.log, self.dut): 687 self.dut.log.error("Failed to setup VoLTE.") 688 return False 689 if not self.change_ims_setting(False, True, True, True, 690 WFC_MODE_CELLULAR_PREFERRED): 691 return False 692 return self.change_ims_setting(False, True, True, True, 693 WFC_MODE_WIFI_PREFERRED) 694 695 @test_tracker_info(uuid="1894e685-63cf-43aa-91ed-938782ca35a9") 696 @TelephonyBaseTest.tel_test_wrap 697 def test_lte_wfc_cellular_preferred_to_wifi_preferred(self): 698 """Test for WiFi Calling settings: 699 LTE + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred 700 701 Steps: 702 1. Setup DUT Idle, LTE network type, VoLTE disabled. 703 2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred. 704 Verify DUT WFC not available. 705 3. Change WFC setting to WiFi Preferred. 706 4. Verify DUT report WFC available. 707 708 Expected Results: 709 2. DUT WiFi Calling feature bit return False, network rat is not iwlan. 710 4. DUT WiFI Calling feature bit return True, network rat is iwlan. 711 """ 712 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 713 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 714 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 715 raise signals.TestSkip( 716 "WFC_MODE_CELLULAR_PREFERRED is not supported") 717 if not phone_setup_csfb(self.log, self.dut): 718 self.dut.log.error("Failed to setup LTE.") 719 return False 720 if not self.change_ims_setting(False, True, False, True, 721 WFC_MODE_CELLULAR_PREFERRED): 722 return False 723 return self.change_ims_setting(False, True, False, True, 724 WFC_MODE_WIFI_PREFERRED) 725 726 @test_tracker_info(uuid="e7fb6a6c-4672-44da-bca2-78b4d96dea9e") 727 @TelephonyBaseTest.tel_test_wrap 728 def test_3g_wfc_cellular_preferred_to_wifi_preferred(self): 729 """Test for WiFi Calling settings: 730 3G + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred 731 732 Steps: 733 1. Setup DUT Idle, 3G network type. 734 2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred. 735 Verify DUT WFC not available. 736 3. Change WFC setting to WiFi Preferred. 737 4. Verify DUT report WFC available. 738 739 Expected Results: 740 2. DUT WiFi Calling feature bit return False, network rat is not iwlan. 741 4. DUT WiFI Calling feature bit return True, network rat is iwlan. 742 """ 743 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 744 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 745 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 746 raise signals.TestSkip( 747 "WFC_MODE_CELLULAR_PREFERRED is not supported") 748 if not phone_setup_voice_3g(self.log, self.dut): 749 self.dut.log.error("Failed to setup 3G.") 750 return False 751 if not self.change_ims_setting(False, True, False, True, 752 WFC_MODE_CELLULAR_PREFERRED): 753 return False 754 return self.change_ims_setting(False, True, False, True, 755 WFC_MODE_WIFI_PREFERRED) 756 757 @test_tracker_info(uuid="46262b2d-5de9-4984-87e8-42f44469289e") 758 @TelephonyBaseTest.tel_test_wrap 759 def test_apm_wfc_cellular_preferred_to_wifi_preferred(self): 760 """Test for WiFi Calling settings: 761 APM + WiFi Connected + Cellular Preferred, change WFC to WiFi Preferred 762 763 Steps: 764 1. Setup DUT Idle, airplane mode. 765 2. Make sure DUT WiFi connected, WFC is set to Cellular Preferred. 766 Verify DUT WFC not available. 767 3. Change WFC setting to WiFi Preferred. 768 4. Verify DUT report WFC available. 769 770 Expected Results: 771 2. DUT WiFi Calling feature bit return True, network rat is iwlan. 772 4. DUT WiFI Calling feature bit return True, network rat is iwlan. 773 """ 774 if WFC_MODE_WIFI_PREFERRED not in self.dut_wfc_modes: 775 raise signals.TestSkip("WFC_MODE_WIFI_PREFERRED is not supported") 776 if WFC_MODE_CELLULAR_PREFERRED not in self.dut_wfc_modes: 777 raise signals.TestSkip( 778 "WFC_MODE_CELLULAR_PREFERRED is not supported") 779 if not self.change_ims_setting(True, True, True, True, 780 WFC_MODE_CELLULAR_PREFERRED): 781 return False 782 return self.change_ims_setting(True, True, True, True, 783 WFC_MODE_WIFI_PREFERRED) 784 785 @test_tracker_info(uuid="5b514f51-fed9-475e-99d3-17d2165e11a1") 786 @TelephonyBaseTest.tel_test_wrap 787 def test_apm_wfc_wifi_preferred_turn_off_apm(self): 788 """Test for WiFi Calling settings: 789 APM + WiFi Connected + WiFi Preferred + turn off APM 790 791 Steps: 792 1. Setup DUT Idle in Airplane mode. 793 2. Make sure DUT WiFi connected, set WFC mode to WiFi preferred. 794 3. verify DUT WFC available, report iwlan rat. 795 4. Turn off airplane mode. 796 5. Verify DUT WFC still available, report iwlan rat 797 798 Expected Results: 799 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 800 5. DUT WiFI Calling feature bit return True, network rat is iwlan. 801 """ 802 if not self.change_ims_setting(True, True, True, True, 803 WFC_MODE_WIFI_PREFERRED): 804 return False 805 return self.change_ims_setting(False, True, True, True, None) 806 807 @test_tracker_info(uuid="f328cff2-9dec-44b3-ba74-a662b76fcf2a") 808 @TelephonyBaseTest.tel_test_wrap 809 def test_apm_wfc_cellular_preferred_turn_off_apm(self): 810 """Test for WiFi Calling settings: 811 APM + WiFi Connected + Cellular Preferred + turn off APM 812 813 Steps: 814 1. Setup DUT Idle in Airplane mode. 815 2. Make sure DUT WiFi connected, set WFC mode to Cellular preferred. 816 3. verify DUT WFC available, report iwlan rat. 817 4. Turn off airplane mode. 818 5. Verify DUT WFC not available, not report iwlan rat 819 820 Expected Results: 821 3. DUT WiFi Calling feature bit return True, network rat is iwlan. 822 5. DUT WiFI Calling feature bit return False, network rat is not iwlan. 823 """ 824 if not self.change_ims_setting(True, True, True, True, 825 WFC_MODE_CELLULAR_PREFERRED): 826 return False 827 return self.change_ims_setting(False, True, True, True, None) 828 829 @test_tracker_info(uuid="7e30d219-42ee-4309-a95c-2b45b8831d26") 830 @TelephonyBaseTest.tel_test_wrap 831 def test_wfc_setup_timing(self): 832 """ Measures the time delay in enabling WiFi calling 833 834 Steps: 835 1. Make sure DUT idle. 836 2. Turn on Airplane Mode, Set WiFi Calling to WiFi_Preferred. 837 3. Turn on WiFi, connect to WiFi AP and measure time delay. 838 4. Wait for WiFi connected, verify Internet and measure time delay. 839 5. Wait for rat to be reported as iwlan and measure time delay. 840 6. Wait for ims registered and measure time delay. 841 7. Wait for WiFi Calling feature bit to be True and measure time delay. 842 843 Expected results: 844 Time Delay in each step should be within pre-defined limit. 845 846 Returns: 847 Currently always return True. 848 """ 849 # TODO: b/26338119 Set pass/fail criteria 850 time_values = { 851 'start': 0, 852 'wifi_enabled': 0, 853 'wifi_connected': 0, 854 'wifi_data': 0, 855 'iwlan_rat': 0, 856 'ims_registered': 0, 857 'wfc_enabled': 0, 858 'mo_call_success': 0 859 } 860 861 wifi_reset(self.log, self.dut) 862 toggle_airplane_mode_by_adb(self.log, self.dut, True) 863 864 set_wfc_mode(self.log, self.dut, WFC_MODE_WIFI_PREFERRED) 865 866 time_values['start'] = time.time() 867 868 self.dut.log.info("Start Time %ss", time_values['start']) 869 870 wifi_toggle_state(self.log, self.dut, True) 871 time_values['wifi_enabled'] = time.time() 872 self.dut.log.info("WiFi Enabled After %ss", 873 time_values['wifi_enabled'] - time_values['start']) 874 875 network = {WIFI_SSID_KEY: self.wifi_network_ssid} 876 if self.wifi_network_pass: 877 network[WIFI_PWD_KEY] = self.wifi_network_pass 878 try: 879 self.dut.droid.wifiConnectByConfig(network) 880 except Exception: 881 self.dut.log.info("Connecting to wifi by RPC wifiConnect instead") 882 self.dut.droid.wifiConnect(network) 883 self.dut.droid.wakeUpNow() 884 885 if not wait_for_wifi_data_connection(self.log, self.dut, True, 886 MAX_WAIT_TIME_WIFI_CONNECTION): 887 self.dut.log.error("Failed WiFi connection, aborting!") 888 return False 889 time_values['wifi_connected'] = time.time() 890 891 self.dut.log.info( 892 "WiFi Connected After %ss", 893 time_values['wifi_connected'] - time_values['wifi_enabled']) 894 895 if not verify_internet_connection(self.log, self.dut, retries=3): 896 self.dut.log.error("Failed to get user-plane traffic, aborting!") 897 return False 898 899 time_values['wifi_data'] = time.time() 900 self.dut.log.info( 901 "WifiData After %ss", 902 time_values['wifi_data'] - time_values['wifi_connected']) 903 904 if not wait_for_network_rat( 905 self.log, 906 self.dut, 907 RAT_FAMILY_WLAN, 908 voice_or_data=NETWORK_SERVICE_DATA): 909 self.dut.log.error("Failed to set-up iwlan, aborting!") 910 if is_droid_in_rat_family(self.log, self.dut, RAT_FAMILY_WLAN, 911 NETWORK_SERVICE_DATA): 912 self.dut.log.error( 913 "Never received the event, but droid in iwlan") 914 else: 915 return False 916 time_values['iwlan_rat'] = time.time() 917 self.dut.log.info("iWLAN Reported After %ss", 918 time_values['iwlan_rat'] - time_values['wifi_data']) 919 920 if not wait_for_ims_registered(self.log, self.dut, 921 MAX_WAIT_TIME_IMS_REGISTRATION): 922 self.dut.log.error("Never received IMS registered, aborting") 923 return False 924 time_values['ims_registered'] = time.time() 925 self.dut.log.info( 926 "Ims Registered After %ss", 927 time_values['ims_registered'] - time_values['iwlan_rat']) 928 929 if not wait_for_wfc_enabled(self.log, self.dut, 930 MAX_WAIT_TIME_WFC_ENABLED): 931 self.dut.log.error("Never received WFC feature, aborting") 932 return False 933 934 time_values['wfc_enabled'] = time.time() 935 self.dut.log.info( 936 "Wifi Calling Feature Enabled After %ss", 937 time_values['wfc_enabled'] - time_values['ims_registered']) 938 939 set_wfc_mode(self.log, self.dut, WFC_MODE_DISABLED) 940 941 wait_for_not_network_rat( 942 self.log, 943 self.dut, 944 RAT_FAMILY_WLAN, 945 voice_or_data=NETWORK_SERVICE_DATA) 946 947 self.dut.log.info("\n\n------------------summary-----------------") 948 self.dut.log.info("WiFi Enabled After %.2f seconds", 949 time_values['wifi_enabled'] - time_values['start']) 950 self.dut.log.info( 951 "WiFi Connected After %.2f seconds", 952 time_values['wifi_connected'] - time_values['wifi_enabled']) 953 self.dut.log.info( 954 "WifiData After %.2f s", 955 time_values['wifi_data'] - time_values['wifi_connected']) 956 self.dut.log.info("iWLAN Reported After %.2f seconds", 957 time_values['iwlan_rat'] - time_values['wifi_data']) 958 self.dut.log.info( 959 "Ims Registered After %.2f seconds", 960 time_values['ims_registered'] - time_values['iwlan_rat']) 961 self.dut.log.info( 962 "Wifi Calling Feature Enabled After %.2f seconds", 963 time_values['wfc_enabled'] - time_values['ims_registered']) 964 self.dut.log.info("\n\n") 965 return True 966 967 @test_tracker_info(uuid="135301ea-6d00-4233-98fd-cda706d61eb2") 968 @TelephonyBaseTest.tel_test_wrap 969 def test_ims_factory_reset(self): 970 """Test VOLTE and WFC reset to factory default. 971 972 Steps: 973 1. Setup VoLTE, WFC, APM is various mode. 974 2. Call IMS factory reset. 975 3. Verify VoLTE and WFC are back to factory default. 976 4. Verify VoLTE, WFC Voice call can be made successful if enabled. 977 978 """ 979 result = True 980 wifi_enabled = True 981 for airplane_mode in (True, False): 982 for volte_enabled in (True, False): 983 for wfc_enabled in (True, False): 984 if wfc_enabled: 985 wfc_modes = self.dut_wfc_modes 986 else: 987 wfc_modes = [None] 988 for wfc_mode in wfc_modes: 989 if not self.change_ims_setting( 990 airplane_mode, wifi_enabled, volte_enabled, 991 wfc_enabled, wfc_mode): 992 result = False 993 self.dut.log.info("Call IMS factory reset") 994 self.dut.droid.imsFactoryReset() 995 if not self.verify_default_ims_setting(): 996 result = False 997 return result 998 999 @test_tracker_info(uuid="ce60740f-4d8e-4013-a7cf-65589e8a0893") 1000 @TelephonyBaseTest.tel_test_wrap 1001 def test_factory_reset_by_fastboot_wipe(self): 1002 """Verify the network setting after factory reset by wipe. 1003 1004 Steps: 1005 1. Config VoLTE, WFC, APM, data_roamingn, mobile_data, 1006 preferred_network_mode to non-factory default. 1007 2. Factory reset by fastboot wipe. 1008 3. Verify network configs back to factory default. 1009 1010 """ 1011 self.dut.log.info("Set VoLTE off, WFC wifi preferred, APM on") 1012 toggle_volte(self.log, self.dut, False) 1013 revert_default_telephony_setting(self.dut) 1014 self.change_ims_setting(True, True, False, True, 1015 WFC_MODE_WIFI_PREFERRED) 1016 self.dut.log.info("Wipe in fastboot") 1017 fastboot_wipe(self.dut) 1018 return verify_default_telephony_setting( 1019 self.dut) and (self.verify_default_ims_setting()) 1020