예제 #1
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #8
0
    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)
예제 #9
0
   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)
예제 #10
0
    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))
예제 #11
0
    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))
예제 #13
0
    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))
예제 #15
0
    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))
예제 #16
0
    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))
예제 #17
0
    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))
예제 #18
0
    def test_buildFinished_mode_problem_ignores_successful_build(self):
        mn = MailNotifier('*****@*****.**', mode="problem")

        build = Mock()

        self.assertEqual(None, mn.buildFinished('dummyBuilder', build,
                                                SUCCESS))
예제 #19
0
    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))
예제 #20
0
    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))
예제 #21
0
    def test_buildFinished_mode_passing_ignores_failed_build(self):
        mn = MailNotifier('*****@*****.**', mode="passing")

        build = Mock()

        self.assertEqual(None, mn.buildFinished('dummyBuilder', build,
                                                FAILURE))
예제 #22
0
    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_builders(self):
        mn = MailNotifier('*****@*****.**', builders=['a','b'])

        build = FakeBuildStatus()
        build.builder = Mock()

        self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))
예제 #24
0
    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))
예제 #26
0
    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))
예제 #27
0
    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))
예제 #28
0
    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))
예제 #29
0
    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))
예제 #33
0
    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))
예제 #34
0
    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))
예제 #35
0
    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))
예제 #36
0
    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))
예제 #37
0
    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))
예제 #38
0
    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))
예제 #41
0
    def test_buildFinished_mode_failing_ignores_successful_build(self):
        mn = MailNotifier('*****@*****.**', mode="failing")

        build = Mock()

        self.assertEqual(None, mn.buildFinished('dummyBuilder', build, SUCCESS))