def test_no_source_overrides(self): # If the spn is not published in the given archive/distroseries, an # empty list is returned. spn = self.factory.makeSourcePackageName() distroseries = self.factory.makeDistroSeries() pocket = self.factory.getAnyPocket() policy = FromExistingOverridePolicy() overrides = policy.calculateSourceOverrides( distroseries.main_archive, distroseries, pocket, (spn,)) self.assertEqual([], overrides)
def test_source_overrides_constant_query_count(self): # The query count is constant, no matter how many sources are # checked. spns = [] distroseries = self.factory.makeDistroSeries() pocket = self.factory.getAnyPocket() for i in xrange(10): spph = self.factory.makeSourcePackagePublishingHistory( distroseries=distroseries, archive=distroseries.main_archive, pocket=pocket) spns.append(spph.sourcepackagerelease.sourcepackagename) flush_database_caches() distroseries.main_archive bulk.reload(spns) policy = FromExistingOverridePolicy() with StormStatementRecorder() as recorder: policy.calculateSourceOverrides( spph.distroseries.main_archive, spph.distroseries, spph.pocket, spns) self.assertThat(recorder, HasQueryCount(Equals(4)))
def test_source_overrides(self): # When the spn is published in the given archive/distroseries, the # overrides for that archive/distroseries are returned. spph = self.factory.makeSourcePackagePublishingHistory() policy = FromExistingOverridePolicy() overrides = policy.calculateSourceOverrides( spph.distroseries.main_archive, spph.distroseries, spph.pocket, (spph.sourcepackagerelease.sourcepackagename,)) expected = [SourceOverride( spph.sourcepackagerelease.sourcepackagename, spph.component, spph.section)] self.assertEqual(expected, overrides)
def _checkPolicies(self, source_name, source_component=None, auto_approve=False): # This helper will only return if it's safe to carry on with the # copy, otherwise it raises SuspendJobException to tell the job # runner to suspend the job. override_policy = FromExistingOverridePolicy() ancestry = override_policy.calculateSourceOverrides( self.target_archive, self.target_distroseries, self.target_pocket, [source_name]) copy_policy = self.getPolicyImplementation() if len(ancestry) == 0: # We need to get the default overrides and put them in the # metadata. defaults = UnknownOverridePolicy().calculateSourceOverrides( self.target_archive, self.target_distroseries, self.target_pocket, [source_name], source_component) self.addSourceOverride(defaults[0]) if auto_approve: auto_approve = self.target_archive.canAdministerQueue( self.requester, self.getSourceOverride().component, self.target_pocket, self.target_distroseries) approve_new = auto_approve or copy_policy.autoApproveNew( self.target_archive, self.target_distroseries, self.target_pocket) if not approve_new: # There's no existing package with the same name and the # policy says unapproved, so we poke it in the NEW queue. self._createPackageUpload() raise SuspendJobException else: # Put the existing override in the metadata. self.addSourceOverride(ancestry[0]) if auto_approve: auto_approve = self.target_archive.canAdministerQueue( self.requester, self.getSourceOverride().component, self.target_pocket, self.target_distroseries) # The package is not new (it has ancestry) so check the copy # policy for existing packages. approve_existing = auto_approve or copy_policy.autoApprove( self.target_archive, self.target_distroseries, self.target_pocket) if not approve_existing: self._createPackageUpload(unapproved=True) raise SuspendJobException
def _checkPolicies(self, source_name, source_component=None, auto_approve=False): # This helper will only return if it's safe to carry on with the # copy, otherwise it raises SuspendJobException to tell the job # runner to suspend the job. override_policy = FromExistingOverridePolicy() ancestry = override_policy.calculateSourceOverrides( self.target_archive, self.target_distroseries, self.target_pocket, [source_name] ) copy_policy = self.getPolicyImplementation() if len(ancestry) == 0: # We need to get the default overrides and put them in the # metadata. defaults = UnknownOverridePolicy().calculateSourceOverrides( self.target_archive, self.target_distroseries, self.target_pocket, [source_name], source_component ) self.addSourceOverride(defaults[0]) if auto_approve: auto_approve = self.target_archive.canAdministerQueue( self.requester, self.getSourceOverride().component, self.target_pocket, self.target_distroseries ) approve_new = auto_approve or copy_policy.autoApproveNew( self.target_archive, self.target_distroseries, self.target_pocket ) if not approve_new: # There's no existing package with the same name and the # policy says unapproved, so we poke it in the NEW queue. self._createPackageUpload() raise SuspendJobException else: # Put the existing override in the metadata. self.addSourceOverride(ancestry[0]) if auto_approve: auto_approve = self.target_archive.canAdministerQueue( self.requester, self.getSourceOverride().component, self.target_pocket, self.target_distroseries ) # The package is not new (it has ancestry) so check the copy # policy for existing packages. approve_existing = auto_approve or copy_policy.autoApprove( self.target_archive, self.target_distroseries, self.target_pocket ) if not approve_existing: self._createPackageUpload(unapproved=True) raise SuspendJobException
def test_source_overrides_latest_only_is_returned(self): # When the spn is published multiple times in the given # archive/distroseries, the latest publication's overrides are # returned. spn = self.factory.makeSourcePackageName() distroseries = self.factory.makeDistroSeries() published_spr = self.factory.makeSourcePackageRelease( sourcepackagename=spn) self.factory.makeSourcePackagePublishingHistory( sourcepackagerelease=published_spr, distroseries=distroseries, status=PackagePublishingStatus.PUBLISHED) spr = self.factory.makeSourcePackageRelease( sourcepackagename=spn) spph = self.factory.makeSourcePackagePublishingHistory( sourcepackagerelease=spr, distroseries=distroseries) policy = FromExistingOverridePolicy() overrides = policy.calculateSourceOverrides( distroseries.main_archive, distroseries, spph.pocket, (spn,)) self.assertEqual( [SourceOverride(spn, spph.component, spph.section)], overrides)