OLD | NEW |
(Empty) | |
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import logging |
| 6 import os |
| 7 import sys |
| 8 |
| 9 from pylib import android_commands |
| 10 from pylib import constants |
| 11 from pylib import perf_tests_helper |
| 12 from pylib.android_commands import errors |
| 13 from pylib.base.base_test_runner import BaseTestRunner |
| 14 from pylib.base.test_result import BaseTestResult, TestResults |
| 15 from pylib.gtest.test_package_apk import TestPackageApk |
| 16 from pylib.utils import run_tests_helper |
| 17 |
| 18 CURFILE_PATH = os.path.abspath(os.path.dirname(__file__)) |
| 19 |
| 20 |
| 21 def _GetDataFilesForTestSuite(): |
| 22 return ['content/test/data',] |
| 23 |
| 24 |
| 25 class TestRunner(BaseTestRunner): |
| 26 """Single test suite attached to a single device. |
| 27 |
| 28 Args: |
| 29 device: Device to run the tests. |
| 30 test_suite: A specific test suite to run, empty to run all. |
| 31 gtest_filter: A gtest_filter flag. |
| 32 test_arguments: Additional arguments to pass to the test binary. |
| 33 timeout: Timeout for each test. |
| 34 cleanup_test_files: Whether or not to cleanup test files on device. |
| 35 tool_name: Name of the Valgrind tool. |
| 36 shard_index: index number of the shard on which the test suite will run. |
| 37 build_type: 'Release' or 'Debug'. |
| 38 """ |
| 39 |
| 40 def __init__(self, device, test_suite, gtest_filter, test_arguments, timeout, |
| 41 cleanup_test_files, tool_name, shard_index, build_type,): |
| 42 BaseTestRunner.__init__(self, device, tool_name, shard_index, build_type) |
| 43 self._gtest_filter = gtest_filter |
| 44 self._test_arguments = '--single_process %s' % test_arguments |
| 45 self.test_results = TestResults() |
| 46 |
| 47 logging.warning('Test suite: ' + test_suite) |
| 48 self.test_package = TestPackageApk( |
| 49 self.adb, |
| 50 device, |
| 51 test_suite, |
| 52 timeout, |
| 53 cleanup_test_files, |
| 54 self.tool, |
| 55 'org.chromium.content_browsertests_apk', |
| 56 'org.chromium.content_browsertests_apk.ContentBrowserTestsActivity', |
| 57 'content-browser-tests-command-line') |
| 58 |
| 59 def GetDisabledTests(self): |
| 60 """Returns a list of disabled tests. |
| 61 |
| 62 Returns: |
| 63 A list of disabled tests obtained from 'filter' subdirectory. |
| 64 """ |
| 65 gtest_filter_base_path = os.path.join( |
| 66 CURFILE_PATH, 'filter', self.test_package.test_suite_basename) |
| 67 disabled_tests = run_tests_helper.GetExpectations( |
| 68 gtest_filter_base_path + '_disabled') |
| 69 return disabled_tests |
| 70 |
| 71 def LaunchHelperToolsForTestSuite(self): |
| 72 """Launches helper tools for the test suite.""" |
| 73 self.LaunchChromeTestServerSpawner() |
| 74 |
| 75 def StripAndCopyFiles(self): |
| 76 """Strips and copies the required data files for the test suite.""" |
| 77 self.test_package.StripAndCopyExecutable() |
| 78 self.test_package.PushDataAndPakFiles() |
| 79 self.tool.CopyFiles() |
| 80 test_data = _GetDataFilesForTestSuite() |
| 81 if test_data: |
| 82 # Make sure SD card is ready. |
| 83 self.adb.WaitForSdCardReady(20) |
| 84 for data in test_data: |
| 85 self.CopyTestData([data], self.adb.GetExternalStorage()) |
| 86 |
| 87 def RunTests(self): |
| 88 """Runs a single test on a single device. |
| 89 |
| 90 Returns: |
| 91 A TestResults object. |
| 92 """ |
| 93 if not self._gtest_filter: |
| 94 raise Exception('Cannot run browser tests without a test filter.') |
| 95 try: |
| 96 self.test_package.CreateTestRunnerScript(self._gtest_filter, |
| 97 self._test_arguments) |
| 98 self.test_results = self.test_package.RunTestsAndListResults() |
| 99 except errors.DeviceUnresponsiveError as e: |
| 100 # Make sure this device is not attached |
| 101 logging.warning(e) |
| 102 if android_commands.IsDeviceAttached(self.device): |
| 103 raise e |
| 104 self.test_results.device_exception = device_exception |
| 105 finally: |
| 106 # TODO(frankf): Do not break TestResults encapsulation. |
| 107 all_tests = self._gtest_filter |
| 108 all_tests_ran = set([t.name for t in self.test_results.GetAll()]) |
| 109 self.test_results.unknown = [] |
| 110 return self.test_results |
| 111 |
| 112 def SetUp(self): |
| 113 """Sets up necessary test enviroment for the test suite.""" |
| 114 super(TestRunner, self).SetUp() |
| 115 self.StripAndCopyFiles() |
| 116 self.LaunchHelperToolsForTestSuite() |
| 117 self.tool.SetupEnvironment() |
| 118 |
| 119 def TearDown(self): |
| 120 """Cleans up the test enviroment for the test suite.""" |
| 121 self.tool.CleanUpEnvironment() |
| 122 if self.test_package.cleanup_test_files: |
| 123 self.adb.RemovePushedFiles() |
| 124 super(TestRunner, self).TearDown() |
OLD | NEW |