def __init__(self, controllers): TelephonyBaseTest.__init__(self, controllers) self.stress_test_number = self.get_stress_test_number() self.attens = {} for atten in self.attenuators: self.attens[atten.path] = atten attentuator_name_list = [ ATTEN_NAME_FOR_WIFI_2G, ATTEN_NAME_FOR_WIFI_5G, ATTEN_NAME_FOR_CELL_3G, ATTEN_NAME_FOR_CELL_4G ] for atten_name in attentuator_name_list: set_rssi(self.log, self.attens[atten_name], 0, MAX_RSSI_RESERVED_VALUE)
def setup_class(self): super().setup_class() self.stress_test_number = self.get_stress_test_number() self.attens = {} for atten in self.attenuators: self.attens[atten.path] = atten attentuator_name_list = [ ATTEN_NAME_FOR_WIFI_2G, ATTEN_NAME_FOR_WIFI_5G, ATTEN_NAME_FOR_CELL_3G, ATTEN_NAME_FOR_CELL_4G ] for atten_name in attentuator_name_list: set_rssi(self.log, self.attens[atten_name], 0, MAX_RSSI_RESERVED_VALUE)
def _atten_setup_wifi_cell(self): set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, MAX_RSSI_RESERVED_VALUE)
def _atten_setup_no_service(self): set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, MIN_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, MIN_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, MIN_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, MIN_RSSI_RESERVED_VALUE)
def teardown_test(self): super().teardown_test() set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, MAX_RSSI_RESERVED_VALUE) return True
def test_wifi_cell_switching_stress(self): """Test for data switch between WiFi and Cell. DUT go in and out WiFi coverage for multiple times. Steps: 1. Set WiFi and Cellular signal to good (attenuation value to MIN). 2. Make sure DUT get Cell data coverage (LTE) and WiFi connected. 3. Set WiFi RSSI to MAX (WiFi attenuator value to MIN). 4. Verify DUT report WiFi connected and Internet access OK. 5. Set WiFi RSSI to MIN (WiFi attenuator value to MAX). 6. Verify DUT report Cellular Data connected and Internet access OK. 7. Repeat Step 3~6 for stress number. Expected Results: 4. DUT report WiFi connected and Internet access OK. 6. DUT report Cellular Data connected and Internet access OK. 7. Stress test should pass. Returns: True if Pass. False if fail. """ WIFI_RSSI_CHANGE_STEP_SIZE = 2 WIFI_RSSI_CHANGE_DELAY_PER_STEP = 1 # Set Attenuator Value for WiFi and Cell to 0. set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL], 0, MAX_RSSI_RESERVED_VALUE) # Make sure DUT get Cell Data coverage (LTE). toggle_airplane_mode(self.log, self.android_devices[0], False) if not ensure_network_generation(self.log, self.android_devices[0], GEN_4G, NETWORK_SERVICE_DATA): return False # Make sure DUT WiFi is connected. if not ensure_wifi_connected(self.log, self.android_devices[0], self.live_network_ssid, self.live_network_pwd): self.log.error("{} connect WiFI failed".format( self.android_devices[0].serial)) return False total_iteration = self.stress_test_number self.log.info("Stress test. Total iteration = {}.".format( total_iteration)) current_iteration = 1 while (current_iteration <= total_iteration): self.log.info(">----Current iteration = {}/{}----<".format( current_iteration, total_iteration)) # Set WiFi RSSI to MAX. set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI], 0, MAX_RSSI_RESERVED_VALUE, WIFI_RSSI_CHANGE_STEP_SIZE, WIFI_RSSI_CHANGE_DELAY_PER_STEP) # Wait for DUT report WiFi connected and Internet access OK. if (not wait_for_wifi_data_connection( self.log, self.android_devices[0], True) or not verify_http_connection(self.log, self.android_devices[0])): self.log.error("Data not on WiFi") break # Set WiFi RSSI to MIN (DUT lose WiFi coverage). set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI], 0, MIN_RSSI_RESERVED_VALUE, WIFI_RSSI_CHANGE_STEP_SIZE, WIFI_RSSI_CHANGE_DELAY_PER_STEP) # Wait for DUT report Cellular Data connected and Internet access OK. if (not wait_for_cell_data_connection( self.log, self.android_devices[0], True) or not verify_http_connection(self.log, self.android_devices[0])): self.log.error("Data not on Cell") break self.log.info(">----Iteration : {}/{} succeed.----<".format( current_iteration, total_iteration)) current_iteration += 1 if current_iteration <= total_iteration: self.log.info(">----Iteration : {}/{} failed.----<".format( current_iteration, total_iteration)) return False else: return True
def environment_change_4g_3g(self): #block wifi 2G and 5G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0, MIN_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0, MIN_RSSI_RESERVED_VALUE) while time.time() < self.finishing_time: #set strong cell 4G and 3G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0, MAX_RSSI_RESERVED_VALUE) set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0, MAX_RSSI_RESERVED_VALUE) #gratually decrease cell 4G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], self.cell_rssi_with_no_atten, MIN_RSSI_RESERVED_VALUE, self.signal_change_step, self.signal_change_interval) #gradtually increase cell 4G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], MIN_RSSI_RESERVED_VALUE, MAX_RSSI_RESERVED_VALUE, self.signal_change_step, self.signal_change_interval) #gratually decrease cell 3G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], self.cell_rssi_with_no_atten, MIN_RSSI_RESERVED_VALUE, self.signal_change_step, self.signal_change_interval) #gradtually increase cell 3G set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], MIN_RSSI_RESERVED_VALUE, MAX_RSSI_RESERVED_VALUE, self.signal_change_step, self.signal_change_interval) return ""