← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~jml/launchpad/recipebuilder-expect-deferred into lp:launchpad/devel

 

Jonathan Lange has proposed merging lp:~jml/launchpad/recipebuilder-expect-deferred into lp:launchpad/devel with lp:~julian-edwards/launchpad/move-buildd-helpers as a prerequisite.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

-- 
https://code.launchpad.net/~jml/launchpad/recipebuilder-expect-deferred/+merge/36336
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~jml/launchpad/recipebuilder-expect-deferred into lp:launchpad/devel.
=== modified file 'lib/lp/buildmaster/tests/mock_slaves.py'
--- lib/lp/buildmaster/tests/mock_slaves.py	2010-09-22 16:14:42 +0000
+++ lib/lp/buildmaster/tests/mock_slaves.py	2010-09-22 16:14:44 +0000
@@ -122,13 +122,11 @@
         return ('1.0', self.arch_tag, 'debian')
 
     def sendFileToSlave(self, sha1, url, username="", password=""):
-        self.call_log.append('sendFileToSlave')
         present, info = self.ensurepresent(sha1, url, username, password)
         if not present:
             raise CannotFetchFile(url, info)
 
     def cacheFile(self, logger, libraryfilealias):
-        self.call_log.append('cacheFile')
         return self.sendFileToSlave(
             libraryfilealias.content.sha1, libraryfilealias.http_url)
 

=== modified file 'lib/lp/code/model/tests/test_recipebuilder.py'
--- lib/lp/code/model/tests/test_recipebuilder.py	2010-09-22 16:14:42 +0000
+++ lib/lp/code/model/tests/test_recipebuilder.py	2010-09-22 16:14:44 +0000
@@ -12,16 +12,20 @@
 import unittest
 
 import transaction
+from twisted.internet import defer
+from twisted.trial.unittest import TestCase as TrialTestCase
 from zope.security.proxy import removeSecurityProxy
 
 from canonical.launchpad.scripts.logger import BufferLogger
-from canonical.testing import LaunchpadFunctionalLayer
+from canonical.testing import (
+    LaunchpadFunctionalLayer,
+    TwistedLaunchpadZopelessLayer,
+    )
 from lp.buildmaster.enums import BuildFarmJobType
 from lp.buildmaster.interfaces.builder import CannotBuild
 from lp.buildmaster.interfaces.buildfarmjobbehavior import (
     IBuildFarmJobBehavior,
     )
-from lp.buildmaster.manager import RecordingSlave
 from lp.buildmaster.model.buildqueue import BuildQueue
 from lp.buildmaster.tests.mock_slaves import (
     MockBuilder,
@@ -36,25 +40,16 @@
 from lp.soyuz.model.processor import ProcessorFamilySet
 from lp.soyuz.tests.test_publishing import SoyuzTestPublisher
 from lp.testing import (
+    ANONYMOUS,
+    login_as,
+    logout,
     person_logged_in,
     TestCaseWithFactory,
     )
-
-
-class TestRecipeBuilder(TestCaseWithFactory):
-
-    layer = LaunchpadFunctionalLayer
-
-    def test_providesInterface(self):
-        # RecipeBuildBehavior provides IBuildFarmJobBehavior.
-        recipe_builder = RecipeBuildBehavior(None)
-        self.assertProvides(recipe_builder, IBuildFarmJobBehavior)
-
-    def test_adapts_ISourcePackageRecipeBuildJob(self):
-        # IBuildFarmJobBehavior adapts a ISourcePackageRecipeBuildJob
-        job = self.factory.makeSourcePackageRecipeBuild().makeJob()
-        job = IBuildFarmJobBehavior(job)
-        self.assertProvides(job, IBuildFarmJobBehavior)
+from lp.testing.factory import LaunchpadObjectFactory
+
+
+class RecipeBuilderTestsMixin:
 
     def makeJob(self, recipe_registrant=None, recipe_owner=None):
         """Create a sample `ISourcePackageRecipeBuildJob`."""
@@ -87,6 +82,22 @@
         job = IBuildFarmJobBehavior(job)
         return job
 
+
+class TestRecipeBuilder(TestCaseWithFactory, RecipeBuilderTestsMixin):
+
+    layer = LaunchpadFunctionalLayer
+
+    def test_providesInterface(self):
+        # RecipeBuildBehavior provides IBuildFarmJobBehavior.
+        recipe_builder = RecipeBuildBehavior(None)
+        self.assertProvides(recipe_builder, IBuildFarmJobBehavior)
+
+    def test_adapts_ISourcePackageRecipeBuildJob(self):
+        # IBuildFarmJobBehavior adapts a ISourcePackageRecipeBuildJob
+        job = self.factory.makeSourcePackageRecipeBuild().makeJob()
+        job = IBuildFarmJobBehavior(job)
+        self.assertProvides(job, IBuildFarmJobBehavior)
+
     def test_display_name(self):
         # display_name contains a sane description of the job
         job = self.makeJob()
@@ -241,32 +252,51 @@
             job.build, distroarchseries, None)
         self.assertEqual(args["archives"], expected_archives)
 
