def stop_adb_server(self): try: cmd_line = "adb kill-server" if self._logger: self._logger.debug("[ADB-SERVER] Stopping ADB server ...") status, status_msg = internal_shell_exec(cmd_line, 5) if status == Global.SUCCESS: self._adb_server_is_running = False else: if self._logger: self._logger.error( "[ADB-SERVER] Stopping failure (status: %s)" % str(status_msg)) if not self._adb_server_is_running: if self._logger: self._logger.debug("[ADB-SERVER] ADB server stopped") except Exception as error: # pylint: disable=W0703 if self._logger: self._logger.error( "[ADB-SERVER] Stopping failure; adb not found (cmd: %s, error: %s)" % (str(cmd_line), str(error))) raise
def adb_ethernet_stop(self, ip_address, port, timeout=10): """ Stop adb server and disconnect from adbd """ is_disconnected = False if self._logger: self._logger.debug("[ADB-SERVER] stopping and disconnecting over ETHERNET (IP: %s, Port: %s)..." % (ip_address, port)) try: cmd_line = "adb disconnect %s:%s" % (ip_address, port) status, return_msg = internal_shell_exec(cmd_line, timeout) if status == Global.SUCCESS: if return_msg.startswith("") or return_msg.startswith("No such"): msg = "[ADB-SERVER] stopped and disconnected from DUT (%s)" % return_msg is_disconnected = True else: msg = "[ADB-SERVER] stopped but connection to DUT status is unknown (%s)" % return_msg else: msg = "[ADB-SERVER] Stop failure (status: %s)" % str(return_msg) if self._logger: self._logger.debug(msg) except Exception as error: # pylint: disable=W0703 if self._logger: self._logger.debug("[ADB-SERVER] fail to stop over ETHERNET (%s)" % str(error)) return is_disconnected
def adb_ethernet_start(self, ip_address, port, retries=3, timeout=10): """ Start adb server and connect to adbd :type ip_address: str :param ip_address: ip address of the device :type port: str :param port: port number to connect to device adb client :type max_retry_number: int :param max_retry_number: max number of tries for adb connection with the device :rtype: bool :return: adb connection state (True if adb is connected else False) """ is_connected = False current_try = 1 if self._logger: self._logger.debug("[ADB-SERVER] starting and connecting over ETHERNET (IP: %s, Port: %s)..." % (ip_address, port)) while current_try <= retries and not is_connected: try: msg = "adb connect KO" cmd = "adb connect %s:%s" % (ip_address, port) result, return_msg = internal_shell_exec(cmd, timeout) if result == Global.SUCCESS: if return_msg.startswith("unable"): msg = "[ADB-SERVER] Fail to connect to DUT (%s)" % return_msg elif "already" in return_msg or "connected" in return_msg: # In ethernet, we also need check adb connection with adb shell presence msg = "[ADB-SERVER] Connected to DUT (%s)" % return_msg run_cmd_code, run_cmd_msg = self.run_cmd("adb shell echo", 10, True) if run_cmd_code == Global.FAILURE: msg += "/ adb shell NOK (%s)" % run_cmd_msg else: msg += "/ adb shell OK (%s)" % run_cmd_msg is_connected = True else: msg = "[ADB-SERVER] Connection to DUT status is unknown (%s)" % return_msg else: msg = "Connect to adb server has failed" if self._logger: self._logger.debug(msg) except Exception as error: # pylint: disable=W0703 if self._logger: self._logger.debug("[ADB-SERVER] started but fail to connect over ETHERNET (%s)" % str(error)) finally: # increment the connection retry number current_try += 1 return is_connected
def adb_start(self, timeout=10): """Start adb server """ self.__lock.acquire() cmd_line = "adb start-server" self._adb_server_is_running = False try: # WA to integrate the patch until all server are killed # self._adb_host_port = self.get_adb_server_port(port=self._adb_host_port, # retry=5) os.environ["ANDROID_ADB_SERVER_PORT"] = str(self._adb_host_port) self.stop_adb_server() if self._logger: self._logger.debug( "[ADB-SERVER] Starting ADB server on {0}...".format( self._adb_host_port)) # below sleep time gives some time for adb to respond after # "stop_adb_server()" time.sleep(1) status, status_msg = internal_shell_exec(cmd_line, timeout) if status == Global.SUCCESS: self._adb_server_is_running = True if self._logger: self._logger.debug("[ADB-SERVER] ADB server started") else: if self._logger: self._logger.error( "[ADB-SERVER] Starting failure (status: %s)" % str(status_msg)) except Exception as error: # pylint: disable=W0703 if self._logger: self._logger.error( "[ADB-SERVER] Starting failure; adb not found (cmd: %s, error: %s)" % (str(cmd_line), str(error))) raise finally: self.__lock.release()
def run(self, context): """ Runs the test step :type context: TestStepContext :param context: test case context Context parameters list: - cmd: command to be run - timeout: script execution timeout in sec - silent_mode: Display logs in ACS logger - save_as: context variable name where stdout of the command is put """ TestStepBase.run(self, context) # Fetch params values command = self._pars.command timeout = self._pars.timeout silent_mode = self._pars.silent_mode command_result = self._pars.save_as exit_status, output = internal_shell_exec(cmd=command, timeout=timeout, silent_mode=silent_mode) if not silent_mode: self._logger.info( "RunLocalCommand: output for {0} command: '{1}'".format( command, output)) if exit_status == Global.FAILURE: raise TestEquipmentException( TestEquipmentException.COMMAND_LINE_ERROR, "RunCommand: Error at execution of '{0}' command: {1}".format( command, output)) context.set_info(command_result, output)