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
1=== modified file 'lib/lp/registry/model/distroseries.py'
2--- lib/lp/registry/model/distroseries.py 2011-08-15 03:41:35 +0000
3+++ lib/lp/registry/model/distroseries.py 2011-08-22 11:40:32 +0000
4@@ -1821,7 +1821,9 @@
5 if self.isDerivedSeries():
6 raise DerivationError(
7 "DistroSeries %s already has parent series." % self.name)
8- initialize_series = InitializeDistroSeries(self, parents)
9+ initialize_series = InitializeDistroSeries(
10+ self, parents, architectures, packagesets, rebuild, overlays,
11+ overlay_pockets, overlay_components)
12 try:
13 initialize_series.check()
14 except InitializationError, e:
15
16=== modified file 'lib/lp/registry/tests/test_initderiveddistroseries.py'
17--- lib/lp/registry/tests/test_initderiveddistroseries.py 2011-07-15 16:18:00 +0000
18+++ lib/lp/registry/tests/test_initderiveddistroseries.py 2011-08-22 11:40:32 +0000
19@@ -163,3 +163,35 @@
20 # Switch back to launchpad_main to be able to cleanup the
21 # feature flags.
22 self.layer.switchDbUser('launchpad_main')
23+
24+ def test_packageset_check_performed(self):
25+ # Packagesets passed to initDerivedDistroSeries are passed down
26+ # to InitializeDistroSeries to check for any pending builds.
27+ parent, parent_das = self.setupParent()
28+ # Create packageset p1 with a build.
29+ p1, packageset1, unsed = self.createPackageInPackageset(
30+ parent, u'p1', u'packageset1', True)
31+ # Create packageset p2 without a build.
32+ p2, packageset2, unsed = self.createPackageInPackageset(
33+ parent, u'p2', u'packageset2', False)
34+ child = self.factory.makeDistroSeries(
35+ distribution=parent.distribution, previous_series=parent)
36+
37+ # Packageset p2 has no build so no exception should be raised.
38+ child.initDerivedDistroSeries(
39+ child.driver, [parent.id], (), (str(packageset2.id),))
40+
41+ def test_arch_check_performed(self):
42+ # Architectures passed to initDerivedDistroSeries are passed down
43+ # to InitializeDistroSeries to check for any pending builds.
44+ res = self.create2archParentAndSource(packages={'p1': '1.1'})
45+ parent, parent_das, parent_das2, source = res
46+ # Create builds for the architecture of parent_das2.
47+ source.createMissingBuilds(architectures_available=[parent_das2])
48+ child = self.factory.makeDistroSeries(
49+ distribution=parent.distribution, previous_series=parent)
50+
51+ # Initialize only with parent_das's architecture. The build is
52+ # in the other architecture so no exception should be raised.
53+ child.initDerivedDistroSeries(
54+ child.driver, [parent.id], (parent_das.architecturetag, ), ())
55
56=== modified file 'lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py'
57--- lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2011-08-16 16:11:16 +0000
58+++ lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2011-08-22 11:40:32 +0000
59@@ -134,6 +134,39 @@
60 ids.initialize()
61 return child
62
63+ def createPackageInPackageset(self, distroseries, package_name,
64+ packageset_name, create_build=False):
65+ # Helper method to create a package in a packageset in the given
66+ # distroseries, optionaly creating the missing build for this source
67+ # package.
68+ spn = self.factory.getOrMakeSourcePackageName(package_name)
69+ sourcepackagerelease = self.factory.makeSourcePackageRelease(
70+ sourcepackagename=spn)
71+ source = self.factory.makeSourcePackagePublishingHistory(
72+ sourcepackagerelease=sourcepackagerelease,
73+ distroseries=distroseries,
74+ sourcepackagename=spn,
75+ pocket=PackagePublishingPocket.RELEASE)
76+ packageset = getUtility(IPackagesetSet).new(
77+ packageset_name, packageset_name, distroseries.owner,
78+ distroseries=distroseries)
79+ packageset.addSources(package_name)
80+ if create_build:
81+ source.createMissingBuilds()
82+ return source, packageset, sourcepackagerelease
83+
84+ def create2archParentAndSource(self, packages):
85+ # Helper to create a parent series with 2 distroarchseries and
86+ # a source.
87+ parent, parent_das = self.setupParent(packages=packages)
88+ unused, parent_das2 = self.setupParent(
89+ parent=parent, proc='amd64', arch_tag='amd64',
90+ packages=packages)
91+ source = self.factory.makeSourcePackagePublishingHistory(
92+ distroseries=parent,
93+ pocket=PackagePublishingPocket.RELEASE)
94+ return parent, parent_das, parent_das2, source
95+
96
97 class TestInitializeDistroSeries(InitializationHelperTestCase):
98
99@@ -212,18 +245,6 @@
100 ids = InitializeDistroSeries(child, [self.parent.id])
101 self.assertTrue(ids.check())
102
103- def create2archParentAndSource(self, packages):
104- # Helper to create a parent series with 2 distroarchseries and
105- # a source.
106- parent, parent_das = self.setupParent(packages=packages)
107- unused, parent_das2 = self.setupParent(
108- parent=parent, proc='amd64', arch_tag='amd64',
109- packages=packages)
110- source = self.factory.makeSourcePackagePublishingHistory(
111- distroseries=parent,
112- pocket=PackagePublishingPocket.RELEASE)
113- return parent, parent_das, parent_das2, source
114-
115 def test_failure_with_pending_builds_specific_arches(self):
116 # We only check for pending builds of the same architectures we're
117 # copying over from the parents. If a build is present in the
118@@ -262,27 +283,6 @@
119 # which has no pending builds in it.
120 self.assertTrue(ids.check())
121
122- def createPackageInPackageset(self, distroseries, package_name,
123- packageset_name, create_build=False):
124- # Helper method to create a package in a packageset in the given
125- # distroseries, optionaly creating the missing build for this source
126- # package.
127- spn = self.factory.getOrMakeSourcePackageName(package_name)
128- sourcepackagerelease = self.factory.makeSourcePackageRelease(
129- sourcepackagename=spn)
130- source = self.factory.makeSourcePackagePublishingHistory(
131- sourcepackagerelease=sourcepackagerelease,
132- distroseries=distroseries,
133- sourcepackagename=spn,
134- pocket=PackagePublishingPocket.RELEASE)
135- packageset = getUtility(IPackagesetSet).new(
136- packageset_name, packageset_name, distroseries.owner,
137- distroseries=distroseries)
138- packageset.addSources(package_name)
139- if create_build:
140- source.createMissingBuilds()
141- return source, packageset, sourcepackagerelease
142-
143 def test_failure_if_build_present_in_selected_packagesets(self):
144 # Pending builds in a parent for source packages included in the
145 # packagesets selected for the copy will make the queue check fail.