| 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 pass | 167 pass |
| 168 del os.environ['DISPLAY'] | 168 del os.environ['DISPLAY'] |
| 169 self._pid = 0 | 169 self._pid = 0 |
| 170 | 170 |
| 171 | 171 |
| 172 class TestSharder(BaseTestSharder): | 172 class TestSharder(BaseTestSharder): |
| 173 """Responsible for sharding the tests on the connected devices.""" | 173 """Responsible for sharding the tests on the connected devices.""" |
| 174 | 174 |
| 175 def __init__(self, attached_devices, test_suite, gtest_filter, | 175 def __init__(self, attached_devices, test_suite, gtest_filter, |
| 176 test_arguments, timeout, cleanup_test_files, tool, | 176 test_arguments, timeout, cleanup_test_files, tool, |
| 177 log_dump_name, fast_and_loose, build_type, in_webkit_checkout): | 177 log_dump_name, fast_and_loose, build_type, in_webkit_checkout, |
| 178 flakiness_server=None): |
| 178 BaseTestSharder.__init__(self, attached_devices, build_type) | 179 BaseTestSharder.__init__(self, attached_devices, build_type) |
| 179 self.test_suite = test_suite | 180 self.test_suite = test_suite |
| 180 self.test_suite_basename = os.path.basename(test_suite) | |
| 181 self.gtest_filter = gtest_filter or '' | 181 self.gtest_filter = gtest_filter or '' |
| 182 self.test_arguments = test_arguments | 182 self.test_arguments = test_arguments |
| 183 self.timeout = timeout | 183 self.timeout = timeout |
| 184 self.cleanup_test_files = cleanup_test_files | 184 self.cleanup_test_files = cleanup_test_files |
| 185 self.tool = tool | 185 self.tool = tool |
| 186 self.log_dump_name = log_dump_name | 186 self.log_dump_name = log_dump_name |
| 187 self.fast_and_loose = fast_and_loose | 187 self.fast_and_loose = fast_and_loose |
| 188 self.in_webkit_checkout = in_webkit_checkout | 188 self.in_webkit_checkout = in_webkit_checkout |
| 189 self.flakiness_server = flakiness_server |
| 189 self.all_tests = [] | 190 self.all_tests = [] |
| 190 if not self.gtest_filter: | 191 if not self.gtest_filter: |
| 191 # No filter has been specified, let's add all tests then. | 192 # No filter has been specified, let's add all tests then. |
| 192 self.all_tests, self.attached_devices = self._GetAllEnabledTests() | 193 self.all_tests, self.attached_devices = self._GetAllEnabledTests() |
| 193 self.tests = self.all_tests | 194 self.tests = self.all_tests |
| 194 | 195 |
| 195 def _GetAllEnabledTests(self): | 196 def _GetAllEnabledTests(self): |
| 196 """Get all enabled tests and available devices. | 197 """Get all enabled tests and available devices. |
| 197 | 198 |
| 198 Obtains a list of enabled tests from the test package on the device, | 199 Obtains a list of enabled tests from the test package on the device, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 self.test_arguments, | 266 self.test_arguments, |
| 266 self.timeout, | 267 self.timeout, |
| 267 self.cleanup_test_files, self.tool, index, | 268 self.cleanup_test_files, self.tool, index, |
| 268 not not self.log_dump_name, | 269 not not self.log_dump_name, |
| 269 self.fast_and_loose, | 270 self.fast_and_loose, |
| 270 self.build_type, | 271 self.build_type, |
| 271 self.in_webkit_checkout) | 272 self.in_webkit_checkout) |
| 272 | 273 |
| 273 def OnTestsCompleted(self, test_runners, test_results): | 274 def OnTestsCompleted(self, test_runners, test_results): |
| 274 """Notifies that we completed the tests.""" | 275 """Notifies that we completed the tests.""" |
| 275 test_results.LogFull('Unit test', os.path.basename(self.test_suite), | 276 test_results.LogFull( |
| 276 self.build_type, self.all_tests) | 277 test_type='Unit test', |
| 278 test_package=test_runners[0].test_package.test_suite_basename, |
| 279 build_type=self.build_type, |
| 280 all_tests=self.all_tests, |
| 281 flakiness_server=self.flakiness_server) |
| 277 test_results.PrintAnnotation() | 282 test_results.PrintAnnotation() |
| 283 |
| 278 if self.log_dump_name: | 284 if self.log_dump_name: |
| 279 # Zip all debug info outputs into a file named by log_dump_name. | 285 # Zip all debug info outputs into a file named by log_dump_name. |
| 280 debug_info.GTestDebugInfo.ZipAndCleanResults( | 286 debug_info.GTestDebugInfo.ZipAndCleanResults( |
| 281 os.path.join( | 287 os.path.join( |
| 282 cmd_helper.OutDirectory.get(), self.build_type, | 288 cmd_helper.OutDirectory.get(), self.build_type, |
| 283 'debug_info_dumps'), | 289 'debug_info_dumps'), |
| 284 self.log_dump_name) | 290 self.log_dump_name) |
| 285 | 291 |
| 286 | 292 |
| 287 def _RunATestSuite(options): | 293 def _RunATestSuite(options): |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 attached_devices, | 346 attached_devices, |
| 341 options.test_suite, | 347 options.test_suite, |
| 342 options.gtest_filter, | 348 options.gtest_filter, |
| 343 options.test_arguments, | 349 options.test_arguments, |
| 344 options.timeout, | 350 options.timeout, |
| 345 options.cleanup_test_files, | 351 options.cleanup_test_files, |
| 346 options.tool, | 352 options.tool, |
| 347 options.log_dump, | 353 options.log_dump, |
| 348 options.fast_and_loose, | 354 options.fast_and_loose, |
| 349 options.build_type, | 355 options.build_type, |
| 350 options.webkit) | 356 options.webkit, |
| 357 options.flakiness_dashboard_server) |
| 351 test_results = sharder.RunShardedTests() | 358 test_results = sharder.RunShardedTests() |
| 352 | 359 |
| 353 for buildbot_emulator in buildbot_emulators: | 360 for buildbot_emulator in buildbot_emulators: |
| 354 buildbot_emulator.Shutdown() | 361 buildbot_emulator.Shutdown() |
| 355 | 362 |
| 356 return len(test_results.failed) | 363 return len(test_results.failed) |
| 357 | 364 |
| 358 | 365 |
| 359 def Dispatch(options): | 366 def Dispatch(options): |
| 360 """Dispatches the tests, sharding if possible. | 367 """Dispatches the tests, sharding if possible. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 # the batch (this happens because the exit status is a sum of all failures | 477 # the batch (this happens because the exit status is a sum of all failures |
| 471 # from all suites, but the buildbot associates the exit status only with the | 478 # from all suites, but the buildbot associates the exit status only with the |
| 472 # most recent step). | 479 # most recent step). |
| 473 if options.exit_code: | 480 if options.exit_code: |
| 474 return failed_tests_count | 481 return failed_tests_count |
| 475 return 0 | 482 return 0 |
| 476 | 483 |
| 477 | 484 |
| 478 if __name__ == '__main__': | 485 if __name__ == '__main__': |
| 479 sys.exit(main(sys.argv)) | 486 sys.exit(main(sys.argv)) |
| OLD | NEW |