Author: David Schneider <[email protected]>
Branch: buildbot-0.8.7
Changeset: r837:2bb9286ac8b1
Date: 2013-08-28 21:04 +0200
http://bitbucket.org/pypy/buildbot/changeset/2bb9286ac8b1/
Log: update summary and fix tests
diff --git a/bot2/pypybuildbot/summary.py b/bot2/pypybuildbot/summary.py
--- a/bot2/pypybuildbot/summary.py
+++ b/bot2/pypybuildbot/summary.py
@@ -661,8 +661,7 @@
def getTitle(self, request):
status = self.getStatus(request)
- return "%s: summaries of last %d revisions" % (status.getProjectName(),
- N)
+ return "%s: summaries of last %d revisions" % (status.getTitle(), N)
@staticmethod
def _prune_runs(runs, cutnum):
@@ -686,8 +685,10 @@
except KeyError:
pass
builder = status.botmaster.builders[builderName]
+ factory = builder.config.factory
branch = None
- for _, kw in builder.buildFactory.steps:
+ for step in factory.steps:
+ kw = step.kwargs
if 'defaultBranch' in kw:
if kw.get('explicitBranch'):
branch = kw['defaultBranch']
@@ -722,7 +723,6 @@
only_builder or only_branches)
cat_branches = {}
-
for builderName in status.getBuilderNames(only_categories):
if not test_builder(builderName):
continue
diff --git a/bot2/pypybuildbot/test/test_summary.py
b/bot2/pypybuildbot/test/test_summary.py
--- a/bot2/pypybuildbot/test/test_summary.py
+++ b/bot2/pypybuildbot/test/test_summary.py
@@ -27,7 +27,7 @@
s a/b.py:test_three
S a/c.py:test_four
""")
-
+
rev_outcome_set.populate(log)
assert rev_outcome_set.skipped == set([("a.b","test_three"),
@@ -67,7 +67,7 @@
x a/c.py:test_nine
x a/c.py:test_ten
""")
-
+
rev_outcome_set.populate(log)
sum = rev_outcome_set.get_summary()
assert sum.p == 1
@@ -80,7 +80,7 @@
rev_outcome_set = summary.RevisionOutcomeSet('0')
log = StringIO("")
rev_outcome_set.populate(log)
-
+
def test_populate_longrepr(self):
rev_outcome_set = summary.RevisionOutcomeSet('50000')
log = StringIO("""F a/b.py:test_one
@@ -90,7 +90,7 @@
s a/b.py:test_three
some skip
""")
-
+
rev_outcome_set.populate(log)
assert len(rev_outcome_set.skipped) == 1
@@ -115,7 +115,7 @@
F a/b.py:test_two
\xc3\xa5 bar
""")
-
+
rev_outcome_set.populate(log)
assert len(rev_outcome_set.failed) == 2
@@ -133,7 +133,7 @@
! <run>
! /a/b/c.py:92
""")
-
+
rev_outcome_set.populate(log)
assert rev_outcome_set.failed == set([
@@ -151,12 +151,12 @@
log = StringIO("""x a/b.py
EXC
""")
-
+
rev_outcome_set.populate(log)
assert rev_outcome_set.numxfailed == 1
-
-
+
+
def test_absent_outcome(self):
rev_outcome_set = summary.RevisionOutcomeSet('50000')
@@ -169,7 +169,7 @@
def load(x, y):
calls.append(y)
return y
-
+
cache._load_outcome_set = load
res = cache.get('status', 'a')
@@ -183,14 +183,14 @@
cache.get('status', 'b')
res = cache.get('status', 'c')
assert res == 'c'
-
+
assert calls == ['a', 'b', 'c']
calls = []
res = cache.get('status', 'd')
assert res == 'd'
assert cache.get('status', 'c') == 'c'
- assert cache.get('status', 'b') == 'b'
+ assert cache.get('status', 'b') == 'b'
assert calls == ['d']
res = cache.get('status', 'a')
@@ -208,18 +208,18 @@
s a/b.py:test_three
x a/b.py:test_four
""")
-
+
rev_outcome_set_foo.populate(log)
- key_bar = ('bar', 7)
+ key_bar = ('bar', 7)
rev_outcome_set_bar = summary.RevisionOutcomeSet('50000',
key_bar)
log = StringIO(""". a/b.py:test_one
. a/b.py:test_two
s a/b.py:test_three
""")
-
+
rev_outcome_set_bar.populate(log)
d = {'foo': rev_outcome_set_foo,
@@ -228,7 +228,7 @@
goutcome = summary.GatherOutcomeSet(d)
assert goutcome.revision == '50000'
-
+
assert goutcome.failed == set([('foo', 'a.b', 'test_one')])
assert goutcome.skipped == set([('foo', 'a.b', 'test_three'),
@@ -273,14 +273,14 @@
assert res == ' '
res = goutcome_top.get_longrepr(('what', 'foo', 'a.b', 'test_one'))
- assert res == ''
+ assert res == ''
def test_colsizes():
failed = [('a', 'abc', 'd'), ('ab', 'c', 'xy'),
('ab', '', 'cd')]
-
+
res = summary.colsizes(failed)
-
+
assert res == [2,3,2]
def test__prune_runs():
@@ -330,15 +330,15 @@
res = summary.show_elapsed(0.25)
assert res == "0.25s"
res = summary.show_elapsed(1.0)
- assert res == "1.00s"
+ assert res == "1.00s"
res = summary.show_elapsed(1.25)
- assert res == "1.25s"
+ assert res == "1.25s"
res = summary.show_elapsed(4.5)
assert res == "4.50s"
res = summary.show_elapsed(5.25)
assert res == "5s"
res = summary.show_elapsed(5.5)
- assert res == "6s"
+ assert res == "6s"
res = summary.show_elapsed(2*60+30)
assert res == "2m30"
res = summary.show_elapsed(4*60+30)
@@ -348,22 +348,33 @@
res = summary.show_elapsed(61*60)
assert res == "1h1"
res = summary.show_elapsed(90*60)
- assert res == "1h30"
+ assert res == "1h30"
-def _BuilderToStatus(status):
- setup = {'name': 'builder', 'builddir': 'BUILDDIR',
- 'slavebuilddir': 'SLAVEBUILDDIR',
- 'factory': process_factory.BuildFactory() }
- return process_builder.Builder(setup, status)
+class FakeMasterConfig(object):
+ buildbotURL = "http://buildbot/"
+ logCompressionLimit = 0
+ def __init__(self, builders=None):
+ self.builders = builders
+
+
+class FakeBuilderconfig(object):
+ validNames = 'name factory slavenames builddir slavebuilddir category ' \
+ 'nextSlave nextBuild canStartBuild locks env properties ' \
+ 'mergeRequests description'.split()
+
+ def __init__(self, **kwargs):
+ for kw, item in kwargs.iteritems():
+ assert kw in self.validNames
+ setattr(self, kw, item)
class FakeMaster(object):
basedir = None
- buildbotURL = "http://buildbot/"
def __init__(self, builders):
self.botmaster = FakeBotMaster(builders)
+ self.config = FakeMasterConfig()
def subscribeToBuildsetCompletions(self, callback):
pass
@@ -374,6 +385,7 @@
def subscribeToBuildRequests(self, callback):
pass
+
class FakeBotMaster(object):
def __init__(self, builders):
@@ -384,28 +396,39 @@
self.builderNames.append(name)
self.builders[name] = _BuilderToStatus(builder)
+
class FakeSite(object):
def __init__(self, status):
self.buildbot_service = FakeService(status)
+
class FakeService(object):
-
+
def __init__(self, status):
self.status = status
def getStatus(self):
return self.status
+
class FakeRequest(object):
def __init__(self, builders, args={}):
master = FakeMaster(builders)
- status = status_builder.Status(master, builders)
+ status = status_builder.Status(master)
self.args = args
self.site = FakeSite(status)
+def _BuilderToStatus(status):
+ builder = process_builder.Builder(status.name)
+ builder.builder_status = status
+ builder.builder_status.basedir = 'BASEDIR'
+ builder.config = FakeBuilderconfig(factory=process_factory.BuildFactory())
+ return builder
+
+
def witness_cat_branch(summary):
ref = [None]
recentRuns = summary.recentRuns
@@ -414,7 +437,6 @@
ref[0] = cat_branch
return cat_branch
summary.recentRuns = witness
-
return lambda: ref[0]
class FakeLog(object):
@@ -424,7 +446,7 @@
self.step = step
self.name = name
self.cont = cont
-
+
def getStep(self):
return self.step
@@ -453,11 +475,12 @@
step.started = t
step.finished = t + (n+1)*60
t = step.finished + 30
+ builder.buildCache.cache[build.number] = build
+ builder.buildStarted(build)
build.buildFinished()
- builder.touchBuildCache(build)
n += 1
builder.nextBuildNumber = n
-
+
class TestSummary(object):
@@ -475,15 +498,14 @@
assert cat_branch == {}
def test_one_build_no_rev(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
build = status_builder.BuildStatus(builder, self.master, 0)
- builder.buildStarted(build)
+ build.buildStarted(builder)
build.buildFinished()
- builder.touchBuildCache(build)
- builder.nextBuildNumber = len(builder.buildCache)
+ builder.nextBuildNumber = len(builder.buildCache.cache)
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
@@ -491,58 +513,58 @@
assert cat_branch == {(None, None): ({}, [build])}
def test_one_build_no_logs(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
- build = status_builder.BuildStatus(None, builder, 0)
- build.started = time.time()
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
+ build = status_builder.BuildStatus(builder, self.master, 0)
+ build.started = time.time()
build.setProperty('got_revision', '50000', None)
build.buildFinished()
- builder.touchBuildCache(build)
- builder.nextBuildNumber = len(builder.buildCache)
+ builder.buildCache.cache[build.number] = build
+ builder.nextBuildNumber = len(builder.buildCache.cache)
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
-
+
revs = cat_branch[(None, None)][0]
assert revs.keys() == ['50000']
- assert '<run>' in out
+ assert 'success' in out
def test_one_build_no_logs_failure(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
- build = status_builder.BuildStatus(builder, 0)
- build.started = time.time()
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
+ build = status_builder.BuildStatus(builder, self.master, 0)
+ build.started = time.time()
build.setProperty('got_revision', '50000', None)
step = build.addStepWithName('step')
step.setText(['step', 'borken'])
step.stepFinished(summary.FAILURE)
step1 = build.addStepWithName('other')
step1.setText(['other', 'borken'])
- step1.stepFinished(summary.FAILURE)
+ step1.stepFinished(summary.FAILURE)
build.buildFinished()
- builder.touchBuildCache(build)
- builder.nextBuildNumber = len(builder.buildCache)
+ builder.buildCache.cache[build.number] = build
+ builder.nextBuildNumber = len(builder.buildCache.cache)
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
-
+
revs = cat_branch[(None, None)][0]
assert revs.keys() == ['50000']
assert 'step borken' in out
- assert 'other borken' not in out
-
+ assert 'other borken' not in out
+
def test_one_build(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [(60000, "F TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
@@ -556,12 +578,12 @@
assert 'TEST1' in out
def test_two_builds(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [('60000', "F TEST1\n. b"),
('60001', ". TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
@@ -583,15 +605,16 @@
assert 'TEST1' in out
assert ':-)' in out
- assert '\n <a class="failSummary failed"
href="javascript:togglestate(1,1)" id="a1c1">-</a> <span class="failSummary
success">+</span> success' in out
-
+ assert re.search(r'\n <a class="failSummary failed" href="javascript:'
+ r'togglestate\((\d+),(\d+)\)" id="a\1c\2">-</a> '
+ r'<span class="failSummary success">\+</span>
success', out) is not None
def test_two_builds_samerev(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [('60000', "F TEST1\n. b"),
- ('60000', "F TEST1\n. b")])
+ ('60000', "F TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
out = s.body(req)
cat_branch = res()
@@ -605,12 +628,12 @@
assert 'TEST1' in out
def test_two_builds_recentrev(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [('60000', "F TEST1\n. b"),
('60001', "F TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
req.args = {'recentrev': ['60000']}
out = s.body(req)
@@ -625,13 +648,13 @@
assert 'TEST1' in out
def test_many_builds_query_builder(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [('60000', "F TEST1\n. b"),
('60000', ". a\n. b"),
- ('60001', "F TEST1\n. b")])
+ ('60001', "F TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
req.args={'builder': ['builder0']}
out = s.body(req)
@@ -661,13 +684,13 @@
def test_many_builds_query_builder_builds(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', None, self.master,
'')
add_builds(builder, [('60000', "F TEST1\n. b"),
('60000', ". a\n. b"),
- ('60001', "F TEST1\n. b")])
+ ('60001', "F TEST1\n. b")])
s = summary.Summary()
- res = witness_cat_branch(s)
+ res = witness_cat_branch(s)
req = FakeRequest([builder])
req.args={'builder': ['builder0'],
'builds': ['0','2-2', '7']}
@@ -693,21 +716,21 @@
assert 'TEST1' in out
def test_many_pytestLogs(self):
- builder = status_builder.BuilderStatus('builder1', '', self.master)
- build = status_builder.BuildStatus(builder, 0)
+ builder = status_builder.BuilderStatus('builder1', '', self.master, '')
+ build = status_builder.BuildStatus(builder, self.master, 0)
build.started = time.time()
build.setProperty('got_revision', '70000', None)
step = build.addStepWithName('pytest')
step.logs.extend([FakeLog(step, 'pytestLog', "F TEST1")])
step.setText(["pytest", "failed"])
- step.stepFinished(summary.FAILURE)
+ step.stepFinished(summary.FAILURE)
step2 = build.addStepWithName('pytest2')
step2.logs.extend([FakeLog(step, 'pytestLog', ". x\nF TEST2")])
step2.setText(["pytest2", "aborted"])
step2.stepFinished(summary.EXCEPTION)
build.buildFinished()
- builder.touchBuildCache(build)
- builder.nextBuildNumber = 1
+ builder.buildCache.cache[build.number] = build
+ builder.nextBuildNumber = len(builder.buildCache.cache)
s = summary.Summary()
req = FakeRequest([builder])
@@ -720,23 +743,23 @@
assert 'pytest2 aborted' in out
def test_subtle_failures(self):
- builder = status_builder.BuilderStatus('builder1', '', self.master)
- build = status_builder.BuildStatus(builder, 0)
+ builder = status_builder.BuilderStatus('builder1', '', self.master, '')
+ build = status_builder.BuildStatus(builder, self.master, 0)
build.started = time.time()
build.setProperty('got_revision', '70000', None)
- step = build.addStepWithName('pytest')
+ step = build.addStepWithName('pytest')
step.logs.extend([FakeLog(step, 'pytestLog', ". TEST1")])
step.setText(["pytest", "failed slave lost"])
- step.stepFinished(summary.FAILURE)
+ step.stepFinished(summary.FAILURE)
build.buildFinished()
- builder.touchBuildCache(build)
- builder.nextBuildNumber = 1
+ builder.buildCache.cache[build.number] = build
+ builder.nextBuildNumber = len(builder.buildCache.cache)
s = summary.Summary()
req = FakeRequest([builder])
out = s.body(req)
- assert 'pytest failed slave lost' in out
+ assert 'pytest failed slave lost' in out
def test_category_branch_sorting_key(self):
@@ -765,16 +788,16 @@
assert res == (2, '', 2, 'release/1')
res = s._cat_branch_key(('', 'what'))
- assert res == (2, '', 4, 'what')
+ assert res == (2, '', 4, 'what')
def test_builders_with_categories(self):
- builder1 = status_builder.BuilderStatus('builder_foo', 'foo',
self.master)
- builder2 = status_builder.BuilderStatus('builder_bar', 'bar',
self.master)
- builder3 = status_builder.BuilderStatus('builder_', '', self.master)
+ builder1 = status_builder.BuilderStatus('builder_foo', 'foo',
self.master, '')
+ builder2 = status_builder.BuilderStatus('builder_bar', 'bar',
self.master, '')
+ builder3 = status_builder.BuilderStatus('builder_', '', self.master,
'')
add_builds(builder1, [('60000', "F TEST1\n")])
add_builds(builder2, [('60000', "F TEST2\n")])
- add_builds(builder3, [('60000', "F TEST3\n")])
+ add_builds(builder3, [('60000', "F TEST3\n")])
s = summary.Summary(['foo', 'bar'])
req = FakeRequest([builder1, builder2, builder3])
@@ -790,7 +813,7 @@
assert "{bar}" in out
def test_two_builds_different_rev_digits(self):
- builder = status_builder.BuilderStatus('builder0', '', self.master)
+ builder = status_builder.BuilderStatus('builder0', '', self.master, '')
add_builds(builder, [(999, "F TEST1\n. b"),
(1000, "F TEST1\n. b")])
@@ -804,16 +827,16 @@
assert p999builder0-p999 == p1000builder0-p1000+1
def test_build_times_and_filtering(self):
- builder1 = status_builder.BuilderStatus('builder1', '', self.master)
- builder2 = status_builder.BuilderStatus('builder2', '', self.master)
-
+ builder1 = status_builder.BuilderStatus('builder1', '', self.master,
'')
+ builder2 = status_builder.BuilderStatus('builder2', '', self.master,
'')
+
add_builds(builder1, [('60000', "F TEST1\n")])
- add_builds(builder2, [('50000', ". TEST2\n")])
+ add_builds(builder2, [('50000', ". TEST2\n")])
add_builds(builder2, [('60000', "F TEST2\n")])
builder1.getBuild(0).started = 1228258800 # 3 Dec 2008
builder1.getBuild(0).finished = 1228258800 # 3 Dec 2008
- builder2.getBuild(1).started = 1228431600 # 5 Dec 2008
+ builder2.getBuild(1).started = 1228431600 # 5 Dec 2008
builder2.getBuild(1).finished = 1228431600 # 5 Dec 2008
builder2.getBuild(0).started = 1227913200 # 29 Nov 2008
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit