def start_youtube_video(self, url=None, secs=60): """Start a youtube video and check if it's playing. Args: url: The URL of the youtube video to play. secs: Time to play video in seconds. """ ad = self.dut ad.log.info("Start a youtube video") ad.ensure_screen_on() video_played = False for count in range(2): ad.unlock_screen() ad.adb.shell('am start -a android.intent.action.VIEW -d "%s"' % url) if tutils.wait_for_state(ad.droid.audioIsMusicActive, True, 15, 1): ad.log.info("Started a video in youtube.") # Play video for given seconds. time.sleep(secs) video_played = True break if not video_played: raise signals.TestFailure( "Youtube video did not start. Current WiFi " "state is %d" % self.dut.droid.wifiCheckState())
def wait_for_carrier_switch_completed(self, ad, carrier, timeout=_MAX_WAIT_TIME, check_interval=10): """Wait for carrier switch to complete. This function waits for a carrier switch to complete by monitoring the Tycho switching controller preference file. Args: ad: An Android device object. carrier: The target carrier network to switch to. timeout: (integer) Time wait for switch to complete. Return: True or False for successful/unsuccessful switch. """ check_args = [ad, carrier] if wait_for_state(self.check_network_carrier, True, check_interval, timeout, *check_args): ad.log.info("Switched to %s successfully", carrier) ad.send_keycode("ENTER") return True else: active_carrier = self.get_active_carrier(ad) if active_carrier == carrier: ad.log.info("Switched to %s successfully", carrier) return True ad.log.error("Carrier is %s. Fail to switch to %s", active_carrier, carrier) return False
def _check_volte_provisioning(self): if CAPABILITY_OMADM in self.dut_capabilities: if not wait_for_state(self.dut.droid.imsIsVolteProvisionedOnDevice, True): self.dut.log.error("VoLTE provisioning is disabled.") return False else: self.dut.log.info("VoLTE provision is enabled") return True return True
def _check_volte(self): if CAPABILITY_VOLTE in self.dut_capabilities: self._set_volte_provisioning() if not self._check_volte_provisioning(): return False self.log.info("Check VoLTE") if not wait_for_state(self.dut.droid.imsIsVolteProvisionedOnDevice, True): self.dut.log.error("VoLTE provisioning is disabled.") return False if not phone_setup_volte(self.log, self.dut): self.log.error("Failed to setup VoLTE.") return False time.sleep(5) if not call_setup_teardown(self.log, self.dut, self.ad_reference, self.dut, is_phone_in_call_volte): self.log.error("VoLTE Call Failed.") return False if not self._check_lte_data(): return False else: self.dut.log.info("VoLTE is not supported") return False return True
def change_ims_setting(self, airplane_mode, wifi_enabled, volte_enabled, wfc_enabled, wfc_mode=None): result = True self.dut.log.info( "Setting APM %s, WIFI %s, VoLTE %s, WFC %s, WFC mode %s", airplane_mode, wifi_enabled, volte_enabled, wfc_enabled, wfc_mode) toggle_airplane_mode_by_adb(self.log, self.dut, airplane_mode) if wifi_enabled: if not ensure_wifi_connected(self.log, self.dut, self.wifi_network_ssid, self.wifi_network_pass, apm=airplane_mode): self.dut.log.error("Fail to connected to WiFi") result = False else: if not wifi_toggle_state(self.log, self.dut, False): self.dut.log.error("Failed to turn off WiFi.") result = False toggle_volte(self.log, self.dut, volte_enabled) toggle_wfc(self.log, self.dut, wfc_enabled) if wfc_mode: set_wfc_mode(self.log, self.dut, wfc_mode) wfc_mode = self.dut.droid.imsGetWfcMode() if wifi_enabled or not airplane_mode: if not ensure_phone_subscription(self.log, self.dut): self.dut.log.error("Failed to find valid subscription") result = False if airplane_mode: if (CAPABILITY_WFC in self.dut_capabilities) and (wifi_enabled and wfc_enabled): if not wait_for_wfc_enabled(self.log, self.dut): result = False elif not self.check_call_in_wfc(): result = False else: if not wait_for_state( self.dut.droid.telephonyGetCurrentVoiceNetworkType, RAT_UNKNOWN): self.dut.log.error( "Voice RAT is %s not UNKNOWN", self.dut.droid.telephonyGetCurrentVoiceNetworkType()) result = False else: self.dut.log.info("Voice RAT is in UNKKNOWN") else: if (wifi_enabled and wfc_enabled) and ( wfc_mode == WFC_MODE_WIFI_PREFERRED) and ( CAPABILITY_WFC in self.dut_capabilities): if not wait_for_wfc_enabled(self.log, self.dut): result = False if not wait_for_state( self.dut.droid.telephonyGetCurrentVoiceNetworkType, RAT_UNKNOWN): self.dut.log.error( "Voice RAT is %s, not UNKNOWN", self.dut.droid.telephonyGetCurrentVoiceNetworkType()) if not self.check_call_in_wfc(): result = False else: if not wait_for_wfc_disabled(self.log, self.dut): self.dut.log.error("WFC is not disabled") result = False if volte_enabled and CAPABILITY_VOLTE in self.dut_capabilities: if not wait_for_volte_enabled(self.log, self.dut): result = False if not self.check_call_in_volte(): result = False else: if not wait_for_not_network_rat( self.log, self.dut, RAT_LTE, voice_or_data=NETWORK_SERVICE_VOICE): self.dut.log.error( "Voice RAT is %s", self.dut.droid.telephonyGetCurrentVoiceNetworkType( )) result = False if not wait_for_voice_attach(self.log, self.dut): result = False if not self.check_call(): result = False user_config_profile = get_user_config_profile(self.dut) self.dut.log.info("user_config_profile: %s ", sorted(user_config_profile.items())) return result
def airplane_mode_test(log, ad, retries=3): """ Test airplane mode basic on Phone and Live SIM. Ensure phone attach, data on, WiFi off and verify Internet. Turn on airplane mode to make sure detach. Turn off airplane mode to make sure attach. Verify Internet connection. Args: log: log object. ad: android object. Returns: True if pass; False if fail. """ if not ensure_phones_idle(log, [ad]): log.error("Failed to return phones to idle.") return False try: ad.droid.telephonyToggleDataConnection(True) wifi_toggle_state(log, ad, False) ad.log.info("Step1: disable airplane mode and ensure attach") if not toggle_airplane_mode(log, ad, False): ad.log.error("Failed initial attach") return False if not wait_for_state(get_service_state_by_adb, "IN_SERVICE", MAX_WAIT_TIME_FOR_STATE_CHANGE, WAIT_TIME_BETWEEN_STATE_CHECK, log, ad): ad.log.error("Current service state is not 'IN_SERVICE'.") return False time.sleep(30) if not ad.droid.connectivityNetworkIsConnected(): ad.log.error("Network is NOT connected!") return False if not wait_for_cell_data_connection(log, ad, True): ad.log.error("Failed to enable data connection.") return False if not verify_internet_connection(log, ad, retries=3): ad.log.error("Data not available on cell.") return False log.info("Step2: enable airplane mode and ensure detach") if not toggle_airplane_mode(log, ad, True): ad.log.error("Failed to enable Airplane Mode") return False if not wait_for_cell_data_connection(log, ad, False): ad.log.error("Failed to disable cell data connection") return False if not verify_internet_connection(log, ad, expected_state=False): ad.log.error("Data available in airplane mode.") return False log.info("Step3: disable airplane mode and ensure attach") if not toggle_airplane_mode(log, ad, False): ad.log.error("Failed to disable Airplane Mode") return False if not wait_for_state(get_service_state_by_adb, "IN_SERVICE", MAX_WAIT_TIME_FOR_STATE_CHANGE, WAIT_TIME_BETWEEN_STATE_CHECK, log, ad): ad.log.error("Current service state is not 'IN_SERVICE'.") return False time.sleep(30) if not ad.droid.connectivityNetworkIsConnected(): ad.log.warning("Network is NOT connected!") if not wait_for_cell_data_connection(log, ad, True): ad.log.error("Failed to enable cell data connection") return False if not verify_internet_connection(log, ad, retries=3): ad.log.warning("Data not available on cell") return False return True finally: toggle_airplane_mode(log, ad, False)