Merge lp:~rvb/launchpad/ids-fix into lp:launchpad

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 13763
Proposed branch: lp:~rvb/launchpad/ids-fix
Merge into: lp:launchpad
Diff against target: 145 lines (+68/-34)
3 files modified
lib/lp/registry/model/distroseries.py (+3/-1)
lib/lp/registry/tests/test_initderiveddistroseries.py (+32/-0)
lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py (+33/-33)
To merge this branch: bzr merge lp:~rvb/launchpad/ids-fix
Reviewer Review Type Date Requested Status
Henning Eggers (community) Approve
Review via email: mp+72398@code.launchpad.net

Commit message

Fix call to IDS.check in initDerivedDistroSeries to include all the relevant parameters.

Description of the change

This branch fixes the call to IDS.check in initDerivedDistroSeries to also include the other parameters passed to initDerivedDistroSeries. Now the checks performed by IDS are more specific and in particular, they need the parameters architectures and packagesets.

= Tests =

./bin/test -vvc test_initderiveddistroseries test_arch_check_performed
./bin/test -vvc test_initderiveddistroseries test_packageset_check_performed

= QA =

I'll land this with no-qa because the QA for this will be part of the QA in progress for 820452.

To post a comment you must log in.
Revision history for this message
Henning Eggers (henninge) wrote :

As discussed on IRC, please be explicit about the fact that you are testing for the absence of Exception being raised. No need for fake "return True" and "assertTrue".

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/registry/model/distroseries.py'
--- lib/lp/registry/model/distroseries.py 2011-08-15 03:41:35 +0000
+++ lib/lp/registry/model/distroseries.py 2011-08-22 11:40:32 +0000
@@ -1821,7 +1821,9 @@
1821 if self.isDerivedSeries():1821 if self.isDerivedSeries():
1822 raise DerivationError(1822 raise DerivationError(
1823 "DistroSeries %s already has parent series." % self.name)1823 "DistroSeries %s already has parent series." % self.name)
1824 initialize_series = InitializeDistroSeries(self, parents)1824 initialize_series = InitializeDistroSeries(
1825 self, parents, architectures, packagesets, rebuild, overlays,
1826 overlay_pockets, overlay_components)
1825 try:1827 try:
1826 initialize_series.check()1828 initialize_series.check()
1827 except InitializationError, e:1829 except InitializationError, e:
18281830
=== modified file 'lib/lp/registry/tests/test_initderiveddistroseries.py'
--- lib/lp/registry/tests/test_initderiveddistroseries.py 2011-07-15 16:18:00 +0000
+++ lib/lp/registry/tests/test_initderiveddistroseries.py 2011-08-22 11:40:32 +0000
@@ -163,3 +163,35 @@
163 # Switch back to launchpad_main to be able to cleanup the163 # Switch back to launchpad_main to be able to cleanup the
164 # feature flags.164 # feature flags.
165 self.layer.switchDbUser('launchpad_main')165 self.layer.switchDbUser('launchpad_main')
166
167 def test_packageset_check_performed(self):
168 # Packagesets passed to initDerivedDistroSeries are passed down
169 # to InitializeDistroSeries to check for any pending builds.
170 parent, parent_das = self.setupParent()
171 # Create packageset p1 with a build.
172 p1, packageset1, unsed = self.createPackageInPackageset(
173 parent, u'p1', u'packageset1', True)
174 # Create packageset p2 without a build.
175 p2, packageset2, unsed = self.createPackageInPackageset(
176 parent, u'p2', u'packageset2', False)
177 child = self.factory.makeDistroSeries(
178 distribution=parent.distribution, previous_series=parent)
179
180 # Packageset p2 has no build so no exception should be raised.
181 child.initDerivedDistroSeries(
182 child.driver, [parent.id], (), (str(packageset2.id),))
183
184 def test_arch_check_performed(self):
185 # Architectures passed to initDerivedDistroSeries are passed down
186 # to InitializeDistroSeries to check for any pending builds.
187 res = self.create2archParentAndSource(packages={'p1': '1.1'})
188 parent, parent_das, parent_das2, source = res
189 # Create builds for the architecture of parent_das2.
190 source.createMissingBuilds(architectures_available=[parent_das2])
191 child = self.factory.makeDistroSeries(
192 distribution=parent.distribution, previous_series=parent)
193
194 # Initialize only with parent_das's architecture. The build is
195 # in the other architecture so no exception should be raised.
196 child.initDerivedDistroSeries(
197 child.driver, [parent.id], (parent_das.architecturetag, ), ())
166198
=== modified file 'lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py'
--- lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2011-08-16 16:11:16 +0000
+++ lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2011-08-22 11:40:32 +0000
@@ -134,6 +134,39 @@
134 ids.initialize()134 ids.initialize()
135 return child135 return child
136136
137 def createPackageInPackageset(self, distroseries, package_name,
138 packageset_name, create_build=False):
139 # Helper method to create a package in a packageset in the given
140 # distroseries, optionaly creating the missing build for this source
141 # package.
142 spn = self.factory.getOrMakeSourcePackageName(package_name)
143 sourcepackagerelease = self.factory.makeSourcePackageRelease(
144 sourcepackagename=spn)
145 source = self.factory.makeSourcePackagePublishingHistory(
146 sourcepackagerelease=sourcepackagerelease,
147 distroseries=distroseries,
148 sourcepackagename=spn,
149 pocket=PackagePublishingPocket.RELEASE)
150 packageset = getUtility(IPackagesetSet).new(
151 packageset_name, packageset_name, distroseries.owner,
152 distroseries=distroseries)
153 packageset.addSources(package_name)
154 if create_build:
155 source.createMissingBuilds()
156 return source, packageset, sourcepackagerelease
157
158 def create2archParentAndSource(self, packages):
159 # Helper to create a parent series with 2 distroarchseries and
160 # a source.
161 parent, parent_das = self.setupParent(packages=packages)
162 unused, parent_das2 = self.setupParent(
163 parent=parent, proc='amd64', arch_tag='amd64',
164 packages=packages)
165 source = self.factory.makeSourcePackagePublishingHistory(
166 distroseries=parent,
167 pocket=PackagePublishingPocket.RELEASE)
168 return parent, parent_das, parent_das2, source
169
137170
138class TestInitializeDistroSeries(InitializationHelperTestCase):171class TestInitializeDistroSeries(InitializationHelperTestCase):
139172
@@ -212,18 +245,6 @@
212 ids = InitializeDistroSeries(child, [self.parent.id])245 ids = InitializeDistroSeries(child, [self.parent.id])
213 self.assertTrue(ids.check())246 self.assertTrue(ids.check())
214247
215 def create2archParentAndSource(self, packages):
216 # Helper to create a parent series with 2 distroarchseries and
217 # a source.
218 parent, parent_das = self.setupParent(packages=packages)
219 unused, parent_das2 = self.setupParent(
220 parent=parent, proc='amd64', arch_tag='amd64',
221 packages=packages)
222 source = self.factory.makeSourcePackagePublishingHistory(
223 distroseries=parent,
224 pocket=PackagePublishingPocket.RELEASE)
225 return parent, parent_das, parent_das2, source
226
227 def test_failure_with_pending_builds_specific_arches(self):248 def test_failure_with_pending_builds_specific_arches(self):
228 # We only check for pending builds of the same architectures we're249 # We only check for pending builds of the same architectures we're
229 # copying over from the parents. If a build is present in the250 # copying over from the parents. If a build is present in the
@@ -262,27 +283,6 @@
262 # which has no pending builds in it.283 # which has no pending builds in it.
263 self.assertTrue(ids.check())284 self.assertTrue(ids.check())
264285
265 def createPackageInPackageset(self, distroseries, package_name,
266 packageset_name, create_build=False):
267 # Helper method to create a package in a packageset in the given
268 # distroseries, optionaly creating the missing build for this source
269 # package.
270 spn = self.factory.getOrMakeSourcePackageName(package_name)
271 sourcepackagerelease = self.factory.makeSourcePackageRelease(
272 sourcepackagename=spn)
273 source = self.factory.makeSourcePackagePublishingHistory(
274 sourcepackagerelease=sourcepackagerelease,
275 distroseries=distroseries,
276 sourcepackagename=spn,
277 pocket=PackagePublishingPocket.RELEASE)
278 packageset = getUtility(IPackagesetSet).new(
279 packageset_name, packageset_name, distroseries.owner,
280 distroseries=distroseries)
281 packageset.addSources(package_name)
282 if create_build:
283 source.createMissingBuilds()
284 return source, packageset, sourcepackagerelease
285
286 def test_failure_if_build_present_in_selected_packagesets(self):286 def test_failure_if_build_present_in_selected_packagesets(self):
287 # Pending builds in a parent for source packages included in the287 # Pending builds in a parent for source packages included in the
288 # packagesets selected for the copy will make the queue check fail.288 # packagesets selected for the copy will make the queue check fail.