1#!/usr/bin/env python3.4 2# 3# Copyright 2016 - 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 epdg RF shield box related tests. 18""" 19 20import time 21from acts.test_decorators import test_tracker_info 22from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest 23from acts.test_utils.tel.tel_atten_utils import set_rssi 24from acts.test_utils.tel.tel_defines import CELL_WEAK_RSSI_VALUE 25from acts.test_utils.tel.tel_defines import INVALID_WIFI_RSSI 26from acts.test_utils.tel.tel_defines import MAX_RSSI_RESERVED_VALUE 27from acts.test_utils.tel.tel_defines import MIN_RSSI_RESERVED_VALUE 28from acts.test_utils.tel.tel_defines import WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON 29from acts.test_utils.tel.tel_defines import WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED 30from acts.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED 31from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED 32from acts.test_utils.tel.tel_defines import WIFI_WEAK_RSSI_VALUE 33from acts.test_utils.tel.tel_defines import SignalStrengthContainer 34from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state 35from acts.test_utils.tel.tel_test_utils import ensure_phone_subscription 36from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected 37from acts.test_utils.tel.tel_test_utils import set_wfc_mode 38from acts.test_utils.tel.tel_test_utils import wait_for_wifi_data_connection 39from acts.test_utils.tel.tel_test_utils import verify_internet_connection 40from TelLiveConnectivityMonitorBaseTest import TelLiveConnectivityMonitorBaseTest 41 42# Attenuator name 43ATTEN_NAME_FOR_WIFI_2G = 'wifi0' 44ATTEN_NAME_FOR_WIFI_5G = 'wifi1' 45ATTEN_NAME_FOR_CELL_3G = 'cell0' 46ATTEN_NAME_FOR_CELL_4G = 'cell1' 47 48# WiFi RSSI settings for ROVE_IN test 49WIFI_RSSI_FOR_ROVE_IN_TEST_PHONE_ROVE_IN = -60 50WIFI_RSSI_FOR_ROVE_IN_TEST_PHONE_NOT_ROVE_IN = -70 51 52# WiFi RSSI settings for ROVE_OUT test 53WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_INITIAL_STATE = -60 54WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_NOT_ROVE_OUT = -70 55WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_ROVE_OUT = -90 56 57# WiFi RSSI settings for HAND_IN test 58WIFI_RSSI_FOR_HAND_IN_TEST_PHONE_NOT_HAND_IN = -80 59WIFI_RSSI_FOR_HAND_IN_TEST_PHONE_HAND_IN = -50 60 61# WiFi RSSI settings for HAND_OUT test 62WIFI_RSSI_FOR_HAND_OUT_TEST_PHONE_NOT_HAND_OUT = -60 63WIFI_RSSI_FOR_HAND_OUT_TEST_PHONE_HAND_OUT = -85 64 65CS_LINK_LOST = "Radio Link Lost" 66IMS_LINK_LOST = "Media Timeout" 67 68 69class TelLiveConnectivityMonitorMobilityTest( 70 TelLiveConnectivityMonitorBaseTest): 71 def __init__(self, controllers): 72 TelLiveConnectivityMonitorBaseTest.__init__(self, controllers) 73 74 self.attens = {} 75 for atten in self.attenuators: 76 self.attens[atten.path] = atten 77 atten.set_atten(atten.get_max_atten()) # Default all attens to max 78 79 def setup_class(self): 80 TelLiveConnectivityMonitorBaseTest.setup_class(self) 81 82 # Do WiFi RSSI calibration. 83 self.set_wifi_strong_cell_strong() 84 85 if not ensure_phone_subscription(self.log, self.dut): 86 self.dut.log.error("Failed to find valid subscription") 87 return False 88 if not ensure_wifi_connected(self.log, self.dut, 89 self.wifi_network_ssid, 90 self.wifi_network_pass): 91 self.dut.log.error("Fail to connect to WiFI") 92 return False 93 if (not wait_for_wifi_data_connection(self.log, self.dut, True) 94 or not verify_internet_connection(self.log, self.dut)): 95 self.dut.log.error("No Data on Wifi") 96 return False 97 98 # Delay WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED after WiFi 99 # Connected to make sure WiFi RSSI reported value is correct. 100 time.sleep(WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED) 101 # Turn On Screen and delay WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON 102 # then get WiFi RSSI to avoid WiFi RSSI report -127(invalid value). 103 self.dut.droid.wakeUpNow() 104 time.sleep(WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON) 105 106 setattr(self, "wifi_rssi_with_no_atten", 107 self.dut.droid.wifiGetConnectionInfo()['rssi']) 108 if self.wifi_rssi_with_no_atten == INVALID_WIFI_RSSI: 109 self.dut.log.error( 110 "Initial WiFi RSSI calibration value is wrong: -127.") 111 return False 112 self.dut.log.info("WiFi RSSI calibration info: atten=0, RSSI=%s", 113 self.wifi_rssi_with_no_atten) 114 ensure_phones_default_state(self.log, [self.dut]) 115 116 # Do Cellular RSSI calibration. 117 setattr(self, "cell_rssi_with_no_atten", 118 self.dut.droid.telephonyGetSignalStrength()[ 119 SignalStrengthContainer.SIGNAL_STRENGTH_LTE_DBM]) 120 self.dut.log.info("Cellular RSSI calibration info: atten=0, RSSI=%s", 121 self.cell_rssi_with_no_atten) 122 return True 123 124 def teardown_class(self): 125 self.dut.droid.telephonyStopTrackingSignalStrengthChange() 126 super().teardown_class() 127 return True 128 129 def setup_test(self): 130 super().setup_test() 131 self.set_wifi_strong_cell_strong() 132 return True 133 134 def teardown_test(self): 135 super().teardown_test() 136 self.set_wifi_strong_cell_strong() 137 return True 138 139 def set_wifi_strong_cell_strong(self): 140 self.log.info("--->Setting WiFi strong cell strong<---") 141 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 142 MAX_RSSI_RESERVED_VALUE) 143 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 144 MAX_RSSI_RESERVED_VALUE) 145 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 146 MAX_RSSI_RESERVED_VALUE) 147 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 148 MAX_RSSI_RESERVED_VALUE) 149 return True 150 151 def set_wifi_strong_cell_weak(self): 152 self.log.info("--->Setting WiFi strong cell weak<---") 153 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 154 MAX_RSSI_RESERVED_VALUE) 155 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 156 MAX_RSSI_RESERVED_VALUE) 157 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 158 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 159 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 160 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 161 return True 162 163 def set_wifi_strong_cell_absent(self): 164 self.log.info("--->Setting WiFi strong cell absent<---") 165 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 166 MAX_RSSI_RESERVED_VALUE) 167 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 168 MAX_RSSI_RESERVED_VALUE) 169 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 170 MIN_RSSI_RESERVED_VALUE) 171 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 172 MIN_RSSI_RESERVED_VALUE) 173 return True 174 175 def set_wifi_weak_cell_strong(self): 176 self.log.info("--->Setting WiFi weak cell strong<---") 177 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 178 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 179 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 180 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 181 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 182 MAX_RSSI_RESERVED_VALUE) 183 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 184 MAX_RSSI_RESERVED_VALUE) 185 return True 186 187 def set_wifi_weak_cell_weak(self): 188 self.log.info("--->Setting WiFi weak cell weak<---") 189 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 190 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 191 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 192 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 193 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 194 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 195 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 196 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 197 return True 198 199 def set_wifi_weak_cell_absent(self): 200 self.log.info("--->Setting WiFi weak cell absent<---") 201 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 202 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 203 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 204 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE) 205 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 206 MIN_RSSI_RESERVED_VALUE) 207 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 208 MIN_RSSI_RESERVED_VALUE) 209 return True 210 211 def set_wifi_absent_cell_strong(self): 212 self.log.info("--->Setting WiFi absent cell strong<---") 213 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 214 MIN_RSSI_RESERVED_VALUE) 215 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 216 MIN_RSSI_RESERVED_VALUE) 217 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 218 MAX_RSSI_RESERVED_VALUE) 219 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 220 MAX_RSSI_RESERVED_VALUE) 221 return True 222 223 def set_wifi_absent_cell_weak(self): 224 self.log.info("--->Setting WiFi absent cell weak<---") 225 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 226 MIN_RSSI_RESERVED_VALUE) 227 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 228 MIN_RSSI_RESERVED_VALUE) 229 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 230 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 231 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 232 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE) 233 return True 234 235 def set_wifi_absent_cell_absent(self): 236 self.log.info("--->Setting WiFi absent cell absent<---") 237 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, 238 MIN_RSSI_RESERVED_VALUE) 239 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, 240 MIN_RSSI_RESERVED_VALUE) 241 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, 242 MIN_RSSI_RESERVED_VALUE) 243 set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, 244 MIN_RSSI_RESERVED_VALUE) 245 return True 246 247 """ Tests Begin """ 248 249 @test_tracker_info(uuid="d474725b-c34d-4686-8b5f-c0d4733a0cc1") 250 @TelephonyBaseTest.tel_test_wrap 251 def test_volte_call_drop_by_poor_signals(self): 252 return self.forced_call_drop_test( 253 setup="volte", 254 triggers=[ 255 "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong" 256 ], 257 expected_drop_reason=IMS_LINK_LOST) 258 259 @test_tracker_info(uuid="7f62f1c0-6d9e-4e7e-812f-b1c60d2f4b41") 260 @TelephonyBaseTest.tel_test_wrap 261 def test_csfb_call_drop_by_poor_signals(self): 262 return self.forced_call_drop_test( 263 setup="csfb", 264 triggers=[ 265 "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong" 266 ], 267 expected_drop_reason=CS_LINK_LOST) 268 269 @test_tracker_info(uuid="8d1c8c44-be54-43ec-892c-c3f41855c7c8") 270 @TelephonyBaseTest.tel_test_wrap 271 def test_3g_call_drop_by_poor_signal(self): 272 return self.forced_call_drop_test( 273 setup="3g", 274 triggers=[ 275 "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong" 276 ], 277 expected_drop_reason=CS_LINK_LOST) 278 279 @test_tracker_info(uuid="66e01cb3-3bea-4d08-9ab4-7f22790c57b1") 280 @TelephonyBaseTest.tel_test_wrap 281 def test_wfc_apm_call_drop_by_poor_signal(self): 282 return self.forced_call_drop_test( 283 setup="wfc_apm", 284 triggers=[ 285 "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong" 286 ], 287 expected_drop_reason=IMS_LINK_LOST) 288 289 @test_tracker_info(uuid="669e9f97-6931-403a-a13d-4f179bd4406f") 290 @TelephonyBaseTest.tel_test_wrap 291 def test_wfc_non_apm_call_drop_by_poor_signal(self): 292 self.setup_wfc_non_apm() 293 return self.forced_call_drop_test( 294 setup="wfc_non_apm", 295 triggers=[ 296 "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong" 297 ], 298 expected_drop_reason=IMS_LINK_LOST) 299 300 @test_tracker_info(uuid="c7619788-2357-4c49-a754-50ffaf433d59") 301 @TelephonyBaseTest.tel_test_wrap 302 def test_volte_handover_to_wfc_then_hangup(self): 303 self.connect_to_wifi() 304 self.enable_wfc() 305 set_wfc_mode(self.log, self.dut, WFC_MODE_CELLULAR_PREFERRED) 306 self.setup_volte() 307 return self.call_setup_and_connectivity_monitor_checking( 308 setup="volte", 309 handover="wfc_non_apm", 310 triggers=["set_wifi_strong_cell_absent"], 311 expected_drop_reason=None, 312 expected_trouble=None, 313 expected_action=None) 314 315 @test_tracker_info(uuid="c10c8406-6a0c-4039-b2ce-3782593774f2") 316 @TelephonyBaseTest.tel_test_wrap 317 def test_csfb_handover_to_wfc_then_hangup(self): 318 self.setup_csfb() 319 self.connect_to_wifi() 320 self.enable_wfc() 321 self.set_wifi_absent_cell_strong() 322 return self.call_setup_and_connectivity_monitor_checking( 323 setup="csfb", 324 handover="wfc_non_apm", 325 triggers=[ 326 "set_wifi_strong_cell_strong", "connect_to_wifi", 327 "is_wfc_enabled", "set_wifi_strong_cell_absent" 328 ], 329 expected_drop_reason=None, 330 expected_trouble=None, 331 expected_action=None) 332 333 @test_tracker_info(uuid="fcb62ea3-3a39-407c-90d8-21896c981ef4") 334 @TelephonyBaseTest.tel_test_wrap 335 def test_3g_handover_to_wfc_then_hangup(self): 336 self.setup_3g() 337 self.connect_to_wifi() 338 self.enable_wfc() 339 set_wfc_mode(self.log, self.dut, WFC_MODE_CELLULAR_PREFERRED) 340 if not self.is_wfc_enabled(): 341 self.dut.log.error("WFC is not enabled") 342 return False 343 return self.call_setup_and_connectivity_monitor_checking( 344 setup="3g", 345 handover="wfc_non_apm", 346 triggers=["set_wifi_strong_cell_absent"], 347 expected_drop_reason=None, 348 expected_trouble=None, 349 expected_action=None) 350 351 @test_tracker_info(uuid="85f32373-d1b2-4763-8812-d7ff43a9b3e6") 352 @TelephonyBaseTest.tel_test_wrap 353 def test_wfc_handover_to_volte_then_hangup(self): 354 self.setup_volte() 355 self.connect_to_wifi() 356 self.enable_wfc() 357 self.set_wifi_strong_cell_absent() 358 if not self.is_wfc_enabled(): 359 self.dut.log.error("WFC is not enabled") 360 return False 361 return self.call_setup_and_connectivity_monitor_checking( 362 setup="wfc_non_apm", 363 handover="volte", 364 triggers=[ 365 "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong" 366 ], 367 expected_drop_reason=None, 368 expected_trouble=None, 369 expected_action=None) 370 371 @test_tracker_info(uuid="c3dee2ba-1637-4382-97a7-ec9ca795f3dc") 372 @TelephonyBaseTest.tel_test_wrap 373 def test_wfc_handover_to_volte_then_call_drop(self): 374 self.setup_volte() 375 self.connect_to_wifi() 376 self.enable_wfc() 377 self.set_wifi_strong_cell_absent() 378 if not self.is_wfc_enabled(): 379 self.dut.log.error("WFC is not enabled") 380 return False 381 return self.call_drop_test( 382 setup="wfc_non_apm", 383 handover="volte", 384 count=1, 385 triggers=[ 386 "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong", 387 "set_wifi_absent_cell_absent" 388 ], 389 expected_drop_reason=IMS_LINK_LOST, 390 expected_trouble=None, 391 expected_action=None) 392 393 @test_tracker_info(uuid="90bc318a-b8ba-45c9-8d8f-e642eeb00460") 394 @TelephonyBaseTest.tel_test_wrap 395 def test_wfc_handover_to_csfb_then_call_drop(self): 396 self.setup_csfb() 397 self.set_wifi_strong_cell_absent() 398 self.connect_to_wifi() 399 self.enable_wfc() 400 if not self.is_wfc_enabled(): 401 self.dut.log.error("WFC is not enabled") 402 return False 403 return self.call_drop_test( 404 setup="wfc_apm", 405 handover="csfb", 406 count=1, 407 triggers=[ 408 "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong", 409 "set_wifi_absent_cell_absent" 410 ], 411 expected_drop_reason=CS_LINK_LOST, 412 expected_trouble=None, 413 expected_action=None) 414 415 @test_tracker_info(uuid="0557709e-6d82-4c66-b622-6f36db8bdcc2") 416 @TelephonyBaseTest.tel_test_wrap 417 def test_volte_handover_to_wfc_then_call_drop(self): 418 self.setup_volte() 419 self.connect_to_wifi() 420 self.enable_wfc() 421 self.set_wifi_absent_cell_strong() 422 return self.call_drop_test( 423 setup="volte", 424 handover="wfc_non_apm", 425 count=1, 426 triggers=[ 427 "set_wifi_strong_cell_strong", "connect_to_wifi", 428 "is_wfc_enabled", "set_wifi_strong_cell_absent", 429 "set_wifi_absent_cell_absent" 430 ], 431 expected_drop_reason=IMS_LINK_LOST, 432 expected_trouble=None, 433 expected_action=None) 434 435 @test_tracker_info(uuid="3453ed14-8227-4050-96f1-e9ac7973df3b") 436 @TelephonyBaseTest.tel_test_wrap 437 def test_csfb_handover_to_wfc_then_call_drop(self): 438 self.setup_csfb() 439 self.connect_to_wifi() 440 self.enable_wfc() 441 self.set_wifi_absent_cell_strong() 442 return self.call_drop_test( 443 setup="csfb", 444 handover="wfc", 445 count=1, 446 triggers=[ 447 "set_wifi_strong_cell_strong", "connect_to_wifi", 448 "is_wfc_enabled", "set_wifi_strong_cell_absent", 449 "set_wifi_absent_cell_absent" 450 ], 451 expected_drop_reason=IMS_LINK_LOST, 452 expected_trouble=None, 453 expected_action=None) 454 455 @test_tracker_info(uuid="68cc68db-c60b-4c4a-a974-8e0d1fa211f2") 456 @TelephonyBaseTest.tel_test_wrap 457 def test_3g_handover_to_wfc_then_call_drop(self): 458 self.setup_3g() 459 self.connect_to_wifi() 460 self.enable_wfc() 461 self.set_wifi_absent_cell_strong() 462 return self.call_drop_test( 463 setup="3g", 464 handover="wfc_non_apm", 465 count=1, 466 triggers=[ 467 "set_wifi_strong_cell_strong", "connect_to_wifi", 468 "is_wfc_enabled", "set_wifi_strong_cell_absent", 469 "set_wifi_absent_cell_absent" 470 ], 471 expected_drop_reason=IMS_LINK_LOST, 472 expected_trouble=None, 473 expected_action=None) 474 475 476""" Tests End """ 477