| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Class for running instrumentation tests on a single device.""" | 5 """Class for running instrumentation tests on a single device.""" |
| 6 | 6 |
| 7 import logging | 7 import logging |
| 8 import os | 8 import os |
| 9 import re | 9 import re |
| 10 import sys | 10 import sys |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 Args: | 44 Args: |
| 45 test_options: An InstrumentationOptions object. | 45 test_options: An InstrumentationOptions object. |
| 46 device: Attached android device. | 46 device: Attached android device. |
| 47 shard_index: Shard index. | 47 shard_index: Shard index. |
| 48 test_pkg: A TestPackage object. | 48 test_pkg: A TestPackage object. |
| 49 additional_flags: A list of additional flags to add to the command line. | 49 additional_flags: A list of additional flags to add to the command line. |
| 50 """ | 50 """ |
| 51 super(TestRunner, self).__init__(device, test_options.tool, | 51 super(TestRunner, self).__init__(device, test_options.tool, |
| 52 test_options.cleanup_test_files) | 52 test_options.cleanup_test_files) |
| 53 self._lighttp_port = constants.LIGHTTPD_RANDOM_PORT_FIRST + shard_index | 53 self._lighttp_port = constants.LIGHTTPD_RANDOM_PORT_FIRST + shard_index |
| 54 self._logcat_monitor = None |
| 54 | 55 |
| 55 self.coverage_device_file = None | 56 self.coverage_device_file = None |
| 56 self.coverage_dir = test_options.coverage_dir | 57 self.coverage_dir = test_options.coverage_dir |
| 57 self.coverage_host_file = None | 58 self.coverage_host_file = None |
| 58 self.options = test_options | 59 self.options = test_options |
| 59 self.test_pkg = test_pkg | 60 self.test_pkg = test_pkg |
| 60 # Use the correct command line file for the package under test. | 61 # Use the correct command line file for the package under test. |
| 61 cmdline_file = [a.cmdline_file for a in constants.PACKAGE_INFO.itervalues() | 62 cmdline_file = [a.cmdline_file for a in constants.PACKAGE_INFO.itervalues() |
| 62 if a.test_package == self.test_pkg.GetPackageName()] | 63 if a.test_package == self.test_pkg.GetPackageName()] |
| 63 assert len(cmdline_file) < 2, 'Multiple packages have the same test package' | 64 assert len(cmdline_file) < 2, 'Multiple packages have the same test package' |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 return _PERF_TEST_ANNOTATION in self.test_pkg.GetTestAnnotations(test) | 168 return _PERF_TEST_ANNOTATION in self.test_pkg.GetTestAnnotations(test) |
| 168 | 169 |
| 169 def SetupPerfMonitoringIfNeeded(self, test): | 170 def SetupPerfMonitoringIfNeeded(self, test): |
| 170 """Sets up performance monitoring if the specified test requires it. | 171 """Sets up performance monitoring if the specified test requires it. |
| 171 | 172 |
| 172 Args: | 173 Args: |
| 173 test: The name of the test to be run. | 174 test: The name of the test to be run. |
| 174 """ | 175 """ |
| 175 if not self._IsPerfTest(test): | 176 if not self._IsPerfTest(test): |
| 176 return | 177 return |
| 177 self.device.old_interface.Adb().SendCommand( | 178 self.device.RunShellCommand( |
| 178 'shell rm ' + TestRunner._DEVICE_PERF_OUTPUT_SEARCH_PREFIX) | 179 ['rm', TestRunner._DEVICE_PERF_OUTPUT_SEARCH_PREFIX]) |
| 179 self.device.old_interface.StartMonitoringLogcat() | 180 self._logcat_monitor = self.device.GetLogcatMonitor() |
| 181 self._logcat_monitor.Start() |
| 180 | 182 |
| 181 def TestTeardown(self, test, result): | 183 def TestTeardown(self, test, result): |
| 182 """Cleans up the test harness after running a particular test. | 184 """Cleans up the test harness after running a particular test. |
| 183 | 185 |
| 184 Depending on the options of this TestRunner this might handle performance | 186 Depending on the options of this TestRunner this might handle performance |
| 185 tracking. This method will only be called if the test passed. | 187 tracking. This method will only be called if the test passed. |
| 186 | 188 |
| 187 Args: | 189 Args: |
| 188 test: The name of the test that was just run. | 190 test: The name of the test that was just run. |
| 189 result: result for this test. | 191 result: result for this test. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 212 Args: | 214 Args: |
| 213 test: The name of the test that was just run. | 215 test: The name of the test that was just run. |
| 214 Raises: | 216 Raises: |
| 215 Exception: if there's anything wrong with the perf data. | 217 Exception: if there's anything wrong with the perf data. |
| 216 """ | 218 """ |
| 217 if not self._IsPerfTest(test): | 219 if not self._IsPerfTest(test): |
| 218 return | 220 return |
| 219 raw_test_name = test.split('#')[1] | 221 raw_test_name = test.split('#')[1] |
| 220 | 222 |
| 221 # Wait and grab annotation data so we can figure out which traces to parse | 223 # Wait and grab annotation data so we can figure out which traces to parse |
| 222 regex = self.device.old_interface.WaitForLogMatch( | 224 regex = self._logcat_monitor.WaitFor( |
| 223 re.compile(r'\*\*PERFANNOTATION\(' + raw_test_name + r'\)\:(.*)'), | 225 re.compile(r'\*\*PERFANNOTATION\(' + raw_test_name + r'\)\:(.*)')) |
| 224 None) | |
| 225 | 226 |
| 226 # If the test is set to run on a specific device type only (IE: only | 227 # If the test is set to run on a specific device type only (IE: only |
| 227 # tablet or phone) and it is being run on the wrong device, the test | 228 # tablet or phone) and it is being run on the wrong device, the test |
| 228 # just quits and does not do anything. The java test harness will still | 229 # just quits and does not do anything. The java test harness will still |
| 229 # print the appropriate annotation for us, but will add --NORUN-- for | 230 # print the appropriate annotation for us, but will add --NORUN-- for |
| 230 # us so we know to ignore the results. | 231 # us so we know to ignore the results. |
| 231 # The --NORUN-- tag is managed by MainActivityTestBase.java | 232 # The --NORUN-- tag is managed by MainActivityTestBase.java |
| 232 if regex.group(1) != '--NORUN--': | 233 if regex.group(1) != '--NORUN--': |
| 233 | 234 |
| 234 # Obtain the relevant perf data. The data is dumped to a | 235 # Obtain the relevant perf data. The data is dumped to a |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 except device_errors.CommandTimeoutError as e: | 355 except device_errors.CommandTimeoutError as e: |
| 355 results.AddResult(test_result.InstrumentationTestResult( | 356 results.AddResult(test_result.InstrumentationTestResult( |
| 356 test, base_test_result.ResultType.TIMEOUT, start_ms, duration_ms, | 357 test, base_test_result.ResultType.TIMEOUT, start_ms, duration_ms, |
| 357 log=str(e) or 'No information')) | 358 log=str(e) or 'No information')) |
| 358 except device_errors.DeviceUnreachableError as e: | 359 except device_errors.DeviceUnreachableError as e: |
| 359 results.AddResult(test_result.InstrumentationTestResult( | 360 results.AddResult(test_result.InstrumentationTestResult( |
| 360 test, base_test_result.ResultType.CRASH, start_ms, duration_ms, | 361 test, base_test_result.ResultType.CRASH, start_ms, duration_ms, |
| 361 log=str(e) or 'No information')) | 362 log=str(e) or 'No information')) |
| 362 self.TestTeardown(test, results) | 363 self.TestTeardown(test, results) |
| 363 return (results, None if results.DidRunPass() else test) | 364 return (results, None if results.DidRunPass() else test) |
| OLD | NEW |