[PATCH] Fix the problem that the last test failure not always displayed on test summary page for LitTestCommand
Ying Chen
chying at google.com
Tue Mar 10 14:24:36 PDT 2015
Hi sivachandra, ovyalov, chaoren,
- Bug http://b/19664754
- Process each output line immediately once it is received
- If current output is verbose message, update the last record with verbose msg
- Add failure code to summary display
http://reviews.llvm.org/D8229
Files:
zorg/buildbot/commands/LitTestCommand.py
Index: zorg/buildbot/commands/LitTestCommand.py
===================================================================
--- zorg/buildbot/commands/LitTestCommand.py
+++ zorg/buildbot/commands/LitTestCommand.py
@@ -58,21 +58,24 @@
# max).
if code in self.failingCodes and (self.maxLogs is None or
self.numLogs < self.maxLogs):
- # If a verbose log was not provided, just add a one line description.
- if self.activeVerboseLog is None:
- self.activeVerboseLog = ['%s: %s' % (code, name)]
-
# Add the log to the build status.
# Make the test name short, the qualified test name is in the log anyway.
# Otherwise, we run out of the allowed name length on some hosts.
name_part = name.rpartition('::')
- self.step.addCompleteLog(
- name_part[0].strip() + name_part[1] + basename(name_part[2]),
+
+ if self.activeVerboseLog is not None:
+ self.step.logs[-1]=(
+ code + ': ' + name_part[0].strip() + name_part[1] + basename(name_part[2]),
+ '\n'.join(self.activeVerboseLog))
+ # If a verbose log was not provided, just add a one line description.
+ else:
+ self.activeVerboseLog = ['%s: %s' % (code, name)]
+ self.step.addCompleteLog(
+ code + ': ' + name_part[0].strip() + name_part[1] + basename(name_part[2]),
'\n'.join(self.activeVerboseLog))
- self.numLogs += 1
+ self.numLogs += 1
# Reset the current state.
- self.lastTestResult = None
self.activeVerboseLog = None
def outLineReceived(self, line):
@@ -93,13 +96,7 @@
"error: verbose log output name didn't match expected test name")
return
- # Otherwise, if we had any previous test consider it finished.
- #
- # FIXME: This assumes that we will always have at least one line following
- # the last test result to properly record each test; we could fix this if
- # buildbot provided us a hook for when the log is done.
- if self.lastTestResult:
- self.testInfoFinished()
+ self.lastTestResult = None
if self.kStartSummaryRE.match(line):
self.parserStarted = True;
@@ -113,6 +110,7 @@
# Remember the last test result and update the result counts.
self.lastTestResult = (code, name) = m.groups()
self.resultCounts[code] = self.resultCounts.get(code, 0) + 1
+ self.testInfoFinished()
return
class LitTestCommand(Test):
@@ -188,7 +186,7 @@
""")
self.assertEqual(obs.resultCounts, { 'FAIL' : 1, 'PASS' : 2 })
- self.assertEqual(obs.step.logs, [('test-two', 'FAIL: test-two')])
+ self.assertEqual(obs.step.logs, [('FAIL: test-two', 'FAIL: test-two')])
def test_verbose_logs(self):
obs = self.parse_log("""
@@ -202,12 +200,12 @@
self.assertEqual(obs.resultCounts, { 'FAIL' : 3 })
self.assertEqual(obs.step.logs, [
- ('test-one', 'FAIL: test-one'),
- ('test-two', """\
+ ('FAIL: test-one', 'FAIL: test-one'),
+ ('FAIL: test-two', """\
**** TEST 'test-two' FAILED ****
bla bla bla
**********"""),
- ('test-three', 'FAIL: test-three')])
+ ('FAIL: test-three', 'FAIL: test-three')])
class TestCommand(unittest.TestCase):
def parse_log(self, text, **kwargs):
@@ -233,7 +231,7 @@
FAIL: test-one (1 of 2)
FAIL: test-two (2 of 2)
""", max_logs=1)
- self.assertEqual(cmd.logObserver.step.logs, [('test-one', 'FAIL: test-one')])
+ self.assertEqual(cmd.logObserver.step.logs, [('FAIL: test-one', 'FAIL: test-one')])
if __name__ == '__main__':
unittest.main()
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8229.21636.patch
Type: text/x-patch
Size: 3650 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150310/b1604632/attachment.bin>
More information about the llvm-commits
mailing list