| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 """Runs all the native unit tests. | 7 """Runs all the native unit tests. |
| 8 | 8 |
| 9 1. Copy over test binary to /data/local on device. | 9 1. Copy over test binary to /data/local on device. |
| 10 2. Resources: chrome/unit_tests requires resources (chrome.pak and en-US.pak) | 10 2. Resources: chrome/unit_tests requires resources (chrome.pak and en-US.pak) |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 self.timeout = timeout | 196 self.timeout = timeout |
| 197 self.performance_test = performance_test | 197 self.performance_test = performance_test |
| 198 self.cleanup_test_files = cleanup_test_files | 198 self.cleanup_test_files = cleanup_test_files |
| 199 self.tool = tool | 199 self.tool = tool |
| 200 self.log_dump_name = log_dump_name | 200 self.log_dump_name = log_dump_name |
| 201 self.fast_and_loose = fast_and_loose | 201 self.fast_and_loose = fast_and_loose |
| 202 self.in_webkit_checkout = in_webkit_checkout | 202 self.in_webkit_checkout = in_webkit_checkout |
| 203 self.all_tests = [] | 203 self.all_tests = [] |
| 204 if not self.gtest_filter: | 204 if not self.gtest_filter: |
| 205 # No filter has been specified, let's add all tests then. | 205 # No filter has been specified, let's add all tests then. |
| 206 self.all_tests = self._GetAllEnabledTests() | 206 self.all_tests, self.attached_devices = self._GetAllEnabledTests() |
| 207 self.tests = self.all_tests | 207 self.tests = self.all_tests |
| 208 | 208 |
| 209 def _GetAllEnabledTests(self): | 209 def _GetAllEnabledTests(self): |
| 210 """Returns a list of all enabled tests. | 210 """Get all enabled tests and available devices. |
| 211 | 211 |
| 212 Obtains a list of enabled tests from the test package on the device, | 212 Obtains a list of enabled tests from the test package on the device, |
| 213 then filters it again using the diabled list on the host. | 213 then filters it again using the diabled list on the host. |
| 214 | 214 |
| 215 Returns: |
| 216 Tuple of (all enabled tests, available devices). |
| 217 |
| 215 Raises Exception if all devices failed. | 218 Raises Exception if all devices failed. |
| 216 """ | 219 """ |
| 220 # TODO(frankf): This method is doing too much in a non-systematic way. |
| 221 # If the intention is to drop flaky devices, why not go through all devices |
| 222 # instead of breaking on the first succesfull run? |
| 217 available_devices = list(self.attached_devices) | 223 available_devices = list(self.attached_devices) |
| 218 while available_devices: | 224 while available_devices: |
| 219 try: | 225 try: |
| 220 return self._GetTestsFromDevice(available_devices[-1]) | 226 return (self._GetTestsFromDevice(available_devices[-1]), |
| 227 available_devices) |
| 221 except Exception as e: | 228 except Exception as e: |
| 222 logging.warning('Failed obtaining tests from %s %s', | 229 logging.warning('Failed obtaining tests from %s %s', |
| 223 available_devices[-1], e) | 230 available_devices[-1], e) |
| 224 available_devices.pop() | 231 available_devices.pop() |
| 225 | 232 |
| 226 raise Exception('No device available to get the list of tests.') | 233 raise Exception('No device available to get the list of tests.') |
| 227 | 234 |
| 228 def _GetTestsFromDevice(self, device): | 235 def _GetTestsFromDevice(self, device): |
| 229 logging.info('Obtaining tests from %s', device) | 236 logging.info('Obtaining tests from %s', device) |
| 230 test_runner = SingleTestRunner( | 237 test_runner = SingleTestRunner( |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 # the batch (this happens because the exit status is a sum of all failures | 490 # the batch (this happens because the exit status is a sum of all failures |
| 484 # from all suites, but the buildbot associates the exit status only with the | 491 # from all suites, but the buildbot associates the exit status only with the |
| 485 # most recent step). | 492 # most recent step). |
| 486 if options.exit_code: | 493 if options.exit_code: |
| 487 return failed_tests_count | 494 return failed_tests_count |
| 488 return 0 | 495 return 0 |
| 489 | 496 |
| 490 | 497 |
| 491 if __name__ == '__main__': | 498 if __name__ == '__main__': |
| 492 sys.exit(main(sys.argv)) | 499 sys.exit(main(sys.argv)) |
| OLD | NEW |