Merge lp:~abentley/launchpad/fix-recipebuilder into lp:launchpad

Proposed by Aaron Bentley
Status: Merged
Merged at revision: 10917
Proposed branch: lp:~abentley/launchpad/fix-recipebuilder
Merge into: lp:launchpad
Diff against target: 139 lines (+40/-7)
5 files modified
lib/lp/code/interfaces/sourcepackagerecipebuild.py (+3/-1)
lib/lp/code/model/recipebuilder.py (+1/-1)
lib/lp/code/model/sourcepackagerecipebuild.py (+9/-3)
lib/lp/code/model/tests/test_recipebuilder.py (+23/-0)
lib/lp/testing/factory.py (+4/-2)
To merge this branch: bzr merge lp:~abentley/launchpad/fix-recipebuilder
Reviewer Review Type Date Requested Status
Paul Hummer (community) code Approve
Review via email: mp+25528@code.launchpad.net

Commit message

Fix verifyBuildRequest to use valid attribute

Description of the change

= Summary =
Fix bug #581899: verifyBuildRequest is broken

== Proposed fix ==
Update to use SourcePackageRecipeBuild.is_virtualized, like binary builds do.

== Pre-implementation notes ==
Discussed with noodles and bigjools

== Implementation details ==
Make SourcePackageRecipeBuildJob.virtualized mirror
SourcePackageRecipeBuild.is_virtualized

Allow overriding the pocket of a Build.

Add tests for error paths in verifyBuildRequest

== Tests ==
bin/test -t verifyBuildRequest test_recipebuilder

== Demo and Q/A ==
I am unclear how to test this.

= Launchpad lint =

Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.

Linting changed files:
  lib/lp/code/interfaces/sourcepackagerecipebuild.py
  lib/lp/testing/factory.py
  lib/lp/code/model/sourcepackagerecipebuild.py
  lib/lp/code/model/tests/test_recipebuilder.py
  lib/lp/code/model/recipebuilder.py

