514
517
removeSecurityProxy(build).status = BuildStatus.FULLYBUILT
515
518
IStore(build).flush()
517
(message, ) = pop_notifications()
520
self.assertEquals(0, len(pop_notifications()))
522
def assertBuildMessageValid(self, build, message):
523
# Not currently used; can be used if we do want to check about any
524
# notifications sent in other cases.
518
525
requester = build.requester
519
526
requester_address = format_address(
520
527
requester.displayname, requester.preferredemail.email)
544
551
notifications = pop_notifications()
545
552
self.assertEquals(0, len(notifications))
547
def test_handleStatusNotifies(self):
548
""""handleStatus causes notification, even if OK."""
551
queue_record = self.factory.makeSourcePackageRecipeBuildJob()
552
build = queue_record.specific_job.build
553
naked_build = removeSecurityProxy(build)
554
naked_build.status = BuildStatus.FULLYBUILT
555
naked_build.date_started = self.factory.getUniqueDate()
556
queue_record.builder = self.factory.makeBuilder()
557
slave = WaitingSlave('BuildStatus.OK')
558
queue_record.builder.setSlaveForTesting(slave)
561
def assertNotifyCount(status, build, count):
562
build.handleStatus(status, None, {'filemap': {}})
563
self.assertEqual(count, len(pop_notifications()))
564
assertNotifyCount("PACKAGEFAIL", prepare_build(), 1)
565
assertNotifyCount("OK", prepare_build(), 0)
566
build = prepare_build()
567
removeSecurityProxy(build).verifySuccessfulUpload = FakeMethod(
555
class TestBuildNotifications(TrialTestCase):
557
layer = LaunchpadZopelessLayer
560
super(TestBuildNotifications, self).setUp()
561
from lp.testing.factory import LaunchpadObjectFactory
562
self.factory = LaunchpadObjectFactory()
564
def prepare_build(self, fake_successful_upload=False):
565
queue_record = self.factory.makeSourcePackageRecipeBuildJob()
566
build = queue_record.specific_job.build
567
naked_build = removeSecurityProxy(build)
568
naked_build.status = BuildStatus.FULLYBUILT
569
naked_build.date_started = self.factory.getUniqueDate()
570
if fake_successful_upload:
571
naked_build.verifySuccessfulUpload = FakeMethod(
569
assertNotifyCount("OK", prepare_build(), 0)
573
queue_record.builder = self.factory.makeBuilder()
574
slave = WaitingSlave('BuildStatus.OK')
575
queue_record.builder.setSlaveForTesting(slave)
578
def assertDeferredNotifyCount(self, status, build, expected_count):
579
d = build.handleStatus(status, None, {'filemap': {}})
581
self.assertEqual(expected_count, len(pop_notifications()))
585
def test_handleStatus_PACKAGEFAIL(self):
586
"""Failing to build the package immediately sends a notification."""
587
return self.assertDeferredNotifyCount(
588
"PACKAGEFAIL", self.prepare_build(), 1)
590
def test_handleStatus_OK(self):
591
"""Building the source package does _not_ immediately send mail.
593
(The archive uploader mail send one later.
595
return self.assertDeferredNotifyCount(
596
"OK", self.prepare_build(), 0)
598
def test_handleStatus_OK_successful_upload(self):
599
return self.assertDeferredNotifyCount(
600
"OK", self.prepare_build(True), 0)
572
603
class MakeSPRecipeBuildMixin: