Пример #1
0
 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)
Пример #2
0
 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)))
Пример #3
0
 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)
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
 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)