diff options
author | frankf@chromium.org <frankf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-18 21:32:55 +0000 |
---|---|---|
committer | frankf@chromium.org <frankf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-18 21:32:55 +0000 |
commit | 6aeb3583d68c62d7aaea575d58ba841701f0ad91 (patch) | |
tree | e6b146bdd99150c841fdfdbfcd9a951f4802bc21 /build | |
parent | 97489500f000f1bae721dd56f5a0aaaf8629015f (diff) | |
download | chromium_src-6aeb3583d68c62d7aaea575d58ba841701f0ad91.zip chromium_src-6aeb3583d68c62d7aaea575d58ba841701f0ad91.tar.gz chromium_src-6aeb3583d68c62d7aaea575d58ba841701f0ad91.tar.bz2 |
[Android] Track individual test case timeouts for gtests.
BUG=170472
Review URL: https://codereview.chromium.org/12025025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177761 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build')
-rw-r--r-- | build/android/pylib/base/test_result.py | 42 | ||||
-rw-r--r-- | build/android/pylib/gtest/test_package.py | 14 |
2 files changed, 39 insertions, 17 deletions
diff --git a/build/android/pylib/base/test_result.py b/build/android/pylib/base/test_result.py index 0c78d22..772d3d5 100644 --- a/build/android/pylib/base/test_result.py +++ b/build/android/pylib/base/test_result.py @@ -57,18 +57,21 @@ class TestResults(object): self.failed = [] self.crashed = [] self.unknown = [] - self.timed_out = False + self.timed_out = [] + self.overall_timed_out = False self.overall_fail = False self.device_exception = None @staticmethod - def FromRun(ok=None, failed=None, crashed=None, timed_out=False, - overall_fail=False, device_exception=None): + def FromRun(ok=None, failed=None, crashed=None, timed_out=None, + overall_timed_out=False, overall_fail=False, + device_exception=None): ret = TestResults() ret.ok = ok or [] ret.failed = failed or [] ret.crashed = crashed or [] - ret.timed_out = timed_out + ret.timed_out = timed_out or [] + ret.overall_timed_out = overall_timed_out ret.overall_fail = overall_fail ret.device_exception = device_exception return ret @@ -82,8 +85,9 @@ class TestResults(object): ret.failed += t.failed ret.crashed += t.crashed ret.unknown += t.unknown - if t.timed_out: - ret.timed_out = True + ret.timed_out += t.timed_out + if t.overall_timed_out: + ret.overall_timed_out = True if t.overall_fail: ret.overall_fail = True return ret @@ -127,8 +131,8 @@ class TestResults(object): logging.critical(t.log) def GetAllBroken(self): - """Returns the all broken tests including failed, crashed, unknown.""" - return self.failed + self.crashed + self.unknown + """Returns the all broken tests.""" + return self.failed + self.crashed + self.unknown + self.timed_out def _LogToFile(self, test_type, test_suite, build_type): """Log results to local files which can be used for aggregation later.""" @@ -149,9 +153,13 @@ class TestResults(object): len(self.ok) + len(self.failed) + len(self.crashed) + + len(self.timed_out) + len(self.unknown))] - content_pairs = [('passed', len(self.ok)), ('failed', len(self.failed)), - ('crashed', len(self.crashed))] + content_pairs = [('passed', len(self.ok)), + ('failed', len(self.failed)), + ('crashed', len(self.crashed)), + ('timed_out', len(self.timed_out)), + ('unknown', len(self.unknown))] for (result, count) in content_pairs: if count: log_contents.append(', %d tests %s' % (count, result)) @@ -162,6 +170,7 @@ class TestResults(object): 'ok': [t.name for t in self.ok], 'failed': [t.name for t in self.failed], 'crashed': [t.name for t in self.failed], + 'timed_out': [t.name for t in self.timed_out], 'unknown': [t.name for t in self.unknown],} json_file_path = os.path.join(log_file_path, 'results.json') with open(json_file_path, 'a') as json_file: @@ -228,6 +237,9 @@ class TestResults(object): if self.crashed: logging.critical('Crashed:') self._Log(sorted(self.crashed)) + if self.timed_out: + logging.critical('Timed out:') + self._Log(sorted(self.timed_out)) if self.unknown: logging.critical('Unknown:') self._Log(sorted(self.unknown)) @@ -240,21 +252,24 @@ class TestResults(object): if all_tests: summary += ['TESTS_TO_RUN=%d\n' % len(all_tests)] num_tests_ran = (len(self.ok) + len(self.failed) + - len(self.crashed) + len(self.unknown)) + len(self.crashed) + len(self.unknown) + + len(self.timed_out)) tests_passed = [t.name for t in self.ok] tests_failed = [t.name for t in self.failed] tests_crashed = [t.name for t in self.crashed] tests_unknown = [t.name for t in self.unknown] + tests_timed_out = [t.name for t in self.timed_out] summary += ['RAN=%d\n' % (num_tests_ran), 'PASSED=%d\n' % len(tests_passed), 'FAILED=%d %s\n' % (len(tests_failed), tests_failed), 'CRASHED=%d %s\n' % (len(tests_crashed), tests_crashed), + 'TIMEDOUT=%d %s\n' % (len(tests_timed_out), tests_timed_out), 'UNKNOWN=%d %s\n' % (len(tests_unknown), tests_unknown)] if all_tests and num_tests_ran != len(all_tests): # Add the list of tests we failed to run. tests_failed_to_run = list(set(all_tests) - set(tests_passed) - set(tests_failed) - set(tests_crashed) - - set(tests_unknown)) + set(tests_unknown) - set(tests_timed_out)) summary += ['FAILED_TO_RUN=%d %s\n' % (len(tests_failed_to_run), tests_failed_to_run)] summary_string = ''.join(summary) @@ -275,7 +290,8 @@ class TestResults(object): def PrintAnnotation(self): """Print buildbot annotations for test results.""" - if self.failed or self.crashed or self.overall_fail or self.timed_out: + if (self.failed or self.crashed or self.overall_fail or + self.overall_timed_out): buildbot_report.PrintError() else: print 'Step success!' # No annotation needed diff --git a/build/android/pylib/gtest/test_package.py b/build/android/pylib/gtest/test_package.py index ccbdbb3..cf325c0 100644 --- a/build/android/pylib/gtest/test_package.py +++ b/build/android/pylib/gtest/test_package.py @@ -121,8 +121,9 @@ class TestPackage(object): ok_tests = [] failed_tests = [] crashed_tests = [] - timed_out = False + timed_out_tests = [] overall_fail = False + overall_timed_out = False # Test case statuses. re_run = re.compile('\[ RUN \] ?(.*)\r\n') @@ -138,6 +139,8 @@ class TestPackage(object): try: while True: + full_test_name = None + found = p.expect([re_run, re_passed, re_runner_fail], timeout=self.timeout) if found == 1: # re_passed @@ -166,7 +169,9 @@ class TestPackage(object): except pexpect.TIMEOUT: logging.error('Test terminated after %d second timeout.', self.timeout) - timed_out = True + overall_timed_out = True + if full_test_name: + timed_out_tests += [BaseTestResult(full_test_name, p.before)] finally: p.close() @@ -179,5 +184,6 @@ class TestPackage(object): # Create TestResults and return return TestResults.FromRun(ok=ok_tests, failed=failed_tests, - crashed=crashed_tests, timed_out=timed_out, - overall_fail=overall_fail) + crashed=crashed_tests, timed_out=timed_out_tests, + overall_fail=overall_fail, + overall_timed_out=overall_timed_out) |