launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #01170
[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)