Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: build/android/pylib/device/device_utils.py

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Provides a variety of device interactions based on adb. 5 """Provides a variety of device interactions based on adb.
6 6
7 Eventually, this will be based on adb_wrapper. 7 Eventually, this will be based on adb_wrapper.
8 """ 8 """
9 # pylint: disable=W0613 9 # pylint: disable=W0613
10 10
11 import logging 11 import logging
12 import multiprocessing 12 import multiprocessing
13 import os 13 import os
14 import re 14 import re
15 import sys 15 import sys
16 import tempfile 16 import tempfile
17 import time 17 import time
18 import zipfile 18 import zipfile
19 19
20 import pylib.android_commands 20 import pylib.android_commands
21 from pylib import cmd_helper 21 from pylib import cmd_helper
22 from pylib import constants 22 from pylib import constants
23 from pylib.device import adb_wrapper 23 from pylib.device import adb_wrapper
24 from pylib.device import decorators 24 from pylib.device import decorators
25 from pylib.device import device_errors 25 from pylib.device import device_errors
26 from pylib.device import intent
26 from pylib.device.commands import install_commands 27 from pylib.device.commands import install_commands
27 from pylib.utils import apk_helper 28 from pylib.utils import apk_helper
28 from pylib.utils import device_temp_file 29 from pylib.utils import device_temp_file
29 from pylib.utils import host_utils 30 from pylib.utils import host_utils
30 from pylib.utils import md5sum 31 from pylib.utils import md5sum
31 from pylib.utils import parallelizer 32 from pylib.utils import parallelizer
32 from pylib.utils import timeout_retry 33 from pylib.utils import timeout_retry
34 from pylib.utils import zip_utils
33 35
34 _DEFAULT_TIMEOUT = 30 36 _DEFAULT_TIMEOUT = 30
35 _DEFAULT_RETRIES = 3 37 _DEFAULT_RETRIES = 3
36 38
37 # A sentinel object for default values 39 # A sentinel object for default values
38 # TODO(jbudorick,perezju): revisit how default values are handled by 40 # TODO(jbudorick,perezju): revisit how default values are handled by
39 # the timeout_retry decorators. 41 # the timeout_retry decorators.
40 DEFAULT = object() 42 DEFAULT = object()
41 43
42 44
(...skipping 19 matching lines...) Expand all
62 64
63 65
64 @decorators.WithExplicitTimeoutAndRetries( 66 @decorators.WithExplicitTimeoutAndRetries(
65 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES) 67 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
66 def RestartServer(): 68 def RestartServer():
67 """Restarts the adb server. 69 """Restarts the adb server.
68 70
69 Raises: 71 Raises:
70 CommandFailedError if we fail to kill or restart the server. 72 CommandFailedError if we fail to kill or restart the server.
71 """ 73 """
72 pylib.android_commands.AndroidCommands().RestartAdbServer() 74 def adb_killed():
75 return not adb_wrapper.AdbWrapper.IsServerOnline()
76
77 def adb_started():
78 return adb_wrapper.AdbWrapper.IsServerOnline()
79
80 adb_wrapper.AdbWrapper.KillServer()
81 if not timeout_retry.WaitFor(adb_killed, wait_period=1, max_tries=5):
82 # TODO(perezju): raise an exception after fixng http://crbug.com/442319
83 logging.warning('Failed to kill adb server')
84 adb_wrapper.AdbWrapper.StartServer()
85 if not timeout_retry.WaitFor(adb_started, wait_period=1, max_tries=5):
86 raise device_errors.CommandFailedError('Failed to start adb server')
73 87
74 88
75 def _GetTimeStamp(): 89 def _GetTimeStamp():
76 """Return a basic ISO 8601 time stamp with the current local time.""" 90 """Return a basic ISO 8601 time stamp with the current local time."""
77 return time.strftime('%Y%m%dT%H%M%S', time.localtime()) 91 return time.strftime('%Y%m%dT%H%M%S', time.localtime())
78 92
79 93
80 class DeviceUtils(object): 94 class DeviceUtils(object):
81 95
82 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$') 96 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$')
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 """Return to the home screen. 594 """Return to the home screen.
581 595
582 Args: 596 Args:
583 timeout: timeout in seconds 597 timeout: timeout in seconds
584 retries: number of retries 598 retries: number of retries
585 599
586 Raises: 600 Raises:
587 CommandTimeoutError on timeout. 601 CommandTimeoutError on timeout.
588 DeviceUnreachableError on missing device. 602 DeviceUnreachableError on missing device.
589 """ 603 """
590 self.old_interface.GoHome() 604 self.StartActivity(
605 intent.Intent(action='android.intent.action.MAIN',
606 category='android.intent.category.HOME'),
607 blocking=True)
591 608
592 @decorators.WithTimeoutAndRetriesFromInstance() 609 @decorators.WithTimeoutAndRetriesFromInstance()
593 def ForceStop(self, package, timeout=None, retries=None): 610 def ForceStop(self, package, timeout=None, retries=None):
594 """Close the application. 611 """Close the application.
595 612
596 Args: 613 Args:
597 package: A string containing the name of the package to stop. 614 package: A string containing the name of the package to stop.
598 timeout: timeout in seconds 615 timeout: timeout in seconds
599 retries: number of retries 616 retries: number of retries
600 617
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 finally: 825 finally:
809 if zip_proc.is_alive(): 826 if zip_proc.is_alive():
810 zip_proc.terminate() 827 zip_proc.terminate()
811 if self.IsOnline(): 828 if self.IsOnline():
812 self.RunShellCommand(['rm', zip_on_device], check_return=True) 829 self.RunShellCommand(['rm', zip_on_device], check_return=True)
813 830
814 @staticmethod 831 @staticmethod
815 def _CreateDeviceZip(zip_path, host_device_tuples): 832 def _CreateDeviceZip(zip_path, host_device_tuples):
816 with zipfile.ZipFile(zip_path, 'w') as zip_file: 833 with zipfile.ZipFile(zip_path, 'w') as zip_file:
817 for host_path, device_path in host_device_tuples: 834 for host_path, device_path in host_device_tuples:
818 if os.path.isfile(host_path): 835 zip_utils.WriteToZipFile(zip_file, host_path, device_path)
819 zip_file.write(host_path, device_path, zipfile.ZIP_DEFLATED)
820 else:
821 for hd, _, files in os.walk(host_path):
822 dd = '%s/%s' % (device_path, os.path.relpath(host_path, hd))
823 zip_file.write(hd, dd, zipfile.ZIP_STORED)
824 for f in files:
825 zip_file.write(os.path.join(hd, f), '%s/%s' % (dd, f),
826 zipfile.ZIP_DEFLATED)
827 836
828 @decorators.WithTimeoutAndRetriesFromInstance() 837 @decorators.WithTimeoutAndRetriesFromInstance()
829 def FileExists(self, device_path, timeout=None, retries=None): 838 def FileExists(self, device_path, timeout=None, retries=None):
830 """Checks whether the given file exists on the device. 839 """Checks whether the given file exists on the device.
831 840
832 Args: 841 Args:
833 device_path: A string containing the absolute path to the file on the 842 device_path: A string containing the absolute path to the file on the
834 device. 843 device.
835 timeout: timeout in seconds 844 timeout: timeout in seconds
836 retries: number of retries 845 retries: number of retries
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 Returns: 1285 Returns:
1277 A Parallelizer operating over |devices|. 1286 A Parallelizer operating over |devices|.
1278 """ 1287 """
1279 if not devices: 1288 if not devices:
1280 devices = adb_wrapper.AdbWrapper.GetDevices() 1289 devices = adb_wrapper.AdbWrapper.GetDevices()
1281 devices = [d if isinstance(d, cls) else cls(d) for d in devices] 1290 devices = [d if isinstance(d, cls) else cls(d) for d in devices]
1282 if async: 1291 if async:
1283 return parallelizer.Parallelizer(devices) 1292 return parallelizer.Parallelizer(devices)
1284 else: 1293 else:
1285 return parallelizer.SyncParallelizer(devices) 1294 return parallelizer.SyncParallelizer(devices)
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_errors.py ('k') | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698