Merge lp:~cjwatson/launchpad/queue-filter-source into lp:launchpad

Proposed by Colin Watson on 2012-08-11
Status: Rejected
Rejected by: Colin Watson on 2012-12-12
Proposed branch: lp:~cjwatson/launchpad/queue-filter-source
Merge into: lp:launchpad
Diff against target: 524 lines (+80/-140)
2 files modified
lib/lp/soyuz/model/queue.py (+16/-7)
lib/lp/soyuz/tests/test_packageupload.py (+64/-133)
To merge this branch: bzr merge lp:~cjwatson/launchpad/queue-filter-source
Reviewer Review Type Date Requested Status
Colin Watson Disapprove on 2012-12-12
Stuart Bishop Approve on 2012-08-20
Brad Crittenden (community) code 2012-08-11 Approve on 2012-08-17
Review via email: mp+119225@code.launchpad.net

Commit Message

Allow filtering package uploads by source package name.

Description of the Change

== Summary ==

Bug 33700: binary package uploads can only be filtered by binary package name, not source package name. This causes us to have to make some rather odd and imprecise queries in places.

== Proposed fix ==

Join through to PackageUploadBuild.build.source_package_release.

== Implementation details ==

I did a bit of test refactoring to reduce code size.

== Tests ==

bin/test -vvct test_packageupload

== Demo and Q/A ==

Using queue from lp:ubuntu-archive-tools, these two queries should produce the same list of uploads:

  queue -l qastaging -s oneiric-updates -Q done info fglrx-installer-updates
  queue -l qastaging -s oneiric-updates -Q done info fglrx

Without this fix, the first only shows a source upload, not the two corresponding binary uploads.

To post a comment you must log in.
Robert Collins (lifeless) wrote :

Extra joins -> possibly performance hit. Have you had someone test the
query on staging or dogfood or production for you ?

Colin Watson (cjwatson) wrote :

I've left a comment on the linked bug with my attempt at a performance analysis. I'd welcome your feedback on that.

Brad Crittenden (bac) wrote :

Colin thanks for doing this change and for performing the analysis that Robert requested. What you've done *seems* reasonable to me, and I agree you've made a terrible query a wee bit terribler.

Thanks for the refactoring and cleaning up some of the code.

Based on the scale of the impact I will approve this branch but ask that you seek out Stuart's opinion for possible improvements before landing.

review: Approve (code)
Stuart Bishop (stub) wrote :

This seems reasonable.

If you are worried about performance going from bad to timeout, a feature flag may be appropriate to be able to turn off the new behavior easily.

On the database side, we can try helping with targetted indexes. We should probably add trigram indexes to BinaryPackageName.name, SourcePackageName.name and PackageCopyJob.package_name to allow us to avoid a full table scan to do the substring matches, but I don't think this will make too much of a difference in this case.

review: Approve
Colin Watson (cjwatson) wrote :

The maintenance squad are working on a much better solution that won't involve a huge forest of JOINs, so retracting this MP in favour of their work.

review: Disapprove

Unmerged revisions

15794. By Colin Watson on 2012-08-11

Refactor TestPackageUploadSet.

15793. By Colin Watson on 2012-08-11

Make test_packageupload more compact.

15792. By Colin Watson on 2012-08-11

Allow filtering package uploads by source package name.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/soyuz/model/queue.py'
2--- lib/lp/soyuz/model/queue.py 2012-08-06 09:29:34 +0000
3+++ lib/lp/soyuz/model/queue.py 2012-08-11 02:26:22 +0000
4@@ -1738,6 +1738,7 @@
5 version=None, exact_match=False):
6 """See `IPackageUploadSet`."""
7 # Avoid circular imports.
8+ from lp.soyuz.model.binarypackagebuild import BinaryPackageBuild
9 from lp.soyuz.model.packagecopyjob import PackageCopyJob
10 from lp.soyuz.model.sourcepackagerelease import SourcePackageRelease
11
12@@ -1784,16 +1785,22 @@
13 source_join = LeftJoin(
14 PackageUploadSource,
15 PackageUploadSource.packageuploadID == PackageUpload.id)
16+ build_join = LeftJoin(
17+ PackageUploadBuild,
18+ PackageUploadBuild.packageuploadID == PackageUpload.id)
19+ bpb_join = LeftJoin(
20+ BinaryPackageBuild,
21+ BinaryPackageBuild.id == PackageUploadBuild.buildID)
22 spr_join = LeftJoin(
23 SourcePackageRelease,
24- SourcePackageRelease.id ==
25- PackageUploadSource.sourcepackagereleaseID)
26+ Or(
27+ SourcePackageRelease.id ==
28+ PackageUploadSource.sourcepackagereleaseID,
29+ SourcePackageRelease.id ==
30+ BinaryPackageBuild.source_package_release_id))
31 bpr_join = LeftJoin(
32 BinaryPackageRelease,
33 BinaryPackageRelease.buildID == PackageUploadBuild.buildID)
34- build_join = LeftJoin(
35- PackageUploadBuild,
36- PackageUploadBuild.packageuploadID == PackageUpload.id)
37
38 if name is not None and name != '':
39 spn_join = LeftJoin(
40@@ -1815,9 +1822,10 @@
41 joins += [
42 package_copy_job_join,
43 source_join,
44+ build_join,
45+ bpb_join,
46 spr_join,
47 spn_join,
48- build_join,
49 bpr_join,
50 bpn_join,
51 custom_join,
52@@ -1834,8 +1842,9 @@
53 if version is not None and version != '':
54 joins += [
55 source_join,
56+ build_join,
57+ bpb_join,
58 spr_join,
59- build_join,
60 bpr_join,
61 ]
62
63
64=== modified file 'lib/lp/soyuz/tests/test_packageupload.py'
65--- lib/lp/soyuz/tests/test_packageupload.py 2012-07-24 06:39:54 +0000
66+++ lib/lp/soyuz/tests/test_packageupload.py 2012-08-11 02:26:22 +0000
67@@ -138,11 +138,8 @@
68 'foocomm_1.0-2_binary/foocomm_1.0-2_i386.changes')
69
70 changesfile_content = ''
71- handle = open(changesfile_path, 'r')
72- try:
73+ with open(changesfile_path, 'r') as handle:
74 changesfile_content = handle.read()
75- finally:
76- handle.close()
77
78 source = self.test_publisher.getPubSource(
79 sourcename='foocomm', archive=ppa, version='1.0-2',
80@@ -194,8 +191,7 @@
81 self.assertEquals(pocket, pub_record.pocket)
82 self.assertEquals(component, pub_record.component)
83 for pub_file in pub_record.files:
84- self.assertEqual(
85- restricted, pub_file.libraryfilealias.restricted)
86+ self.assertEqual(restricted, pub_file.libraryfilealias.restricted)
87
88 def removeRepository(self, distro):
89 """Remove the testing repository root if it exists."""
90@@ -227,8 +223,7 @@
91
92 # Release ubuntutest/breezy-autotest, so delayed-copies to
93 # SECURITY pocket can be accepted.
94- self.test_publisher.breezy_autotest.status = (
95- SeriesStatus.CURRENT)
96+ self.test_publisher.breezy_autotest.status = SeriesStatus.CURRENT
97
98 # Create an ancestry publication in 'multiverse'.
99 ancestry_source = self.test_publisher.getPubSource(
100@@ -245,8 +240,7 @@
101
102 # Accept and publish the delayed-copy.
103 delayed_copy.acceptFromCopy()
104- self.assertEquals(
105- PackageUploadStatus.ACCEPTED, delayed_copy.status)
106+ self.assertEquals(PackageUploadStatus.ACCEPTED, delayed_copy.status)
107
108 # Make sure no announcement email was sent at this point.
109 self.assertEquals(len(stub.test_emails), 0)
110@@ -263,8 +257,7 @@
111 pub_records = delayed_copy.realiseUpload(logger=logger)
112 finally:
113 os.umask(old_umask)
114- self.assertEquals(
115- PackageUploadStatus.DONE, delayed_copy.status)
116+ self.assertEquals(PackageUploadStatus.DONE, delayed_copy.status)
117
118 self.layer.txn.commit()
119
120@@ -332,8 +325,7 @@
121
122 # Create the default delayed-copy context.
123 delayed_copy = self.createDelayedCopy(source_only=True)
124- self.test_publisher.breezy_autotest.status = (
125- SeriesStatus.CURRENT)
126+ self.test_publisher.breezy_autotest.status = SeriesStatus.CURRENT
127 self.layer.txn.commit()
128
129 # Accept and publish the delayed-copy.
130@@ -346,8 +338,7 @@
131 self.assertEquals(1, len(pub_records))
132 [pub_record] = pub_records
133 [build] = pub_record.getBuilds()
134- self.assertEquals(
135- BuildStatus.NEEDSBUILD, build.status)
136+ self.assertEquals(BuildStatus.NEEDSBUILD, build.status)
137
138 def test_realiseUpload_for_overridden_component_archive(self):
139 # If the component of an upload is overridden to 'Partner' for
140@@ -373,8 +364,7 @@
141 main_component = getUtility(IComponentSet)['main']
142 package_upload.overrideSource(
143 partner_component, None, [partner_component, main_component])
144- self.assertEqual(
145- "partner", main_upload_release.upload_archive.name)
146+ self.assertEqual("partner", main_upload_release.upload_archive.name)
147
148 # Now realise the upload and verify that the publishing is for
149 # the partner archive.
150@@ -447,8 +437,7 @@
151 def test_package_copy_job_property(self):
152 # Test that we can set and get package_copy_job.
153 pu, pcj = self.makeUploadWithPackageCopyJob()
154- self.assertEqual(
155- removeSecurityProxy(pcj).context, pu.package_copy_job)
156+ self.assertEqual(removeSecurityProxy(pcj).context, pu.package_copy_job)
157
158 def test_getByPackageCopyJobIDs(self):
159 # getByPackageCopyJobIDs retrieves the right PackageCopyJob.
160@@ -575,77 +564,66 @@
161 upload_set = getUtility(IPackageUploadSet)
162 self.assertThat(upload_set, Provides(IPackageUploadSet))
163
164+ def assertUploadsEqual(self, expected, *args, **kwargs):
165+ upload_set = getUtility(IPackageUploadSet)
166+ self.assertContentEqual(expected, upload_set.getAll(*args, **kwargs))
167+
168 def test_getAll_returns_source_upload(self):
169 distroseries = self.factory.makeDistroSeries()
170 upload = self.factory.makeSourcePackageUpload(distroseries)
171- upload_set = getUtility(IPackageUploadSet)
172- self.assertContentEqual([upload], upload_set.getAll(distroseries))
173+ self.assertUploadsEqual([upload], distroseries)
174
175 def test_getAll_returns_build_upload(self):
176 distroseries = self.factory.makeDistroSeries()
177 upload = self.factory.makeBuildPackageUpload(distroseries)
178- upload_set = getUtility(IPackageUploadSet)
179- self.assertContentEqual([upload], upload_set.getAll(distroseries))
180+ self.assertUploadsEqual([upload], distroseries)
181
182 def test_getAll_returns_custom_upload(self):
183 distroseries = self.factory.makeDistroSeries()
184 upload = self.factory.makeCustomPackageUpload(distroseries)
185- upload_set = getUtility(IPackageUploadSet)
186- self.assertContentEqual([upload], upload_set.getAll(distroseries))
187+ self.assertUploadsEqual([upload], distroseries)
188
189 def test_getAll_returns_copy_job_upload(self):
190 distroseries = self.factory.makeDistroSeries()
191 upload = self.factory.makeCopyJobPackageUpload(distroseries)
192- upload_set = getUtility(IPackageUploadSet)
193- self.assertContentEqual([upload], upload_set.getAll(distroseries))
194+ self.assertUploadsEqual([upload], distroseries)
195
196 def test_getAll_filters_by_distroseries(self):
197 distroseries = self.factory.makeDistroSeries()
198 self.factory.makeSourcePackageUpload(distroseries)
199 other_series = self.factory.makeDistroSeries()
200- upload_set = getUtility(IPackageUploadSet)
201- self.assertContentEqual([], upload_set.getAll(other_series))
202+ self.assertUploadsEqual([], other_series)
203
204 def test_getAll_matches_created_since_date(self):
205 distroseries = self.factory.makeDistroSeries()
206 upload = self.factory.makeSourcePackageUpload(distroseries)
207 yesterday = upload.date_created - timedelta(1)
208- upload_set = getUtility(IPackageUploadSet)
209- self.assertContentEqual(
210- [upload],
211- upload_set.getAll(distroseries, created_since_date=yesterday))
212+ self.assertUploadsEqual(
213+ [upload], distroseries, created_since_date=yesterday)
214
215 def test_getAll_filters_by_created_since_date(self):
216 distroseries = self.factory.makeDistroSeries()
217 upload = self.factory.makeSourcePackageUpload(distroseries)
218 tomorrow = upload.date_created + timedelta(1)
219- upload_set = getUtility(IPackageUploadSet)
220- self.assertContentEqual(
221- [], upload_set.getAll(distroseries, created_since_date=tomorrow))
222+ self.assertUploadsEqual([], distroseries, created_since_date=tomorrow)
223
224 def test_getAll_matches_status(self):
225 distroseries = self.factory.makeDistroSeries()
226 upload = self.factory.makeSourcePackageUpload(distroseries)
227 status = upload.status
228- upload_set = getUtility(IPackageUploadSet)
229- self.assertContentEqual(
230- [upload], upload_set.getAll(distroseries, status=status))
231+ self.assertUploadsEqual([upload], distroseries, status=status)
232
233 def test_getAll_filters_by_status(self):
234 distroseries = self.factory.makeDistroSeries()
235 self.factory.makeSourcePackageUpload(distroseries)
236 status = PackageUploadStatus.DONE
237- upload_set = getUtility(IPackageUploadSet)
238- self.assertContentEqual(
239- [], upload_set.getAll(distroseries, status=status))
240+ self.assertUploadsEqual([], distroseries, status=status)
241
242 def test_getAll_matches_pocket(self):
243 distroseries = self.factory.makeDistroSeries()
244 upload = self.factory.makeSourcePackageUpload(distroseries)
245 pocket = upload.pocket
246- upload_set = getUtility(IPackageUploadSet)
247- self.assertContentEqual(
248- [upload], upload_set.getAll(distroseries, pocket=pocket))
249+ self.assertUploadsEqual([upload], distroseries, pocket=pocket)
250
251 def test_getAll_filters_by_pocket(self):
252 def find_different_pocket_than(pocket):
253@@ -656,19 +634,15 @@
254 distroseries = self.factory.makeDistroSeries()
255 upload = self.factory.makeSourcePackageUpload(distroseries)
256 pocket = find_different_pocket_than(upload.pocket)
257- upload_set = getUtility(IPackageUploadSet)
258- self.assertContentEqual(
259- [], upload_set.getAll(distroseries, pocket=pocket))
260+ self.assertUploadsEqual([], distroseries, pocket=pocket)
261
262 def test_getAll_matches_custom_type(self):
263 distroseries = self.factory.makeDistroSeries()
264 custom_type = PackageUploadCustomFormat.DDTP_TARBALL
265 upload = self.factory.makeCustomPackageUpload(
266 distroseries, custom_type=custom_type)
267- upload_set = getUtility(IPackageUploadSet)
268- self.assertContentEqual(
269- [upload],
270- upload_set.getAll(distroseries, custom_type=custom_type))
271+ self.assertUploadsEqual(
272+ [upload], distroseries, custom_type=custom_type)
273
274 def test_getAll_filters_by_custom_type(self):
275 distroseries = self.factory.makeDistroSeries()
276@@ -676,78 +650,68 @@
277 other_type = PackageUploadCustomFormat.ROSETTA_TRANSLATIONS
278 self.factory.makeCustomPackageUpload(
279 distroseries, custom_type=one_type)
280- upload_set = getUtility(IPackageUploadSet)
281- self.assertContentEqual(
282- [], upload_set.getAll(distroseries, custom_type=other_type))
283+ self.assertUploadsEqual([], distroseries, custom_type=other_type)
284
285 def test_getAll_matches_source_upload_by_package_name(self):
286 distroseries = self.factory.makeDistroSeries()
287 spn = self.factory.makeSourcePackageName()
288 upload = self.factory.makeSourcePackageUpload(
289 distroseries, sourcepackagename=spn)
290- upload_set = getUtility(IPackageUploadSet)
291- self.assertContentEqual(
292- [upload], upload_set.getAll(distroseries, name=spn.name))
293+ self.assertUploadsEqual([upload], distroseries, name=spn.name)
294
295 def test_getAll_filters_source_upload_by_package_name(self):
296 distroseries = self.factory.makeDistroSeries()
297 self.factory.makeSourcePackageUpload(distroseries)
298 other_name = self.factory.makeSourcePackageName().name
299- upload_set = getUtility(IPackageUploadSet)
300- self.assertContentEqual(
301- [], upload_set.getAll(distroseries, name=other_name))
302+ self.assertUploadsEqual([], distroseries, name=other_name)
303
304 def test_getAll_matches_build_upload_by_package_name(self):
305 distroseries = self.factory.makeDistroSeries()
306 bpn = self.factory.makeBinaryPackageName()
307 upload = self.factory.makeBuildPackageUpload(
308 distroseries, binarypackagename=bpn)
309- upload_set = getUtility(IPackageUploadSet)
310- self.assertContentEqual(
311- [upload], upload_set.getAll(distroseries, name=bpn.name))
312+ self.assertUploadsEqual([upload], distroseries, name=bpn.name)
313
314 def test_getAll_filters_build_upload_by_package_name(self):
315 distroseries = self.factory.makeDistroSeries()
316 self.factory.makeBuildPackageUpload(distroseries)
317 other_name = self.factory.makeBinaryPackageName().name
318- upload_set = getUtility(IPackageUploadSet)
319- self.assertContentEqual(
320- [], upload_set.getAll(distroseries, name=other_name))
321+ self.assertUploadsEqual([], distroseries, name=other_name)
322+
323+ def test_getAll_matches_build_upload_by_source_name(self):
324+ distroseries = self.factory.makeDistroSeries()
325+ bpn = self.factory.makeBinaryPackageName()
326+ upload = self.factory.makeBuildPackageUpload(distroseries)
327+ source_name = upload.builds[0].build.source_package_release.name
328+ self.assertNotEqual(bpn.name, source_name)
329+ self.assertUploadsEqual([upload], distroseries, name=source_name)
330
331 def test_getAll_matches_custom_upload_by_file_name(self):
332 distroseries = self.factory.makeDistroSeries()
333 filename = self.factory.getUniqueUnicode()
334 upload = self.factory.makeCustomPackageUpload(
335 distroseries, filename=filename)
336- upload_set = getUtility(IPackageUploadSet)
337- self.assertContentEqual(
338- [upload], upload_set.getAll(distroseries, name=filename))
339+ self.assertUploadsEqual([upload], distroseries, name=filename)
340
341 def test_getAll_filters_custom_upload_by_file_name(self):
342 distroseries = self.factory.makeDistroSeries()
343 filename = self.factory.getUniqueString()
344 self.factory.makeCustomPackageUpload(distroseries, filename=filename)
345 other_name = self.factory.getUniqueUnicode()
346- upload_set = getUtility(IPackageUploadSet)
347- self.assertContentEqual(
348- [], upload_set.getAll(distroseries, name=other_name))
349+ self.assertUploadsEqual([], distroseries, name=other_name)
350
351 def test_getAll_matches_copy_job_upload_by_package_name(self):
352 distroseries = self.factory.makeDistroSeries()
353 spn = self.factory.makeSourcePackageName()
354 upload = self.factory.makeCopyJobPackageUpload(
355 distroseries, sourcepackagename=spn)
356- upload_set = getUtility(IPackageUploadSet)
357- self.assertContentEqual(
358- [upload], upload_set.getAll(distroseries, name=spn.name))
359+ self.assertUploadsEqual([upload], distroseries, name=spn.name)
360
361 def test_getAll_filters_copy_job_upload_by_package_name(self):
362 distroseries = self.factory.makeDistroSeries()
363 self.factory.makeCopyJobPackageUpload(distroseries)
364 other_name = self.factory.makeSourcePackageName().name
365- upload_set = getUtility(IPackageUploadSet)
366- self.assertContentEqual(
367- [], upload_set.getAll(distroseries, name=other_name))
368+ self.assertUploadsEqual([], distroseries, name=other_name)
369
370 def test_getAll_without_exact_match_matches_substring_of_name(self):
371 distroseries = self.factory.makeDistroSeries()
372@@ -755,19 +719,15 @@
373 upload = self.factory.makeSourcePackageUpload(
374 distroseries, sourcepackagename=spn)
375 partial_name = spn.name[:-1]
376- upload_set = getUtility(IPackageUploadSet)
377- self.assertContentEqual(
378- [upload], upload_set.getAll(distroseries, name=partial_name))
379+ self.assertUploadsEqual([upload], distroseries, name=partial_name)
380
381 def test_getAll_with_exact_match_matches_exact_name(self):
382 distroseries = self.factory.makeDistroSeries()
383 spn = self.factory.makeSourcePackageName()
384 upload = self.factory.makeSourcePackageUpload(
385 distroseries, sourcepackagename=spn)
386- upload_set = getUtility(IPackageUploadSet)
387- self.assertContentEqual(
388- [upload],
389- upload_set.getAll(distroseries, name=spn.name, exact_match=True))
390+ self.assertUploadsEqual(
391+ [upload], distroseries, name=spn.name, exact_match=True)
392
393 def test_getAll_with_exact_match_does_not_match_substring_of_name(self):
394 distroseries = self.factory.makeDistroSeries()
395@@ -775,63 +735,46 @@
396 self.factory.makeSourcePackageUpload(
397 distroseries, sourcepackagename=spn)
398 partial_name = spn.name[:-1]
399- upload_set = getUtility(IPackageUploadSet)
400- self.assertContentEqual(
401- [],
402- upload_set.getAll(
403- distroseries, name=partial_name, exact_match=True))
404+ self.assertUploadsEqual(
405+ [], distroseries, name=partial_name, exact_match=True)
406
407 def test_getAll_without_exact_match_escapes_name(self):
408 distroseries = self.factory.makeDistroSeries()
409- upload_set = getUtility(IPackageUploadSet)
410- self.assertContentEqual(
411- [], upload_set.getAll(distroseries, name=u"'"))
412+ self.assertUploadsEqual([], distroseries, name=u"'")
413
414 def test_getAll_with_exact_match_escapes_name(self):
415 distroseries = self.factory.makeDistroSeries()
416- upload_set = getUtility(IPackageUploadSet)
417- self.assertContentEqual(
418- [], upload_set.getAll(distroseries, name=u"'", exact_match=True))
419+ self.assertUploadsEqual([], distroseries, name=u"'", exact_match=True)
420
421 def test_getAll_matches_source_upload_by_version(self):
422 distroseries = self.factory.makeDistroSeries()
423 upload = self.factory.makeSourcePackageUpload(distroseries)
424 version = upload.displayversion
425- upload_set = getUtility(IPackageUploadSet)
426- self.assertContentEqual(
427- [upload], upload_set.getAll(distroseries, version=version))
428+ self.assertUploadsEqual([upload], distroseries, version=version)
429
430 def test_getAll_filters_source_upload_by_version(self):
431 distroseries = self.factory.makeDistroSeries()
432 self.factory.makeSourcePackageUpload(distroseries)
433 other_version = self.factory.getUniqueUnicode()
434- upload_set = getUtility(IPackageUploadSet)
435- self.assertContentEqual(
436- [], upload_set.getAll(distroseries, version=other_version))
437+ self.assertUploadsEqual([], distroseries, version=other_version)
438
439 def test_getAll_matches_build_upload_by_version(self):
440 distroseries = self.factory.makeDistroSeries()
441 upload = self.factory.makeBuildPackageUpload(distroseries)
442 version = upload.displayversion
443- upload_set = getUtility(IPackageUploadSet)
444- self.assertContentEqual(
445- [upload], upload_set.getAll(distroseries, version=version))
446+ self.assertUploadsEqual([upload], distroseries, version=version)
447
448 def test_getAll_filters_build_upload_by_version(self):
449 distroseries = self.factory.makeDistroSeries()
450 other_version = self.factory.getUniqueUnicode()
451 self.factory.makeBuildPackageUpload(distroseries)
452- upload_set = getUtility(IPackageUploadSet)
453- self.assertContentEqual(
454- [], upload_set.getAll(distroseries, version=other_version))
455+ self.assertUploadsEqual([], distroseries, version=other_version)
456
457 def test_getAll_version_filter_ignores_custom_uploads(self):
458 distroseries = self.factory.makeDistroSeries()
459 other_version = self.factory.getUniqueUnicode()
460 self.factory.makeCustomPackageUpload(distroseries)
461- upload_set = getUtility(IPackageUploadSet)
462- self.assertContentEqual(
463- [], upload_set.getAll(distroseries, version=other_version))
464+ self.assertUploadsEqual([], distroseries, version=other_version)
465
466 def test_getAll_version_filter_ignores_copy_job_uploads(self):
467 # Version match for package copy jobs is not implemented at the
468@@ -839,48 +782,36 @@
469 distroseries = self.factory.makeDistroSeries()
470 upload = self.factory.makeCopyJobPackageUpload(distroseries)
471 version = upload.package_copy_job.package_version
472- upload_set = getUtility(IPackageUploadSet)
473- self.assertContentEqual(
474- [], upload_set.getAll(distroseries, version=version))
475+ self.assertUploadsEqual([], distroseries, version=version)
476
477 def test_getAll_without_exact_match_matches_substring_of_version(self):
478 distroseries = self.factory.makeDistroSeries()
479 upload = self.factory.makeSourcePackageUpload(distroseries)
480 version = upload.displayversion[1:-1]
481- upload_set = getUtility(IPackageUploadSet)
482- self.assertContentEqual(
483- [upload], upload_set.getAll(distroseries, version=version))
484+ self.assertUploadsEqual([upload], distroseries, version=version)
485
486 def test_getAll_with_exact_match_matches_exact_version(self):
487 distroseries = self.factory.makeDistroSeries()
488 upload = self.factory.makeSourcePackageUpload(distroseries)
489 version = upload.displayversion
490- upload_set = getUtility(IPackageUploadSet)
491- self.assertContentEqual(
492- [upload],
493- upload_set.getAll(
494- distroseries, version=version, exact_match=True))
495+ self.assertUploadsEqual(
496+ [upload], distroseries, version=version, exact_match=True)
497
498 def test_getAll_w_exact_match_does_not_match_substring_of_version(self):
499 distroseries = self.factory.makeDistroSeries()
500 upload = self.factory.makeSourcePackageUpload(distroseries)
501 version = upload.displayversion[1:-1]
502- upload_set = getUtility(IPackageUploadSet)
503- self.assertContentEqual(
504- [],
505- upload_set.getAll(
506- distroseries, version=version, exact_match=True))
507+ self.assertUploadsEqual(
508+ [], distroseries, version=version, exact_match=True)
509
510 def test_getAll_can_combine_version_and_name(self):
511 distroseries = self.factory.makeDistroSeries()
512 spn = self.factory.makeSourcePackageName()
513 upload = self.factory.makeSourcePackageUpload(
514 distroseries, sourcepackagename=spn)
515- upload_set = getUtility(IPackageUploadSet)
516- self.assertContentEqual(
517+ self.assertUploadsEqual(
518 [upload],
519- upload_set.getAll(
520- distroseries, name=spn.name, version=upload.displayversion))
521+ distroseries, name=spn.name, version=upload.displayversion)
522
523 def test_getAll_orders_in_reverse_historical_order(self):
524 # The results from getAll are returned in order of creation,