datatracker/test/buildbot/master/ietfdb/buildbot_plugins.py
2007-06-10 16:42:27 +00:00

81 lines
2.7 KiB
Python

import re
from buildbot.steps.shell import ShellCommand
from buildbot.status.builder import SUCCESS, FAILURE, WARNINGS
try:
import cStringIO
StringIO = cStringIO.StringIO
except ImportError:
from StringIO import StringIO
class DjangoTest(ShellCommand):
name = "django test"
command = ["python", "manage.py", "test"]
description = ["running django test"]
descriptionDone = ["django test"]
flunkOnFailure = False
flunkingIssues = ["exception", "failure"] # any pyflakes lines like this cause FAILURE
msgtypes = ("exception", "failure", "skipped", "diffs", "ok")
def createSummary(self, log):
summaries = {}
typelist = {}
counts = {}
def count(m):
if not m in counts:
counts[m] = 0
counts[m] += 1
for type in self.msgtypes:
typelist[type] = set([])
first = True
for line in StringIO(log.getText()).readlines():
if re.search("^Traceback: ", line):
m = "exception"
typelist["exceptions"].add(m)
count(m)
if re.search("^Fail \d+ ", line):
m = "fail_%s" % line.split()[1]
typelist["failure"].add(m)
count(m)
if re.search("^Skipping ", line):
m = "skipped"
typelist["skipped"].add(m)
count(m)
if re.search("^Diff: .* ", line):
m = "diff_%s" % line.skip()[1]
typelist["diffs"].add(m)
count(m)
if re.search("^OK (\d+) ", line):
m = "pass_%s" % line.split()[1]
typelist["pass"].add(m)
count(m)
if re.search("^Pass (\d+) ", line):
m = "pass_%s" % line.split()[1]
typelist["pass"].add(m)
count(m)
if not m in summaries:
summaries[m] = []
summaries[m].append(line)
self.descriptionDone = self.descriptionDone[:]
for type in self.msgtypes:
for msg in typelist[type]:
if counts[msg]:
self.descriptionDone.append("%s=%d" % (msg, counts[msg]))
self.addCompleteLog(msg, "".join(summaries[msg]))
self.setProperty("urltest-%s" % type, sum([counts[msg] for msg in typelist[type]]))
self.setProperty("urltest-total", sum(counts.values()))
def evaluateCommand(self, cmd):
if cmd.rc != 0:
return FAILURE
for type in self.flunkingIssues:
if self.getProperty("urltest-%s" % type):
return FAILURE
if self.getProperty("urltest-total"):
return WARNINGS
return SUCCESS