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 Telephony Pre Check In Sanity 18""" 19 20import collections 21import random 22import time 23import os 24 25from acts import signals 26from acts.test_decorators import test_tracker_info 27from acts.test_utils.tel.tel_subscription_utils import \ 28 get_subid_from_slot_index 29from acts.test_utils.bt.bt_test_utils import bluetooth_enabled_check 30from acts.test_utils.bt.bt_test_utils import disable_bluetooth 31from acts.test_utils.bt.bt_test_utils import pair_pri_to_sec 32from acts.test_utils.tel.tel_subscription_utils import set_subid_for_data 33from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest 34from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_ORIGINATED 35from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_TERMINATED 36from acts.test_utils.tel.tel_defines import DATA_STATE_CONNECTED 37from acts.test_utils.tel.tel_defines import GEN_2G 38from acts.test_utils.tel.tel_defines import GEN_3G 39from acts.test_utils.tel.tel_defines import GEN_4G 40from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_DATA 41from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_VOICE 42from acts.test_utils.tel.tel_defines import RAT_2G 43from acts.test_utils.tel.tel_defines import RAT_3G 44from acts.test_utils.tel.tel_defines import RAT_4G 45from acts.test_utils.tel.tel_defines import RAT_FAMILY_LTE 46from acts.test_utils.tel.tel_defines import SIM1_SLOT_INDEX 47from acts.test_utils.tel.tel_defines import SIM2_SLOT_INDEX 48from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_NW_SELECTION 49from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK 50from acts.test_utils.tel.tel_defines import MAX_WAIT_TIME_WIFI_CONNECTION 51from acts.test_utils.tel.tel_defines import TETHERING_MODE_WIFI 52from acts.test_utils.tel.tel_defines import WAIT_TIME_AFTER_REBOOT 53from acts.test_utils.tel.tel_defines import WAIT_TIME_ANDROID_STATE_SETTLING 54from acts.test_utils.tel.tel_defines import WAIT_TIME_BETWEEN_REG_AND_CALL 55from acts.test_utils.tel.tel_defines import \ 56 WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING 57from acts.test_utils.tel.tel_defines import WAIT_TIME_TETHERING_AFTER_REBOOT 58from acts.test_utils.tel.tel_data_utils import airplane_mode_test 59from acts.test_utils.tel.tel_data_utils import change_data_sim_and_verify_data 60from acts.test_utils.tel.tel_data_utils import data_connectivity_single_bearer 61from acts.test_utils.tel.tel_data_utils import tethering_check_internet_connection 62from acts.test_utils.tel.tel_data_utils import wifi_cell_switching 63from acts.test_utils.tel.tel_data_utils import wifi_tethering_cleanup 64from acts.test_utils.tel.tel_data_utils import wifi_tethering_setup_teardown 65from acts.test_utils.tel.tel_test_utils import active_file_download_test 66from acts.test_utils.tel.tel_test_utils import call_setup_teardown 67from acts.test_utils.tel.tel_test_utils import check_is_wifi_connected 68from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state 69from acts.test_utils.tel.tel_test_utils import ensure_phones_idle 70from acts.test_utils.tel.tel_test_utils import ensure_network_generation 71from acts.test_utils.tel.tel_test_utils import \ 72 ensure_network_generation_for_subscription 73from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected 74from acts.test_utils.tel.tel_test_utils import get_mobile_data_usage 75from acts.test_utils.tel.tel_test_utils import get_slot_index_from_subid 76from acts.test_utils.tel.tel_test_utils import get_network_rat_for_subscription 77from acts.test_utils.tel.tel_test_utils import hangup_call 78from acts.test_utils.tel.tel_test_utils import multithread_func 79from acts.test_utils.tel.tel_test_utils import remove_mobile_data_usage_limit 80from acts.test_utils.tel.tel_test_utils import set_call_state_listen_level 81from acts.test_utils.tel.tel_test_utils import set_mobile_data_usage_limit 82from acts.test_utils.tel.tel_test_utils import setup_sim 83from acts.test_utils.tel.tel_test_utils import stop_wifi_tethering 84from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode 85from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode_by_adb 86from acts.test_utils.tel.tel_test_utils import toggle_volte 87from acts.test_utils.tel.tel_test_utils import verify_internet_connection 88from acts.test_utils.tel.tel_test_utils import verify_http_connection 89from acts.test_utils.tel.tel_test_utils import verify_incall_state 90from acts.test_utils.tel.tel_test_utils import wait_for_cell_data_connection 91from acts.test_utils.tel.tel_test_utils import wait_for_network_rat 92from acts.test_utils.tel.tel_test_utils import \ 93 wait_for_voice_attach_for_subscription 94from acts.test_utils.tel.tel_test_utils import \ 95 wait_for_data_attach_for_subscription 96from acts.test_utils.tel.tel_test_utils import wait_for_wifi_data_connection 97from acts.test_utils.tel.tel_test_utils import wifi_reset 98from acts.test_utils.tel.tel_test_utils import wait_for_state 99from acts.test_utils.tel.tel_test_utils import wifi_toggle_state 100from acts.test_utils.tel.tel_test_utils import WIFI_CONFIG_APBAND_2G 101from acts.test_utils.tel.tel_test_utils import WIFI_CONFIG_APBAND_5G 102from acts.test_utils.tel.tel_test_utils import WIFI_SSID_KEY 103from acts.test_utils.tel.tel_test_utils import bring_up_sl4a 104from acts.test_utils.tel.tel_test_utils import check_data_stall_detection 105from acts.test_utils.tel.tel_test_utils import check_network_validation_fail 106from acts.test_utils.tel.tel_test_utils import break_internet_except_sl4a_port 107from acts.test_utils.tel.tel_test_utils import resume_internet_with_sl4a_port 108from acts.test_utils.tel.tel_test_utils import get_device_epoch_time 109from acts.test_utils.tel.tel_test_utils import check_data_stall_recovery 110from acts.test_utils.tel.tel_test_utils import \ 111 test_data_browsing_success_using_sl4a 112from acts.test_utils.tel.tel_test_utils import \ 113 test_data_browsing_failure_using_sl4a 114from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g 115from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_csfb 116from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_volte 117from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_3g 118from acts.test_utils.tel.tel_voice_utils import phone_setup_csfb 119from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_general 120from acts.test_utils.tel.tel_voice_utils import phone_setup_volte 121from acts.utils import disable_doze 122from acts.utils import enable_doze 123from acts.utils import rand_ascii_str 124from acts.utils import adb_shell_ping 125 126 127class TelLiveDataTest(TelephonyBaseTest): 128 def __init__(self, controllers): 129 TelephonyBaseTest.__init__(self, controllers) 130 131 self.stress_test_number = self.get_stress_test_number() 132 self.provider = self.android_devices[0] 133 self.clients = self.android_devices[1:] 134 135 def setup_test(self): 136 TelephonyBaseTest.setup_test(self) 137 self.number_of_devices = 1 138 139 def teardown_class(self): 140 TelephonyBaseTest.teardown_class(self) 141 142 @test_tracker_info(uuid="1b0354f3-8668-4a28-90a5-3b3d2b2756d3") 143 @TelephonyBaseTest.tel_test_wrap 144 def test_airplane_mode(self): 145 """ Test airplane mode basic on Phone and Live SIM. 146 147 Ensure phone attach, data on, WiFi off and verify Internet. 148 Turn on airplane mode to make sure detach. 149 Turn off airplane mode to make sure attach. 150 Verify Internet connection. 151 152 Returns: 153 True if pass; False if fail. 154 """ 155 return airplane_mode_test(self.log, self.android_devices[0]) 156 157 @test_tracker_info(uuid="47430f01-583f-4efb-923a-285a51b75d50") 158 @TelephonyBaseTest.tel_test_wrap 159 def test_lte_wifi_switching(self): 160 """Test data connection network switching when phone camped on LTE. 161 162 Ensure phone is camped on LTE 163 Ensure WiFi can connect to live network, 164 Airplane mode is off, data connection is on, WiFi is on. 165 Turn off WiFi, verify data is on cell and browse to google.com is OK. 166 Turn on WiFi, verify data is on WiFi and browse to google.com is OK. 167 Turn off WiFi, verify data is on cell and browse to google.com is OK. 168 169 Returns: 170 True if pass. 171 """ 172 return wifi_cell_switching(self.log, self.android_devices[0], 173 self.wifi_network_ssid, 174 self.wifi_network_pass, GEN_4G) 175 176 @test_tracker_info(uuid="98d9f8c9-0532-49b6-85a3-5246b8314755") 177 @TelephonyBaseTest.tel_test_wrap 178 def test_lte_wifi_switching_stress(self): 179 """LTE WiFi Switching Data Connection Check 180 181 Same steps as test_lte_wifi_switching with stress testing 182 183 Returns: 184 True if pass. 185 """ 186 MINIMUM_SUCCESS_RATE = .95 187 success_count = 0 188 fail_count = 0 189 self.stress_test_number = 10 190 191 for i in range(1, self.stress_test_number + 1): 192 ensure_phones_default_state( 193 self.log, [self.android_devices[0]]) 194 195 if wifi_cell_switching(self.log, self.android_devices[0], 196 self.wifi_network_ssid, 197 self.wifi_network_pass, GEN_4G): 198 success_count += 1 199 result_str = "Succeeded" 200 else: 201 fail_count += 1 202 result_str = "Failed" 203 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 204 i, result_str, success_count, self.stress_test_number)) 205 206 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 207 success_count, fail_count, 208 str(100 * success_count / (success_count + fail_count)))) 209 if success_count / ( 210 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 211 return True 212 else: 213 return False 214 215 @test_tracker_info(uuid="8a836cf1-600b-4cf3-abfe-2e3da5c11396") 216 @TelephonyBaseTest.tel_test_wrap 217 def test_wcdma_wifi_switching(self): 218 """Test data connection network switching when phone camped on WCDMA. 219 220 Ensure phone is camped on WCDMA 221 Ensure WiFi can connect to live network, 222 Airplane mode is off, data connection is on, WiFi is on. 223 Turn off WiFi, verify data is on cell and browse to google.com is OK. 224 Turn on WiFi, verify data is on WiFi and browse to google.com is OK. 225 Turn off WiFi, verify data is on cell and browse to google.com is OK. 226 227 Returns: 228 True if pass. 229 """ 230 return wifi_cell_switching(self.log, self.android_devices[0], 231 self.wifi_network_ssid, 232 self.wifi_network_pass, GEN_3G) 233 234 @test_tracker_info(uuid="c016f2e8-0af6-42e4-a3cb-a2b7d8b564d0") 235 @TelephonyBaseTest.tel_test_wrap 236 def test_gsm_wifi_switching(self): 237 """Test data connection network switching when phone camped on GSM. 238 239 Ensure phone is camped on GSM 240 Ensure WiFi can connect to live network,, 241 Airplane mode is off, data connection is on, WiFi is on. 242 Turn off WiFi, verify data is on cell and browse to google.com is OK. 243 Turn on WiFi, verify data is on WiFi and browse to google.com is OK. 244 Turn off WiFi, verify data is on cell and browse to google.com is OK. 245 246 Returns: 247 True if pass. 248 """ 249 return wifi_cell_switching(self.log, self.android_devices[0], 250 self.wifi_network_ssid, 251 self.wifi_network_pass, GEN_2G) 252 253 @test_tracker_info(uuid="78d6b258-82d4-47b4-8723-3b3a15412d2d") 254 @TelephonyBaseTest.tel_test_wrap 255 def test_lte_multi_bearer(self): 256 """Test LTE data connection before call and in call. (VoLTE call) 257 258 259 Turn off airplane mode, disable WiFi, enable Cellular Data. 260 Make sure phone in LTE, verify Internet. 261 Initiate a voice call. verify Internet. 262 Disable Cellular Data, verify Internet is inaccessible. 263 Enable Cellular Data, verify Internet. 264 Hangup Voice Call, verify Internet. 265 266 Returns: 267 True if success. 268 False if failed. 269 """ 270 if not phone_setup_volte(self.log, self.android_devices[0]): 271 self.log.error("Failed to setup VoLTE") 272 return False 273 return self._test_data_connectivity_multi_bearer(GEN_4G) 274 275 @test_tracker_info(uuid="5c9cb076-0c26-4517-95dc-2ec4974e8ce3") 276 @TelephonyBaseTest.tel_test_wrap 277 def test_wcdma_multi_bearer(self): 278 """Test WCDMA data connection before call and in call. 279 280 Turn off airplane mode, disable WiFi, enable Cellular Data. 281 Make sure phone in WCDMA, verify Internet. 282 Initiate a voice call. verify Internet. 283 Disable Cellular Data, verify Internet is inaccessible. 284 Enable Cellular Data, verify Internet. 285 Hangup Voice Call, verify Internet. 286 287 Returns: 288 True if success. 289 False if failed. 290 """ 291 292 return self._test_data_connectivity_multi_bearer(GEN_3G) 293 294 @test_tracker_info(uuid="314bbf1c-073f-4d48-9817-a6e14f96f3c0") 295 @TelephonyBaseTest.tel_test_wrap 296 def test_gsm_multi_bearer_mo(self): 297 """Test gsm data connection before call and in call. 298 299 Turn off airplane mode, disable WiFi, enable Cellular Data. 300 Make sure phone in GSM, verify Internet. 301 Initiate a MO voice call. Verify there is no Internet during call. 302 Hangup Voice Call, verify Internet. 303 304 Returns: 305 True if success. 306 False if failed. 307 """ 308 309 return self._test_data_connectivity_multi_bearer( 310 GEN_2G, False, DIRECTION_MOBILE_ORIGINATED) 311 312 @test_tracker_info(uuid="549271ff-1034-4d02-8d92-b9d1b2bb912e") 313 @TelephonyBaseTest.tel_test_wrap 314 def test_gsm_multi_bearer_mt(self): 315 """Test gsm data connection before call and in call. 316 317 Turn off airplane mode, disable WiFi, enable Cellular Data. 318 Make sure phone in GSM, verify Internet. 319 Initiate a MT voice call. Verify there is no Internet during call. 320 Hangup Voice Call, verify Internet. 321 322 Returns: 323 True if success. 324 False if failed. 325 """ 326 327 return self._test_data_connectivity_multi_bearer( 328 GEN_2G, False, DIRECTION_MOBILE_TERMINATED) 329 330 @test_tracker_info(uuid="111de471-559a-4bc3-9d3e-de18f098c162") 331 @TelephonyBaseTest.tel_test_wrap 332 def test_wcdma_multi_bearer_stress(self): 333 """Stress Test WCDMA data connection before call and in call. 334 335 This is a stress test for "test_wcdma_multi_bearer". 336 Default MINIMUM_SUCCESS_RATE is set to 95%. 337 338 Returns: 339 True stress pass rate is higher than MINIMUM_SUCCESS_RATE. 340 False otherwise. 341 """ 342 MINIMUM_SUCCESS_RATE = .95 343 success_count = 0 344 fail_count = 0 345 self.number_of_devices = 2 346 347 for i in range(1, self.stress_test_number + 1): 348 349 ensure_phones_default_state( 350 self.log, [self.android_devices[0], self.android_devices[1]]) 351 352 if self.test_wcdma_multi_bearer(): 353 success_count += 1 354 result_str = "Succeeded" 355 else: 356 fail_count += 1 357 result_str = "Failed" 358 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 359 i, result_str, success_count, self.stress_test_number)) 360 361 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 362 success_count, fail_count, 363 str(100 * success_count / (success_count + fail_count)))) 364 if success_count / ( 365 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 366 return True 367 else: 368 return False 369 370 @test_tracker_info(uuid="c7f14ba7-7ac3-45d2-b391-5ed5c4b0e70b") 371 @TelephonyBaseTest.tel_test_wrap 372 def test_lte_multi_bearer_stress(self): 373 """Stress Test LTE data connection before call and in call. (VoLTE call) 374 375 This is a stress test for "test_lte_multi_bearer". 376 Default MINIMUM_SUCCESS_RATE is set to 95%. 377 378 Returns: 379 True stress pass rate is higher than MINIMUM_SUCCESS_RATE. 380 False otherwise. 381 """ 382 ads = self.android_devices 383 MINIMUM_SUCCESS_RATE = .95 384 success_count = 0 385 fail_count = 0 386 387 for i in range(1, self.stress_test_number + 1): 388 389 ensure_phones_default_state( 390 self.log, [self.android_devices[0], self.android_devices[1]]) 391 392 if self.test_lte_multi_bearer(): 393 success_count += 1 394 result_str = "Succeeded" 395 else: 396 fail_count += 1 397 result_str = "Failed" 398 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 399 i, result_str, success_count, self.stress_test_number)) 400 401 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 402 success_count, fail_count, 403 str(100 * success_count / (success_count + fail_count)))) 404 if success_count / ( 405 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 406 return True 407 else: 408 return False 409 410 def _test_data_connectivity_multi_bearer( 411 self, 412 nw_gen, 413 simultaneous_voice_data=True, 414 call_direction=DIRECTION_MOBILE_ORIGINATED): 415 """Test data connection before call and in call. 416 417 Turn off airplane mode, disable WiFi, enable Cellular Data. 418 Make sure phone in <nw_gen>, verify Internet. 419 Initiate a voice call. 420 if simultaneous_voice_data is True, then: 421 Verify Internet. 422 Disable Cellular Data, verify Internet is inaccessible. 423 Enable Cellular Data, verify Internet. 424 if simultaneous_voice_data is False, then: 425 Verify Internet is not available during voice call. 426 Hangup Voice Call, verify Internet. 427 428 Returns: 429 True if success. 430 False if failed. 431 """ 432 433 class _LocalException(Exception): 434 pass 435 436 self.number_of_devices = 2 437 ad_list = [self.android_devices[0], self.android_devices[1]] 438 ensure_phones_idle(self.log, ad_list) 439 440 if not ensure_network_generation_for_subscription( 441 self.log, self.android_devices[0], self.android_devices[0] 442 .droid.subscriptionGetDefaultDataSubId(), nw_gen, 443 MAX_WAIT_TIME_NW_SELECTION, NETWORK_SERVICE_DATA): 444 self.log.error("Device failed to reselect in {}s.".format( 445 MAX_WAIT_TIME_NW_SELECTION)) 446 return False 447 448 if not wait_for_voice_attach_for_subscription( 449 self.log, self.android_devices[0], self.android_devices[0] 450 .droid.subscriptionGetDefaultVoiceSubId(), 451 MAX_WAIT_TIME_NW_SELECTION): 452 return False 453 454 self.log.info("Step1 WiFi is Off, Data is on Cell.") 455 toggle_airplane_mode(self.log, self.android_devices[0], False) 456 wifi_toggle_state(self.log, self.android_devices[0], False) 457 self.android_devices[0].droid.telephonyToggleDataConnection(True) 458 if (not wait_for_cell_data_connection(self.log, 459 self.android_devices[0], True) 460 or not verify_internet_connection(self.log, 461 self.android_devices[0])): 462 self.log.error("Data not available on cell") 463 return False 464 465 self.log.info( 466 "b/69431819, sending data to increase NW threshold limit") 467 adb_shell_ping( 468 self.android_devices[0], count=30, timeout=60, loss_tolerance=100) 469 470 try: 471 self.log.info("Step2 Initiate call and accept.") 472 if call_direction == DIRECTION_MOBILE_ORIGINATED: 473 ad_caller = self.android_devices[0] 474 ad_callee = self.android_devices[1] 475 else: 476 ad_caller = self.android_devices[1] 477 ad_callee = self.android_devices[0] 478 if not call_setup_teardown(self.log, ad_caller, ad_callee, None, 479 None, None): 480 self.log.error( 481 "Failed to Establish {} Voice Call".format(call_direction)) 482 return False 483 if simultaneous_voice_data: 484 self.log.info("Step3 Verify internet.") 485 time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING) 486 if not verify_internet_connection( 487 self.log, self.android_devices[0], retries=3): 488 raise _LocalException("Internet Inaccessible when Enabled") 489 490 self.log.info("Step4 Turn off data and verify not connected.") 491 self.android_devices[0].droid.telephonyToggleDataConnection( 492 False) 493 if not wait_for_cell_data_connection( 494 self.log, self.android_devices[0], False): 495 raise _LocalException("Failed to Disable Cellular Data") 496 497 if verify_internet_connection(self.log, 498 self.android_devices[0]): 499 raise _LocalException("Internet Accessible when Disabled") 500 501 self.log.info("Step5 Re-enable data.") 502 self.android_devices[0].droid.telephonyToggleDataConnection( 503 True) 504 if not wait_for_cell_data_connection( 505 self.log, self.android_devices[0], True): 506 raise _LocalException("Failed to Re-Enable Cellular Data") 507 if not verify_internet_connection( 508 self.log, self.android_devices[0], retries=3): 509 raise _LocalException("Internet Inaccessible when Enabled") 510 else: 511 self.log.info("Step3 Verify no Internet and skip step 4-5.") 512 if verify_internet_connection( 513 self.log, self.android_devices[0], retries=0): 514 raise _LocalException("Internet Accessible.") 515 516 self.log.info("Step6 Verify phones still in call and Hang up.") 517 if not verify_incall_state( 518 self.log, 519 [self.android_devices[0], self.android_devices[1]], True): 520 return False 521 if not hangup_call(self.log, self.android_devices[0]): 522 self.log.error("Failed to hang up call") 523 return False 524 if not verify_internet_connection( 525 self.log, self.android_devices[0], retries=3): 526 raise _LocalException("Internet Inaccessible when Enabled") 527 528 except _LocalException as e: 529 self.log.error(str(e)) 530 try: 531 hangup_call(self.log, self.android_devices[0]) 532 self.android_devices[0].droid.telephonyToggleDataConnection( 533 True) 534 except Exception: 535 pass 536 return False 537 538 return True 539 540 @test_tracker_info(uuid="dcb9bdc6-dbe2-47e1-9c2d-6f37c529d366") 541 @TelephonyBaseTest.tel_test_wrap 542 def test_2g(self): 543 """Test data connection in 2G. 544 545 Turn off airplane mode, disable WiFi, enable Cellular Data. 546 Ensure phone data generation is 2G. 547 Verify Internet. 548 Disable Cellular Data, verify Internet is inaccessible. 549 Enable Cellular Data, verify Internet. 550 551 Returns: 552 True if success. 553 False if failed. 554 """ 555 wifi_reset(self.log, self.android_devices[0]) 556 wifi_toggle_state(self.log, self.android_devices[0], False) 557 return data_connectivity_single_bearer(self.log, 558 self.android_devices[0], RAT_2G) 559 560 @test_tracker_info(uuid="84197a49-d73f-44ce-8b9e-9479e5c4dfdc") 561 @TelephonyBaseTest.tel_test_wrap 562 def test_2g_wifi_not_associated(self): 563 """Test data connection in 2G. 564 565 Turn off airplane mode, enable WiFi (but not connected), enable Cellular Data. 566 Ensure phone data generation is 2G. 567 Verify Internet. 568 Disable Cellular Data, verify Internet is inaccessible. 569 Enable Cellular Data, verify Internet. 570 571 Returns: 572 True if success. 573 False if failed. 574 """ 575 wifi_reset(self.log, self.android_devices[0]) 576 wifi_toggle_state(self.log, self.android_devices[0], False) 577 wifi_toggle_state(self.log, self.android_devices[0], True) 578 return data_connectivity_single_bearer(self.log, 579 self.android_devices[0], RAT_2G) 580 581 @test_tracker_info(uuid="97067ebb-130a-4fcb-8e6b-f4ec5874828f") 582 @TelephonyBaseTest.tel_test_wrap 583 def test_3g(self): 584 """Test data connection in 3G. 585 586 Turn off airplane mode, disable WiFi, enable Cellular Data. 587 Ensure phone data generation is 3G. 588 Verify Internet. 589 Disable Cellular Data, verify Internet is inaccessible. 590 Enable Cellular Data, verify Internet. 591 592 Returns: 593 True if success. 594 False if failed. 595 """ 596 wifi_reset(self.log, self.android_devices[0]) 597 wifi_toggle_state(self.log, self.android_devices[0], False) 598 return data_connectivity_single_bearer(self.log, 599 self.android_devices[0], RAT_3G) 600 601 @test_tracker_info(uuid="ffe2a392-95b8-4a4d-8a6f-bfa846c3462f") 602 @TelephonyBaseTest.tel_test_wrap 603 def test_3g_wifi_not_associated(self): 604 """Test data connection in 3G. 605 606 Turn off airplane mode, enable WiFi (but not connected), enable Cellular Data. 607 Ensure phone data generation is 3G. 608 Verify Internet. 609 Disable Cellular Data, verify Internet is inaccessible. 610 Enable Cellular Data, verify Internet. 611 612 Returns: 613 True if success. 614 False if failed. 615 """ 616 wifi_reset(self.log, self.android_devices[0]) 617 wifi_toggle_state(self.log, self.android_devices[0], False) 618 wifi_toggle_state(self.log, self.android_devices[0], True) 619 return data_connectivity_single_bearer(self.log, 620 self.android_devices[0], RAT_3G) 621 622 @test_tracker_info(uuid="9c2f459f-1aac-4c68-818b-8698e8124c8b") 623 @TelephonyBaseTest.tel_test_wrap 624 def test_4g(self): 625 """Test data connection in 4g. 626 627 Turn off airplane mode, disable WiFi, enable Cellular Data. 628 Ensure phone data generation is 4g. 629 Verify Internet. 630 Disable Cellular Data, verify Internet is inaccessible. 631 Enable Cellular Data, verify Internet. 632 633 Returns: 634 True if success. 635 False if failed. 636 """ 637 wifi_reset(self.log, self.android_devices[0]) 638 wifi_toggle_state(self.log, self.android_devices[0], False) 639 return data_connectivity_single_bearer(self.log, 640 self.android_devices[0], RAT_4G) 641 642 @test_tracker_info(uuid="015a39a1-15ac-4b76-962b-d7d82d52d425") 643 @TelephonyBaseTest.tel_test_wrap 644 def test_4g_wifi_not_associated(self): 645 """Test data connection in 4g. 646 647 Turn off airplane mode, enable WiFi (but not connected), enable Cellular Data. 648 Ensure phone data generation is 4g. 649 Verify Internet. 650 Disable Cellular Data, verify Internet is inaccessible. 651 Enable Cellular Data, verify Internet. 652 653 Returns: 654 True if success. 655 False if failed. 656 """ 657 wifi_reset(self.log, self.android_devices[0]) 658 wifi_toggle_state(self.log, self.android_devices[0], False) 659 wifi_toggle_state(self.log, self.android_devices[0], True) 660 return data_connectivity_single_bearer(self.log, 661 self.android_devices[0], RAT_4G) 662 663 @test_tracker_info(uuid="44f47b64-f8bc-4a17-9195-42dcca0806bb") 664 @TelephonyBaseTest.tel_test_wrap 665 def test_3g_stress(self): 666 """Stress Test data connection in 3G. 667 668 This is a stress test for "test_3g". 669 Default MINIMUM_SUCCESS_RATE is set to 95%. 670 671 Returns: 672 True stress pass rate is higher than MINIMUM_SUCCESS_RATE. 673 False otherwise. 674 """ 675 MINIMUM_SUCCESS_RATE = .95 676 success_count = 0 677 fail_count = 0 678 679 for i in range(1, self.stress_test_number + 1): 680 681 ensure_phones_default_state(self.log, [self.android_devices[0]]) 682 wifi_reset(self.log, self.android_devices[0]) 683 wifi_toggle_state(self.log, self.android_devices[0], False) 684 685 if data_connectivity_single_bearer( 686 self.log, self.android_devices[0], RAT_3G): 687 success_count += 1 688 result_str = "Succeeded" 689 else: 690 fail_count += 1 691 result_str = "Failed" 692 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 693 i, result_str, success_count, self.stress_test_number)) 694 695 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 696 success_count, fail_count, 697 str(100 * success_count / (success_count + fail_count)))) 698 if success_count / ( 699 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 700 return True 701 else: 702 return False 703 704 @test_tracker_info(uuid="c8876388-0441-4a51-81e6-ac2cb358a531") 705 @TelephonyBaseTest.tel_test_wrap 706 def test_4g_stress(self): 707 """Stress Test data connection in 4g. 708 709 This is a stress test for "test_4g". 710 Default MINIMUM_SUCCESS_RATE is set to 95%. 711 712 Returns: 713 True stress pass rate is higher than MINIMUM_SUCCESS_RATE. 714 False otherwise. 715 """ 716 MINIMUM_SUCCESS_RATE = .95 717 success_count = 0 718 fail_count = 0 719 self.number_of_devices = 1 720 721 for i in range(1, self.stress_test_number + 1): 722 723 ensure_phones_default_state(self.log, [self.android_devices[0]]) 724 wifi_reset(self.log, self.android_devices[0]) 725 wifi_toggle_state(self.log, self.android_devices[0], False) 726 727 if data_connectivity_single_bearer( 728 self.log, self.android_devices[0], RAT_4G): 729 success_count += 1 730 result_str = "Succeeded" 731 else: 732 fail_count += 1 733 result_str = "Failed" 734 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 735 i, result_str, success_count, self.stress_test_number)) 736 737 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 738 success_count, fail_count, 739 str(100 * success_count / (success_count + fail_count)))) 740 if success_count / ( 741 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 742 return True 743 else: 744 return False 745 746 def _test_setup_tethering(self, network_generation=None): 747 """Pre setup steps for WiFi tethering test. 748 749 Ensure all ads are idle. 750 Ensure tethering provider: 751 turn off APM, turn off WiFI, turn on Data. 752 have Internet connection, no active ongoing WiFi tethering. 753 754 Returns: 755 True if success. 756 False if failed. 757 """ 758 self.number_of_devices = None 759 ensure_phones_idle(self.log, self.android_devices) 760 wifi_toggle_state(self.log, self.provider, False) 761 if network_generation: 762 if not ensure_network_generation( 763 self.log, self.provider, network_generation, 764 MAX_WAIT_TIME_NW_SELECTION, NETWORK_SERVICE_DATA): 765 self.provider.log.error("Provider failed to connect to %s.", 766 network_generation) 767 return False 768 769 self.provider.log.info( 770 "Set provider Airplane Off, Wifi Off, Bluetooth Off, Data On.") 771 toggle_airplane_mode(self.log, self.provider, False) 772 self.provider.droid.telephonyToggleDataConnection(True) 773 self.provider.log.info("Provider disable wifi") 774 wifi_toggle_state(self.log, self.provider, False) 775 # Turn off active SoftAP if any. 776 if self.provider.droid.wifiIsApEnabled(): 777 self.provider.log.info("Disable provider wifi tethering") 778 stop_wifi_tethering(self.log, self.provider) 779 self.provider.log.info("Provider disable bluetooth") 780 disable_bluetooth(self.provider.droid) 781 time.sleep(10) 782 783 for ad in self.clients: 784 ad.log.info( 785 "Set client Airplane Off, Wifi Off, Bluetooth Off, Data Off.") 786 toggle_airplane_mode(self.log, ad, False) 787 ad.log.info("Client disable data") 788 ad.droid.telephonyToggleDataConnection(False) 789 ad.log.info("Client disable bluetooth") 790 disable_bluetooth(ad.droid) 791 ad.log.info("Client disable wifi") 792 wifi_toggle_state(self.log, ad, False) 793 if not wait_for_cell_data_connection(self.log, self.provider, True): 794 self.provider.log.error( 795 "Provider failed to enable data connection.") 796 return False 797 798 time.sleep(10) 799 self.log.info("Verify internet") 800 if not self._test_internet_connection( 801 client_status=False, provider_status=True): 802 self.log.error("Internet connection check failed before tethering") 803 return False 804 805 return True 806 807 def _enable_bluetooth_tethering_connection(self, provider, clients): 808 for ad in [self.provider] + self.clients: 809 if not bluetooth_enabled_check(ad): 810 ad.log.info("Bluetooth is not enabled") 811 return False 812 else: 813 ad.log.info("Bluetooth is enabled") 814 815 for client in self.clients: 816 if not (pair_pri_to_sec(self.provider, client)): 817 client.log.error("Client failed to pair with provider") 818 return False 819 else: 820 client.log.info("Client paired with provider") 821 self.provider.log.info("Provider enabling bluetooth tethering") 822 try: 823 provider.droid.bluetoothPanSetBluetoothTethering(True) 824 except Exception as e: 825 provider.log.error( 826 "Faile to enable provider Bluetooth tethering with %s", e) 827 return False 828 829 if wait_for_state(provider.droid.bluetoothPanIsTetheringOn, True): 830 provider.log.info("Provider Bluetooth tethering is enabled.") 831 else: 832 provider.log.error( 833 "Failed to enable provider Bluetooth tethering.") 834 provider.log.error("bluetoothPanIsTetheringOn = %s", 835 provider.droid.bluetoothPanIsTetheringOn()) 836 return False 837 time.sleep(5) 838 for client in clients: 839 client.droid.bluetoothConnectBonded( 840 provider.droid.bluetoothGetLocalAddress()) 841 time.sleep(20) 842 return True 843 844 def _test_internet_connection(self, 845 client_status=True, 846 provider_status=True): 847 client_retry = 10 if client_status else 1 848 for client in self.clients: 849 if not verify_internet_connection( 850 self.log, 851 client, 852 retries=client_retry, 853 expected_state=client_status): 854 client.log.error("client internet connection state is not %s", 855 client_status) 856 return False 857 else: 858 client.log.info("client internet connection state is %s", 859 client_status) 860 if not verify_internet_connection( 861 self.log, self.provider, retries=3, 862 expected_state=provider_status): 863 self.provider.log.error( 864 "provider internet connection is not %s" % provider_status) 865 return False 866 else: 867 self.provider.log.info( 868 "provider internet connection is %s" % provider_status) 869 return True 870 871 def _verify_bluetooth_tethering_connection(self, 872 change_rat=None, 873 toggle_data=False, 874 toggle_tethering=False, 875 voice_call=False, 876 toggle_bluetooth=True): 877 """Setups up a bluetooth tethering conenction between two android devices. 878 879 Returns: 880 True if PAN connection and verification is successful, 881 false if unsuccessful. 882 """ 883 if not self._enable_bluetooth_tethering_connection( 884 self.provider, self.clients): 885 return False 886 if not self._test_internet_connection(): 887 self.log.error("Internet connection check failed") 888 return False 889 if voice_call: 890 self.log.info("====== Voice call test =====") 891 for caller, callee in [(self.provider, self.clients[0]), 892 (self.clients[0], self.provider)]: 893 if not call_setup_teardown( 894 self.log, caller, callee, ad_hangup=None): 895 self.log.error("Setup Call Failed.") 896 hangup_call(self.log, caller) 897 return False 898 self.log.info("Verify data.") 899 if not verify_internet_connection( 900 self.log, self.clients[0], retries=1): 901 self.clients[0].log.warning( 902 "client internet connection state is not on") 903 else: 904 self.clients[0].log.info( 905 "client internet connection state is on") 906 hangup_call(self.log, caller) 907 if not verify_internet_connection( 908 self.log, self.clients[0], retries=1): 909 self.clients[0].log.warning( 910 "client internet connection state is not on") 911 return False 912 else: 913 self.clients[0].log.info( 914 "client internet connection state is on") 915 if toggle_tethering: 916 self.log.info("====== Toggling provider bluetooth tethering =====") 917 self.provider.log.info("Disable bluetooth tethering") 918 self.provider.droid.bluetoothPanSetBluetoothTethering(False) 919 if not self._test_internet_connection(False, True): 920 self.log.error( 921 "Internet connection check failed after disable tethering") 922 return False 923 self.provider.log.info("Enable bluetooth tethering") 924 if not self._enable_bluetooth_tethering_connection( 925 self.provider, self.clients): 926 self.provider.log.error( 927 "Fail to re-enable bluetooth tethering") 928 return False 929 if not self._test_internet_connection(True, True): 930 self.log.error( 931 "Internet connection check failed after enable tethering") 932 return False 933 if toggle_bluetooth: 934 self.log.info("====== Toggling provider bluetooth =====") 935 self.provider.log.info("Disable provider bluetooth") 936 disable_bluetooth(self.provider.droid) 937 time.sleep(10) 938 if not self._test_internet_connection(False, True): 939 self.log.error( 940 "Internet connection check failed after disable bluetooth") 941 return False 942 if not self._enable_bluetooth_tethering_connection( 943 self.provider, self.clients): 944 self.provider.log.error( 945 "Fail to re-enable bluetooth tethering") 946 return False 947 if not self._test_internet_connection(True, True): 948 self.log.error( 949 "Internet connection check failed after enable bluetooth") 950 return False 951 if toggle_data: 952 self.log.info("===== Toggling provider data connection =====") 953 self.provider.log.info("Disable provider data connection") 954 self.provider.droid.telephonyToggleDataConnection(False) 955 time.sleep(10) 956 if not self._test_internet_connection(False, False): 957 return False 958 self.provider.log.info("Enable provider data connection") 959 self.provider.droid.telephonyToggleDataConnection(True) 960 if not wait_for_cell_data_connection(self.log, self.provider, 961 True): 962 self.provider.log.error( 963 "Provider failed to enable data connection.") 964 return False 965 if not self._test_internet_connection(True, True): 966 self.log.error( 967 "Internet connection check failed after enable data") 968 return False 969 if change_rat: 970 self.log.info("===== Change provider RAT to %s =====", change_rat) 971 if not ensure_network_generation( 972 self.log, 973 self.provider, 974 change_rat, 975 voice_or_data=NETWORK_SERVICE_DATA, 976 toggle_apm_after_setting=False): 977 self.provider.log.error("Provider failed to reselect to %s.", 978 change_rat) 979 return False 980 if not self._test_internet_connection(True, True): 981 self.log.error( 982 "Internet connection check failed after RAT change to %s", 983 change_rat) 984 return False 985 return True 986 987 @test_tracker_info(uuid="2d945656-22f7-4610-9a84-40ce04d603a4") 988 @TelephonyBaseTest.tel_test_wrap 989 def test_tethering_4g_to_bluetooth(self): 990 """Bluetooth Tethering test: LTE to Bluetooth Tethering 991 992 1. DUT in LTE mode, idle. 993 2. DUT start Bluetooth Tethering 994 3. PhoneB disable data, connect to DUT's softAP 995 4. Verify Internet access on DUT and PhoneB 996 5. Toggle provider bluetooth connection 997 6. Verify Internet access on DUT and PhoneB 998 999 Returns: 1000 True if success. 1001 False if failed. 1002 """ 1003 if not self._test_setup_tethering(RAT_4G): 1004 self.log.error("Verify 4G Internet access failed.") 1005 return False 1006 1007 return self._verify_bluetooth_tethering_connection() 1008 1009 @test_tracker_info(uuid="8d2ae56b-c2c1-4c32-9b8e-5044007b5b90") 1010 @TelephonyBaseTest.tel_test_wrap 1011 def test_tethering_4g_to_bluetooth_with_voice_call(self): 1012 """Bluetooth Tethering test: LTE to Bluetooth Tethering 1013 1014 1. DUT in LTE mode, idle. 1015 2. DUT start Bluetooth Tethering 1016 3. PhoneB disable data, connect to DUT's softAP 1017 4. Verify Internet access on DUT and PhoneB 1018 5. Verify provider and client are able to make or receive phone call 1019 6. Verify Internet access on DUT and PhoneB 1020 1021 Returns: 1022 True if success. 1023 False if failed. 1024 """ 1025 if not self._test_setup_tethering(RAT_4G): 1026 self.log.error("Verify 4G Internet access failed.") 1027 return False 1028 1029 return self._verify_bluetooth_tethering_connection( 1030 toggle_tethering=False, toggle_bluetooth=False, voice_call=True) 1031 1032 @test_tracker_info(uuid="b4617727-fa83-4451-89d7-7e574c0a0938") 1033 @TelephonyBaseTest.tel_test_wrap 1034 def test_tethering_4g_to_bluetooth_toggle_data(self): 1035 """Bluetooth Tethering test: LTE to Bluetooth Tethering 1036 1037 1. DUT in LTE mode, idle. 1038 2. DUT start Bluetooth Tethering 1039 3. PhoneB disable data, connect to DUT's softAP 1040 4. Verify Internet access on DUT and PhoneB 1041 5. Toggle provider data connection 1042 6. Verify Internet access on DUT and PhoneB 1043 1044 Returns: 1045 True if success. 1046 False if failed. 1047 """ 1048 if not self._test_setup_tethering(RAT_4G): 1049 self.log.error("Verify 4G Internet access failed.") 1050 return False 1051 1052 return self._verify_bluetooth_tethering_connection( 1053 toggle_tethering=False, toggle_bluetooth=False, toggle_data=True) 1054 1055 @test_tracker_info(uuid="6a0f6001-609d-41f2-ad09-c8ae19f73ac8") 1056 @TelephonyBaseTest.tel_test_wrap 1057 def test_tethering_4g_to_bluetooth_toggle_tethering(self): 1058 """Bluetooth Tethering test: LTE to Bluetooth Tethering 1059 1060 1. DUT in LTE mode, idle. 1061 2. DUT start Bluetooth Tethering 1062 3. PhoneB disable data, connect to DUT's softAP 1063 4. Verify Internet access on DUT and PhoneB 1064 5. Toggle provider bluetooth tethering 1065 6. Verify Internet access on DUT and PhoneB 1066 1067 Returns: 1068 True if success. 1069 False if failed. 1070 """ 1071 if not self._test_setup_tethering(RAT_4G): 1072 self.log.error("Verify 4G Internet access failed.") 1073 return False 1074 1075 return self._verify_bluetooth_tethering_connection( 1076 toggle_tethering=True, toggle_bluetooth=False, toggle_data=False) 1077 1078 @test_tracker_info(uuid="b1abc1ac-8018-4956-a17e-bf2ceaf264ea") 1079 @TelephonyBaseTest.tel_test_wrap 1080 def test_tethering_3g_to_bluetooth(self): 1081 """Bluetooth Tethering test: 3G to Bluetoothing Tethering 1082 1083 1. DUT in 3G mode, idle. 1084 2. DUT start bluetooth Tethering 1085 3. PhoneB disable data, connect to DUT's softAP 1086 4. Verify Internet access on DUT and PhoneB 1087 5. Toggle provider bluetooth connection 1088 6. Verify Internet access on DUT and PhoneB 1089 1090 Returns: 1091 True if success. 1092 False if failed. 1093 """ 1094 if not self._test_setup_tethering(RAT_3G): 1095 self.log.error("Verify 3G Internet access failed.") 1096 return False 1097 1098 return self._verify_bluetooth_tethering_connection() 1099 1100 @test_tracker_info(uuid="69793745-0c49-4cef-9879-d372e3a3f4c7") 1101 @TelephonyBaseTest.tel_test_wrap 1102 def test_tethering_3g_to_bluetooth_with_voice_call(self): 1103 """Bluetooth Tethering test: 3G to Bluetooth Tethering 1104 1105 1. DUT in 3G mode, idle. 1106 2. DUT start Bluetooth Tethering 1107 3. PhoneB disable data, connect to DUT's softAP 1108 4. Verify Internet access on DUT and PhoneB 1109 5. Verify provider and client are able to make or receive phone call 1110 6. Verify Internet access on DUT and PhoneB 1111 1112 Returns: 1113 True if success. 1114 False if failed. 1115 """ 1116 if not self._test_setup_tethering(RAT_3G): 1117 self.log.error("Verify 3G Internet access failed.") 1118 return False 1119 1120 return self._verify_bluetooth_tethering_connection( 1121 toggle_tethering=False, toggle_bluetooth=False, voice_call=True) 1122 1123 @test_tracker_info(uuid="4275ee69-dfdf-4f47-82c5-4224fceee761") 1124 @TelephonyBaseTest.tel_test_wrap 1125 def test_tethering_3g_to_bluetooth_toggle_data(self): 1126 """Bluetooth Tethering test: 3G to Bluetoothing Tethering 1127 1128 1. DUT in 3G mode, idle. 1129 2. DUT start bluetooth Tethering 1130 3. PhoneB disable data, connect to DUT's softAP 1131 4. Verify Internet access on DUT and PhoneB 1132 5. Toggle provider data connection 1133 6. Verify Internet access on DUT and PhoneB 1134 1135 Returns: 1136 True if success. 1137 False if failed. 1138 """ 1139 if not self._test_setup_tethering(RAT_3G): 1140 self.log.error("Verify 3G Internet access failed.") 1141 return False 1142 1143 return self._verify_bluetooth_tethering_connection( 1144 toggle_tethering=False, toggle_bluetooth=False, toggle_data=True) 1145 1146 @test_tracker_info(uuid="db0e0f27-1a4f-4301-832d-b66415e289f3") 1147 @TelephonyBaseTest.tel_test_wrap 1148 def test_tethering_2g_to_bluetooth(self): 1149 """Bluetooth Tethering test: 2G to Bluetooth Tethering 1150 1151 1. DUT in 2G mode, idle. 1152 2. DUT start bluetooth Tethering 1153 3. PhoneB disable data, connect to DUT's softAP 1154 4. Verify Internet access on DUT and PhoneB 1155 5. Toggle provider bluetooth connection 1156 6. Verify Internet access on DUT and PhoneB 1157 1158 Returns: 1159 True if success. 1160 False if failed. 1161 """ 1162 for a in self.android_devices: 1163 a.adb.shell("setprop persist.bluetooth.btsnoopenable true") 1164 if not toggle_airplane_mode_by_adb(self.log, a, True): 1165 self.log.error("Failed to toggle airplane mode on") 1166 return False 1167 if not toggle_airplane_mode_by_adb(self.log, a, False): 1168 self.log.error("Failed to toggle airplane mode off") 1169 return False 1170 1171 if not self._test_setup_tethering(RAT_2G): 1172 self.log.error("Verify 3G Internet access failed.") 1173 return False 1174 1175 return self._verify_bluetooth_tethering_connection() 1176 1177 @test_tracker_info(uuid="584e9fa5-a38e-47cd-aa33-fcf8d72c423e") 1178 @TelephonyBaseTest.tel_test_wrap 1179 def test_tethering_2g_to_bluetooth_with_voice_call(self): 1180 """Bluetooth Tethering test: 2G to Bluetooth Tethering 1181 1182 1. DUT in 2G mode, idle. 1183 2. DUT start Bluetooth Tethering 1184 3. PhoneB disable data, connect to DUT's softAP 1185 4. Verify Internet access on DUT and PhoneB 1186 5. Verify provider and client are able to make or receive phone call 1187 6. Verify Internet access on DUT and PhoneB 1188 1189 Returns: 1190 True if success. 1191 False if failed. 1192 """ 1193 if not self._test_setup_tethering(RAT_2G): 1194 self.log.error("Verify 2G Internet access failed.") 1195 return False 1196 1197 return self._verify_bluetooth_tethering_connection( 1198 toggle_tethering=False, toggle_bluetooth=False, voice_call=True) 1199 1200 @test_tracker_info(uuid="be3e74f9-3dc8-4b72-8a33-32bff0868a44") 1201 @TelephonyBaseTest.tel_test_wrap 1202 def test_tethering_2g_to_bluetooth_toggle_data(self): 1203 """Bluetooth Tethering test: 2G to Bluetooth Tethering 1204 1205 1. DUT in 2G mode, idle. 1206 2. DUT start Bluetooth Tethering 1207 3. PhoneB disable data, connect to DUT's softAP 1208 4. Verify Internet access on DUT and PhoneB 1209 5. Toggle provider data connection 1210 6. Verify Internet access on DUT and PhoneB 1211 1212 Returns: 1213 True if success. 1214 False if failed. 1215 """ 1216 if not self._test_setup_tethering(RAT_2G): 1217 self.log.error("Verify 4G Internet access failed.") 1218 return False 1219 1220 return self._verify_bluetooth_tethering_connection( 1221 toggle_tethering=False, toggle_bluetooth=False, toggle_data=True) 1222 1223 @test_tracker_info(uuid="4a106549-0bfa-4c8f-8e66-edec93fabadf") 1224 @TelephonyBaseTest.tel_test_wrap 1225 def test_tethering_rat_from_4g_to_3g_bluetooth(self): 1226 """Bluetooth Tethering test: 2G to Bluetooth Tethering 1227 1228 1. DUT in 4G mode, idle. 1229 2. DUT start bluetooth Tethering 1230 3. PhoneB disable data, connect to DUT's softAP 1231 4. Verify Internet access on DUT and PhoneB 1232 5. Change provider RAT to 3G 1233 6. Verify Internet access on DUT and PhoneB 1234 1235 Returns: 1236 True if success. 1237 False if failed. 1238 """ 1239 if not self._test_setup_tethering(RAT_4G): 1240 self.log.error("Verify 3G Internet access failed.") 1241 return False 1242 1243 return self._verify_bluetooth_tethering_connection( 1244 toggle_tethering=False, 1245 toggle_bluetooth=False, 1246 toggle_data=False, 1247 change_rat=RAT_3G) 1248 1249 @test_tracker_info(uuid="eaa5b61b-f054-437f-ae82-8d80f6487785") 1250 @TelephonyBaseTest.tel_test_wrap 1251 def test_tethering_rat_from_4g_to_2g_bluetooth(self): 1252 """Bluetooth Tethering test: 2G to Bluetooth Tethering 1253 1254 1. DUT in 4G mode, idle. 1255 2. DUT start bluetooth Tethering 1256 3. PhoneB disable data, connect to DUT's softAP 1257 4. Verify Internet access on DUT and PhoneB 1258 5. Change provider RAT to 2G 1259 6. Verify Internet access on DUT and PhoneB 1260 1261 Returns: 1262 True if success. 1263 False if failed. 1264 """ 1265 if not self._test_setup_tethering(RAT_4G): 1266 self.log.error("Verify 3G Internet access failed.") 1267 return False 1268 1269 return self._verify_bluetooth_tethering_connection( 1270 toggle_tethering=False, 1271 toggle_bluetooth=False, 1272 toggle_data=False, 1273 change_rat=RAT_2G) 1274 1275 @test_tracker_info(uuid="912a11a3-14b3-4928-885f-cea69f14a571") 1276 @TelephonyBaseTest.tel_test_wrap 1277 def test_tethering_4g_to_2gwifi(self): 1278 """WiFi Tethering test: LTE to WiFI 2.4G Tethering 1279 1280 1. DUT in LTE mode, idle. 1281 2. DUT start 2.4G WiFi Tethering 1282 3. PhoneB disable data, connect to DUT's softAP 1283 4. Verify Internet access on DUT and PhoneB 1284 1285 Returns: 1286 True if success. 1287 False if failed. 1288 """ 1289 if not self._test_setup_tethering(RAT_4G): 1290 self.log.error("Verify 4G Internet access failed.") 1291 return False 1292 1293 return wifi_tethering_setup_teardown( 1294 self.log, 1295 self.provider, 1296 self.clients, 1297 ap_band=WIFI_CONFIG_APBAND_2G, 1298 check_interval=10, 1299 check_iteration=10) 1300 1301 @test_tracker_info(uuid="743e3998-d39f-42b9-b11f-009dcee34f3f") 1302 @TelephonyBaseTest.tel_test_wrap 1303 def test_tethering_4g_to_5gwifi(self): 1304 """WiFi Tethering test: LTE to WiFI 5G Tethering 1305 1306 1. DUT in LTE mode, idle. 1307 2. DUT start 5G WiFi Tethering 1308 3. PhoneB disable data, connect to DUT's softAP 1309 4. Verify Internet access on DUT and PhoneB 1310 1311 Returns: 1312 True if success. 1313 False if failed. 1314 """ 1315 if not self._test_setup_tethering(RAT_4G): 1316 self.log.error("Verify 4G Internet access failed.") 1317 return False 1318 1319 return wifi_tethering_setup_teardown( 1320 self.log, 1321 self.provider, 1322 self.clients, 1323 ap_band=WIFI_CONFIG_APBAND_5G, 1324 check_interval=10, 1325 check_iteration=10) 1326 1327 @test_tracker_info(uuid="c1a16464-3800-40d3-ba63-35db784e0383") 1328 @TelephonyBaseTest.tel_test_wrap 1329 def test_tethering_default_to_5gwifi(self): 1330 """WiFi Tethering test: Default to WiFI 5G Tethering 1331 1332 1. DUT in default mode, idle. 1333 2. DUT start 5G WiFi Tethering 1334 3. PhoneB disable data, connect to DUT's softAP 1335 4. Verify Internet access on DUT and PhoneB 1336 5. True: Stop 1337 False: Change DUT to next device and repeat until find the device 1338 with tethering capability 1339 1340 Returns: 1341 True if success. 1342 False if no device has tethering capability. 1343 """ 1344 num = len(self.android_devices) 1345 for idx, ad in enumerate(self.android_devices): 1346 self.provider = self.android_devices[idx] 1347 self.clients = self.android_devices[: 1348 idx] + self.android_devices[idx 1349 + 1350 1:] 1351 ensure_phones_default_state(self.log, self.android_devices) 1352 wifi_toggle_state(self.log, self.provider, False) 1353 1354 if not self._test_setup_tethering(None): 1355 self.provider.log.error("Data connection check failed.") 1356 continue 1357 1358 if not self.provider.droid.carrierConfigIsTetheringModeAllowed( 1359 TETHERING_MODE_WIFI, 1360 MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK): 1361 self.provider.log.info("Tethering is not entitled") 1362 continue 1363 1364 if wifi_tethering_setup_teardown( 1365 self.log, 1366 self.provider, [self.clients[0]], 1367 ap_band=WIFI_CONFIG_APBAND_5G, 1368 check_interval=10, 1369 check_iteration=10): 1370 self.android_devices = [self.provider] + self.clients 1371 return True 1372 elif idx == num - 1: 1373 self.log.error("Tethering is not working on all devices") 1374 return False 1375 self.log.error( 1376 "Failed to enable tethering on any device in this testbed") 1377 raise signals.TestAbortClass( 1378 "Tethering is not available on all devices in this testbed") 1379 1380 @test_tracker_info(uuid="c9a570b0-838c-44ba-991c-f1ddeee21f3c") 1381 @TelephonyBaseTest.tel_test_wrap 1382 def test_tethering_default_to_2gwifi(self): 1383 """WiFi Tethering test: Default to WiFI 2G Tethering 1384 1385 1. DUT in default mode, idle. 1386 2. DUT start 2G WiFi Tethering 1387 3. PhoneB disable data, connect to DUT's softAP 1388 4. Verify Internet access on DUT and PhoneB 1389 5. True: Stop 1390 False: Change DUT to next device and repeat until find the device 1391 with tethering capability 1392 1393 Returns: 1394 True if success. 1395 False if no device has tethering capability. 1396 """ 1397 num = len(self.android_devices) 1398 for idx, ad in enumerate(self.android_devices): 1399 self.provider = self.android_devices[idx] 1400 self.clients = self.android_devices[: 1401 idx] + self.android_devices[idx 1402 + 1403 1:] 1404 ensure_phones_default_state(self.log, self.android_devices) 1405 wifi_toggle_state(self.log, self.provider, False) 1406 1407 if not self._test_setup_tethering(None): 1408 self.provider.log.error("Data connection check failed.") 1409 continue 1410 1411 if not self.provider.droid.carrierConfigIsTetheringModeAllowed( 1412 TETHERING_MODE_WIFI, 1413 MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK): 1414 self.provider.log.info("Tethering is not entitled") 1415 continue 1416 1417 if wifi_tethering_setup_teardown( 1418 self.log, 1419 self.provider, [self.clients[0]], 1420 ap_band=WIFI_CONFIG_APBAND_2G, 1421 check_interval=10, 1422 check_iteration=10): 1423 self.android_devices = [self.provider] + self.clients 1424 return True 1425 elif idx == num - 1: 1426 self.log.error("Tethering is not working on all devices") 1427 return False 1428 self.log.error( 1429 "Failed to enable tethering on any device in this testbed") 1430 raise signals.TestAbortClass( 1431 "Tethering is not available on all devices in this testbed") 1432 1433 @test_tracker_info(uuid="59be8d68-f05b-4448-8584-de971174fd81") 1434 @TelephonyBaseTest.tel_test_wrap 1435 def test_tethering_3g_to_2gwifi(self): 1436 """WiFi Tethering test: 3G to WiFI 2.4G Tethering 1437 1438 1. DUT in 3G mode, idle. 1439 2. DUT start 2.4G WiFi Tethering 1440 3. PhoneB disable data, connect to DUT's softAP 1441 4. Verify Internet access on DUT and PhoneB 1442 1443 Returns: 1444 True if success. 1445 False if failed. 1446 """ 1447 if not self._test_setup_tethering(RAT_3G): 1448 self.log.error("Verify 3G Internet access failed.") 1449 return False 1450 1451 return wifi_tethering_setup_teardown( 1452 self.log, 1453 self.provider, 1454 self.clients, 1455 ap_band=WIFI_CONFIG_APBAND_2G, 1456 check_interval=10, 1457 check_iteration=10) 1458 1459 @test_tracker_info(uuid="1be6b741-92e8-4ee1-9f59-e7f9f369b065") 1460 @TelephonyBaseTest.tel_test_wrap 1461 def test_tethering_3g_to_5gwifi(self): 1462 """WiFi Tethering test: 3G to WiFI 5G Tethering 1463 1464 1. DUT in 3G mode, idle. 1465 2. DUT start 5G WiFi Tethering 1466 3. PhoneB disable data, connect to DUT's softAP 1467 4. Verify Internet access on DUT and PhoneB 1468 1469 Returns: 1470 True if success. 1471 False if failed. 1472 """ 1473 if not self._test_setup_tethering(RAT_3G): 1474 self.log.error("Verify 3G Internet access failed.") 1475 return False 1476 1477 return wifi_tethering_setup_teardown( 1478 self.log, 1479 self.provider, 1480 self.clients, 1481 ap_band=WIFI_CONFIG_APBAND_5G, 1482 check_interval=10, 1483 check_iteration=10) 1484 1485 @test_tracker_info(uuid="89fe6321-4c0d-40c0-89b2-54008ecca68f") 1486 @TelephonyBaseTest.tel_test_wrap 1487 def test_tethering_2g_to_2gwifi(self): 1488 """WiFi Tethering test: 2G to WiFI 2.4G Tethering 1489 1490 1. DUT in 2G mode, idle. 1491 2. DUT start 2.4G WiFi Tethering 1492 3. PhoneB disable data, connect to DUT's softAP 1493 4. Verify Internet access on DUT and PhoneB 1494 1495 Returns: 1496 True if success. 1497 False if failed. 1498 """ 1499 if not self._test_setup_tethering(RAT_2G): 1500 self.log.error("Verify 2G Internet access failed.") 1501 return False 1502 1503 return wifi_tethering_setup_teardown( 1504 self.log, 1505 self.provider, [self.clients[0]], 1506 ap_band=WIFI_CONFIG_APBAND_2G, 1507 check_interval=10, 1508 check_iteration=10) 1509 1510 @test_tracker_info(uuid="b8258d51-9581-4d52-80b6-501941ec1191") 1511 @TelephonyBaseTest.tel_test_wrap 1512 def test_tethering_2g_to_5gwifi(self): 1513 """WiFi Tethering test: 2G to WiFI 5G Tethering 1514 1515 1. DUT in 2G mode, idle. 1516 2. DUT start 5G WiFi Tethering 1517 3. PhoneB disable data, connect to DUT's softAP 1518 4. Verify Internet access on DUT and PhoneB 1519 1520 Returns: 1521 True if success. 1522 False if failed. 1523 """ 1524 if not self._test_setup_tethering(RAT_2G): 1525 self.log.error("Verify 2G Internet access failed.") 1526 return False 1527 1528 return wifi_tethering_setup_teardown( 1529 self.log, 1530 self.provider, [self.clients[0]], 1531 ap_band=WIFI_CONFIG_APBAND_5G, 1532 check_interval=10, 1533 check_iteration=10) 1534 1535 @test_tracker_info(uuid="8ed766a6-71c5-4b3b-8897-a4e796c75619") 1536 @TelephonyBaseTest.tel_test_wrap 1537 def test_disable_wifi_tethering_resume_connected_wifi(self): 1538 """WiFi Tethering test: WiFI connected to 2.4G network, 1539 start (LTE) 2.4G WiFi tethering, then stop tethering 1540 1541 1. DUT in data connected, idle. WiFi connected to 2.4G Network 1542 2. DUT start 2.4G WiFi Tethering 1543 3. PhoneB disable data, connect to DUT's softAP 1544 4. Verify Internet access on DUT and PhoneB 1545 5. Disable WiFi Tethering on DUT. 1546 6. Verify DUT automatically connect to previous WiFI network 1547 1548 Returns: 1549 True if success. 1550 False if failed. 1551 """ 1552 if not self._test_setup_tethering(): 1553 self.log.error("Verify provider Internet access failed.") 1554 return False 1555 self.log.info("Connect WiFi.") 1556 if not ensure_wifi_connected(self.log, self.provider, 1557 self.wifi_network_ssid, 1558 self.wifi_network_pass): 1559 self.log.error("WiFi connect fail.") 1560 return False 1561 self.log.info("Start WiFi Tethering.") 1562 if not wifi_tethering_setup_teardown( 1563 self.log, 1564 self.provider, [self.clients[0]], 1565 check_interval=10, 1566 check_iteration=2): 1567 self.log.error("WiFi Tethering failed.") 1568 return False 1569 1570 if (not wait_for_wifi_data_connection(self.log, self.provider, True) 1571 or not verify_internet_connection(self.log, self.provider)): 1572 self.log.error("Provider data did not return to Wifi") 1573 return False 1574 return True 1575 1576 @test_tracker_info(uuid="b879ceb2-1b80-4762-93f9-afef4d688c28") 1577 @TelephonyBaseTest.tel_test_wrap 1578 def test_toggle_data_during_active_wifi_tethering(self): 1579 """WiFi Tethering test: Toggle Data during active WiFi Tethering 1580 1581 1. DUT data connection is on and idle. 1582 2. DUT start 2.4G WiFi Tethering 1583 3. PhoneB disable data, connect to DUT's softAP 1584 4. Verify Internet access on DUT and PhoneB 1585 5. Disable Data on DUT, verify PhoneB still connected to WiFi, but no Internet access. 1586 6. Enable Data on DUT, verify PhoneB still connected to WiFi and have Internet access. 1587 1588 Returns: 1589 True if success. 1590 False if failed. 1591 """ 1592 if not self._test_setup_tethering(): 1593 self.log.error("Provider Internet access check failed.") 1594 return False 1595 try: 1596 ssid = rand_ascii_str(10) 1597 if not wifi_tethering_setup_teardown( 1598 self.log, 1599 self.provider, [self.clients[0]], 1600 ap_band=WIFI_CONFIG_APBAND_2G, 1601 check_interval=10, 1602 check_iteration=2, 1603 do_cleanup=False, 1604 ssid=ssid): 1605 self.log.error("WiFi Tethering failed.") 1606 return False 1607 1608 if not self.provider.droid.wifiIsApEnabled(): 1609 self.provider.log.error("Provider WiFi tethering stopped.") 1610 return False 1611 1612 self.provider.log.info( 1613 "Disable Data on Provider, verify no data on Client.") 1614 self.provider.droid.telephonyToggleDataConnection(False) 1615 time.sleep(WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING) 1616 if verify_internet_connection(self.log, self.provider): 1617 self.provider.log.error("Disable data on provider failed.") 1618 return False 1619 if not self.provider.droid.wifiIsApEnabled(): 1620 self.provider.log.error("Provider WiFi tethering stopped.") 1621 return False 1622 if not check_is_wifi_connected(self.log, self.clients[0], ssid): 1623 self.clients[0].log.error("Client WiFi is not connected") 1624 return False 1625 1626 self.log.info( 1627 "Enable Data on Provider, verify data available on Client.") 1628 self.provider.droid.telephonyToggleDataConnection(True) 1629 if not wait_for_cell_data_connection(self.log, self.provider, 1630 True): 1631 self.provider.log.error( 1632 "Provider failed to enable data connection.") 1633 return False 1634 if not verify_internet_connection(self.log, self.provider): 1635 self.provider.log.error( 1636 "Provider internet connection check failed.") 1637 return False 1638 if not self.provider.droid.wifiIsApEnabled(): 1639 self.provider.log.error("Provider WiFi tethering stopped.") 1640 return False 1641 1642 if not check_is_wifi_connected( 1643 self.log, self.clients[0], 1644 ssid) or (not verify_internet_connection( 1645 self.log, self.clients[0])): 1646 self.clients[0].log.error( 1647 "Client wifi connection check failed!") 1648 return False 1649 finally: 1650 if not wifi_tethering_cleanup(self.log, self.provider, 1651 self.clients): 1652 return False 1653 return True 1654 1655 # Invalid Live Test. Can't rely on the result of this test with live network. 1656 # Network may decide not to change the RAT when data conenction is active. 1657 @test_tracker_info(uuid="c92a961b-e85d-435c-8988-052928add591") 1658 @TelephonyBaseTest.tel_test_wrap 1659 def test_change_rat_during_active_wifi_tethering_lte_to_3g(self): 1660 """WiFi Tethering test: Change Cellular Data RAT generation from LTE to 3G, 1661 during active WiFi Tethering. 1662 1663 1. DUT in LTE mode, idle. 1664 2. DUT start 2.4G WiFi Tethering 1665 3. PhoneB disable data, connect to DUT's softAP 1666 4. Verily Internet access on DUT and PhoneB 1667 5. Change DUT Cellular Data RAT generation from LTE to 3G. 1668 6. Verify both DUT and PhoneB have Internet access. 1669 1670 Returns: 1671 True if success. 1672 False if failed. 1673 """ 1674 if not self._test_setup_tethering(RAT_4G): 1675 self.log.error("Verify 4G Internet access failed.") 1676 return False 1677 try: 1678 if not wifi_tethering_setup_teardown( 1679 self.log, 1680 self.provider, [self.clients[0]], 1681 ap_band=WIFI_CONFIG_APBAND_2G, 1682 check_interval=10, 1683 check_iteration=2, 1684 do_cleanup=False): 1685 self.log.error("WiFi Tethering failed.") 1686 return False 1687 1688 if not self.provider.droid.wifiIsApEnabled(): 1689 self.provider.log.error("Provider WiFi tethering stopped.") 1690 return False 1691 1692 self.log.info("Provider change RAT from LTE to 3G.") 1693 if not ensure_network_generation( 1694 self.log, 1695 self.provider, 1696 RAT_3G, 1697 voice_or_data=NETWORK_SERVICE_DATA, 1698 toggle_apm_after_setting=False): 1699 self.provider.log.error("Provider failed to reselect to 3G.") 1700 return False 1701 time.sleep(WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING) 1702 if not verify_internet_connection(self.log, self.provider): 1703 self.provider.log.error("Data not available on Provider.") 1704 return False 1705 if not self.provider.droid.wifiIsApEnabled(): 1706 self.provider.log.error("Provider WiFi tethering stopped.") 1707 return False 1708 if not tethering_check_internet_connection( 1709 self.log, self.provider, [self.clients[0]], 10, 5): 1710 return False 1711 finally: 1712 if not wifi_tethering_cleanup(self.log, self.provider, 1713 self.clients): 1714 return False 1715 return True 1716 1717 # Invalid Live Test. Can't rely on the result of this test with live network. 1718 # Network may decide not to change the RAT when data conenction is active. 1719 @test_tracker_info(uuid="eb5f0180-b70d-436f-8fcb-60c59307cc43") 1720 @TelephonyBaseTest.tel_test_wrap 1721 def test_change_rat_during_active_wifi_tethering_3g_to_lte(self): 1722 """WiFi Tethering test: Change Cellular Data RAT generation from 3G to LTE, 1723 during active WiFi Tethering. 1724 1725 1. DUT in 3G mode, idle. 1726 2. DUT start 2.4G WiFi Tethering 1727 3. PhoneB disable data, connect to DUT's softAP 1728 4. Verily Internet access on DUT and PhoneB 1729 5. Change DUT Cellular Data RAT generation from 3G to LTE. 1730 6. Verify both DUT and PhoneB have Internet access. 1731 1732 Returns: 1733 True if success. 1734 False if failed. 1735 """ 1736 if not self._test_setup_tethering(RAT_3G): 1737 self.log.error("Verify 3G Internet access failed.") 1738 return False 1739 try: 1740 if not wifi_tethering_setup_teardown( 1741 self.log, 1742 self.provider, [self.clients[0]], 1743 ap_band=WIFI_CONFIG_APBAND_2G, 1744 check_interval=10, 1745 check_iteration=2, 1746 do_cleanup=False): 1747 self.log.error("WiFi Tethering failed.") 1748 return False 1749 1750 if not self.provider.droid.wifiIsApEnabled(): 1751 self.log.error("Provider WiFi tethering stopped.") 1752 return False 1753 1754 self.log.info("Provider change RAT from 3G to 4G.") 1755 if not ensure_network_generation( 1756 self.log, 1757 self.provider, 1758 RAT_4G, 1759 voice_or_data=NETWORK_SERVICE_DATA, 1760 toggle_apm_after_setting=False): 1761 self.log.error("Provider failed to reselect to 4G.") 1762 return False 1763 time.sleep(WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING) 1764 if not verify_internet_connection(self.log, self.provider): 1765 self.provider.log.error("Data not available on Provider.") 1766 return False 1767 if not self.provider.droid.wifiIsApEnabled(): 1768 self.provider.log.error("Provider WiFi tethering stopped.") 1769 return False 1770 if not tethering_check_internet_connection( 1771 self.log, self.provider, [self.clients[0]], 10, 5): 1772 return False 1773 finally: 1774 if not wifi_tethering_cleanup(self.log, self.provider, [self.clients[0]]): 1775 return False 1776 return True 1777 1778 @test_tracker_info(uuid="12a6c910-fa96-4d9b-99a5-8391fea33732") 1779 @TelephonyBaseTest.tel_test_wrap 1780 def test_toggle_apm_during_active_wifi_tethering(self): 1781 """WiFi Tethering test: Toggle APM during active WiFi Tethering 1782 1783 1. DUT in LTE mode, idle. 1784 2. DUT start 2.4G WiFi Tethering 1785 3. PhoneB disable data, connect to DUT's softAP 1786 4. Verify Internet access on DUT and PhoneB 1787 5. DUT toggle APM on, verify WiFi tethering stopped, PhoneB lost WiFi connection. 1788 6. DUT toggle APM off, verify PhoneA have cellular data and Internet connection. 1789 1790 Returns: 1791 True if success. 1792 False if failed. 1793 """ 1794 if not self._test_setup_tethering(RAT_4G): 1795 self.log.error("Verify 4G Internet access failed.") 1796 return False 1797 try: 1798 ssid = rand_ascii_str(10) 1799 if not wifi_tethering_setup_teardown( 1800 self.log, 1801 self.provider, [self.clients[0]], 1802 ap_band=WIFI_CONFIG_APBAND_2G, 1803 check_interval=10, 1804 check_iteration=2, 1805 do_cleanup=False, 1806 ssid=ssid): 1807 self.log.error("WiFi Tethering failed.") 1808 return False 1809 1810 if not self.provider.droid.wifiIsApEnabled(): 1811 self.log.error("Provider WiFi tethering stopped.") 1812 return False 1813 1814 self.log.info( 1815 "Provider turn on APM, verify no wifi/data on Client.") 1816 if not toggle_airplane_mode(self.log, self.provider, True): 1817 self.log.error("Provider turn on APM failed.") 1818 return False 1819 time.sleep(WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING) 1820 if self.provider.droid.wifiIsApEnabled(): 1821 self.provider.log.error("Provider WiFi tethering not stopped.") 1822 return False 1823 if verify_internet_connection(self.log, self.clients[0]): 1824 self.clients[0].log.error( 1825 "Client should not have Internet connection.") 1826 return False 1827 wifi_info = self.clients[0].droid.wifiGetConnectionInfo() 1828 self.clients[0].log.info("WiFi Info: {}".format(wifi_info)) 1829 if wifi_info[WIFI_SSID_KEY] == ssid: 1830 self.clients[0].log.error( 1831 "WiFi error. WiFi should not be connected.".format( 1832 wifi_info)) 1833 return False 1834 1835 self.log.info("Provider turn off APM.") 1836 if not toggle_airplane_mode(self.log, self.provider, False): 1837 self.provider.log.error("Provider turn on APM failed.") 1838 return False 1839 time.sleep(WAIT_TIME_DATA_STATUS_CHANGE_DURING_WIFI_TETHERING) 1840 if self.provider.droid.wifiIsApEnabled(): 1841 self.provider.log.error( 1842 "Provider WiFi tethering should not on.") 1843 return False 1844 if not verify_internet_connection(self.log, self.provider): 1845 self.provider.log.error( 1846 "Provider should have Internet connection.") 1847 return False 1848 finally: 1849 self.clients[0].droid.telephonyToggleDataConnection(True) 1850 wifi_reset(self.log, self.clients[0]) 1851 return True 1852 1853 @test_tracker_info(uuid="037e80fc-6eab-4cd1-846a-b9780a1d502d") 1854 @TelephonyBaseTest.tel_test_wrap 1855 def test_tethering_entitlement_check(self): 1856 """Tethering Entitlement Check Test 1857 1858 Get tethering entitlement check result. 1859 1860 Returns: 1861 True if entitlement check returns True. 1862 """ 1863 if (not wait_for_cell_data_connection(self.log, self.provider, True) 1864 or not verify_internet_connection(self.log, self.provider)): 1865 self.log.error("Failed cell data call for entitlement check.") 1866 return False 1867 1868 result = self.provider.droid.carrierConfigIsTetheringModeAllowed( 1869 TETHERING_MODE_WIFI, MAX_WAIT_TIME_TETHERING_ENTITLEMENT_CHECK) 1870 self.provider.log.info("Tethering entitlement check result: %s", 1871 result) 1872 return result 1873 1874 @test_tracker_info(uuid="4972826e-39ea-42f7-aae0-06fe3aa9ecc6") 1875 @TelephonyBaseTest.tel_test_wrap 1876 def test_tethering_4g_to_2gwifi_stress(self): 1877 """Stress Test LTE to WiFI 2.4G Tethering 1878 1879 This is a stress test for "test_tethering_4g_to_2gwifi". 1880 Default MINIMUM_SUCCESS_RATE is set to 95%. 1881 1882 Returns: 1883 True stress pass rate is higher than MINIMUM_SUCCESS_RATE. 1884 False otherwise. 1885 """ 1886 MINIMUM_SUCCESS_RATE = .95 1887 success_count = 0 1888 fail_count = 0 1889 1890 for i in range(1, self.stress_test_number + 1): 1891 1892 ensure_phones_default_state(self.log, self.android_devices) 1893 1894 if self.test_tethering_4g_to_2gwifi(): 1895 success_count += 1 1896 result_str = "Succeeded" 1897 else: 1898 fail_count += 1 1899 result_str = "Failed" 1900 self.log.info("Iteration {} {}. Current: {} / {} passed.".format( 1901 i, result_str, success_count, self.stress_test_number)) 1902 1903 self.log.info("Final Count - Success: {}, Failure: {} - {}%".format( 1904 success_count, fail_count, 1905 str(100 * success_count / (success_count + fail_count)))) 1906 if success_count / ( 1907 success_count + fail_count) >= MINIMUM_SUCCESS_RATE: 1908 return True 1909 else: 1910 return False 1911 1912 @test_tracker_info(uuid="54e85aed-09e3-42e2-bb33-bca1005d93ab") 1913 @TelephonyBaseTest.tel_test_wrap 1914 def test_tethering_wifi_ssid_quotes(self): 1915 """WiFi Tethering test: SSID name have quotes. 1916 1. Set SSID name have double quotes. 1917 2. Start LTE to WiFi (2.4G) tethering. 1918 3. Verify tethering. 1919 1920 Returns: 1921 True if success. 1922 False if failed. 1923 """ 1924 if not self._test_setup_tethering(): 1925 self.log.error("Verify Internet access failed.") 1926 return False 1927 ssid = "\"" + rand_ascii_str(10) + "\"" 1928 self.log.info( 1929 "Starting WiFi Tethering test with ssid: {}".format(ssid)) 1930 1931 return wifi_tethering_setup_teardown( 1932 self.log, 1933 self.provider, 1934 self.clients, 1935 ap_band=WIFI_CONFIG_APBAND_2G, 1936 check_interval=10, 1937 check_iteration=10, 1938 ssid=ssid) 1939 1940 @test_tracker_info(uuid="320326da-bf32-444d-81f9-f781c55dbc99") 1941 @TelephonyBaseTest.tel_test_wrap 1942 def test_tethering_wifi_password_escaping_characters(self): 1943 """WiFi Tethering test: password have escaping characters. 1944 1. Set password have escaping characters. 1945 e.g.: '"DQ=/{Yqq;M=(^_3HzRvhOiL8S%`]w&l<Qp8qH)bs<4E9v_q=HLr^)}w$blA0Kg' 1946 2. Start LTE to WiFi (2.4G) tethering. 1947 3. Verify tethering. 1948 1949 Returns: 1950 True if success. 1951 False if failed. 1952 """ 1953 if not self._test_setup_tethering(): 1954 self.log.error("Verify Internet access failed.") 1955 return False 1956 1957 password = '"DQ=/{Yqq;M=(^_3HzRvhOiL8S%`]w&l<Qp8qH)bs<4E9v_q=HLr^)}w$blA0Kg' 1958 self.log.info( 1959 "Starting WiFi Tethering test with password: {}".format(password)) 1960 1961 return wifi_tethering_setup_teardown( 1962 self.log, 1963 self.provider, 1964 self.clients, 1965 ap_band=WIFI_CONFIG_APBAND_2G, 1966 check_interval=10, 1967 check_iteration=10, 1968 password=password) 1969 1970 def _test_start_wifi_tethering_connect_teardown(self, ad_host, ad_client, 1971 ssid, password): 1972 """Private test util for WiFi Tethering. 1973 1974 1. Host start WiFi tethering. 1975 2. Client connect to tethered WiFi. 1976 3. Host tear down WiFi tethering. 1977 1978 Args: 1979 ad_host: android device object for host 1980 ad_client: android device object for client 1981 ssid: WiFi tethering ssid 1982 password: WiFi tethering password 1983 1984 Returns: 1985 True if no error happen, otherwise False. 1986 """ 1987 result = True 1988 self.number_of_devices = 2 1989 # Turn off active SoftAP if any. 1990 if ad_host.droid.wifiIsApEnabled(): 1991 stop_wifi_tethering(self.log, ad_host) 1992 1993 time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING) 1994 if not start_wifi_tethering(self.log, ad_host, ssid, password, 1995 WIFI_CONFIG_APBAND_2G): 1996 self.log.error("Start WiFi tethering failed.") 1997 result = False 1998 time.sleep(WAIT_TIME_ANDROID_STATE_SETTLING) 1999 if not ensure_wifi_connected(self.log, ad_client, ssid, password): 2000 self.log.error("Client connect to WiFi failed.") 2001 result = False 2002 if not wifi_reset(self.log, ad_client): 2003 self.log.error("Reset client WiFi failed. {}".format( 2004 ad_client.serial)) 2005 result = False 2006 if not stop_wifi_tethering(self.log, ad_host): 2007 self.log.error("Stop WiFi tethering failed.") 2008 result = False 2009 return result 2010 2011 @test_tracker_info(uuid="617c7e71-f166-465f-bfd3-b5a3a40cc0d4") 2012 @TelephonyBaseTest.tel_test_wrap 2013 def test_tethering_wifi_ssid(self): 2014 """WiFi Tethering test: start WiFi tethering with all kinds of SSIDs. 2015 2016 For each listed SSID, start WiFi tethering on DUT, client connect WiFi, 2017 then tear down WiFi tethering. 2018 2019 Returns: 2020 True if WiFi tethering succeed on all SSIDs. 2021 False if failed. 2022 """ 2023 if not self._test_setup_tethering(RAT_4G): 2024 self.log.error("Setup Failed.") 2025 return False 2026 ssid_list = [ 2027 " !\"#$%&'()*+,-./0123456789:;<=>?", 2028 "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", 2029 "`abcdefghijklmnopqrstuvwxyz{|}~", " a ", "!b!", "#c#", "$d$", 2030 "%e%", "&f&", "'g'", "(h(", ")i)", "*j*", "+k+", "-l-", ".m.", 2031 "/n/", "_", " !\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}", 2032 "\u0644\u062c\u0648\u062c", "\u8c37\u6b4c", "\uad6c\uae00" 2033 "\u30b0\u30fc\u30eb", 2034 "\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0443\u0439" 2035 ] 2036 fail_list = {} 2037 2038 for ssid in ssid_list: 2039 password = rand_ascii_str(8) 2040 self.log.info("SSID: <{}>, Password: <{}>".format(ssid, password)) 2041 if not self._test_start_wifi_tethering_connect_teardown( 2042 self.provider, self.clients[0], ssid, password): 2043 fail_list[ssid] = password 2044 2045 if (len(fail_list) > 0): 2046 self.log.error("Failed cases: {}".format(fail_list)) 2047 return False 2048 else: 2049 return True 2050 2051 @test_tracker_info(uuid="9a5b5a34-b5cf-451d-94c4-8a64d456dfe5") 2052 @TelephonyBaseTest.tel_test_wrap 2053 def test_tethering_wifi_password(self): 2054 """WiFi Tethering test: start WiFi tethering with all kinds of passwords. 2055 2056 For each listed password, start WiFi tethering on DUT, client connect WiFi, 2057 then tear down WiFi tethering. 2058 2059 Returns: 2060 True if WiFi tethering succeed on all passwords. 2061 False if failed. 2062 """ 2063 if not self._test_setup_tethering(RAT_4G): 2064 self.log.error("Setup Failed.") 2065 return False 2066 password_list = [ 2067 " !\"#$%&'()*+,-./0123456789:;<=>?", 2068 "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", 2069 "`abcdefghijklmnopqrstuvwxyz{|}~", 2070 " !\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}", "abcdefgh", 2071 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!", 2072 " a12345 ", "!b12345!", "#c12345#", "$d12345$", "%e12345%", 2073 "&f12345&", "'g12345'", "(h12345(", ")i12345)", "*j12345*", 2074 "+k12345+", "-l12345-", ".m12345.", "/n12345/" 2075 ] 2076 fail_list = {} 2077 2078 for password in password_list: 2079 ssid = rand_ascii_str(8) 2080 self.log.info("SSID: <{}>, Password: <{}>".format(ssid, password)) 2081 if not self._test_start_wifi_tethering_connect_teardown( 2082 self.provider, self.clients[0], ssid, password): 2083 fail_list[ssid] = password 2084 2085 if (len(fail_list) > 0): 2086 self.log.error("Failed cases: {}".format(fail_list)) 2087 return False 2088 else: 2089 return True 2090 2091 def _test_tethering_wifi_and_voice_call(self, provider_data_rat, 2092 provider_setup_func, 2093 provider_in_call_check_func): 2094 self.number_of_devices = 2 2095 if not self._test_setup_tethering(provider_data_rat): 2096 self.log.error("Verify 4G Internet access failed.") 2097 return False 2098 2099 tasks = [(provider_setup_func, (self.log, self.provider)), 2100 (phone_setup_voice_general, (self.log, self.clients[0]))] 2101 if not multithread_func(self.log, tasks): 2102 self.log.error("Phone Failed to Set Up VoLTE.") 2103 return False 2104 2105 try: 2106 self.log.info("1. Setup WiFi Tethering.") 2107 if not wifi_tethering_setup_teardown( 2108 self.log, 2109 self.provider, [self.clients[0]], 2110 ap_band=WIFI_CONFIG_APBAND_2G, 2111 check_interval=10, 2112 check_iteration=2, 2113 do_cleanup=False): 2114 self.log.error("WiFi Tethering failed.") 2115 return False 2116 self.log.info("2. Make outgoing call.") 2117 if not call_setup_teardown( 2118 self.log, 2119 self.provider, 2120 self.clients[0], 2121 ad_hangup=None, 2122 verify_caller_func=provider_in_call_check_func): 2123 self.log.error("Setup Call Failed.") 2124 return False 2125 self.log.info("3. Verify data.") 2126 if not verify_internet_connection(self.log, self.provider): 2127 self.provider.log.error("Provider have no Internet access.") 2128 if not verify_internet_connection(self.log, self.clients[0]): 2129 self.clients[0].log.error("Client have no Internet access.") 2130 hangup_call(self.log, self.provider) 2131 2132 time.sleep(WAIT_TIME_BETWEEN_REG_AND_CALL) 2133 2134 self.log.info("4. Make incoming call.") 2135 if not call_setup_teardown( 2136 self.log, 2137 self.clients[0], 2138 self.provider, 2139 ad_hangup=None, 2140 verify_callee_func=provider_in_call_check_func): 2141 self.log.error("Setup Call Failed.") 2142 return False 2143 self.log.info("5. Verify data.") 2144 if not verify_internet_connection(self.log, self.provider): 2145 self.provider.log.error("Provider have no Internet access.") 2146 if not verify_internet_connection(self.log, self.clients[0]): 2147 self.clients[0].log.error("Client have no Internet access.") 2148 hangup_call(self.log, self.provider) 2149 2150 finally: 2151 if not wifi_tethering_cleanup(self.log, self.provider, 2152 self.clients): 2153 return False 2154 return True 2155 2156 @test_tracker_info(uuid="216bdb8c-edbf-4ff8-8750-a0861ab44df6") 2157 @TelephonyBaseTest.tel_test_wrap 2158 def test_tethering_wifi_volte_call(self): 2159 """WiFi Tethering test: VoLTE call during WiFi tethering 2160 1. Start LTE to WiFi (2.4G) tethering. 2161 2. Verify tethering. 2162 3. Make outgoing VoLTE call on tethering provider. 2163 4. Verify tethering still works. 2164 5. Make incoming VoLTE call on tethering provider. 2165 6. Verify tethering still works. 2166 2167 Returns: 2168 True if success. 2169 False if failed. 2170 """ 2171 return self._test_tethering_wifi_and_voice_call( 2172 RAT_4G, phone_setup_volte, is_phone_in_call_volte) 2173 2174 @test_tracker_info(uuid="bcd430cc-6d33-47d1-825d-aae9f248addc") 2175 @TelephonyBaseTest.tel_test_wrap 2176 def test_tethering_wifi_csfb_call(self): 2177 """WiFi Tethering test: CSFB call during WiFi tethering 2178 1. Start LTE to WiFi (2.4G) tethering. 2179 2. Verify tethering. 2180 3. Make outgoing CSFB call on tethering provider. 2181 4. Verify tethering still works. 2182 5. Make incoming CSFB call on tethering provider. 2183 6. Verify tethering still works. 2184 2185 Returns: 2186 True if success. 2187 False if failed. 2188 """ 2189 return self._test_tethering_wifi_and_voice_call( 2190 RAT_4G, phone_setup_csfb, is_phone_in_call_csfb) 2191 2192 @test_tracker_info(uuid="19e0df23-6819-4c69-bfda-eea9cce802d8") 2193 @TelephonyBaseTest.tel_test_wrap 2194 def test_tethering_wifi_3g_call(self): 2195 """WiFi Tethering test: 3G call during WiFi tethering 2196 1. Start 3G to WiFi (2.4G) tethering. 2197 2. Verify tethering. 2198 3. Make outgoing CS call on tethering provider. 2199 4. Verify tethering still works. 2200 5. Make incoming CS call on tethering provider. 2201 6. Verify tethering still works. 2202 2203 Returns: 2204 True if success. 2205 False if failed. 2206 """ 2207 return self._test_tethering_wifi_and_voice_call( 2208 RAT_3G, phone_setup_voice_3g, is_phone_in_call_3g) 2209 2210 @test_tracker_info(uuid="4acd98b5-fdef-4736-969f-3fa953990a58") 2211 @TelephonyBaseTest.tel_test_wrap 2212 def test_tethering_wifi_no_password(self): 2213 """WiFi Tethering test: Start WiFi tethering with no password 2214 2215 1. DUT is idle. 2216 2. DUT start 2.4G WiFi Tethering, with no WiFi password. 2217 3. PhoneB disable data, connect to DUT's softAP 2218 4. Verify Internet access on DUT and PhoneB 2219 2220 Returns: 2221 True if success. 2222 False if failed. 2223 """ 2224 if not self._test_setup_tethering(): 2225 self.log.error("Verify Internet access failed.") 2226 return False 2227 2228 return wifi_tethering_setup_teardown( 2229 self.log, 2230 self.provider, [self.clients[0]], 2231 ap_band=WIFI_CONFIG_APBAND_2G, 2232 check_interval=10, 2233 check_iteration=10, 2234 password="") 2235 2236 @test_tracker_info(uuid="86ad1680-bfb8-457e-8b4d-23321cb3f223") 2237 @TelephonyBaseTest.tel_test_wrap 2238 def test_tethering_wifi_reboot(self): 2239 """WiFi Tethering test: Start WiFi tethering then Reboot device 2240 2241 1. DUT is idle. 2242 2. DUT start 2.4G WiFi Tethering. 2243 3. PhoneB disable data, connect to DUT's softAP 2244 4. Verify Internet access on DUT and PhoneB 2245 5. Reboot DUT 2246 6. After DUT reboot, verify tethering is stopped. 2247 2248 Returns: 2249 True if success. 2250 False if failed. 2251 """ 2252 if not self._test_setup_tethering(): 2253 self.log.error("Verify Internet access failed.") 2254 return False 2255 try: 2256 if not wifi_tethering_setup_teardown( 2257 self.log, 2258 self.provider, [self.clients[0]], 2259 ap_band=WIFI_CONFIG_APBAND_2G, 2260 check_interval=10, 2261 check_iteration=2, 2262 do_cleanup=False): 2263 self.log.error("WiFi Tethering failed.") 2264 return False 2265 2266 if not self.provider.droid.wifiIsApEnabled(): 2267 self.log.error("Provider WiFi tethering stopped.") 2268 return False 2269 2270 self.provider.log.info("Reboot provider") 2271 self.provider.reboot() 2272 time.sleep( 2273 WAIT_TIME_AFTER_REBOOT + WAIT_TIME_TETHERING_AFTER_REBOOT) 2274 2275 self.log.info("After reboot check if tethering stopped.") 2276 if self.provider.droid.wifiIsApEnabled(): 2277 self.log.error("Provider WiFi tethering did NOT stopped.") 2278 return False 2279 finally: 2280 self.clients[0].droid.telephonyToggleDataConnection(True) 2281 wifi_reset(self.log, self.clients[0]) 2282 if self.provider.droid.wifiIsApEnabled(): 2283 stop_wifi_tethering(self.log, self.provider) 2284 return True 2285 2286 @test_tracker_info(uuid="5cf04ca2-dfde-43d6-be74-78b9abdf6c26") 2287 @TelephonyBaseTest.tel_test_wrap 2288 def test_connect_wifi_start_tethering_wifi_reboot(self): 2289 """WiFi Tethering test: WiFI connected, then start WiFi tethering, 2290 then reboot device. 2291 2292 Initial Condition: DUT in 4G mode, idle, DUT connect to WiFi. 2293 1. DUT start 2.4G WiFi Tethering. 2294 2. PhoneB disable data, connect to DUT's softAP 2295 3. Verify Internet access on DUT and PhoneB 2296 4. Reboot DUT 2297 5. After DUT reboot, verify tethering is stopped. DUT is able to connect 2298 to previous WiFi AP. 2299 2300 Returns: 2301 True if success. 2302 False if failed. 2303 """ 2304 if not self._test_setup_tethering(): 2305 self.log.error("Verify Internet access failed.") 2306 return False 2307 2308 self.log.info("Make sure DUT can connect to live network by WIFI") 2309 if ((not ensure_wifi_connected(self.log, self.provider, 2310 self.wifi_network_ssid, 2311 self.wifi_network_pass)) 2312 or (not verify_internet_connection(self.log, self.provider))): 2313 self.log.error("WiFi connect fail.") 2314 return False 2315 2316 try: 2317 if not wifi_tethering_setup_teardown( 2318 self.log, 2319 self.provider, [self.clients[0]], 2320 ap_band=WIFI_CONFIG_APBAND_2G, 2321 check_interval=10, 2322 check_iteration=2, 2323 do_cleanup=False): 2324 self.log.error("WiFi Tethering failed.") 2325 return False 2326 2327 if not self.provider.droid.wifiIsApEnabled(): 2328 self.log.error("Provider WiFi tethering stopped.") 2329 return False 2330 2331 self.provider.log.info("Reboot Provider") 2332 self.provider.reboot() 2333 time.sleep(WAIT_TIME_AFTER_REBOOT) 2334 time.sleep(WAIT_TIME_TETHERING_AFTER_REBOOT) 2335 2336 self.log.info("After reboot check if tethering stopped.") 2337 if self.provider.droid.wifiIsApEnabled(): 2338 self.provider.log.error( 2339 "Provider WiFi tethering did NOT stopped.") 2340 return False 2341 2342 self.log.info("Make sure WiFi can connect automatically.") 2343 if (not wait_for_wifi_data_connection(self.log, self.provider, 2344 True) or 2345 not verify_internet_connection(self.log, self.provider)): 2346 self.log.error("Data did not return to WiFi") 2347 return False 2348 2349 finally: 2350 self.clients[0].droid.telephonyToggleDataConnection(True) 2351 wifi_reset(self.log, self.clients[0]) 2352 if self.provider.droid.wifiIsApEnabled(): 2353 stop_wifi_tethering(self.log, self.provider) 2354 return True 2355 2356 @test_tracker_info(uuid="e0621997-c5bd-4137-afa6-b43406e9c713") 2357 @TelephonyBaseTest.tel_test_wrap 2358 def test_connect_wifi_reboot_start_tethering_wifi(self): 2359 """WiFi Tethering test: DUT connected to WiFi, then reboot, 2360 After reboot, start WiFi tethering, verify tethering actually works. 2361 2362 Initial Condition: Device set to 4G mode, idle, DUT connect to WiFi. 2363 1. Verify Internet is working on DUT (by WiFi). 2364 2. Reboot DUT. 2365 3. DUT start 2.4G WiFi Tethering. 2366 4. PhoneB disable data, connect to DUT's softAP 2367 5. Verify Internet access on DUT and PhoneB 2368 2369 Returns: 2370 True if success. 2371 False if failed. 2372 """ 2373 if not self._test_setup_tethering(): 2374 self.log.error("Verify Internet access failed.") 2375 return False 2376 2377 self.log.info("Make sure DUT can connect to live network by WIFI") 2378 if ((not ensure_wifi_connected(self.log, self.provider, 2379 self.wifi_network_ssid, 2380 self.wifi_network_pass)) 2381 or (not verify_internet_connection(self.log, self.provider))): 2382 self.log.error("WiFi connect fail.") 2383 return False 2384 2385 self.provider.log.info("Reboot provider") 2386 self.provider.reboot() 2387 time.sleep(WAIT_TIME_AFTER_REBOOT) 2388 time.sleep(WAIT_TIME_TETHERING_AFTER_REBOOT) 2389 2390 return wifi_tethering_setup_teardown( 2391 self.log, 2392 self.provider, [self.clients[0]], 2393 ap_band=WIFI_CONFIG_APBAND_2G, 2394 check_interval=10, 2395 check_iteration=10) 2396 2397 @test_tracker_info(uuid="89a849ef-e2ed-4bf2-ac31-81d34aba672a") 2398 @TelephonyBaseTest.tel_test_wrap 2399 def test_tethering_wifi_screen_off_enable_doze_mode(self): 2400 """WiFi Tethering test: Start WiFi tethering, then turn off DUT's screen, 2401 then enable doze mode. 2402 2403 1. Start WiFi tethering on DUT. 2404 2. PhoneB disable data, and connect to DUT's softAP 2405 3. Verify Internet access on DUT and PhoneB 2406 4. Turn off DUT's screen. Wait for 1 minute and 2407 verify Internet access on Client PhoneB. 2408 5. Enable doze mode on DUT. Wait for 1 minute and 2409 verify Internet access on Client PhoneB. 2410 2411 Returns: 2412 True if success. 2413 False if failed. 2414 """ 2415 if not self._test_setup_tethering(): 2416 self.log.error("Verify Internet access failed.") 2417 return False 2418 try: 2419 if not wifi_tethering_setup_teardown( 2420 self.log, 2421 self.provider, [self.clients[0]], 2422 ap_band=WIFI_CONFIG_APBAND_2G, 2423 check_interval=10, 2424 check_iteration=2, 2425 do_cleanup=False): 2426 self.log.error("WiFi Tethering failed.") 2427 return False 2428 2429 if not self.provider.droid.wifiIsApEnabled(): 2430 self.provider.log.error("Provider WiFi tethering stopped.") 2431 return False 2432 2433 self.provider.log.info("Turn off screen on provider") 2434 self.provider.droid.goToSleepNow() 2435 time.sleep(60) 2436 if not verify_internet_connection(self.log, self.clients[0]): 2437 self.client.log.error("Client have no Internet access.") 2438 return False 2439 2440 self.provider.log.info("Enable doze mode on provider") 2441 if not enable_doze(self.provider): 2442 self.provider.log.error("Failed to enable doze mode.") 2443 return False 2444 time.sleep(60) 2445 if not verify_internet_connection(self.log, self.clients[0]): 2446 self.clients[0].log.error("Client have no Internet access.") 2447 return False 2448 finally: 2449 self.log.info("Disable doze mode.") 2450 if not disable_doze(self.provider): 2451 self.log.error("Failed to disable doze mode.") 2452 return False 2453 if not wifi_tethering_cleanup(self.log, self.provider, 2454 [self.clients[0]]): 2455 return False 2456 return True 2457 2458 @test_tracker_info(uuid="695eef18-f759-4b41-8ad3-1fb329ee4b1b") 2459 @TelephonyBaseTest.tel_test_wrap 2460 def test_msim_switch_data_sim_2g(self): 2461 """Switch Data SIM on 2G network. 2462 2463 Steps: 2464 1. Data on default Data SIM. 2465 2. Switch Data to another SIM. Make sure data is still available. 2466 3. Switch Data back to previous SIM. Make sure data is still available. 2467 2468 Expected Results: 2469 1. Verify Data on Cell 2470 2. Verify Data on Wifi 2471 2472 Returns: 2473 True if success. 2474 False if failed. 2475 """ 2476 ad = self.android_devices[0] 2477 current_data_sub_id = ad.droid.subscriptionGetDefaultDataSubId() 2478 current_sim_slot_index = get_slot_index_from_subid( 2479 self.log, ad, current_data_sub_id) 2480 if current_sim_slot_index == SIM1_SLOT_INDEX: 2481 next_sim_slot_index = SIM2_SLOT_INDEX 2482 else: 2483 next_sim_slot_index = SIM1_SLOT_INDEX 2484 next_data_sub_id = get_subid_from_slot_index(self.log, ad, 2485 next_sim_slot_index) 2486 self.log.info("Current Data is on subId: {}, SIM slot: {}".format( 2487 current_data_sub_id, current_sim_slot_index)) 2488 if not ensure_network_generation_for_subscription( 2489 self.log, 2490 ad, 2491 ad.droid.subscriptionGetDefaultDataSubId(), 2492 GEN_2G, 2493 voice_or_data=NETWORK_SERVICE_DATA): 2494 self.log.error("Device data does not attach to 2G.") 2495 return False 2496 if not verify_internet_connection(self.log, ad): 2497 self.log.error("No Internet access on default Data SIM.") 2498 return False 2499 2500 self.log.info("Change Data to subId: {}, SIM slot: {}".format( 2501 next_data_sub_id, next_sim_slot_index)) 2502 if not change_data_sim_and_verify_data(self.log, ad, 2503 next_sim_slot_index): 2504 self.log.error("Failed to change data SIM.") 2505 return False 2506 2507 next_data_sub_id = current_data_sub_id 2508 next_sim_slot_index = current_sim_slot_index 2509 self.log.info("Change Data back to subId: {}, SIM slot: {}".format( 2510 next_data_sub_id, next_sim_slot_index)) 2511 if not change_data_sim_and_verify_data(self.log, ad, 2512 next_sim_slot_index): 2513 self.log.error("Failed to change data SIM.") 2514 return False 2515 2516 return True 2517 2518 def _test_wifi_connect_disconnect(self): 2519 """Perform multiple connects and disconnects from WiFi and verify that 2520 data switches between WiFi and Cell. 2521 2522 Steps: 2523 1. Reset Wifi on DUT 2524 2. Connect DUT to a WiFi AP 2525 3. Repeat steps 1-2, alternately disconnecting and disabling wifi 2526 2527 Expected Results: 2528 1. Verify Data on Cell 2529 2. Verify Data on Wifi 2530 2531 Returns: 2532 True if success. 2533 False if failed. 2534 """ 2535 ad = self.android_devices[0] 2536 2537 wifi_toggles = [ 2538 True, False, True, False, False, True, False, False, False, False, 2539 True, False, False, False, False, False, False, False, False 2540 ] 2541 2542 for toggle in wifi_toggles: 2543 2544 wifi_reset(self.log, ad, toggle) 2545 2546 if not wait_for_cell_data_connection( 2547 self.log, ad, True, MAX_WAIT_TIME_WIFI_CONNECTION): 2548 self.log.error("Failed wifi connection, aborting!") 2549 return False 2550 2551 if not verify_internet_connection(self.log, ad): 2552 self.log.error("Failed to get user-plane traffic, aborting!") 2553 return False 2554 2555 if toggle: 2556 wifi_toggle_state(self.log, ad, True) 2557 2558 ensure_wifi_connected(self.log, ad, self.wifi_network_ssid, 2559 self.wifi_network_pass) 2560 2561 if not wait_for_wifi_data_connection( 2562 self.log, ad, True, MAX_WAIT_TIME_WIFI_CONNECTION): 2563 self.log.error("Failed wifi connection, aborting!") 2564 return False 2565 2566 if not verify_http_connection( 2567 self.log, ad, 'http://www.google.com', 100, .1): 2568 self.log.error("Failed to get user-plane traffic, aborting!") 2569 return False 2570 return True 2571 2572 @test_tracker_info(uuid="9b8e92da-0ae1-472c-a72a-f6427e5405ce") 2573 @TelephonyBaseTest.tel_test_wrap 2574 def test_wifi_connect_disconnect_4g(self): 2575 """Perform multiple connects and disconnects from WiFi and verify that 2576 data switches between WiFi and Cell. 2577 2578 Steps: 2579 1. DUT Cellular Data is on 4G. Reset Wifi on DUT 2580 2. Connect DUT to a WiFi AP 2581 3. Repeat steps 1-2, alternately disconnecting and disabling wifi 2582 2583 Expected Results: 2584 1. Verify Data on Cell 2585 2. Verify Data on Wifi 2586 2587 Returns: 2588 True if success. 2589 False if failed. 2590 """ 2591 2592 ad = self.android_devices[0] 2593 if not ensure_network_generation_for_subscription( 2594 self.log, ad, ad.droid.subscriptionGetDefaultDataSubId(), 2595 GEN_4G, MAX_WAIT_TIME_NW_SELECTION, NETWORK_SERVICE_DATA): 2596 self.log.error("Device {} failed to reselect in {}s.".format( 2597 ad.serial, MAX_WAIT_TIME_NW_SELECTION)) 2598 return False 2599 return self._test_wifi_connect_disconnect() 2600 2601 @test_tracker_info(uuid="09893b1f-a4a2-49d3-8027-c2c91cb8742e") 2602 @TelephonyBaseTest.tel_test_wrap 2603 def test_wifi_connect_disconnect_3g(self): 2604 """Perform multiple connects and disconnects from WiFi and verify that 2605 data switches between WiFi and Cell. 2606 2607 Steps: 2608 1. DUT Cellular Data is on 3G. Reset Wifi on DUT 2609 2. Connect DUT to a WiFi AP 2610 3. Repeat steps 1-2, alternately disconnecting and disabling wifi 2611 2612 Expected Results: 2613 1. Verify Data on Cell 2614 2. Verify Data on Wifi 2615 2616 Returns: 2617 True if success. 2618 False if failed. 2619 """ 2620 2621 ad = self.android_devices[0] 2622 if not ensure_network_generation_for_subscription( 2623 self.log, ad, ad.droid.subscriptionGetDefaultDataSubId(), 2624 GEN_3G, MAX_WAIT_TIME_NW_SELECTION, NETWORK_SERVICE_DATA): 2625 self.log.error("Device {} failed to reselect in {}s.".format( 2626 ad.serial, MAX_WAIT_TIME_NW_SELECTION)) 2627 return False 2628 return self._test_wifi_connect_disconnect() 2629 2630 @test_tracker_info(uuid="0f095ca4-ce05-458f-9670-49a69f8c8270") 2631 @TelephonyBaseTest.tel_test_wrap 2632 def test_wifi_connect_disconnect_2g(self): 2633 """Perform multiple connects and disconnects from WiFi and verify that 2634 data switches between WiFi and Cell. 2635 2636 Steps: 2637 1. DUT Cellular Data is on 2G. Reset Wifi on DUT 2638 2. Connect DUT to a WiFi AP 2639 3. Repeat steps 1-2, alternately disconnecting and disabling wifi 2640 2641 Expected Results: 2642 1. Verify Data on Cell 2643 2. Verify Data on Wifi 2644 2645 Returns: 2646 True if success. 2647 False if failed. 2648 """ 2649 ad = self.android_devices[0] 2650 if not ensure_network_generation_for_subscription( 2651 self.log, ad, ad.droid.subscriptionGetDefaultDataSubId(), 2652 GEN_2G, MAX_WAIT_TIME_NW_SELECTION, NETWORK_SERVICE_DATA): 2653 self.log.error("Device {} failed to reselect in {}s.".format( 2654 ad.serial, MAX_WAIT_TIME_NW_SELECTION)) 2655 return False 2656 return self._test_wifi_connect_disconnect() 2657 2658 def _test_wifi_tethering_enabled_add_voice_call( 2659 self, network_generation, voice_call_direction, 2660 is_data_available_during_call): 2661 """Tethering enabled + voice call. 2662 2663 Steps: 2664 1. DUT data is on <network_generation>. Start WiFi Tethering. 2665 2. PhoneB connect to DUT's softAP 2666 3. DUT make a MO/MT (<voice_call_direction>) phone call. 2667 4. DUT end phone call. 2668 2669 Expected Results: 2670 1. DUT is able to start WiFi tethering. 2671 2. PhoneB connected to DUT's softAP and able to browse Internet. 2672 3. DUT WiFi tethering is still on. Phone call works OK. 2673 If is_data_available_during_call is True, then PhoneB still has 2674 Internet access. 2675 Else, then Data is suspend, PhoneB has no Internet access. 2676 4. WiFi Tethering still on, voice call stopped, and PhoneB have Internet 2677 access. 2678 2679 Returns: 2680 True if success. 2681 False if failed. 2682 """ 2683 if not self._test_setup_tethering(network_generation): 2684 self.log.error("Verify Internet access failed.") 2685 return False 2686 try: 2687 # Start WiFi Tethering 2688 if not wifi_tethering_setup_teardown( 2689 self.log, 2690 self.provider, [self.clients[0]], 2691 ap_band=WIFI_CONFIG_APBAND_2G, 2692 check_interval=10, 2693 check_iteration=2, 2694 do_cleanup=False): 2695 self.log.error("WiFi Tethering failed.") 2696 return False 2697 2698 if not self.provider.droid.wifiIsApEnabled(): 2699 self.log.error("Provider WiFi tethering stopped.") 2700 return False 2701 2702 # Make a voice call 2703 if voice_call_direction == DIRECTION_MOBILE_ORIGINATED: 2704 ad_caller = self.provider 2705 ad_callee = self.clients[0] 2706 else: 2707 ad_caller = self.clients[0] 2708 ad_callee = self.provider 2709 if not call_setup_teardown(self.log, ad_caller, ad_callee, None, 2710 None, None): 2711 self.log.error("Failed to Establish {} Voice Call".format( 2712 voice_call_direction)) 2713 return False 2714 2715 # Tethering should still be on. 2716 if not self.provider.droid.wifiIsApEnabled(): 2717 self.provider.log.error("Provider WiFi tethering stopped.") 2718 return False 2719 if not is_data_available_during_call: 2720 if verify_internet_connection( 2721 self.log, self.clients[0], retry=0): 2722 self.clients[0].log.error( 2723 "Client should not have Internet Access.") 2724 return False 2725 else: 2726 if not verify_internet_connection(self.log, self.clients[0]): 2727 self.clients[0].error( 2728 "Client should have Internet Access.") 2729 return False 2730 2731 # Hangup call. Client should have data. 2732 if not hangup_call(self.log, self.provider): 2733 self.provider.log.error("Failed to hang up call") 2734 return False 2735 if not self.provider.droid.wifiIsApEnabled(): 2736 self.provider.log.error("Provider WiFi tethering stopped.") 2737 return False 2738 if not verify_internet_connection(self.log, self.clients[0]): 2739 self.clients[0].log.error( 2740 "Client should have Internet Access.") 2741 return False 2742 finally: 2743 self.clients[0].droid.telephonyToggleDataConnection(True) 2744 wifi_reset(self.log, self.clients[0]) 2745 if self.provider.droid.wifiIsApEnabled(): 2746 stop_wifi_tethering(self.log, self.provider) 2747 return True 2748 2749 @test_tracker_info(uuid="4d7a68c6-5eae-4242-a6e6-668f830caec3") 2750 @TelephonyBaseTest.tel_test_wrap 2751 def test_wifi_tethering_enabled_add_mo_voice_call_2g_dsds(self): 2752 """Tethering enabled + voice call 2753 2754 Steps: 2755 1. DUT is DSDS device, Data on 2G. Start WiFi Tethering on <Data SIM> 2756 2. PhoneB connect to DUT's softAP 2757 3. DUT make a mo phone call on <Voice SIM> 2758 4. DUT end phone call. 2759 2760 Expected Results: 2761 1. DUT is able to start WiFi tethering. 2762 2. PhoneB connected to DUT's softAP and able to browse Internet. 2763 3. DUT WiFi tethering is still on. Phone call works OK. Data is suspend, 2764 PhoneB still connected to DUT's softAP, but no data available. 2765 4. DUT data resumes, and PhoneB have Internet access. 2766 2767 Returns: 2768 True if success. 2769 False if failed. 2770 """ 2771 2772 return self._test_wifi_tethering_enabled_add_voice_call( 2773 GEN_2G, DIRECTION_MOBILE_ORIGINATED, False) 2774 2775 @test_tracker_info(uuid="de720069-a46c-4a6f-ae80-60b9349c8528") 2776 @TelephonyBaseTest.tel_test_wrap 2777 def test_wifi_tethering_enabled_add_mt_voice_call_2g_dsds(self): 2778 """Tethering enabled + voice call 2779 2780 Steps: 2781 1. DUT is DSDS device, Data on 2G. Start WiFi Tethering on <Data SIM> 2782 2. PhoneB connect to DUT's softAP 2783 3. DUT make a mt phone call on <Voice SIM> 2784 4. DUT end phone call. 2785 2786 Expected Results: 2787 1. DUT is able to start WiFi tethering. 2788 2. PhoneB connected to DUT's softAP and able to browse Internet. 2789 3. DUT WiFi tethering is still on. Phone call works OK. Data is suspend, 2790 PhoneB still connected to DUT's softAP, but no data available. 2791 4. DUT data resumes, and PhoneB have Internet access. 2792 2793 Returns: 2794 True if success. 2795 False if failed. 2796 """ 2797 2798 return self._test_wifi_tethering_enabled_add_voice_call( 2799 GEN_2G, DIRECTION_MOBILE_TERMINATED, False) 2800 2801 @test_tracker_info(uuid="fad169c0-8ae6-45d2-98ba-3fb60466ff0b") 2802 @TelephonyBaseTest.tel_test_wrap 2803 def test_wifi_tethering_msim_switch_data_sim(self): 2804 """Tethering enabled + switch data SIM. 2805 2806 Steps: 2807 1. Start WiFi Tethering on <Default Data SIM> 2808 2. PhoneB connect to DUT's softAP 2809 3. DUT change Default Data SIM. 2810 2811 Expected Results: 2812 1. DUT is able to start WiFi tethering. 2813 2. PhoneB connected to DUT's softAP and able to browse Internet. 2814 3. DUT Data changed to 2nd SIM, WiFi tethering should continues, 2815 PhoneB should have Internet access. 2816 2817 Returns: 2818 True if success. 2819 False if failed. 2820 """ 2821 current_data_sub_id = self.provider.droid.subscriptionGetDefaultDataSubId( 2822 ) 2823 current_sim_slot_index = get_slot_index_from_subid( 2824 self.log, self.provider, current_data_sub_id) 2825 self.provider.log.info("Current Data is on subId: %s, SIM slot: %s", 2826 current_data_sub_id, current_sim_slot_index) 2827 if not self._test_setup_tethering(): 2828 self.log.error("Verify Internet access failed.") 2829 return False 2830 try: 2831 # Start WiFi Tethering 2832 if not wifi_tethering_setup_teardown( 2833 self.log, 2834 self.provider, [self.clients[0]], 2835 ap_band=WIFI_CONFIG_APBAND_2G, 2836 check_interval=10, 2837 check_iteration=2, 2838 do_cleanup=False): 2839 self.log.error("WiFi Tethering failed.") 2840 return False 2841 for i in range(0, 2): 2842 next_sim_slot_index = \ 2843 {SIM1_SLOT_INDEX : SIM2_SLOT_INDEX, 2844 SIM2_SLOT_INDEX : SIM1_SLOT_INDEX}[current_sim_slot_index] 2845 self.log.info( 2846 "Change Data to SIM slot: {}".format(next_sim_slot_index)) 2847 if not change_data_sim_and_verify_data(self.log, self.provider, 2848 next_sim_slot_index): 2849 self.provider.log.error("Failed to change data SIM.") 2850 return False 2851 current_sim_slot_index = next_sim_slot_index 2852 if not verify_internet_connection(self.log, self.clients[0]): 2853 self.clients[0].log.error( 2854 "Client should have Internet Access.") 2855 return False 2856 finally: 2857 self.clients[0].droid.telephonyToggleDataConnection(True) 2858 wifi_reset(self.log, self.clients[0]) 2859 if self.provider.droid.wifiIsApEnabled(): 2860 stop_wifi_tethering(self.log, self.provider) 2861 return True 2862 2863 @test_tracker_info(uuid="8bb9383f-ddf9-400c-a831-c9462bae6b47") 2864 @TelephonyBaseTest.tel_test_wrap 2865 def test_msim_cell_data_switch_to_wifi_switch_data_sim_2g(self): 2866 """Switch Data SIM on 2G network. 2867 2868 Steps: 2869 1. Data on default Data SIM. 2870 2. Turn on WiFi, then data should be on WiFi. 2871 3. Switch Data to another SIM. Disable WiFi. 2872 2873 Expected Results: 2874 1. Verify Data on Cell 2875 2. Verify Data on WiFi 2876 3. After WiFi disabled, Cell Data is available on 2nd SIM. 2877 2878 Returns: 2879 True if success. 2880 False if failed. 2881 """ 2882 ad = self.android_devices[0] 2883 current_data_sub_id = ad.droid.subscriptionGetDefaultDataSubId() 2884 current_sim_slot_index = get_slot_index_from_subid( 2885 self.log, ad, current_data_sub_id) 2886 if current_sim_slot_index == SIM1_SLOT_INDEX: 2887 next_sim_slot_index = SIM2_SLOT_INDEX 2888 else: 2889 next_sim_slot_index = SIM1_SLOT_INDEX 2890 next_data_sub_id = get_subid_from_slot_index(self.log, ad, 2891 next_sim_slot_index) 2892 self.log.info("Current Data is on subId: {}, SIM slot: {}".format( 2893 current_data_sub_id, current_sim_slot_index)) 2894 if not ensure_network_generation_for_subscription( 2895 self.log, 2896 ad, 2897 ad.droid.subscriptionGetDefaultDataSubId(), 2898 GEN_2G, 2899 voice_or_data=NETWORK_SERVICE_DATA): 2900 self.log.error("Device data does not attach to 2G.") 2901 return False 2902 if not verify_internet_connection(self.log, ad): 2903 self.log.error("No Internet access on default Data SIM.") 2904 return False 2905 2906 self.log.info("Connect to WiFi and verify Internet access.") 2907 if not ensure_wifi_connected(self.log, ad, self.wifi_network_ssid, 2908 self.wifi_network_pass): 2909 self.log.error("WiFi connect fail.") 2910 return False 2911 if (not wait_for_wifi_data_connection(self.log, ad, True) 2912 or not verify_internet_connection(self.log, ad)): 2913 self.log.error("Data is not on WiFi") 2914 return False 2915 2916 try: 2917 self.log.info( 2918 "Change Data SIM, Disable WiFi and verify Internet access.") 2919 set_subid_for_data(ad, next_data_sub_id) 2920 wifi_toggle_state(self.log, ad, False) 2921 if not wait_for_data_attach_for_subscription( 2922 self.log, ad, next_data_sub_id, 2923 MAX_WAIT_TIME_NW_SELECTION): 2924 self.log.error("Failed to attach data on subId:{}".format( 2925 next_data_sub_id)) 2926 return False 2927 if not verify_internet_connection(self.log, ad): 2928 self.log.error("No Internet access after changing Data SIM.") 2929 return False 2930 2931 finally: 2932 self.log.info("Change Data SIM back.") 2933 set_subid_for_data(ad, current_data_sub_id) 2934 2935 return True 2936 2937 @test_tracker_info(uuid="ef03eff7-ddd3-48e9-8f67-5e271e14048b") 2938 @TelephonyBaseTest.tel_test_wrap 2939 def test_vzw_embms_services(self): 2940 ad = self.android_devices[0] 2941 # Install App and Push config 2942 self.log.info("Pushing embms config and apk to the Android device.") 2943 android_embms_path = "/sdcard/mobitv" 2944 embms_path = self.user_params.get("embms_path", "embms_path") 2945 if isinstance(embms_path, list): 2946 embms_path = embms_path[0] 2947 ad.adb.shell("mkdir /sdcard/mobitv") 2948 dcafile = os.path.join(embms_path, "dca.config") 2949 apkfile = os.path.join(embms_path, "VzwDCA.apk") 2950 ad.adb.push("%s %s" % (dcafile, android_embms_path)) 2951 ad.adb.install("%s" % apkfile) 2952 2953 # Co-ordinates Mapping 2954 lcd_density = ad.adb.shell("getprop ro.sf.lcd_density") 2955 ad.log.debug("lcd_density %s" % lcd_density) 2956 if lcd_density in ["420", "440"]: 2957 agree_y_axis = 1000 2958 else: 2959 agree_y_axis = 1300 2960 2961 # Screen ON needed to open the VZW App 2962 if "ON" in \ 2963 ad.adb.shell( 2964 "dumpsys power | grep 'Display Power: state' | cut -d '=' -f2"): 2965 ad.log.info("Screen already ON") 2966 ad.adb.shell("input keyevent 82") 2967 else: 2968 ad.log.info("Screen OFF, turning ON") 2969 ad.adb.shell("input keyevent 26") 2970 ad.adb.shell("input keyevent 82") 2971 2972 try: 2973 # Check if app is installed 2974 if ad.is_apk_installed("com.mobitv.vzwdca"): 2975 ad.log.info("VZWDCA App is successfully installed") 2976 else: 2977 ad.log.error("VZWDCA App is not installed") 2978 return False 2979 2980 # Grant Permissions, Start, Agree, Register 2981 for cmd in ("pm grant com.mobitv.vzwdca " 2982 "android.permission.READ_EXTERNAL_STORAGE", 2983 "pm grant com.mobitv.vzwdca " 2984 "android.permission.WRITE_EXTERNAL_STORAGE", 2985 "am start -a android.intent.action.VIEW -n " 2986 "com.mobitv.vzwdca/.DcaActivity", 2987 "input tap 500 %d" % agree_y_axis, "input keyevent 61", 2988 "input keyevent 61", "input keyevent 61", 2989 "input keyevent 61", "input keyevent 61", 2990 "input keyevent 66"): 2991 time.sleep(1) 2992 ad.log.info(cmd) 2993 ad.adb.shell(cmd) 2994 2995 # Check Reg-DeReg 2996 time.sleep(5) 2997 if ad.is_apk_running("com.qualcomm.ltebc_vzw"): 2998 ad.log.info("EMBMS Registered successfully") 2999 ad.adb.shell("input keyevent 61") 3000 time.sleep(1) 3001 ad.adb.shell("input keyevent 66") 3002 time.sleep(1) 3003 if not ad.is_apk_running("com.qualcomm.ltebc_vzw"): 3004 ad.log.info("EMBMS De-Registered successfully") 3005 return True 3006 else: 3007 ad.log.error("EMBMS De-Registeration Failed") 3008 return False 3009 else: 3010 ad.log.error("EMBMS Registeration Failed") 3011 return False 3012 finally: 3013 ad.log.info("Force Close the VZW App") 3014 ad.adb.shell("am force-stop com.mobitv.vzwdca") 3015 3016 @test_tracker_info(uuid="8a8cd773-77f5-4802-85ac-1a654bb4743c") 3017 @TelephonyBaseTest.tel_test_wrap 3018 def test_disable_data_on_non_active_data_sim(self): 3019 """Switch Data SIM on 2G network. 3020 3021 Steps: 3022 1. Data on default Data SIM. 3023 2. Disable data on non-active Data SIM. 3024 3025 Expected Results: 3026 1. Verify Data Status on Default Data SIM and non-active Data SIM. 3027 1. Verify Data Status on Default Data SIM and non-active Data SIM. 3028 3029 Returns: 3030 True if success. 3031 False if failed. 3032 """ 3033 ad = self.android_devices[0] 3034 current_data_sub_id = ad.droid.subscriptionGetDefaultDataSubId() 3035 current_sim_slot_index = get_slot_index_from_subid( 3036 self.log, ad, current_data_sub_id) 3037 if current_sim_slot_index == SIM1_SLOT_INDEX: 3038 non_active_sim_slot_index = SIM2_SLOT_INDEX 3039 else: 3040 non_active_sim_slot_index = SIM1_SLOT_INDEX 3041 non_active_sub_id = get_subid_from_slot_index( 3042 self.log, ad, non_active_sim_slot_index) 3043 self.log.info("Current Data is on subId: {}, SIM slot: {}".format( 3044 current_data_sub_id, current_sim_slot_index)) 3045 3046 if not ensure_network_generation_for_subscription( 3047 self.log, 3048 ad, 3049 ad.droid.subscriptionGetDefaultDataSubId(), 3050 GEN_2G, 3051 voice_or_data=NETWORK_SERVICE_DATA): 3052 self.log.error("Device data does not attach to 2G.") 3053 return False 3054 if not verify_internet_connection(self.log, ad): 3055 self.log.error("No Internet access on default Data SIM.") 3056 return False 3057 3058 if ad.droid.telephonyGetDataConnectionState() != DATA_STATE_CONNECTED: 3059 self.log.error("Data Connection State should be connected.") 3060 return False 3061 # TODO: Check Data state for non-active subId. 3062 3063 try: 3064 self.log.info("Disable Data on Non-Active Sub ID") 3065 ad.droid.telephonyToggleDataConnectionForSubscription( 3066 non_active_sub_id, False) 3067 # TODO: Check Data state for non-active subId. 3068 if ad.droid.telephonyGetDataConnectionState( 3069 ) != DATA_STATE_CONNECTED: 3070 self.log.error("Data Connection State should be connected.") 3071 return False 3072 finally: 3073 self.log.info("Enable Data on Non-Active Sub ID") 3074 ad.droid.telephonyToggleDataConnectionForSubscription( 3075 non_active_sub_id, True) 3076 return True 3077 3078 def file_download_stress(self): 3079 failure = 0 3080 total_count = 0 3081 self.result_info = collections.defaultdict(int) 3082 dut = self.android_devices[0] 3083 self.max_sleep_time = int(self.user_params.get("max_sleep_time", 1200)) 3084 #file_names = ["5MB", "10MB", "20MB", "50MB", "200MB", "512MB", "1GB"] 3085 file_names = ["5MB", "10MB", "20MB", "50MB", "200MB", "512MB"] 3086 while total_count < self.stress_test_number: 3087 total_count += 1 3088 try: 3089 dut.log.info(dict(self.result_info)) 3090 selection = random.randrange(0, len(file_names)) 3091 file_name = file_names[selection] 3092 self.result_info["Total %s file download" % file_name] += 1 3093 if not active_file_download_test(self.log, dut, file_name): 3094 self.result_info["%s file download failure" % 3095 file_name] += 1 3096 failure += 1 3097 dut.take_bug_report("%s_failure_%s" % (self.test_name, 3098 failure), 3099 time.strftime("%m-%d-%Y-%H-%M-%S")) 3100 self.dut.droid.goToSleepNow() 3101 time.sleep(random.randrange(0, self.max_sleep_time)) 3102 except Exception as e: 3103 self.log.error("Exception error %s", str(e)) 3104 self.result_info["Exception Errors"] += 1 3105 dut.log.info("File download test failure: %s/%s", failure, 3106 total_count) 3107 if failure / total_count > 0.1: 3108 dut.log.error("File download test failure: %s/%s", failure, 3109 total_count) 3110 return False 3111 return True 3112 3113 @test_tracker_info(uuid="5381a6fa-6771-4b00-a0d6-4a3891a6dba8") 3114 @TelephonyBaseTest.tel_test_wrap 3115 def test_file_download_stress_default(self): 3116 """File download stress test 3117 3118 Steps: 3119 1. Download a file random picked. 3120 2. Device sleep for sometime and Repeat 1. 3121 3122 Expected Results: 3123 Total download failure rate is less than 10%. 3124 3125 Returns: 3126 True if success. 3127 False if failed. 3128 """ 3129 return self.file_download_stress() 3130 3131 @test_tracker_info(uuid="c9970955-123b-467c-afbb-95ec8f99e9b7") 3132 def test_file_download_with_mobile_data_usage_limit_set(self): 3133 """ Steps: 3134 3135 1. Set the data usage limit to current data usage + 9MB 3136 2. Download 5MB file from internet. 3137 3. The first file download should succeed 3138 4. The second file download should fail 3139 3140 """ 3141 dut = self.android_devices[0] 3142 ensure_phones_default_state(self.log, [dut]) 3143 subscriber_id = dut.droid.telephonyGetSubscriberId() 3144 old_data_usage = get_mobile_data_usage(dut, subscriber_id) 3145 3146 # set data usage limit to current usage limit + 10MB 3147 data_limit = old_data_usage + 9 * 1000 * 1000 3148 set_mobile_data_usage_limit(dut, data_limit, subscriber_id) 3149 3150 # download file - size 5MB twice 3151 try: 3152 for _ in range(2): 3153 if not active_file_download_test(self.log, dut, "5MB", "curl"): 3154 if get_mobile_data_usage( 3155 dut, subscriber_id) + 5 * 1000 * 1000 < data_limit: 3156 dut.log.error( 3157 "Fail to download file when mobile data usage is" 3158 " below data usage limit") 3159 return False 3160 else: 3161 dut.log.info( 3162 "Download fails as expected due to data limit reached" 3163 ) 3164 else: 3165 if get_mobile_data_usage(dut, subscriber_id) < data_limit: 3166 dut.log.info( 3167 "Download file succeed when mobile data usage is" 3168 " below data usage limit") 3169 else: 3170 dut.log.error( 3171 "Download should fail due to data limit reached") 3172 return False 3173 return True 3174 finally: 3175 remove_mobile_data_usage_limit(dut, subscriber_id) 3176 3177 3178 def _test_data_stall_detection_recovery(self, nw_type="cellular", 3179 validation_type="detection"): 3180 dut = self.android_devices[0] 3181 try: 3182 cmd = ('ss -l -p -n | grep "tcp.*droid_script" | tr -s " " ' 3183 '| cut -d " " -f 5 | sed s/.*://g') 3184 sl4a_port = dut.adb.shell(cmd) 3185 ensure_phones_default_state(self.log, [dut]) 3186 if nw_type == "wifi": 3187 if not ensure_wifi_connected(self.log, dut, 3188 self.wifi_network_ssid, self.wifi_network_pass): 3189 return False 3190 3191 if not test_data_browsing_success_using_sl4a(self.log, dut): 3192 dut.log.error("Browsing failed before the test, aborting!") 3193 return False 3194 3195 begin_time = get_device_epoch_time(dut) 3196 break_internet_except_sl4a_port(dut, sl4a_port) 3197 3198 if not test_data_browsing_failure_using_sl4a(self.log, dut): 3199 dut.log.error("Browsing success even after breaking internet, "\ 3200 "aborting!") 3201 return False 3202 3203 if not check_data_stall_detection(dut): 3204 dut.log.error("NetworkMonitor unable to detect Data Stall") 3205 3206 if not check_network_validation_fail(dut, begin_time): 3207 dut.log.error("Unable to detect NW validation fail") 3208 return False 3209 3210 if validation_type == "recovery": 3211 if not check_data_stall_recovery(dut, begin_time): 3212 dut.log.error("Recovery was not triggerred") 3213 return False 3214 3215 resume_internet_with_sl4a_port(dut, sl4a_port) 3216 time.sleep(10) 3217 3218 if not test_data_browsing_success_using_sl4a(self.log, dut): 3219 dut.log.error("Browsing failed after resuming internet") 3220 return False 3221 return True 3222 finally: 3223 resume_internet_with_sl4a_port(dut, sl4a_port) 3224 3225 3226 @test_tracker_info(uuid="fda33416-698a-408f-8ddc-b5cde13b1f83") 3227 @TelephonyBaseTest.tel_test_wrap 3228 def test_data_stall_detection_cellular(self): 3229 """ Data Stall Detection Testing 3230 3231 1. Ensure device is camped, browsing working fine 3232 2. Break Internet access, browsing should fail 3233 3. Check for Data Stall Detection 3234 3235 """ 3236 return self._test_data_stall_detection_recovery(nw_type="cellular") 3237 3238 3239 @test_tracker_info(uuid="a57891d6-7892-46c7-8bca-23cd2cca8552") 3240 @TelephonyBaseTest.tel_test_wrap 3241 def test_data_stall_detection_wifi(self): 3242 """ Data Stall Detection Testing 3243 3244 1. Ensure device is connected to WiFi, browsing working fine 3245 2. Break Internet access, browsing should fail 3246 3. Check for Data Stall Detection 3247 3248 """ 3249 return self._test_data_stall_detection_recovery(nw_type="wifi") 3250 3251 3252 @test_tracker_info(uuid="16d3f123-cac3-45a9-a2e5-c01bab7044d4") 3253 @TelephonyBaseTest.tel_test_wrap 3254 def test_data_stall_recovery_cellular(self): 3255 """ Data Stall Recovery Testing 3256 3257 1. Ensure device is camped, browsing working fine 3258 2. Break Internet access, browsing should fail 3259 3. Check for Data Stall Detection 3260 4. Check for Data Stall Recovery 3261 3262 """ 3263 return self._test_data_stall_detection_recovery(nw_type="cellular", 3264 validation_type="recovery") 3265 3266 """ Tests End """ 3267