Example #1
0
    def test_buildMessage_addLogs(self):
        mn = MailNotifier("*****@*****.**", mode=("change",), addLogs=True)

        mn.buildMessageDict = Mock()
        mn.buildMessageDict.return_value = {"body": "body", "type": "text", "subject": "subject"}

        mn.createEmail = Mock("createEmail")

        mn._gotRecipients = Mock("_gotReceipients")
        mn._gotRecipients.return_value = None

        mn.master_status = Mock()
        mn.master_status.getTitle.return_value = "TITLE"

        bldr = Mock(name="builder")
        builds = [FakeBuildStatus(name="build1"), FakeBuildStatus(name="build2")]
        logs = [FakeLog("log1"), FakeLog("log2")]
        for b, l in zip(builds, logs):
            b.builder = bldr
            b.results = 0
            ss = Mock(name="ss")
            b.getSourceStamps.return_value = [ss]
            ss.patch = None
            ss.changes = []
            b.getLogs.return_value = [l]
        d = mn.buildMessage("mybldr", builds, 0)

        def check(_):
            mn.createEmail.assert_called_with(
                dict(body="body\n\nbody\n\n", type="text", subject="subject"), "mybldr", "TITLE", 0, builds, [], logs
            )

        d.addCallback(check)
        return d
Example #2
0
    def test_buildMessage_addLogs(self):
        mn = MailNotifier('*****@*****.**', mode="change", addLogs=True)

        mn.buildMessageDict = Mock()
        mn.buildMessageDict.return_value = {"body":"body", "type":"text",
                                            "subject":"subject"}

        mn.createEmail = Mock("createEmail")

        mn._gotRecipients = Mock("_gotReceipients")
        mn._gotRecipients.return_value = None

        mn.master_status = Mock()
        mn.master_status.getTitle.return_value = 'TITLE'

        bldr = Mock(name="builder")
        builds = [ FakeBuildStatus(name='build1'),
                   FakeBuildStatus(name='build2') ]
        logs = [ FakeLog('log1'), FakeLog('log2') ]
        for b, l in zip(builds, logs):
            b.builder = bldr
            b.results = 0
            b.getSourceStamp.return_value = ss = Mock(name='ss')
            ss.patch = None
            ss.changes = []
            b.getLogs.return_value = [ l ]
        d = mn.buildMessage("mybldr", builds, 0)
        def check(_):
            mn.createEmail.assert_called_with(
                dict(body='body\n\nbody\n\n', type='text', subject='subject'),
                'mybldr', 'TITLE', 0, builds, [], logs)
        d.addCallback(check)
        return d
    def test_buildMessage_addLogs(self):
        mn = MailNotifier('*****@*****.**', mode=("change",), addLogs=True)

        mn.buildMessageDict = Mock()
        mn.buildMessageDict.return_value = {"body":"body", "type":"text",
                                            "subject":"subject"}

        mn.createEmail = Mock("createEmail")

        mn._gotRecipients = Mock("_gotReceipients")
        mn._gotRecipients.return_value = None

        mn.master_status = Mock()
        mn.master_status.getTitle.return_value = 'TITLE'

        bldr = Mock(name="builder")
        builds = [ FakeBuildStatus(name='build1'),
                   FakeBuildStatus(name='build2') ]
        logs = [ FakeLog('log1'), FakeLog('log2') ]
        for b, l in zip(builds, logs):
            b.builder = bldr
            b.results = 0
            b.getSourceStamp.return_value = ss = Mock(name='ss')
            ss.patch = None
            ss.changes = []
            b.getLogs.return_value = [ l ]
        d = mn.buildMessage("mybldr", builds, 0)
        def check(_):
            mn.createEmail.assert_called_with(
                dict(body='body\n\nbody\n\n', type='text', subject='subject'),
                'mybldr', 'TITLE', 0, builds, [], logs)
        d.addCallback(check)
        return d