+    def test_getById(self):
+        job = self.makeJob()
+        transaction.commit()
+        self.assertEquals(
+            job.build, SourcePackageRecipeBuild.getById(job.build.id))
+
+
+class TestDispatchBuildToSlave(TrialTestCase, RecipeBuilderTestsMixin):
+
+    layer = TwistedLaunchpadZopelessLayer
+
+    def setUp(self):
+        super(TestDispatchBuildToSlave, self).setUp()
+        self.factory = LaunchpadObjectFactory()
+        login_as(ANONYMOUS)
+        self.addCleanup(logout)
+        self.layer.switchDbUser('testadmin')
 
     def test_dispatchBuildToSlave(self):
         # Ensure dispatchBuildToSlave will make the right calls to the slave
         job = self.makeJob()
         test_publisher = SoyuzTestPublisher()
         test_publisher.addFakeChroots(job.build.distroseries)
-        slave = RecordingSlave("i386-slave-1", "http://myurl";, "vmhost")
+        slave = OkSlave()
         builder = MockBuilder("bob-de-bouwer", slave)
         processorfamily = ProcessorFamilySet().getByProcessorName('386')
         builder.processor = processorfamily.processors[0]
         job.setBuilder(builder)
         logger = BufferLogger()
-        job.dispatchBuildToSlave("someid", logger)
-        logger.buffer.seek(0)
-        self.assertEquals(
-            "DEBUG: Initiating build 1-someid on http://fake:0000\n";,
-            logger.buffer.readline())
-        self.assertEquals(["ensurepresent", "build"],
-                          [call[0] for call in slave.calls])
-        build_args = slave.calls[1][1]
-        self.assertEquals(
-            build_args[0], job.buildfarmjob.generateSlaveBuildCookie())
-        self.assertEquals(build_args[1], "sourcepackagerecipe")
-        self.assertEquals(build_args[3], {})
-        distroarchseries = job.build.distroseries.architectures[0]
-        self.assertEqual(build_args[4], job._extraBuildArgs(distroarchseries))
+        d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger)
+        def check_dispatch(ignored):
+            logger.buffer.seek(0)
+            self.assertEquals(
+                "DEBUG: Initiating build 1-someid on http://fake:0000\n";,
+                logger.buffer.readline())
+            self.assertEquals(["ensurepresent", "build"],
+                              [call[0] for call in slave.call_log])
+            build_args = slave.call_log[1][1:]
+            self.assertEquals(
+                build_args[0], job.buildfarmjob.generateSlaveBuildCookie())
+            self.assertEquals(build_args[1], "sourcepackagerecipe")
+            self.assertEquals(build_args[3], [])
+            distroarchseries = job.build.distroseries.architectures[0]
+            self.assertEqual(build_args[4], job._extraBuildArgs(distroarchseries))
+        return d.addCallback(check_dispatch)
 
     def test_dispatchBuildToSlave_nochroot(self):
         # dispatchBuildToSlave will fail when there is not chroot tarball
@@ -277,14 +307,8 @@
         builder.processor = processorfamily.processors[0]
         job.setBuilder(builder)
         logger = BufferLogger()
-        self.assertRaises(CannotBuild, job.dispatchBuildToSlave,
-            "someid", logger)
-
-    def test_getById(self):
-        job = self.makeJob()
-        transaction.commit()
-        self.assertEquals(
-            job.build, SourcePackageRecipeBuild.getById(job.build.id))
+        d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger)
+        return self.assertFailure(d, CannotBuild)
 
 
 def test_suite():

=== modified file 'lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py'
--- lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py	2010-09-22 16:14:42 +0000
+++ lib/lp/soyuz/tests/test_binarypackagebuildbehavior.py	2010-09-22 16:14:44 +0000
@@ -94,7 +94,7 @@
             extra_urls = []
 
         upload_logs = [
-            ['cacheFile', 'sendFileToSlave', ('ensurepresent', url, '', '')]
+            ('ensurepresent', url, '', '')
             for url in [chroot.http_url] + extra_urls]
 
         extra_args = {
@@ -110,7 +110,7 @@
         build_log = [
             ('build', build_id, 'binarypackage', chroot.content.sha1,
              filemap_names, extra_args)]
-        return sum(upload_logs, []) + build_log
+        return upload_logs + build_log
 
     def startBuild(self, builder, candidate):
         builder = removeSecurityProxy(builder)