Author: David Schneider <david.schnei...@picle.org> 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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit