| 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 """Runs the Java tests. See more information on run_instrumentation_tests.py.""" | 5 """Runs the Java tests. See more information on run_instrumentation_tests.py.""" |
| 6 | 6 |
| 7 import fnmatch | 7 import fnmatch |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import re | 10 import re |
| 11 import shutil | 11 import shutil |
| 12 import sys | 12 import sys |
| 13 import time | 13 import time |
| 14 | 14 |
| 15 import android_commands | 15 import android_commands |
| 16 import apk_info | |
| 17 from base_test_runner import BaseTestRunner | 16 from base_test_runner import BaseTestRunner |
| 18 from base_test_sharder import BaseTestSharder, SetTestsContainer | 17 from base_test_sharder import BaseTestSharder, SetTestsContainer |
| 19 import cmd_helper | 18 import cmd_helper |
| 20 import constants | 19 import constants |
| 21 import errors | 20 import errors |
| 22 from forwarder import Forwarder | 21 from forwarder import Forwarder |
| 23 from json_perf_parser import GetAverageRunInfoFromJSONString | 22 from json_perf_parser import GetAverageRunInfoFromJSONString |
| 24 from perf_tests_helper import PrintPerfResult | 23 from perf_tests_helper import PrintPerfResult |
| 25 import sharded_tests_queue | 24 import sharded_tests_queue |
| 26 from test_result import SingleTestResult, TestResults | 25 from test_result import SingleTestResult, TestResults |
| 26 from utils import apk_and_jar_info |
| 27 from utils import jar_info |
| 27 import valgrind_tools | 28 import valgrind_tools |
| 28 | 29 |
| 29 _PERF_TEST_ANNOTATION = 'PerfTest' | 30 _PERF_TEST_ANNOTATION = 'PerfTest' |
| 30 | 31 |
| 31 | 32 |
| 32 class FatalTestException(Exception): | 33 class FatalTestException(Exception): |
| 33 """A fatal test exception.""" | 34 """A fatal test exception.""" |
| 34 pass | 35 pass |
| 35 | 36 |
| 36 | 37 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 The default is ChromeTest.apk. | 107 The default is ChromeTest.apk. |
| 107 ports_to_forward: A list of port numbers for which to set up forwarders. | 108 ports_to_forward: A list of port numbers for which to set up forwarders. |
| 108 Can be optionally requested by a test case. | 109 Can be optionally requested by a test case. |
| 109 Raises: | 110 Raises: |
| 110 FatalTestException: if coverage metadata is not available. | 111 FatalTestException: if coverage metadata is not available. |
| 111 """ | 112 """ |
| 112 BaseTestRunner.__init__( | 113 BaseTestRunner.__init__( |
| 113 self, device, options.tool, shard_index, options.build_type) | 114 self, device, options.tool, shard_index, options.build_type) |
| 114 | 115 |
| 115 if not apks: | 116 if not apks: |
| 116 apks = [apk_info.ApkInfo(options.test_apk_path, | 117 apks = [apk_and_jar_info.ApkAndJarInfo(options.test_apk_path, |
| 117 options.test_apk_jar_path)] | 118 options.test_apk_jar_path)] |
| 118 | 119 |
| 119 self.build_type = options.build_type | 120 self.build_type = options.build_type |
| 120 self.install_apk = options.install_apk | 121 self.install_apk = options.install_apk |
| 121 self.test_data = options.test_data | 122 self.test_data = options.test_data |
| 122 self.save_perf_json = options.save_perf_json | 123 self.save_perf_json = options.save_perf_json |
| 123 self.screenshot_failures = options.screenshot_failures | 124 self.screenshot_failures = options.screenshot_failures |
| 124 self.wait_for_debugger = options.wait_for_debugger | 125 self.wait_for_debugger = options.wait_for_debugger |
| 125 self.disable_assertions = options.disable_assertions | 126 self.disable_assertions = options.disable_assertions |
| 126 | 127 |
| 127 self.tests_iter = tests_iter | 128 self.tests_iter = tests_iter |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 default_size_annotation = 'SmallTest' | 534 default_size_annotation = 'SmallTest' |
| 534 | 535 |
| 535 def _GetTestsMissingAnnotation(test_apk): | 536 def _GetTestsMissingAnnotation(test_apk): |
| 536 test_size_annotations = frozenset(['Smoke', 'SmallTest', 'MediumTest', | 537 test_size_annotations = frozenset(['Smoke', 'SmallTest', 'MediumTest', |
| 537 'LargeTest', 'EnormousTest', 'FlakyTest', | 538 'LargeTest', 'EnormousTest', 'FlakyTest', |
| 538 'DisabledTest', 'Manual', 'PerfTest']) | 539 'DisabledTest', 'Manual', 'PerfTest']) |
| 539 tests_missing_annotations = [] | 540 tests_missing_annotations = [] |
| 540 for test_method in test_apk.GetTestMethods(): | 541 for test_method in test_apk.GetTestMethods(): |
| 541 annotations = frozenset(test_apk.GetTestAnnotations(test_method)) | 542 annotations = frozenset(test_apk.GetTestAnnotations(test_method)) |
| 542 if (annotations.isdisjoint(test_size_annotations) and | 543 if (annotations.isdisjoint(test_size_annotations) and |
| 543 not apk_info.ApkInfo.IsPythonDrivenTest(test_method)): | 544 not jar_info.JarInfo.IsPythonDrivenTest(test_method)): |
| 544 tests_missing_annotations.append(test_method) | 545 tests_missing_annotations.append(test_method) |
| 545 return sorted(tests_missing_annotations) | 546 return sorted(tests_missing_annotations) |
| 546 | 547 |
| 547 if options.annotation: | 548 if options.annotation: |
| 548 available_tests = test_apk.GetAnnotatedTests(options.annotation) | 549 available_tests = test_apk.GetAnnotatedTests(options.annotation) |
| 549 if options.annotation.count(default_size_annotation) > 0: | 550 if options.annotation.count(default_size_annotation) > 0: |
| 550 tests_missing_annotations = _GetTestsMissingAnnotation(test_apk) | 551 tests_missing_annotations = _GetTestsMissingAnnotation(test_apk) |
| 551 if tests_missing_annotations: | 552 if tests_missing_annotations: |
| 552 logging.warning('The following tests do not contain any annotation. ' | 553 logging.warning('The following tests do not contain any annotation. ' |
| 553 'Assuming "%s":\n%s', | 554 'Assuming "%s":\n%s', |
| 554 default_size_annotation, | 555 default_size_annotation, |
| 555 '\n'.join(tests_missing_annotations)) | 556 '\n'.join(tests_missing_annotations)) |
| 556 available_tests += tests_missing_annotations | 557 available_tests += tests_missing_annotations |
| 557 else: | 558 else: |
| 558 available_tests = [m for m in test_apk.GetTestMethods() | 559 available_tests = [m for m in test_apk.GetTestMethods() |
| 559 if not apk_info.ApkInfo.IsPythonDrivenTest(m)] | 560 if not jar_info.JarInfo.IsPythonDrivenTest(m)] |
| 560 coverage = os.environ.get('EMMA_INSTRUMENT') == 'true' | 561 coverage = os.environ.get('EMMA_INSTRUMENT') == 'true' |
| 561 | 562 |
| 562 tests = [] | 563 tests = [] |
| 563 if options.test_filter: | 564 if options.test_filter: |
| 564 # |available_tests| are in adb instrument format: package.path.class#test. | 565 # |available_tests| are in adb instrument format: package.path.class#test. |
| 565 filter_without_hash = options.test_filter.replace('#', '.') | 566 filter_without_hash = options.test_filter.replace('#', '.') |
| 566 tests = [t for t in available_tests | 567 tests = [t for t in available_tests |
| 567 if filter_without_hash in t.replace('#', '.')] | 568 if filter_without_hash in t.replace('#', '.')] |
| 568 else: | 569 else: |
| 569 tests = available_tests | 570 tests = available_tests |
| (...skipping 14 matching lines...) Expand all Loading... |
| 584 | 585 |
| 585 logging.info('Will run: %s', str(tests)) | 586 logging.info('Will run: %s', str(tests)) |
| 586 | 587 |
| 587 if len(attached_devices) > 1 and (coverage or options.wait_for_debugger): | 588 if len(attached_devices) > 1 and (coverage or options.wait_for_debugger): |
| 588 logging.warning('Coverage / debugger can not be sharded, ' | 589 logging.warning('Coverage / debugger can not be sharded, ' |
| 589 'using first available device') | 590 'using first available device') |
| 590 attached_devices = attached_devices[:1] | 591 attached_devices = attached_devices[:1] |
| 591 sharder = TestSharder(attached_devices, options, tests, apks) | 592 sharder = TestSharder(attached_devices, options, tests, apks) |
| 592 test_results = sharder.RunShardedTests() | 593 test_results = sharder.RunShardedTests() |
| 593 return test_results | 594 return test_results |
| OLD | NEW |