Example #4
0
 def test_createEmail_extraHeaders_two_builds(self):
     builds = [FakeBuildStatus(name="build1"), FakeBuildStatus(name="build2")]
     msgdict = create_msgdict()
     mn = MailNotifier("*****@*****.**", extraHeaders=dict(hhh="vvv"))
     m = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, builds)
     txt = m.as_string()
     # note that the headers are *not* rendered
     self.assertIn("hhh: vvv", txt)
Example #5
0
 def test_createEmail_extraHeaders_one_build(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     # add some Unicode to detect encoding problems
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     txt = m.as_string()
     self.assertIn('rndr(hhh): rndr(vvv)', txt)
Example #6
0
 def test_createEmail_message_with_nonascii_patch(self):
     builds = [FakeBuildStatus(name="build")]
     msgdict = create_msgdict()
     patches = [["", "\x99\xaa", ""]]
     logs = [FakeLog("simple log")]
     mn = MailNotifier("*****@*****.**", addLogs=True)
     m = mn.createEmail(msgdict, u"builder", u"pr", SUCCESS, builds, patches, logs)
     txt = m.as_string()
     self.assertIn("application/octet-stream", txt)
 def test_createEmail_message_without_patch_and_log_contains_unicode(self):
     msgdict = dict(body=u'Unicode body with non-ascii (åäö).',
                    type='plain')
     mn = MailNotifier('*****@*****.**')
     m = mn.createEmail(msgdict, u'builder-näme', u'project-näme', SUCCESS)
     try:
         print m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
Example #8
0
 def test_createEmail_extraHeaders_one_build(self):
     builds = [FakeBuildStatus(name="build")]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     # add some Unicode to detect encoding problems
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     txt = m.as_string()
     self.assertIn('rndr(hhh): rndr(vvv)', txt)
 def test_createEmail_message_without_patch_and_log_contains_unicode(self):
     build = Mock()
     msgdict = create_msgdict()
     mn = MailNotifier("*****@*****.**")
     m = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, build)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail("Failed to call as_string() on email message.")
