Index: build/android/pylib/android_commands.py |
diff --git a/build/android/pylib/android_commands.py b/build/android/pylib/android_commands.py |
index b5559ed63c7efb4731cd42e5314a6ed6654c0c27..e665a656634d8989dad238b77d764cd392f63088 100644 |
--- a/build/android/pylib/android_commands.py |
+++ b/build/android/pylib/android_commands.py |
@@ -11,6 +11,7 @@ import collections |
import datetime |
import logging |
import os |
+import random |
import re |
import shlex |
import subprocess |
@@ -312,29 +313,33 @@ class AndroidCommands(object): |
Args: |
package_file_path: Path to .apk file to install. |
- reinstall: Whether to reinstall over existing package |
+ reinstall: Reinstall an existing apk, keeping the data. |
Returns: |
A status string returned by adb install |
""" |
assert os.path.isfile(package_file_path) |
+ install_cmd = ['install'] |
+ |
if reinstall: |
- install_cmd = 'install -r %s' |
- else: |
- install_cmd = 'install %s' |
+ install_cmd.append('-r') |
+ |
+ install_cmd.append(package_file_path) |
+ install_cmd = ' '.join(install_cmd) |
Isaac (away)
2012/08/23 02:30:07
nit: please use fresh variable here
|
- return self._adb.SendCommand(install_cmd % package_file_path, |
- timeout_time=2*60, retry_count=0) |
+ logging.info('>>> $' + install_cmd) |
+ return self._adb.SendCommand(install_cmd, timeout_time=2*60, retry_count=0) |
- def ManagedInstall(self, apk_path, keep_data, package_name=None, |
+ def ManagedInstall(self, apk_path, keep_data=False, package_name=None, |
reboots_on_failure=2): |
"""Installs specified package and reboots device on timeouts. |
Args: |
apk_path: Path to .apk file to install. |
- keep_data: Whether to keep data if package already exists |
- package_name: Package name (only needed if keep_data=False) |
+ keep_data: Reinstalls instead of uninstalling first, preserving the |
+ application data. |
+ package_name: Package name (only needed if keep_data=False). |
reboots_on_failure: number of time to reboot if package manager is frozen. |
Returns: |
@@ -344,8 +349,9 @@ class AndroidCommands(object): |
while True: |
try: |
if not keep_data: |
+ assert package_name |
self.Uninstall(package_name) |
- install_status = self.Install(apk_path, keep_data) |
+ install_status = self.Install(apk_path, reinstall=keep_data) |
if 'Success' in install_status: |
return install_status |
except errors.WaitForResponseTimedOutError: |
@@ -987,3 +993,35 @@ class AndroidCommands(object): |
break |
logging.info('PidsUsingDevicePort: %s', pids) |
return pids |
+ |
+ def RunMonkey(self, package_name, category=None, throttle=100, seed=None, |
+ event_count=10000, verbosity=1, extra_args=''): |
+ """Runs monkey test for a given package. |
+ |
+ Args: |
+ package_name: Allowed package. |
+ category: A list of allowed categories. |
+ throttle: Delay between events (ms). |
+ seed: Seed value for pseduo-random generator. Same seed value |
+ generates the same sequence of events. Seed is randomized by |
+ default. |
+ event_count: Number of events to generate. |
+ verbosity: Verbosity level [0-3]. |
+ extra_args: A string of other args to pass to the command verbatim. |
+ |
+ Returns: |
+ Output of the test run. |
+ """ |
+ category = category or [] |
+ seed = seed or random.randint(1, 100) |
+ |
+ cmd = ['monkey', |
+ '-p %s' % package_name, |
+ ' '.join(['-c %s' % c for c in category]), |
+ '--throttle %d' % throttle, |
+ '-s %d' % seed, |
+ '-v ' * verbosity, |
+ extra_args, |
+ '%s' % event_count] |
+ return self.RunShellCommand(' '.join(cmd), |
+ timeout_time=event_count*throttle*1.5) |