| Index: build/android/buildbot/bb_device_steps.py
|
| diff --git a/build/android/buildbot/bb_device_steps.py b/build/android/buildbot/bb_device_steps.py
|
| index 0b3602500828649c97dcb81ea25f16f4aefd7989..720c69f30bde5182cc3124ae718b0333413596c3 100755
|
| --- a/build/android/buildbot/bb_device_steps.py
|
| +++ b/build/android/buildbot/bb_device_steps.py
|
| @@ -24,6 +24,7 @@ import errors
|
|
|
|
|
| CHROME_SRC = constants.DIR_SOURCE_ROOT
|
| +LOGCAT_DIR = os.path.join(CHROME_SRC, 'out', 'logcat')
|
|
|
| # Describes an instrumation test suite:
|
| # test: Name of test we're running.
|
| @@ -31,28 +32,35 @@ CHROME_SRC = constants.DIR_SOURCE_ROOT
|
| # apk_package: package for the apk to be installed.
|
| # test_apk: apk to run tests on.
|
| # test_data: data folder in format destination:source.
|
| +# host_driven_root: The python test root directory.
|
| +# annotation: Annotation of the tests to include.
|
| +# exclude_annotation: The annotation of the tests to exclude.
|
| I_TEST = collections.namedtuple('InstrumentationTest', [
|
| - 'name', 'apk', 'apk_package', 'test_apk', 'test_data', 'host_driven_root'])
|
| + 'name', 'apk', 'apk_package', 'test_apk', 'test_data', 'host_driven_root',
|
| + 'annotation', 'exclude_annotation', 'extra_flags'])
|
| +
|
| +def I(name, apk, apk_package, test_apk, test_data, host_driven_root=None,
|
| + annotation=None, exclude_annotation=None, extra_flags=None):
|
| + return I_TEST(name, apk, apk_package, test_apk, test_data, host_driven_root,
|
| + annotation, exclude_annotation, extra_flags)
|
|
|
| INSTRUMENTATION_TESTS = dict((suite.name, suite) for suite in [
|
| - I_TEST('ContentShell',
|
| - 'ContentShell.apk',
|
| - 'org.chromium.content_shell_apk',
|
| - 'ContentShellTest',
|
| - 'content:content/test/data/android/device_files',
|
| - None),
|
| - I_TEST('ChromiumTestShell',
|
| - 'ChromiumTestShell.apk',
|
| - 'org.chromium.chrome.testshell',
|
| - 'ChromiumTestShellTest',
|
| - 'chrome:chrome/test/data/android/device_files',
|
| - constants.CHROMIUM_TEST_SHELL_HOST_DRIVEN_DIR),
|
| - I_TEST('AndroidWebView',
|
| - 'AndroidWebView.apk',
|
| - 'org.chromium.android_webview.shell',
|
| - 'AndroidWebViewTest',
|
| - 'webview:android_webview/test/data/device_files',
|
| - None),
|
| + I('ContentShell',
|
| + 'ContentShell.apk',
|
| + 'org.chromium.content_shell_apk',
|
| + 'ContentShellTest',
|
| + 'content:content/test/data/android/device_files'),
|
| + I('ChromiumTestShell',
|
| + 'ChromiumTestShell.apk',
|
| + 'org.chromium.chrome.testshell',
|
| + 'ChromiumTestShellTest',
|
| + 'chrome:chrome/test/data/android/device_files',
|
| + constants.CHROMIUM_TEST_SHELL_HOST_DRIVEN_DIR),
|
| + I('AndroidWebView',
|
| + 'AndroidWebView.apk',
|
| + 'org.chromium.android_webview.shell',
|
| + 'AndroidWebViewTest',
|
| + 'webview:android_webview/test/data/device_files'),
|
| ])
|
|
|
| VALID_TESTS = set(['chromedriver', 'ui', 'unit', 'webkit', 'webkit_layout'])
|
| @@ -124,7 +132,7 @@ def RunBrowserTestSuite(options):
|
| buildbot_report.PrintNamedStep(constants.BROWSERTEST_SUITE_NAME)
|
| RunCmd(['build/android/run_browser_tests.py'] + args)
|
|
|
| -def RunChromeDriverTests():
|
| +def RunChromeDriverTests(_):
|
| """Run all the steps for running chromedriver tests."""
|
| buildbot_report.PrintNamedStep('chromedriver_annotation')
|
| RunCmd(['chrome/test/chromedriver/run_buildbot_steps.py',
|
| @@ -168,6 +176,12 @@ def RunInstrumentationSuite(options, test):
|
| constants.UPSTREAM_FLAKINESS_SERVER)
|
| if test.host_driven_root:
|
| args.append('--python_test_root=%s' % test.host_driven_root)
|
| + if test.annotation:
|
| + args.extend(['-A', test.annotation])
|
| + if test.exclude_annotation:
|
| + args.extend(['-E', test.exclude_annotation])
|
| + if test.extra_flags:
|
| + args.extend(test.extra_flags)
|
|
|
| RunCmd(['build/android/run_instrumentation_tests.py'] + args)
|
|
|
| @@ -219,57 +233,75 @@ def RunWebkitLayoutTests(options):
|
| flunk_on_failure=False)
|
|
|
|
|
| -def MainTestWrapper(options):
|
| +def SpawnLogcatMonitor():
|
| + shutil.rmtree(LOGCAT_DIR, ignore_errors=True)
|
| + bb_utils.SpawnCmd([
|
| + os.path.join(CHROME_SRC, 'build', 'android', 'adb_logcat_monitor.py'),
|
| + LOGCAT_DIR])
|
| +
|
| + # Wait for logcat_monitor to pull existing logcat
|
| + RunCmd(['sleep', '5'])
|
| +
|
| +def ProvisionDevices(options):
|
| # Restart adb to work around bugs, sleep to wait for usb discovery.
|
| RunCmd(['adb', 'kill-server'])
|
| RunCmd(['adb', 'start-server'])
|
| RunCmd(['sleep', '1'])
|
|
|
| - # Spawn logcat monitor
|
| - logcat_dir = os.path.join(CHROME_SRC, 'out/logcat')
|
| - shutil.rmtree(logcat_dir, ignore_errors=True)
|
| - bb_utils.SpawnCmd(['build/android/adb_logcat_monitor.py', logcat_dir])
|
| -
|
| - # Wait for logcat_monitor to pull existing logcat
|
| - RunCmd(['sleep', '5'])
|
| -
|
| - # Provision devices
|
| buildbot_report.PrintNamedStep('provision_devices')
|
| if options.reboot:
|
| RebootDevices()
|
| RunCmd(['build/android/provision_devices.py', '-t', options.target])
|
|
|
| - # Device check and alert emails
|
| +
|
| +def DeviceStatusCheck(_):
|
| buildbot_report.PrintNamedStep('device_status_check')
|
| RunCmd(['build/android/device_status_check.py'], halt_on_failure=True)
|
|
|
| - if options.install:
|
| - test_obj = INSTRUMENTATION_TESTS[options.install]
|
| - InstallApk(options, test_obj, print_step=True)
|
|
|
| - if 'chromedriver' in options.test_filter:
|
| - RunChromeDriverTests()
|
| - if 'unit' in options.test_filter:
|
| - RunTestSuites(options, gtest_config.STABLE_TEST_SUITES)
|
| - if 'ui' in options.test_filter:
|
| - for test in INSTRUMENTATION_TESTS.itervalues():
|
| - RunInstrumentationSuite(options, test)
|
| - if 'webkit' in options.test_filter:
|
| - RunTestSuites(options, [
|
| - gtest_config.Apk('webkit_unit_tests'),
|
| - ])
|
| - RunWebkitLint(options.target)
|
| - if 'webkit_layout' in options.test_filter:
|
| - RunWebkitLayoutTests(options)
|
| +def GetDeviceSetupStepCmds():
|
| + return [
|
| + ('provision_devices', ProvisionDevices),
|
| + ('device_status_check', DeviceStatusCheck)
|
| + ]
|
|
|
| - if options.experimental:
|
| - RunTestSuites(options, gtest_config.EXPERIMENTAL_TEST_SUITES)
|
| - RunBrowserTestSuite(options)
|
|
|
| +def RunUnitTests(options):
|
| + RunTestSuites(options, gtest_config.STABLE_TEST_SUITES)
|
| +
|
| +
|
| +def RunInstrumentationTests(options):
|
| + for test in INSTRUMENTATION_TESTS.itervalues():
|
| + RunInstrumentationSuite(options, test)
|
| +
|
| +
|
| +def RunWebkitTests(options):
|
| + RunTestSuites(options, [gtest_config.Apk('webkit_unit_tests')])
|
| + RunWebkitLint(options.target)
|
| +
|
| +
|
| +def GetTestStepCmds():
|
| + return [
|
| + ('chromedriver', RunChromeDriverTests),
|
| + ('unit', RunUnitTests),
|
| + ('ui', RunInstrumentationTests),
|
| + ('webkit', RunWebkitTests),
|
| + ('webkit_layout', RunWebkitLayoutTests)
|
| + ]
|
| +
|
| +
|
| +def LogcatDump(options):
|
| # Print logcat, kill logcat monitor
|
| buildbot_report.PrintNamedStep('logcat_dump')
|
| - RunCmd(['build/android/adb_logcat_printer.py', logcat_dir])
|
| + logcat_file = os.path.join(CHROME_SRC, 'out', options.target, 'full_log')
|
| + with open(logcat_file, 'w') as f:
|
| + RunCmd([
|
| + os.path.join(CHROME_SRC, 'build', 'android', 'adb_logcat_printer.py'),
|
| + LOGCAT_DIR], stdout=f)
|
| + RunCmd(['cat', logcat_file])
|
| +
|
|
|
| +def GenerateTestReport(options):
|
| buildbot_report.PrintNamedStep('test_report')
|
| for report in glob.glob(
|
| os.path.join(CHROME_SRC, 'out', options.target, 'test_logs', '*.log')):
|
| @@ -277,7 +309,38 @@ def MainTestWrapper(options):
|
| os.remove(report)
|
|
|
|
|
| -def main(argv):
|
| +def GetPostTestStepCmds():
|
| + return [
|
| + ('logcat_dump', LogcatDump),
|
| + ('test_report', GenerateTestReport)
|
| + ]
|
| +
|
| +
|
| +def MainTestWrapper(options):
|
| + # Spawn logcat monitor
|
| + SpawnLogcatMonitor()
|
| +
|
| + # Run all device setup steps
|
| + for _, cmd in GetDeviceSetupStepCmds():
|
| + cmd(options)
|
| +
|
| + if options.install:
|
| + test_obj = INSTRUMENTATION_TESTS[options.install]
|
| + InstallApk(options, test_obj, print_step=True)
|
| +
|
| + if options.test_filter:
|
| + bb_utils.RunSteps(options.test_filter, GetTestStepCmds(), options)
|
| +
|
| + if options.experimental:
|
| + RunTestSuites(options, gtest_config.EXPERIMENTAL_TEST_SUITES)
|
| + RunBrowserTestSuite(options)
|
| +
|
| + # Run all post test steps
|
| + for _, cmd in GetPostTestStepCmds():
|
| + cmd(options)
|
| +
|
| +
|
| +def GetDeviceStepsOptParser():
|
| parser = bb_utils.GetParser()
|
| parser.add_option('--experimental', action='store_true',
|
| help='Run experiemental tests')
|
| @@ -295,6 +358,15 @@ def main(argv):
|
| parser.add_option(
|
| '--auto-reconnect', action='store_true',
|
| help='Push script to device which restarts adbd on disconnections.')
|
| + parser.add_option(
|
| + '--logcat-dump-output',
|
| + help='The logcat dump output will be "tee"-ed into this file')
|
| +
|
| + return parser
|
| +
|
| +
|
| +def main(argv):
|
| + parser = GetDeviceStepsOptParser()
|
| options, args = parser.parse_args(argv[1:])
|
|
|
| if args:
|
|
|