To post a comment you must log in.
Revision history for this message
Paul Hummer (rockstar) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/code/interfaces/sourcepackagerecipebuild.py'
--- lib/lp/code/interfaces/sourcepackagerecipebuild.py 2010-05-06 18:34:20 +0000
+++ lib/lp/code/interfaces/sourcepackagerecipebuild.py 2010-05-25 19:21:34 +0000
@@ -17,7 +17,7 @@
17from lazr.restful.declarations import export_as_webservice_entry17from lazr.restful.declarations import export_as_webservice_entry
1818
19from zope.interface import Interface19from zope.interface import Interface
20from zope.schema import Datetime, Int, Object20from zope.schema import Bool, Datetime, Int, Object
2121
22from canonical.launchpad import _22from canonical.launchpad import _
2323
@@ -65,6 +65,8 @@
65 ISourcePackageRelease, title=_("The produced source package release"),65 ISourcePackageRelease, title=_("The produced source package release"),
66 readonly=True)66 readonly=True)
6767
68 is_virtualized = Bool(title=_('If True, this build is virtualized.'))
69
68 def getFileByName(filename):70 def getFileByName(filename):
69 """Return the file under +files with specified name."""71 """Return the file under +files with specified name."""
7072
7173
=== modified file 'lib/lp/code/model/recipebuilder.py'
--- lib/lp/code/model/recipebuilder.py 2010-05-10 15:50:23 +0000
+++ lib/lp/code/model/recipebuilder.py 2010-05-25 19:21:34 +0000
@@ -153,7 +153,7 @@
153 """153 """
154 build = self.build154 build = self.build
155 assert not (not self._builder.virtualized and build.is_virtualized), (155 assert not (not self._builder.virtualized and build.is_virtualized), (
156 "Attempt to build non-virtual item on a virtual builder.")156 "Attempt to build virtual item on a non-virtual builder.")
157157
158 # This should already have been checked earlier, but just check again158 # This should already have been checked earlier, but just check again
159 # here in case of programmer errors.159 # here in case of programmer errors.
160160
=== modified file 'lib/lp/code/model/sourcepackagerecipebuild.py'
--- lib/lp/code/model/sourcepackagerecipebuild.py 2010-05-14 21:24:48 +0000
+++ lib/lp/code/model/sourcepackagerecipebuild.py 2010-05-25 19:21:34 +0000
@@ -119,6 +119,8 @@
119 """See `IBuildBase`."""119 """See `IBuildBase`."""
120 return self.distroseries.distribution120 return self.distroseries.distribution
121121
122 is_virtualized = True
123
122 pocket = DBEnum(enum=PackagePublishingPocket)124 pocket = DBEnum(enum=PackagePublishingPocket)
123125
124 recipe_id = Int(name='recipe', allow_none=False)126 recipe_id = Int(name='recipe', allow_none=False)
@@ -169,11 +171,12 @@
169 self.sourcepackagename = sourcepackagename171 self.sourcepackagename = sourcepackagename
170172
171 @classmethod173 @classmethod
172 def new(cls, sourcepackage, recipe, requester, archive,174 def new(cls, sourcepackage, recipe, requester, archive, pocket=None,
173 pocket=PackagePublishingPocket.RELEASE,
174 date_created=None):175 date_created=None):
175 """See `ISourcePackageRecipeBuildSource`."""176 """See `ISourcePackageRecipeBuildSource`."""
176 store = IMasterStore(SourcePackageRecipeBuild)177 store = IMasterStore(SourcePackageRecipeBuild)
178 if pocket is None:
179 pocket = PackagePublishingPocket.RELEASE
177 if date_created is None:180 if date_created is None:
178 date_created = UTC_NOW181 date_created = UTC_NOW
179 spbuild = cls(182 spbuild = cls(
@@ -255,7 +258,10 @@
255 def processor(self):258 def processor(self):
256 return self.build.distroseries.nominatedarchindep.default_processor259 return self.build.distroseries.nominatedarchindep.default_processor
257260
258 virtualized = True261 @property
262 def virtualized(self):
263 """See `IBuildFarmJob`."""
264 return self.build.is_virtualized
259265
260 def __init__(self, build, job):266 def __init__(self, build, job):
261 self.build = build267 self.build = build
262268
=== modified file 'lib/lp/code/model/tests/test_recipebuilder.py'
--- lib/lp/code/model/tests/test_recipebuilder.py 2010-05-06 18:16:09 +0000
+++ lib/lp/code/model/tests/test_recipebuilder.py 2010-05-25 19:21:34 +0000
@@ -25,6 +25,7 @@
25from lp.code.model.recipebuilder import RecipeBuildBehavior25from lp.code.model.recipebuilder import RecipeBuildBehavior
26from lp.code.model.sourcepackagerecipebuild import (26from lp.code.model.sourcepackagerecipebuild import (
27 SourcePackageRecipeBuild)27 SourcePackageRecipeBuild)
28from lp.registry.interfaces.pocket import PackagePublishingPocket
28from lp.soyuz.adapters.archivedependencies import (29from lp.soyuz.adapters.archivedependencies import (
29 get_sources_list_for_building)30 get_sources_list_for_building)
30from lp.soyuz.model.processor import ProcessorFamilySet31from lp.soyuz.model.processor import ProcessorFamilySet
@@ -99,6 +100,28 @@
99 job.verifyBuildRequest(logger)100 job.verifyBuildRequest(logger)
100 self.assertEquals("", logger.buffer.getvalue())101 self.assertEquals("", logger.buffer.getvalue())
101102
103 def test_verifyBuildRequest_non_virtual(self):
104 # verifyBuildRequest will raise if a non-virtual builder is proposed.
105 job = self.makeJob()
106 builder = MockBuilder('non-virtual builder', OkSlave())
107 builder.virtualized = False
108 job.setBuilder(builder)
109 logger = BufferLogger()
110 e = self.assertRaises(AssertionError, job.verifyBuildRequest, logger)
111 self.assertEqual(
112 'Attempt to build virtual item on a non-virtual builder.', str(e))
113
114 def test_verifyBuildRequest_bad_pocket(self):
115 # verifyBuildRequest will raise if a bad pocket is proposed.
116 build = self.factory.makeSourcePackageRecipeBuild(
117 pocket=PackagePublishingPocket.SECURITY)
118 job = self.factory.makeSourcePackageRecipeBuildJob(recipe_build=build)
119 job = IBuildFarmJobBehavior(job.specific_job)
120 job.setBuilder(MockBuilder("bob-de-bouwer", OkSlave()))
121 e = self.assertRaises(
122 AssertionError, job.verifyBuildRequest, BufferLogger())
123 self.assertIn('invalid pocket due to the series status of', str(e))
124
102 def test__extraBuildArgs(self):125 def test__extraBuildArgs(self):
103 # _extraBuildArgs will return a sane set of additional arguments126 # _extraBuildArgs will return a sane set of additional arguments
104 bzr_builder_config = """127 bzr_builder_config = """
105128
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-05-19 07:39:42 +0000
+++ lib/lp/testing/factory.py 2010-05-25 19:21:34 +0000
@@ -1789,7 +1789,8 @@
17891789
1790 def makeSourcePackageRecipeBuild(self, sourcepackage=None, recipe=None,1790 def makeSourcePackageRecipeBuild(self, sourcepackage=None, recipe=None,
1791 requester=None, archive=None,1791 requester=None, archive=None,
1792 sourcename=None, distroseries=None):1792 sourcename=None, distroseries=None,
1793 pocket=None):
1793 """Make a new SourcePackageRecipeBuild."""1794 """Make a new SourcePackageRecipeBuild."""
1794 if recipe is None:1795 if recipe is None:
1795 recipe = self.makeSourcePackageRecipe(1796 recipe = self.makeSourcePackageRecipe(
@@ -1808,7 +1809,8 @@
1808 sourcepackage=sourcepackage,1809 sourcepackage=sourcepackage,
1809 recipe=recipe,1810 recipe=recipe,
1810 archive=archive,1811 archive=archive,
1811 requester=requester)1812 requester=requester,
1813 pocket=pocket)
18121814
1813 def makeSourcePackageRecipeBuildJob(1815 def makeSourcePackageRecipeBuildJob(
1814 self, score=9876, virtualized=True, estimated_duration=64,1816 self, score=9876, virtualized=True, estimated_duration=64,