Reland "Android: Add --wait-for-java-debugger to test_runner.py"
This reverts commit f7b7b5ab8c2fc32d87928e131ec64cd213ee46b8. Reason for revert: Will update when ready. Change-Id: I5478e9a738b64a6a34a9937e080b59583f7c3f16 Reviewed-on: https://chromium-review.googlesource.com/698544 Reviewed-by: Yoland Yan <yolandyan@chromium.org> Commit-Queue: Andrew Grieve <agrieve@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#506174} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: 0904ce15333a33f85ead565625d2099406e1adc3
This commit is contained in:
Родитель
9baf931d83
Коммит
7bb5694189
|
@ -81,7 +81,7 @@ def _UninstallApk(devices, install_dict, package_name):
|
|||
|
||||
|
||||
def _LaunchUrl(devices, input_args, device_args_file, url, apk,
|
||||
wait_for_debugger):
|
||||
wait_for_java_debugger):
|
||||
if input_args and device_args_file is None:
|
||||
raise Exception('This apk does not support any flags.')
|
||||
if url:
|
||||
|
@ -92,8 +92,10 @@ def _LaunchUrl(devices, input_args, device_args_file, url, apk,
|
|||
def launch(device):
|
||||
# Set debug app in order to enable reading command line flags on user
|
||||
# builds.
|
||||
cmd = ['am', 'set-debug-app', '--persistent', apk.GetPackageName()]
|
||||
if wait_for_debugger:
|
||||
cmd = ['am', 'set-debug-app', apk.GetPackageName()]
|
||||
if wait_for_java_debugger:
|
||||
# To wait for debugging on a non-primary process:
|
||||
# am set-debug-app org.chromium.chrome:privileged_process0
|
||||
cmd[-1:-1] = ['-w']
|
||||
# Ignore error since it will fail if apk is not debuggable.
|
||||
device.RunShellCommand(cmd, check_return=False)
|
||||
|
@ -844,13 +846,15 @@ class _LaunchCommand(_Command):
|
|||
all_devices_by_default = True
|
||||
|
||||
def _RegisterExtraArgs(self, group):
|
||||
group.add_argument('-w', '--wait-for-debugger', action='store_true',
|
||||
help='Pause execution until debugger attaches.')
|
||||
group.add_argument('-w', '--wait-for-java-debugger', action='store_true',
|
||||
help='Pause execution until debugger attaches. Applies '
|
||||
'only to the main process. To have renderers wait, '
|
||||
'use --args="--renderer-wait-for-java-debugger"')
|
||||
group.add_argument('url', nargs='?', help='A URL to launch with.')
|
||||
|
||||
def Run(self):
|
||||
_LaunchUrl(self.devices, self.args.args, self.args.command_line_flags_file,
|
||||
self.args.url, self.apk_helper, self.args.wait_for_debugger)
|
||||
self.args.url, self.apk_helper, self.args.wait_for_java_debugger)
|
||||
|
||||
|
||||
class _StopCommand(_Command):
|
||||
|
|
|
@ -293,6 +293,7 @@ class GtestTestInstance(test_instance.TestInstance):
|
|||
self._suite = args.suite_name[0]
|
||||
self._symbolizer = stack_symbolizer.Symbolizer(None, False)
|
||||
self._gs_test_artifacts_bucket = args.gs_test_artifacts_bucket
|
||||
self._wait_for_java_debugger = args.wait_for_java_debugger
|
||||
|
||||
# GYP:
|
||||
if args.executable_dist_dir:
|
||||
|
@ -327,6 +328,8 @@ class GtestTestInstance(test_instance.TestInstance):
|
|||
self._extras[_EXTRA_SHARD_SIZE_LIMIT] = 1
|
||||
self._extras[EXTRA_SHARD_NANO_TIMEOUT] = int(1e9 * self._shard_timeout)
|
||||
self._shard_timeout = 10 * self._shard_timeout
|
||||
if args.wait_for_java_debugger:
|
||||
self._extras[EXTRA_SHARD_NANO_TIMEOUT] = int(1e15) # Forever
|
||||
|
||||
if not self._apk_helper and not self._exe_dist_dir:
|
||||
error_func('Could not find apk or executable for %s' % self._suite)
|
||||
|
@ -469,6 +472,10 @@ class GtestTestInstance(test_instance.TestInstance):
|
|||
def total_external_shards(self):
|
||||
return self._total_external_shards
|
||||
|
||||
@property
|
||||
def wait_for_java_debugger(self):
|
||||
return self._wait_for_java_debugger
|
||||
|
||||
#override
|
||||
def TestType(self):
|
||||
return 'gtest'
|
||||
|
|
|
@ -491,6 +491,7 @@ class InstrumentationTestInstance(test_instance.TestInstance):
|
|||
self._render_results_dir = None
|
||||
self._screenshot_dir = None
|
||||
self._timeout_scale = None
|
||||
self._wait_for_java_debugger = None
|
||||
self._initializeTestControlAttributes(args)
|
||||
|
||||
self._coverage_directory = None
|
||||
|
@ -675,6 +676,7 @@ class InstrumentationTestInstance(test_instance.TestInstance):
|
|||
self._screenshot_dir = args.screenshot_dir
|
||||
self._timeout_scale = args.timeout_scale or 1
|
||||
self._ui_screenshot_dir = args.ui_screenshot_dir
|
||||
self._wait_for_java_debugger = args.wait_for_java_debugger
|
||||
|
||||
def _initializeTestCoverageAttributes(self, args):
|
||||
self._coverage_directory = args.coverage_dir
|
||||
|
@ -820,6 +822,10 @@ class InstrumentationTestInstance(test_instance.TestInstance):
|
|||
def ui_screenshot_dir(self):
|
||||
return self._ui_screenshot_dir
|
||||
|
||||
@property
|
||||
def wait_for_java_debugger(self):
|
||||
return self._wait_for_java_debugger
|
||||
|
||||
#override
|
||||
def TestType(self):
|
||||
return 'instrumentation'
|
||||
|
|
|
@ -118,6 +118,7 @@ class _ApkDelegate(object):
|
|||
self._suite = test_instance.suite
|
||||
self._component = '%s/%s' % (self._package, self._runner)
|
||||
self._extras = test_instance.extras
|
||||
self._wait_for_java_debugger = test_instance.wait_for_java_debugger
|
||||
|
||||
def GetTestDataRoot(self, device):
|
||||
# pylint: disable=no-self-use
|
||||
|
@ -169,6 +170,10 @@ class _ApkDelegate(object):
|
|||
device.adb, dir=device.GetExternalStoragePath(), suffix='.gtest_out')
|
||||
extras[_EXTRA_STDOUT_FILE] = stdout_file.name
|
||||
|
||||
if self._wait_for_java_debugger:
|
||||
cmd = ['am', 'set-debug-app', '-w', self._package]
|
||||
device.RunShellCommand(cmd, check_return=True)
|
||||
|
||||
with command_line_file, test_list_file, stdout_file:
|
||||
try:
|
||||
device.StartInstrumentation(
|
||||
|
@ -370,9 +375,12 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun):
|
|||
@local_device_environment.handle_shard_failures_with(
|
||||
on_failure=self._env.BlacklistDevice)
|
||||
def list_tests(dev):
|
||||
timeout = 30
|
||||
if self._test_instance.wait_for_java_debugger:
|
||||
timeout = None
|
||||
raw_test_list = crash_handler.RetryOnSystemCrash(
|
||||
lambda d: self._delegate.Run(
|
||||
None, d, flags='--gtest_list_tests', timeout=30),
|
||||
None, d, flags='--gtest_list_tests', timeout=timeout),
|
||||
device=dev)
|
||||
tests = gtest_test_instance.ParseGTestListTests(raw_test_list)
|
||||
if not tests:
|
||||
|
@ -420,6 +428,8 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun):
|
|||
# Run the test.
|
||||
timeout = (self._test_instance.shard_timeout
|
||||
* self.GetTool(device).GetTimeoutScale())
|
||||
if self._test_instance.wait_for_java_debugger:
|
||||
timeout = None
|
||||
if self._test_instance.store_tombstones:
|
||||
tombstones.ClearAllTombstones(device)
|
||||
with device_temp_file.DeviceTempFile(
|
||||
|
|
|
@ -202,15 +202,16 @@ class LocalDeviceInstrumentationTestRun(
|
|||
def set_debug_app(dev):
|
||||
# Set debug app in order to enable reading command line flags on user
|
||||
# builds
|
||||
if self._test_instance.flags:
|
||||
if not self._test_instance.package_info:
|
||||
logging.error("Couldn't set debug app: no package info")
|
||||
elif not self._test_instance.package_info.package:
|
||||
logging.error("Couldn't set debug app: no package defined")
|
||||
else:
|
||||
dev.RunShellCommand(['am', 'set-debug-app', '--persistent',
|
||||
self._test_instance.package_info.package],
|
||||
check_return=True)
|
||||
if not self._test_instance.package_info:
|
||||
logging.error("Couldn't set debug app: no package info")
|
||||
elif not self._test_instance.package_info.package:
|
||||
logging.error("Couldn't set debug app: no package defined")
|
||||
else:
|
||||
cmd = ['am', 'set-debug-app', '--persistent']
|
||||
if self._test_instance.wait_for_java_debugger:
|
||||
cmd.append('-w')
|
||||
cmd.append(self._test_instance.package_info.package)
|
||||
dev.RunShellCommand(cmd, check_return=True)
|
||||
|
||||
@trace_event.traced
|
||||
def edit_shared_prefs(dev):
|
||||
|
@ -421,6 +422,8 @@ class LocalDeviceInstrumentationTestRun(
|
|||
valgrind_tools.SetChromeTimeoutScale(
|
||||
device, test_timeout_scale * self._test_instance.timeout_scale)
|
||||
|
||||
if self._test_instance.wait_for_java_debugger:
|
||||
timeout = None
|
||||
logging.info('preparing to run %s: %s', test_display_name, test)
|
||||
|
||||
render_tests_device_output_dir = None
|
||||
|
@ -611,8 +614,11 @@ class LocalDeviceInstrumentationTestRun(
|
|||
extras['log'] = 'true'
|
||||
extras[_EXTRA_TEST_LIST] = dev_test_list_json.name
|
||||
target = '%s/%s' % (test_package, junit4_runner_class)
|
||||
kwargs = {}
|
||||
if self._test_instance.wait_for_java_debugger:
|
||||
kwargs['timeout'] = None
|
||||
test_list_run_output = dev.StartInstrumentation(
|
||||
target, extras=extras)
|
||||
target, extras=extras, retries=0, **kwargs)
|
||||
if any(test_list_run_output):
|
||||
logging.error('Unexpected output while listing tests:')
|
||||
for line in test_list_run_output:
|
||||
|
|
|
@ -334,6 +334,10 @@ def AddGTestOptions(parser):
|
|||
'--test-apk-incremental-install-json',
|
||||
type=os.path.realpath,
|
||||
help='Path to install json for the test apk.')
|
||||
parser.add_argument(
|
||||
'-w', '--wait-for-java-debugger', action='store_true',
|
||||
help='Wait for java debugger to attach before running any application '
|
||||
'code. Also disables test timeouts and sets retries=0.')
|
||||
|
||||
filter_group = parser.add_mutually_exclusive_group()
|
||||
filter_group.add_argument(
|
||||
|
@ -481,6 +485,10 @@ def AddInstrumentationTestOptions(parser):
|
|||
'--ui-screenshot-directory',
|
||||
dest='ui_screenshot_dir', type=os.path.realpath,
|
||||
help='Destination for screenshots captured by the tests')
|
||||
parser.add_argument(
|
||||
'-w', '--wait-for-java-debugger', action='store_true',
|
||||
help='Wait for java debugger to attach before running any application '
|
||||
'code. Also disables test timeouts and sets retries=0.')
|
||||
|
||||
# These arguments are suppressed from the help text because they should
|
||||
# only ever be specified by an intermediate script.
|
||||
|
@ -981,6 +989,9 @@ def main():
|
|||
parser.error('--replace-system-package and --enable-concurrent-adb cannot '
|
||||
'be used together')
|
||||
|
||||
if hasattr(args, 'wait_for_java_debugger') and args.wait_for_java_debugger:
|
||||
args.num_retries = 0
|
||||
|
||||
try:
|
||||
return RunTestsCommand(args)
|
||||
except base_error.BaseError as e:
|
||||
|
|
Загрузка…
Ссылка в новой задаче