| #!/usr/bin/env python |
| # |
| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Runs all the native unit tests. |
| |
| 1. Copy over test binary to /data/local on device. |
| 2. Resources: chrome/unit_tests requires resources (chrome.pak and en-US.pak) |
| to be deployed to the device. We use the device's $EXTERNAL_STORAGE as the |
| base dir (which maps to Context.getExternalFilesDir()). |
| 3. Environment: |
| 3.1. chrome/unit_tests requires (via chrome_paths.cc) a directory named: |
| $EXTERNAL_STORAGE + /chrome/test/data |
| 4. Run the binary in the device and stream the log to the host. |
| 4.1. Optionally, filter specific tests. |
| 4.2. If we're running a single test suite and we have multiple devices |
| connected, we'll shard the tests. |
| 5. Clean up the device. |
| |
| Suppressions: |
| |
| Individual tests in a test binary can be suppressed by listing it in |
| the gtest_filter directory in a file of the same name as the test binary, |
| one test per line. Here is an example: |
| |
| $ cat gtest_filter/base_unittests_disabled |
| DataPackTest.Load |
| ReadOnlyFileUtilTest.ContentsEqual |
| |
| This file is generated by the tests running on devices. If running on emulator, |
| additonal filter file which lists the tests only failed in emulator will be |
| loaded. We don't care about the rare testcases which succeeded on emuatlor, but |
| failed on device. |
| """ |
| |
| import optparse |
| import sys |
| |
| from pylib import cmd_helper |
| from pylib.gtest import dispatch |
| from pylib.utils import emulator |
| from pylib.utils import run_tests_helper |
| from pylib.utils import test_options_parser |
| |
| |
| def main(argv): |
| option_parser = optparse.OptionParser() |
| test_options_parser.AddGTestOptions(option_parser) |
| options, args = option_parser.parse_args(argv) |
| |
| if len(args) > 1: |
| option_parser.error('Unknown argument: %s' % args[1:]) |
| |
| run_tests_helper.SetLogLevel(options.verbose_count) |
| |
| if options.out_directory: |
| cmd_helper.OutDirectory.set(options.out_directory) |
| |
| if options.use_emulator: |
| emulator.DeleteAllTempAVDs() |
| |
| failed_tests_count = dispatch.Dispatch(options) |
| |
| # Failures of individual test suites are communicated by printing a |
| # STEP_FAILURE message. |
| # Returning a success exit status also prevents the buildbot from incorrectly |
| # marking the last suite as failed if there were failures in other suites in |
| # the batch (this happens because the exit status is a sum of all failures |
| # from all suites, but the buildbot associates the exit status only with the |
| # most recent step). |
| if options.exit_code: |
| return failed_tests_count |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |