def test_forward_list(self): adb = Adb() os.name = 'posix' adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = (b"014E05DE0F02000E tcp:9008 tcp:9008\r\n489328DKFL7DF tcp:9008 tcp:9008", b"") self.assertEqual(adb.forward_list(), [['014E05DE0F02000E', 'tcp:9008', 'tcp:9008'], ['489328DKFL7DF', 'tcp:9008', 'tcp:9008']]) os.name = 'nt' self.assertEqual(adb.forward_list(), [])
def test_forward_list(self): adb = Adb() adb.version = MagicMock() adb.version.return_value = ['1.0.31', '1', '0', '31'] adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = (b"014E05DE0F02000E tcp:9008 tcp:9008\r\n489328DKFL7DF tcp:9008 tcp:9008", b"") self.assertEqual(adb.forward_list(), [['014E05DE0F02000E', 'tcp:9008', 'tcp:9008'], ['489328DKFL7DF', 'tcp:9008', 'tcp:9008']]) adb.version.return_value = ['1.0.29', '1', '0', '29'] with self.assertRaises(EnvironmentError): adb.forward_list()
def test_forward_list(self): adb = Adb() adb.version = MagicMock() adb.version.return_value = ['1.0.31', '1', '0', '31'] adb.raw_cmd = MagicMock() adb.raw_cmd.return_value.communicate.return_value = (b"014E05DE0F02000E tcp:9008 tcp:9008\r\n489328DKFL7DF tcp:9008 tcp:9008", b"") self.assertEqual(adb.forward_list(), [['014E05DE0F02000E', 'tcp:9008', 'tcp:9008'], ['489328DKFL7DF', 'tcp:9008', 'tcp:9008']]) adb.version.return_value = ['1.0.29', '1', '0', '29'] with self.assertRaises(EnvironmentError): adb.forward_list()
class AutomatorServer(uiautomator.AutomatorServer, object): """start and quit rpc server on device. """ __jar_files = { "bundle.jar": "libs/bundle.jar", "uiautomator-stub.jar": "libs/uiautomator-stub.jar" } handlers = NotFoundHandler() # handler UI Not Found exception def __init__(self, serial=None, local_port=None): self.uiautomator_process = None self.adb = Adb(serial=serial) self.device_port = 9008 if local_port: self.local_port = local_port else: try: # first we will try to use the local port already adb forwarded for s, lp, rp in self.adb.forward_list(): if s == self.adb.device_serial( ) and rp == 'tcp:%d' % self.device_port: self.local_port = int(lp[4:]) break else: self.local_port = next_local_port() except: self.local_port = next_local_port() @property def jsonrpc(self): server = self ERROR_CODE_BASE = -32000 def _JsonRPCMethod(url, method, timeout, restart=True): _method_obj = JsonRPCMethod(url, method, timeout) def wrapper(*args, **kwargs): URLError = urllib3.exceptions.HTTPError if os.name == "nt" else urllib2.URLError try: return _method_obj(*args, **kwargs) except (URLError, socket.error, HTTPException) as e: if restart: server.stop() server.start() return _JsonRPCMethod(url, method, timeout, False)(*args, **kwargs) else: raise except JsonRPCError as e: if e.code >= ERROR_CODE_BASE - 2: server.stop() server.start() print "i am here & do something in this place will work!" Exception_analyze.analysis_crash() return _method_obj(*args, **kwargs) raise return wrapper return JsonRPCClient(self.rpc_uri, timeout=int(os.environ.get("JSONRPC_TIMEOUT", 90)), method_class=_JsonRPCMethod)