def check_normal_call(self): result = True if "wfc" not in self.test_name: toggle_airplane_mode_by_adb(self.log, self.dut, False) self.dut.ensure_screen_on() self.dut.exit_setup_wizard() reset_device_password(self.dut, None) begin_time = get_current_epoch_time() if not call_setup_teardown( self.log, self.android_devices[1], self.dut, ad_hangup=self.android_devices[1]): self.dut.log.error("Regular MT phone call fails") self.dut.log.info("call_info = %s", dumpsys_last_call_info( self.dut)) result = False if not call_setup_teardown( self.log, self.dut, self.android_devices[1], ad_hangup=self.dut): self.dut.log.error("Regular MO phone call fails") self.dut.log.info("call_info = %s", dumpsys_last_call_info( self.dut)) result = False return result
def teardown_test(self): self.dut.ensure_screen_on() self.dut.exit_setup_wizard() reset_device_password(self.dut, None) output = self.dut.adb.shell("dumpsys carrier_config") for setting, state in self.default_settings.items(): values = re.findall(r"%s = (\S+)" % setting, output) if values and values[-1] != state: self.dut.adb.shell(" ".join( [CARRIER_OVERRIDE_CMD, setting, state])) ensure_phone_default_state(self.log, self.dut)
def test_fake_emergency_call_in_screen_lock_no_sim(self): """Test emergency call with emergency dialer in screen lock phase. Enable device password and then reboot upto password query window. Add storyline number to system emergency number list. Use the emergency dialer to call storyline. Verify DUT has in call activity. Returns: True if success. False if failed. """ reset_device_password(self.dut, DEFAULT_DEVICE_PASSWORD) self.dut.reboot(stop_at_lock_screen=True) return self.fake_emergency_call_test()
def test_fake_emergency_call_in_screen_lock_apm_ecbm(self): """Test emergency call with emergency dialer in screen lock phase. Enable device password and then reboot upto password query window. Add system emergency number list with fake emergency number. Configure allow_non_emergency_calls_in_ecm_bool true. Call fake emergency number and hung up before connected. Verify DUT call and data activity in ecbm mode. Returns: True if success. False if failed. """ toggle_airplane_mode_by_adb(self.log, self.dut, True) reset_device_password(self.dut, DEFAULT_DEVICE_PASSWORD) self.dut.reboot(stop_at_lock_screen=True) if not wait_for_sim_ready_by_adb(self.log, self.dut): self.dut.log.error("SIM is not ready") return False return self.check_emergency_call_back_mode()
def test_fake_emergency_call_in_screen_lock_apm(self): """Test emergency call with emergency dialer in screen lock phase. Enable device password and then reboot upto password query window. Add system emergency number list with fake emergency number. Use the emergency dialer to call fake emergency number. Verify DUT has in call activity. Bring DUT to normal state and make regular call. Returns: True if success. False if failed. """ toggle_airplane_mode_by_adb(self.log, self.dut, True) reset_device_password(self.dut, DEFAULT_DEVICE_PASSWORD) self.dut.reboot(stop_at_lock_screen=True) if not wait_for_sim_ready_by_adb(self.log, self.dut): self.dut.log.error("SIM is not ready") return False return self.fake_emergency_call_test() and self.check_normal_call()
def check_emergency_call_back_mode(self, by_emergency_dialer=True, non_emergency_call_allowed=True, attemps=3): state = "true" if non_emergency_call_allowed else "false" self.set_allow_non_emergency_call(state) result = True for _ in range(attemps): if not self.change_emergency_number_list(): self.dut.log.error("Unable to add number to ril.ecclist") return False last_call_number = dumpsys_last_call_number(self.dut) self.dut.log.info("Hung up fake emergency call in ringing") if by_emergency_dialer: initiate_emergency_dialer_call_by_adb( self.log, self.dut, self.fake_emergency_number, timeout=0) else: callee = "+%s" % self.fake_emergency_number self.dut.droid.telecomCallNumber(callee) time.sleep(3) hangup_call_by_adb(self.dut) ecclist = self.dut.adb.getprop("ril.ecclist") self.dut.log.info("ril.ecclist = %s", ecclist) if self.fake_emergency_number in ecclist: break call_info = dumpsys_new_call_info(self.dut, last_call_number) if not call_info: return False call_tech = call_info.get("callTechnologies", "") if "CDMA" in call_tech: expected_ecbm = True expected_data = False expected_call = non_emergency_call_allowed elif "GSM" in call_tech: expected_ecbm = True expected_data = True expected_call = True else: expected_ecbm = False expected_data = True expected_call = True last_call_number = dumpsys_last_call_number(self.dut) begin_time = get_current_epoch_time() self.dut.ensure_screen_on() self.dut.exit_setup_wizard() reset_device_password(self.dut, None) call_check = call_setup_teardown(self.log, self.dut, self.android_devices[1], ad_hangup=self.dut) if call_check != expected_call: self.dut.log.error("Regular phone call is %s, expecting %s", call_check, expected_call) result = False call_info = dumpsys_new_call_info(self.dut, last_call_number) if not call_info: self.dut.log.error("New call is not in dumpsys telecom") return False if expected_ecbm: if "ecbm" in call_info["callProperties"]: self.dut.log.info("New call is in ecbm.") else: self.dut.log.error( "New call is not in emergency call back mode.") result = False else: if "ecbm" in call_info["callProperties"]: self.dut.log.error("New call is in emergency call back mode") result = False if not expected_data: if self.dut.droid.telephonyGetDataConnectionState(): self.dut.log.info( "Data connection is off as expected in ECB mode") self.dut.log.info("Wait for getting out of ecbm") if not wait_for_cell_data_connection(self.log, self.dut, True, 400): self.dut.log.error( "Data connection didn't come back after 5 minutes") result = False #if not self.dut.droid.telephonyGetDataConnectionState(): # self.dut.log.error( # "Data connection is not coming back") # result = False elif not verify_internet_connection(self.log, self.dut): self.dut.log.error( "Internet connection check failed after getting out of ECB" ) result = False else: self.dut.log.error("Data connection is not off in ECB mode") if not verify_internet_connection(self.log, self.dut, False): self.dut.log.error("Internet connection is not off") result = False else: if self.dut.droid.telephonyGetDataConnectionState(): self.dut.log.info("Data connection is on as expected") if not verify_internet_connection(self.log, self.dut): self.dut.log.error("Internet connection check failed") result = False else: self.dut.log.error("Data connection is off, expecting on") result = False if expected_call: return result elapsed_time = (get_current_epoch_time() - begin_time) / 1000 if elapsed_time < BLOCK_DURATION: time.sleep(BLOCK_DURATION - elapsed_time + 10) if not call_setup_teardown( self.log, self.dut, self.android_devices[1], ad_hangup=self.dut): self.dut.log.error("Regular phone call failed after out of ecbm") result = False return result
def teardown_test(self): self.dut.ensure_screen_on() self.dut.exit_setup_wizard() reset_device_password(self.dut, None)