Skip to content

Commit

Permalink
Simplify extraHeaders logic in MailNotifier.
Browse files Browse the repository at this point in the history
  • Loading branch information
tomprince committed Dec 15, 2011
1 parent d8f0bef commit bfe465b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 32 deletions.
13 changes: 6 additions & 7 deletions master/buildbot/status/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,18 +591,17 @@ def createEmail(self, msgdict, builderName, title, results, builds=None,
# Add any extra headers that were requested, doing WithProperties
# interpolation if only one build was given
if self.extraHeaders:
for k,v in self.extraHeaders.items():
if len(builds) == 1:
k = interfaces.IProperties(builds[0]).render(k)
if len(builds) == 1:
extraHeaders = builds[0].render(self.extraHeaders)
else:
extraHeaders = self.extraHeaders
for k,v in extraHeaders.items():
if k in m:
twlog.msg("Warning: Got header " + k +
" in self.extraHeaders "
"but it already exists in the Message - "
"not adding it.")
if len(builds) == 1:
m[k] = interfaces.IProperties(builds[0]).render(v)
else:
m[k] = v
m[k] = v

return m

Expand Down
2 changes: 1 addition & 1 deletion master/buildbot/test/fake/fakebuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from buildbot.process import properties
from buildbot import interfaces

class FakeBuildStatus(mock.Mock, properties.PropertiesMixin):
class FakeBuildStatus(properties.PropertiesMixin, mock.Mock):

# work around http://code.google.com/p/mock/issues/detail?id=105
def _get_child_mock(self, **kw):
Expand Down
30 changes: 6 additions & 24 deletions master/buildbot/test/unit/test_status_mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
from buildbot.status.mail import MailNotifier
from twisted.internet import defer
from buildbot.test.fake import fakedb
from buildbot.test.fake.fakebuild import FakeBuildStatus
from buildbot.process import properties

class FakeLog(object):
def __init__(self, text):
Expand All @@ -40,27 +42,6 @@ def getText(self):
return self.text


class FakeBuildStatus(Mock):

def __init__(self, *args, **kwargs):
Mock.__init__(self, *args, **kwargs)
self.builder = None
self.properites = {}

def getBuilder(self):
return self.builder

class FakeBuildStatusProperties(components.Adapter):

def getProperty(self, name, default):
return self.original.properties.get(name, default)

def render(self, value):
return "rndr(%s)" % (value,)

components.registerAdapter(FakeBuildStatusProperties, FakeBuildStatus,
IProperties)

class TestMailNotifier(unittest.TestCase):
def test_createEmail_message_without_patch_and_log_contains_unicode(self):
builds = [ FakeBuildStatus(name="build") ]
Expand All @@ -75,13 +56,15 @@ def test_createEmail_message_without_patch_and_log_contains_unicode(self):

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('from@example.org', 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)
self.assertIn('hhh: vvv', txt)

def test_createEmail_extraHeaders_two_builds(self):
builds = [ FakeBuildStatus(name="build1"),
Expand Down Expand Up @@ -184,8 +167,7 @@ def fakeGetBuildRequests(self, bsid):
build.result = FAILURE
build.finished = True
build.reason = "testReason"
build.builder = builder

build.getBuilder.return_value = builder

self.db = fakedb.FakeDBConnector(self)
self.db.insertTestData([fakedb.Buildset(id=99, sourcestampid=127,
Expand Down

0 comments on commit bfe465b

Please sign in to comment.