Example #10
0
 def test_createEmail_extraHeaders_two_builds(self):
     builds = [ FakeBuildStatus(name="build1"),
                FakeBuildStatus(name="build2") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     txt = m.as_string()
     # note that the headers are *not* rendered
     self.assertIn('hhh: vvv', txt)
 def test_createEmail_extraHeaders(self):
     builds = [ Mock(name="build") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
Example #12
0
 def test_createEmail_extraHeaders_one_build(self):
     builds = [FakeBuildStatus(name="build")]
     builds[0].properties = properties.Properties()
     builds[0].setProperty("hhh", "vvv")
     msgdict = create_msgdict()
     mn = MailNotifier("*****@*****.**", extraHeaders=dict(hhh="vvv"))
     # add some Unicode to detect encoding problems
     m = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, builds)
     txt = m.as_string()
     self.assertIn("hhh: vvv", txt)
 def test_createEmail_message_with_nonascii_patch(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     patches = [ ['', '\x99\xaa', ''] ]
     logs = [ FakeLog('simple log') ]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder', u'pr', SUCCESS,
                        builds, patches, logs)
     txt = m.as_string()
     self.assertIn('application/octet-stream', txt)
Example #14
0
 def test_createEmail_message_with_nonascii_patch(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     patches = [ ['', '\x99\xaa', ''] ]
     logs = [ FakeLog('simple log') ]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder', u'pr', SUCCESS,
                        builds, patches, logs)
     txt = m.as_string()
     self.assertIn('application/octet-stream', txt)
 def test_createEmail_message_without_patch_and_log_contains_unicode(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**')
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
Example #16
0
 def test_createEmail_message_without_patch_and_log_contains_unicode(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**')
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
 def test_createEmail_message_without_patch_and_log_contains_unicode(self):
     msgdict = dict(
         body=u'Unicode body with non-ascii (\u00E5\u00E4\u00F6).',
         type='plain')
     mn = MailNotifier('*****@*****.**')
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
 def test_createEmail_message_with_patch_and_log_contains_unicode(self):
     build = Mock()
     msgdict = create_msgdict()
     patch = ["", u"\u00E5\u00E4\u00F6", ""]
     logs = [FakeLog(u"Unicode log with non-ascii (\u00E5\u00E4\u00F6).")]
     mn = MailNotifier("*****@*****.**", addLogs=True)
     m = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, build, patch, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail("Failed to call as_string() on email message.")
Example #19
0
    def do_test_createEmail_cte(self, funnyChars, expEncoding):
        builds = [FakeBuildStatus(name="build")]
        msgdict = create_msgdict(funnyChars)
        mn = MailNotifier("*****@*****.**")
        d = mn.createEmail(msgdict, u"builder-name", u"project-name", SUCCESS, builds)

        @d.addCallback
        def callback(m):
            cte_lines = [l for l in m.as_string().split("\n") if l.startswith("Content-Transfer-Encoding:")]
            self.assertEqual(cte_lines, ["Content-Transfer-Encoding: %s" % expEncoding], repr(m.as_string()))

        return d
Example #20
0
 def test_createEmail_message_with_patch_and_log_contains_unicode(self):
     builds = [FakeBuildStatus(name="build")]
     msgdict = create_msgdict()
     patches = [['', u'\u00E5\u00E4\u00F6', '']]
     logs = [FakeLog(u'Unicode log with non-ascii (\u00E5\u00E4\u00F6).')]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds, patches, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
 def test_createEmail_message_with_patch_and_log_contains_unicode(self):
     msgdict = dict(body=u'Unicode body with non-ascii (åäö).',
                    type='plain')
     patch = ['', u'åäö', '']
     logs = [FakeLog(u'Unicode log with non-ascii (åäö).')]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder-näme', u'project-näme', SUCCESS,
                        patch, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
 def test_createEmail_message_with_patch_and_log_contains_unicode(self):
     build = Mock()
     msgdict = create_msgdict()
     patch = ['', u'\u00E5\u00E4\u00F6', '']
     logs = [FakeLog(u'Unicode log with non-ascii (\u00E5\u00E4\u00F6).')]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder-n\u00E5me',
                        u'project-n\u00E5me', SUCCESS,
                        build, patch, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
Example #23
0
 def test_createEmail_message_with_patch_and_log_containing_unicode(self):
     builds = [FakeBuildStatus(name="build")]
     msgdict = create_msgdict()
     patches = [["", u"\u00E5\u00E4\u00F6", ""]]
     msg = u"Unicode log with non-ascii (\u00E5\u00E4\u00F6)."
     # add msg twice: as unicode and already encoded
     logs = [FakeLog(msg), FakeLog(msg.encode("utf-8"))]
     mn = MailNotifier("*****@*****.**", addLogs=True)
     m = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, builds, patches, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail("Failed to call as_string() on email message.")
Example #24
0
 def test_createEmail_extraHeaders_two_builds(self):
     builds = [ FakeBuildStatus(name="build1"),
                FakeBuildStatus(name="build2") ]
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     d = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     @d.addCallback
     def callback(m):
         txt = m.as_string()
         # note that the headers are *not* rendered
         self.assertIn('hhh: vvv', txt)
     return d
 def test_createEmail_message_with_patch_and_log_contains_unicode(self):
     msgdict = dict(
         body=u'Unicode body with non-ascii (\u00E5\u00E4\u00F6).',
         type='plain')
     patch = ['', u'\u00E5\u00E4\u00F6', '']
     logs = [FakeLog(u'Unicode log with non-ascii (\u00E5\u00E4\u00F6).')]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     m = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, patch, logs)
     try:
         m.as_string()
     except UnicodeEncodeError:
         self.fail('Failed to call as_string() on email message.')
Example #26
0
 def do_test_createEmail_cte(self, funnyChars, expEncoding):
     builds = [ FakeBuildStatus(name='build') ]
     msgdict = create_msgdict(funnyChars)
     mn = MailNotifier('*****@*****.**')
     d = mn.createEmail(msgdict, u'builder-name', u'project-name',
                        SUCCESS, builds)
     @d.addCallback
     def callback(m):
         cte_lines = [ l for l in m.as_string().split("\n")
                       if l.startswith('Content-Transfer-Encoding:') ]
         self.assertEqual(cte_lines,
                 [ 'Content-Transfer-Encoding: %s' % expEncoding ],
                 `m.as_string()`)
     return d
Example #27
0
 def test_createEmail_extraHeaders_one_build(self):
     builds = [ FakeBuildStatus(name="build") ]
     builds[0].properties = properties.Properties()
     builds[0].setProperty('hhh','vvv')
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     # add some Unicode to detect encoding problems
     d = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     @d.addCallback
     def callback(m):
         txt = m.as_string()
         self.assertIn('hhh: vvv', txt)
     return d
Example #28
0
 def do_test_createEmail_cte(self, funnyChars, expEncoding):
     builds = [ FakeBuildStatus(name='build') ]
     msgdict = create_msgdict(funnyChars)
     mn = MailNotifier('*****@*****.**')
     d = mn.createEmail(msgdict, u'builder-name', u'project-name',
                        SUCCESS, builds)
     @d.addCallback
     def callback(m):
         cte_lines = [ l for l in m.as_string().split("\n")
                       if l.startswith('Content-Transfer-Encoding:') ]
         self.assertEqual(cte_lines,
                 [ 'Content-Transfer-Encoding: %s' % expEncoding ],
                 `m.as_string()`)
     return d
Example #29
0
 def test_createEmail_extraHeaders_one_build(self):
     builds = [ FakeBuildStatus(name="build") ]
     builds[0].properties = properties.Properties()
     builds[0].setProperty('hhh','vvv')
     msgdict = create_msgdict()
     mn = MailNotifier('*****@*****.**', extraHeaders=dict(hhh='vvv'))
     # add some Unicode to detect encoding problems
     d = mn.createEmail(msgdict, u'builder-n\u00E5me', u'project-n\u00E5me',
                        SUCCESS, builds)
     @d.addCallback
     def callback(m):
         txt = m.as_string()
         self.assertIn('hhh: vvv', txt)
     return d
Example #30
0
    def test_createEmail_message_without_patch_and_log_contains_unicode(self):
        builds = [FakeBuildStatus(name="build")]
        msgdict = create_msgdict()
        mn = MailNotifier("*****@*****.**")
        d = mn.createEmail(msgdict, u"builder-n\u00E5me", u"project-n\u00E5me", SUCCESS, builds)

        @d.addCallback
        def callback(m):
            try:
                m.as_string()
            except UnicodeEncodeError:
                self.fail("Failed to call as_string() on email message.")

        return d
Example #31
0
  def createEmail(self, msgdict, builderName, title, results, builds=None,
                  patches=None, logs=None):
    # Trybots have their own Notifier
    if builder_name_schema.IsTrybot(builderName):
      return None

    m = MailNotifier.createEmail(self, msgdict, builderName, title,
        results, builds, patches, logs)

    if builds and builds[0].getSourceStamp().revision:
      m.replace_header('Subject',
          'buildbot %(result)s in %(title)s for %(revision)s' % {
              'result': Results[results],
              'title': title,
              'revision': builds[0].getSourceStamp().revision,
          })
    return m
Example #32
0
 def test_createEmail_message_with_patch_and_log_containing_unicode(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     patches = [ ['', u'\u00E5\u00E4\u00F6', ''] ]
     msg = u'Unicode log with non-ascii (\u00E5\u00E4\u00F6).'
     # add msg twice: as unicode and already encoded
     logs = [ FakeLog(msg), FakeLog(msg.encode('utf-8')) ]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     d = mn.createEmail(msgdict, u'builder-n\u00E5me',
                        u'project-n\u00E5me', SUCCESS,
                        builds, patches, logs)
     @d.addCallback
     def callback(m):
         try:
             m.as_string()
         except UnicodeEncodeError:
             self.fail('Failed to call as_string() on email message.')
     return d
Example #33
0
 def test_createEmail_message_with_patch_and_log_containing_unicode(self):
     builds = [ FakeBuildStatus(name="build") ]
     msgdict = create_msgdict()
     patches = [ ['', u'\u00E5\u00E4\u00F6', ''] ]
     msg = u'Unicode log with non-ascii (\u00E5\u00E4\u00F6).'
     # add msg twice: as unicode and already encoded
     logs = [ FakeLog(msg), FakeLog(msg.encode('utf-8')) ]
     mn = MailNotifier('*****@*****.**', addLogs=True)
     d = mn.createEmail(msgdict, u'builder-n\u00E5me',
                        u'project-n\u00E5me', SUCCESS,
                        builds, patches, logs)
     @d.addCallback
     def callback(m):
         try:
             m.as_string()
         except UnicodeEncodeError:
             self.fail('Failed to call as_string() on email message.')
     return d
    def createEmail(self,
                    msgdict,
                    builderName,
                    title,
                    results,
                    builds=None,
                    patches=None,
                    logs=None):
        # Trybots have their own Notifier
        if builder_name_schema.IsTrybot(builderName):
            return None

        m = MailNotifier.createEmail(self, msgdict, builderName, title,
                                     results, builds, patches, logs)

        if builds and builds[0].getSourceStamp().revision:
            m.replace_header(
                'Subject',
                'buildbot %(result)s in %(title)s for %(revision)s' % {
                    'result': Results[results],
                    'title': title,
                    'revision': builds[0].getSourceStamp().revision,
                })
        return m
    def test_sendToInterestedUsers_two_builds(self):
        from email.Message import Message
        m = Message()

        mn = MailNotifier(fromaddr="*****@*****.**", lookup=None)
        mn.sendMessage = Mock()

        def fakeGetBuilder(buildername):
            if buildername == builder.name:
                return builder
            return None
        def fakeGetBuildRequests(self, bsid):
            return defer.succeed([{"buildername":"Builder", "brid":1}])

        builder = Mock()
        builder.name = "Builder"

        build1 = FakeBuildStatus(name="build")
        build1.result = FAILURE
        build1.finished = True
        build1.reason = "testReason"
        build1.builder = builder

        build2 = FakeBuildStatus(name="build")
        build2.result = FAILURE
        build2.finished = True
        build2.reason = "testReason"
        build2.builder = builder

        def fakeCreateEmail(msgdict, builderName, title, results, builds=None,
                            patches=None, logs=None):
            # only concerned with m['To'] and m['CC'], which are added in
            # _got_recipients later
            return m
        mn.createEmail = fakeCreateEmail

        self.db = fakedb.FakeDBConnector(self)
        self.db.insertTestData([fakedb.SourceStampSet(id=1099),
                                fakedb.Buildset(id=99, sourcestampsetid=1099,
                                                results=SUCCESS,
                                                reason="testReason"),
                                fakedb.BuildRequest(id=11, buildsetid=99,
                                                    buildername='Builder'),
                                fakedb.Build(number=0, brid=11),
                                fakedb.Build(number=1, brid=11),
                                fakedb.Change(changeid=9123),
                                fakedb.Change(changeid=9124),
                                fakedb.ChangeUser(changeid=9123, uid=1),
                                fakedb.ChangeUser(changeid=9124, uid=2),
                                fakedb.User(uid=1, identifier="tdurden"),
                                fakedb.User(uid=2, identifier="user2"),
                                fakedb.UserInfo(uid=1, attr_type='email',
                                            attr_data="*****@*****.**"),
                                fakedb.UserInfo(uid=2, attr_type='email',
                                            attr_data="*****@*****.**")
                                ])

        def _getInterestedUsers():
            # 'narrator' in this case is the owner, which tests the lookup
            return ["Big Bob <*****@*****.**>", "narrator"]
        build1.getInterestedUsers = _getInterestedUsers
        build2.getInterestedUsers = _getInterestedUsers

        def _getResponsibleUsers():
            return ["Big Bob <*****@*****.**>"]
        build1.getResponsibleUsers = _getResponsibleUsers
        build2.getResponsibleUsers = _getResponsibleUsers

        # fake sourcestamp with relevant user bits
        ss1 = Mock(name="sourcestamp")
        fake_change1 = Mock(name="change")
        fake_change1.number = 9123
        ss1.changes = [fake_change1]
        ss1.patch, ss1.addPatch = None, None

        ss2 = Mock(name="sourcestamp")
        fake_change2 = Mock(name="change")
        fake_change2.number = 9124
        ss2.changes = [fake_change2]
        ss2.patch, ss1.addPatch = None, None

        def fakeGetSS(ss):
            return lambda: ss
        build1.getSourceStamp = fakeGetSS(ss1)
        build2.getSourceStamp = fakeGetSS(ss2)

        mn.master = self # FIXME: Should be FakeMaster
        self.status = mn.master_status = mn.buildMessageDict = Mock()
        mn.master_status.getBuilder = fakeGetBuilder
        mn.buildMessageDict.return_value = {"body": "body", "type": "text"}

        mn.buildMessage(builder.name, [build1, build2], build1.result)
        self.assertEqual(m['To'], "[email protected], [email protected]")
    def do_test_sendToInterestedUsers(self, lookup=None, extraRecipients=[],
                                      sendToInterestedUsers=True,
                                      exp_called_with=None, exp_TO=None,
                                      exp_CC=None):
        from email.Message import Message
        m = Message()

        mn = MailNotifier(fromaddr='*****@*****.**',
                          lookup=lookup,
                          sendToInterestedUsers=sendToInterestedUsers,
                          extraRecipients=extraRecipients)
        mn.sendMessage = Mock()

        def fakeGetBuild(number):
            return build
        def fakeGetBuilder(buildername):
            if buildername == builder.name:
                return builder
            return None
        def fakeGetBuildRequests(self, bsid):
            return defer.succeed([{"buildername":"Builder", "brid":1}])

        builder = Mock()
        builder.getBuild = fakeGetBuild
        builder.name = "Builder"

        build = FakeBuildStatus(name="build")
        build.result = FAILURE
        build.finished = True
        build.reason = "testReason"
        build.builder = builder

        def fakeCreateEmail(msgdict, builderName, title, results, builds=None,
                            patches=None, logs=None):
            # only concerned with m['To'] and m['CC'], which are added in
            # _got_recipients later
            return m
        mn.createEmail = fakeCreateEmail

        self.db = fakedb.FakeDBConnector(self)
        self.db.insertTestData([fakedb.SourceStampSet(id=1099),
                                fakedb.Buildset(id=99, sourcestampsetid=1099,
                                                results=SUCCESS,
                                                reason="testReason"),
                                fakedb.BuildRequest(id=11, buildsetid=99,
                                                    buildername='Builder'),
                                fakedb.Build(number=0, brid=11),
                                fakedb.Change(changeid=9123),
                                fakedb.ChangeUser(changeid=9123, uid=1),
                                fakedb.User(uid=1, identifier="tdurden"),
                                fakedb.UserInfo(uid=1, attr_type='svn',
                                            attr_data="tdurden"),
                                fakedb.UserInfo(uid=1, attr_type='email',
                                            attr_data="*****@*****.**")
                                ])

        # fake sourcestamp with relevant user bits
        ss = Mock(name="sourcestamp")
        fake_change = Mock(name="change")
        fake_change.number = 9123
        ss.changes = [fake_change]
        ss.patch, ss.addPatch = None, None

        def fakeGetSS():
            return ss
        build.getSourceStamp = fakeGetSS

        def _getInterestedUsers():
            # 'narrator' in this case is the owner, which tests the lookup
            return ["Big Bob <*****@*****.**>", "narrator"]
        build.getInterestedUsers = _getInterestedUsers

        def _getResponsibleUsers():
            return ["Big Bob <*****@*****.**>"]
        build.getResponsibleUsers = _getResponsibleUsers

        mn.master = self # FIXME: Should be FakeMaster
        self.status = mn.master_status = mn.buildMessageDict = Mock()
        mn.master_status.getBuilder = fakeGetBuilder
        mn.buildMessageDict.return_value = {"body": "body", "type": "text"}

        mn.buildMessage(builder.name, [build], build.result)
        mn.sendMessage.assert_called_with(m, exp_called_with)
        self.assertEqual(m['To'], exp_TO)
        self.assertEqual(m['CC'], exp_CC)
Example #37
0
    def do_test_sendToInterestedUsers(self, lookup=None, extraRecipients=[],
                                      sendToInterestedUsers=True,
                                      exp_called_with=None, exp_TO=None,
                                      exp_CC=None):
        from email.Message import Message
        m = Message()

        mn = MailNotifier(fromaddr='*****@*****.**',
                          lookup=lookup,
                          sendToInterestedUsers=sendToInterestedUsers,
                          extraRecipients=extraRecipients)
        mn.sendMessage = Mock()

        def fakeGetBuild(number):
            return build
        def fakeGetBuilder(buildername):
            if buildername == builder.name:
                return builder
            return None
        def fakeGetBuildRequests(self, bsid):
            return defer.succeed([{"buildername":"Builder", "brid":1}])

        builder = Mock()
        builder.getBuild = fakeGetBuild
        builder.name = "Builder"

        build = FakeBuildStatus(name="build")
        build.result = FAILURE
        build.finished = True
        build.reason = "testReason"
        build.builder = builder

        def fakeCreateEmail(msgdict, builderName, title, results, builds=None,
                            patches=None, logs=None):
            # only concerned with m['To'] and m['CC'], which are added in
            # _got_recipients later
            return m
        mn.createEmail = fakeCreateEmail

        self.db = fakedb.FakeDBConnector(self)
        self.db.insertTestData([fakedb.SourceStampSet(id=1099),
                                fakedb.Buildset(id=99, sourcestampsetid=1099,
                                                results=SUCCESS,
                                                reason="testReason"),
                                fakedb.BuildRequest(id=11, buildsetid=99,
                                                    buildername='Builder'),
                                fakedb.Build(number=0, brid=11),
                                fakedb.Change(changeid=9123),
                                fakedb.ChangeUser(changeid=9123, uid=1),
                                fakedb.User(uid=1, identifier="tdurden"),
                                fakedb.UserInfo(uid=1, attr_type='svn',
                                            attr_data="tdurden"),
                                fakedb.UserInfo(uid=1, attr_type='email',
                                            attr_data="*****@*****.**")
                                ])

        # fake sourcestamp with relevant user bits
        ss = Mock(name="sourcestamp")
        fake_change = Mock(name="change")
        fake_change.number = 9123
        ss.changes = [fake_change]
        ss.patch, ss.addPatch = None, None

        def fakeGetSS():
            return ss
        build.getSourceStamp = fakeGetSS

        def _getInterestedUsers():
            # 'narrator' in this case is the owner, which tests the lookup
            return ["Big Bob <*****@*****.**>", "narrator"]
        build.getInterestedUsers = _getInterestedUsers

        def _getResponsibleUsers():
            return ["Big Bob <*****@*****.**>"]
        build.getResponsibleUsers = _getResponsibleUsers

        mn.parent = self
        self.status = mn.master_status = mn.buildMessageDict = Mock()
        mn.master_status.getBuilder = fakeGetBuilder
        mn.buildMessageDict.return_value = {"body": "body", "type": "text"}

        mn.buildMessage(builder.name, [build], build.result)
        mn.sendMessage.assert_called_with(m, exp_called_with)
        self.assertEqual(m['To'], exp_TO)
        self.assertEqual(m['CC'], exp_CC)
Example #38
0
    def test_sendToInterestedUsers_two_builds(self):
        from email.Message import Message
        m = Message()

        mn = MailNotifier(fromaddr="*****@*****.**", lookup=None)
        mn.sendMessage = Mock()

        def fakeGetBuilder(buildername):
            if buildername == builder.name:
                return builder
            return None
        def fakeGetBuildRequests(self, bsid):
            return defer.succeed([{"buildername":"Builder", "brid":1}])

        builder = Mock()
        builder.name = "Builder"

        build1 = FakeBuildStatus(name="build")
        build1.result = FAILURE
        build1.finished = True
        build1.reason = "testReason"
        build1.builder = builder

        build2 = FakeBuildStatus(name="build")
        build2.result = FAILURE
        build2.finished = True
        build2.reason = "testReason"
        build2.builder = builder

        def fakeCreateEmail(msgdict, builderName, title, results, builds=None,
                            patches=None, logs=None):
            # only concerned with m['To'] and m['CC'], which are added in
            # _got_recipients later
            return m
        mn.createEmail = fakeCreateEmail

        self.db = fakedb.FakeDBConnector(self)
        self.db.insertTestData([fakedb.SourceStampSet(id=1099),
                                fakedb.Buildset(id=99, sourcestampsetid=1099,
                                                results=SUCCESS,
                                                reason="testReason"),
                                fakedb.BuildRequest(id=11, buildsetid=99,
                                                    buildername='Builder'),
                                fakedb.Build(number=0, brid=11),
                                fakedb.Build(number=1, brid=11),
                                fakedb.Change(changeid=9123),
                                fakedb.Change(changeid=9124),
                                fakedb.ChangeUser(changeid=9123, uid=1),
                                fakedb.ChangeUser(changeid=9124, uid=2),
                                fakedb.User(uid=1, identifier="tdurden"),
                                fakedb.User(uid=2, identifier="user2"),
                                fakedb.UserInfo(uid=1, attr_type='email',
                                            attr_data="*****@*****.**"),
                                fakedb.UserInfo(uid=2, attr_type='email',
                                            attr_data="*****@*****.**")
                                ])

        def _getInterestedUsers():
            # 'narrator' in this case is the owner, which tests the lookup
            return ["Big Bob <*****@*****.**>", "narrator"]
        build1.getInterestedUsers = _getInterestedUsers
        build2.getInterestedUsers = _getInterestedUsers

        def _getResponsibleUsers():
            return ["Big Bob <*****@*****.**>"]
        build1.getResponsibleUsers = _getResponsibleUsers
        build2.getResponsibleUsers = _getResponsibleUsers

        # fake sourcestamp with relevant user bits
        ss1 = Mock(name="sourcestamp")
        fake_change1 = Mock(name="change")
        fake_change1.number = 9123
        ss1.changes = [fake_change1]
        ss1.patch, ss1.addPatch = None, None

        ss2 = Mock(name="sourcestamp")
        fake_change2 = Mock(name="change")
        fake_change2.number = 9124
        ss2.changes = [fake_change2]
        ss2.patch, ss1.addPatch = None, None

        def fakeGetSS(ss):
            return lambda: ss
        build1.getSourceStamp = fakeGetSS(ss1)
        build2.getSourceStamp = fakeGetSS(ss2)

        mn.parent = self
        self.status = mn.master_status = mn.buildMessageDict = Mock()
        mn.master_status.getBuilder = fakeGetBuilder
        mn.buildMessageDict.return_value = {"body": "body", "type": "text"}

        mn.buildMessage(builder.name, [build1, build2], build1.result)
        self.assertEqual(m['To'], "[email protected], [email protected]")