summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorfrankf@chromium.org <frankf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-18 21:32:55 +0000
committerfrankf@chromium.org <frankf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-18 21:32:55 +0000
commit6aeb3583d68c62d7aaea575d58ba841701f0ad91 (patch)
treee6b146bdd99150c841fdfdbfcd9a951f4802bc21 /build
parent97489500f000f1bae721dd56f5a0aaaf8629015f (diff)
downloadchromium_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.py42
-rw-r--r--build/android/pylib/gtest/test_package.py14
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)