def buildFinished(self, name, build, results): if self.builderGroups: currentBuilder = build.getBuilder() currentBuilderName = currentBuilder.getName() revision = build.getSourceStamp().revision for builderGroup in self.builderGroups: if builderGroup.containsBuilder(currentBuilderName): if builderGroup.currentBuild == revision: if self.shouldSendMessage(name, build, results): # Append to cache builderGroup.cacheMessage(name, build, results) if self.schedulerGroupsSendFirst: if builderGroup.sent < self.schedulerGroupsSendFirst: builderGroup.sent += 1 MailNotifier.buildFinished( self, name, build, results) # Are there any builders left? if not send the grouped message for builder in builderGroup.builderNames: # The current builder will always have a building state, # so do not check state if current builder if builder != currentBuilderName: state = self.status.getBuilder( builder).getState()[0] if state == "building": # if any are building we can return return # Nothing is building - send out the aggregated message if len(builderGroup.cachedMessages ) == builderGroup.sent: # We've already sent out all the messages in the cache # so there is no need to send out the aggregated messages return d = self.sendAggregateMail(builderGroup.cachedMessages) builderGroup.reset() return d elif builderGroup.currentBuild != revision: # new revision - reset BuilderGroup just in case builderGroup.reset() builderGroup.currentBuild = revision if self.shouldSendMessage(name, build, results): # Append to cache builderGroup.cacheMessage(name, build, results) if self.schedulerGroupsSendFirst: builderGroup.sent = 1 # send this email out return MailNotifier.buildFinished( self, name, build, results) break else: # send message like regular MailNotifier # this comment copied from MailNotifier: # for testing purposes, buildMessage returns a Deferred that fires # when the mail has been sent. To help unit tests, we return that # Deferred here even though the normal IStatusReceiver.buildFinished # signature doesn't do anything with it. If that changes (if # .buildFinished's return value becomes significant), we need to # rearrange this. return MailNotifier.buildFinished(self, name, build, results)
def test_buildFinished_mode_all_always_sends_email(self, mock_method): mn = MailNotifier('*****@*****.**', mode="all") build = Mock() mn.buildFinished('dummyBuilder', build, FAILURE) mock_method.assert_called_with('dummyBuilder', build, FAILURE)
def run_simple_test_ignores_email_for_mode(self, mode, result): mock_method = Mock() self.patch(MailNotifier, "buildMessage", mock_method) mn = MailNotifier('*****@*****.**', mode=mode) build = FakeBuildStatus(name="build") mn.buildFinished('dummyBuilder', build, result) self.assertFalse(mock_method.called)
def run_simple_test_sends_email_for_mode(self, mode, result): mock_method = Mock() self.patch(MailNotifier, "buildMessage", mock_method) mn = MailNotifier("*****@*****.**", mode=mode) build = FakeBuildStatus(name="build") mn.buildFinished("dummyBuilder", build, result) mock_method.assert_called_with("dummyBuilder", [build], result)
def test_buildFinished_mode_all_always_sends_email(self): mock_method = Mock() self.patch(MailNotifier, "buildMessage", mock_method) mn = MailNotifier('*****@*****.**', mode=("failing", "passing", "warnings")) build = FakeBuildStatus(name="build") mn.buildFinished('dummyBuilder', build, FAILURE) mock_method.assert_called_with('dummyBuilder', [build], FAILURE)
def test_buildFinished_mode_all_always_sends_email(self): mock_method = Mock() self.patch(MailNotifier, "buildMessage", mock_method) mn = MailNotifier("*****@*****.**", mode="all") build = Mock() mn.buildFinished("dummyBuilder", build, FAILURE) mock_method.assert_called_with("dummyBuilder", build, FAILURE)
def test_buildFinished_mode_all_always_sends_email(self): mock_method = Mock() self.patch(MailNotifier, "buildMessage", mock_method) mn = MailNotifier('*****@*****.**', mode="all") build = FakeBuildStatus(name="build") mn.buildFinished('dummyBuilder', build, FAILURE) mock_method.assert_called_with('dummyBuilder', [build], FAILURE)
def buildFinished(self, name, build, results): if self.builderGroups: currentBuilder = build.getBuilder() currentBuilderName = currentBuilder.getName() revision = build.getSourceStamp().revision for builderGroup in self.builderGroups: if builderGroup.containsBuilder(currentBuilderName): if builderGroup.currentBuild == revision: if self.shouldSendMessage(name, build, results): # Append to cache builderGroup.cacheMessage(name, build, results) if self.schedulerGroupsSendFirst: if builderGroup.sent < self.schedulerGroupsSendFirst: builderGroup.sent += 1 MailNotifier.buildFinished(self, name, build, results) # Are there any builders left? if not send the grouped message for builder in builderGroup.builderNames: # The current builder will always have a building state, # so do not check state if current builder if builder != currentBuilderName: state = self.status.getBuilder(builder).getState()[0] if state == "building": # if any are building we can return return # Nothing is building - send out the aggregated message if len(builderGroup.cachedMessages) == builderGroup.sent: # We've already sent out all the messages in the cache # so there is no need to send out the aggregated messages return d = self.sendAggregateMail(builderGroup.cachedMessages) builderGroup.reset() return d elif builderGroup.currentBuild != revision: # new revision - reset BuilderGroup just in case builderGroup.reset() builderGroup.currentBuild = revision if self.shouldSendMessage(name, build, results): # Append to cache builderGroup.cacheMessage(name, build, results) if self.schedulerGroupsSendFirst: builderGroup.sent = 1 # send this email out return MailNotifier.buildFinished(self, name, build, results) break else: # send message like regular MailNotifier # this comment copied from MailNotifier: # for testing purposes, buildMessage returns a Deferred that fires # when the mail has been sent. To help unit tests, we return that # Deferred here even though the normal IStatusReceiver.buildFinished # signature doesn't do anything with it. If that changes (if # .buildFinished's return value becomes significant), we need to # rearrange this. return MailNotifier.buildFinished(self, name, build, results)
def test_buildFinished_mode_change_ignores_first_build(self): mn = MailNotifier('*****@*****.**', mode=("change", )) build = FakeBuildStatus(name="build") build.getPreviousBuild.return_value = None self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE)) self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_change_ignores_first_build(self): mn = MailNotifier('*****@*****.**', mode=("change",)) build = FakeBuildStatus(name="build") build.getPreviousBuild.return_value = None self.assertEqual( None, mn.buildFinished('dummyBuilder', build, FAILURE)) self.assertEqual( None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_change_ignores_same_result_in_sequence(self): mn = MailNotifier('*****@*****.**', mode=("change",)) build = FakeBuildStatus(name="build") old_build = FakeBuildStatus(name="old_build") build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE build2 = FakeBuildStatus(name="build2") old_build2 = FakeBuildStatus(name="old_build2") build2.getPreviousBuild.return_value = old_build2 old_build2.getResults.return_value = SUCCESS self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE)) self.assertEqual(None, mn.buildFinished('dummyBuilder', build2, SUCCESS))
def test_buildFinished_mode_change_ignores_same_result_in_sequence(self): mn = MailNotifier('*****@*****.**', mode="change") build = FakeBuildStatus(name="build") old_build = FakeBuildStatus(name="old_build") build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE build2 = FakeBuildStatus(name="build2") old_build2 = FakeBuildStatus(name="old_build2") build2.getPreviousBuild.return_value = old_build2 old_build2.getResults.return_value = SUCCESS self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE)) self.assertEqual(None, mn.buildFinished('dummyBuilder', build2, SUCCESS))
def test_buildFinished_mode_change_ignores_same_result_in_sequence(self): mn = MailNotifier("*****@*****.**", mode="change") build = Mock() old_build = Mock() build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE build2 = Mock() old_build2 = Mock() build2.getPreviousBuild.return_value = old_build2 old_build2.getResults.return_value = SUCCESS self.assertEqual(None, mn.buildFinished("dummyBuilder", build, FAILURE)) self.assertEqual(None, mn.buildFinished("dummyBuilder", build2, SUCCESS))
def test_buildFinished_ignores_unspecified_builders(self): mn = MailNotifier("*****@*****.**", builders=["a", "b"]) build = FakeBuildStatus() build.builder = Mock() self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_mode_problem_ignores_successful_build(self): mn = MailNotifier('*****@*****.**', mode=("problem", )) build = FakeBuildStatus(name="build") self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_passing_ignores_failed_build(self): mn = MailNotifier('*****@*****.**', mode=("passing", )) build = FakeBuildStatus(name="build") self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE))
def test_buildFinished_mode_problem_ignores_successful_build(self): mn = MailNotifier('*****@*****.**', mode="problem") build = Mock() self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_problem_ignores_successful_build(self): mn = MailNotifier('*****@*****.**', mode=("problem",)) build = FakeBuildStatus(name="build") self.assertEqual( None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_passing_ignores_failed_build(self): mn = MailNotifier('*****@*****.**', mode=("passing",)) build = FakeBuildStatus(name="build") self.assertEqual( None, mn.buildFinished('dummyBuilder', build, FAILURE))
def test_buildFinished_mode_passing_ignores_failed_build(self): mn = MailNotifier('*****@*****.**', mode="passing") build = Mock() self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE))
def test_buildFinished_ignores_unspecified_builders(self): mn = MailNotifier('*****@*****.**', builders=['a','b']) build = FakeBuildStatus() build.builder = Mock() self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): mn = MailNotifier('*****@*****.**', categories=['fast']) build = FakeBuildStatus(name="build") build.builder = Mock() build.builder.category = 'slow' self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_change_ignores_first_build(self): mn = MailNotifier("*****@*****.**", mode="change") build = Mock() build.getPreviousBuild.return_value = None self.assertEqual(None, mn.buildFinished("dummyBuilder", build, FAILURE)) self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): mn = MailNotifier("*****@*****.**", categories=["fast"]) build = FakeBuildStatus(name="build") build.builder = Mock() build.builder.category = "slow" self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_mode_problem_ignores_two_failed_builds_in_sequence(self): mn = MailNotifier('*****@*****.**', mode="problem") build = FakeBuildStatus(name="build") old_build = FakeBuildStatus(name="old_build") build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE))
def test_buildFinished_ignores_unspecified_tags(self): mn = MailNotifier("*****@*****.**", tags=["fast"]) build = FakeBuildStatus(name="build") build.builder = fakemaster.FakeBuilderStatus(self.master) build.builder.setTags(["slow"]) build.getBuilder = lambda: build.builder self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): mn = MailNotifier("*****@*****.**", categories=["fast"]) build = Mock() builder = Mock() build.getBuilder.return_value = builder builder.category = "slow" self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_mode_problem_ignores_two_failed_builds_in_sequence(self): mn = MailNotifier("*****@*****.**", mode="problem") build = Mock() old_build = Mock() build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE self.assertEqual(None, mn.buildFinished("dummyBuilder", build, FAILURE))
def test_buildFinished_mode_problem_ignores_two_failed_builds_in_sequence(self): mn = MailNotifier('*****@*****.**', mode=("problem",)) build = FakeBuildStatus(name="build") old_build = FakeBuildStatus(name="old_build") build.getPreviousBuild.return_value = old_build old_build.getResults.return_value = FAILURE self.assertEqual(None, mn.buildFinished('dummyBuilder', build, FAILURE))
def test_buildFinished_ignores_unspecified_tags(self): mn = MailNotifier('*****@*****.**', tags=['fast']) build = FakeBuildStatus(name="build") build.builder = fakemaster.FakeBuilderStatus(self.master) build.builder.setTags(['slow']) build.getBuilder = lambda: build.builder self.assertEqual( None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): # categories are deprecated, but test them until they're removed mn = MailNotifier("*****@*****.**", categories=["fast"]) build = FakeBuildStatus(name="build") build.builder = fakemaster.FakeBuilderStatus(self.master) build.builder.setTags(["slow"]) build.getBuilder = lambda: build.builder self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): mn = MailNotifier('*****@*****.**', categories=['fast']) build = Mock() builder = Mock() build.getBuilder.return_value = builder builder.category = 'slow' self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_ignores_unspecified_categories(self): # categories are deprecated, but test them until they're removed mn = MailNotifier('*****@*****.**', categories=['fast']) build = FakeBuildStatus(name="build") build.builder = fakemaster.FakeBuilderStatus(self.master) build.builder.setTags(['slow']) build.getBuilder = lambda: build.builder self.assertEqual( None, mn.buildFinished('dummyBuilder', build, SUCCESS))
def test_buildFinished_mode_failing_ignores_successful_build(self): mn = MailNotifier("*****@*****.**", mode="failing") build = FakeBuildStatus(name="build") self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_mode_problem_ignores_successful_build(self): mn = MailNotifier("*****@*****.**", mode="problem") build = Mock() self.assertEqual(None, mn.buildFinished("dummyBuilder", build, SUCCESS))
def test_buildFinished_mode_passing_ignores_failed_build(self): mn = MailNotifier("*****@*****.**", mode="passing") build = Mock() self.assertEqual(None, mn.buildFinished("dummyBuilder", build, FAILURE))
def test_buildFinished_mode_failing_ignores_successful_build(self): mn = MailNotifier('*****@*****.**', mode="failing") build = Mock() self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))