Пример #1
0
 def test_binary_overrides_pocket(self):
     # If the binary is not published in the given pocket, no changes
     # are made.
     distroseries = self.factory.makeDistroSeries()
     das = self.factory.makeDistroArchSeries(distroseries=distroseries)
     bpn = self.factory.makeBinaryPackageName()
     self.factory.makeBinaryPackagePublishingHistory(
         archive=distroseries.main_archive,
         distroarchseries=das,
         pocket=PackagePublishingPocket.RELEASE,
         binarypackagename=bpn)
     policy = FromExistingOverridePolicy(distroseries.main_archive,
                                         distroseries,
                                         PackagePublishingPocket.PROPOSED)
     overrides = policy.calculateBinaryOverrides({
         (bpn, das.architecturetag):
         BinaryOverride()
     })
     self.assertEqual(0, len(overrides))
     policy = FromExistingOverridePolicy(distroseries.main_archive,
                                         distroseries,
                                         PackagePublishingPocket.RELEASE)
     overrides = policy.calculateBinaryOverrides({
         (bpn, das.architecturetag):
         BinaryOverride()
     })
     self.assertEqual(1, len(overrides))
     policy = FromExistingOverridePolicy(distroseries.main_archive,
                                         distroseries, None)
     overrides = policy.calculateBinaryOverrides({
         (bpn, das.architecturetag):
         BinaryOverride()
     })
     self.assertEqual(1, len(overrides))
Пример #2
0
    def test_binary_overrides_can_include_deleted(self):
        # calculateBinaryOverrides can be asked to include Deleted
        # publications.
        distroseries = self.factory.makeDistroSeries()
        das = self.factory.makeDistroArchSeries(architecturetag='amd64',
                                                distroseries=distroseries)
        bpn = self.factory.makeBinaryPackageName()
        pocket = self.factory.getAnyPocket()
        bpph = self.factory.makeBinaryPackagePublishingHistory(
            archive=distroseries.main_archive,
            distroarchseries=das,
            pocket=pocket,
            binarypackagename=bpn,
            architecturespecific=True,
            status=PackagePublishingStatus.PUBLISHED)
        deleted_bpph = self.factory.makeBinaryPackagePublishingHistory(
            archive=distroseries.main_archive,
            distroarchseries=das,
            pocket=pocket,
            binarypackagename=bpn,
            architecturespecific=True,
            status=PackagePublishingStatus.DELETED)

        # With include_deleted=False the Published pub is found.
        policy = FromExistingOverridePolicy(distroseries.main_archive,
                                            distroseries, pocket)
        overrides = policy.calculateBinaryOverrides({
            (bpn, 'amd64'):
            BinaryOverride()
        })
        self.assertEqual(
            {
                (bpn, 'amd64'):
                BinaryOverride(component=bpph.component,
                               section=bpph.section,
                               priority=bpph.priority,
                               version=bpph.binarypackagerelease.version,
                               new=False)
            }, overrides)

        # But with include_deleted=True we get the newer Deleted pub instead.
        policy = FromExistingOverridePolicy(distroseries.main_archive,
                                            distroseries,
                                            pocket,
                                            include_deleted=True)
        overrides = policy.calculateBinaryOverrides({
            (bpn, 'amd64'):
            BinaryOverride()
        })
        self.assertEqual(
            {
                (bpn, 'amd64'):
                BinaryOverride(
                    component=deleted_bpph.component,
                    section=deleted_bpph.section,
                    priority=deleted_bpph.priority,
                    version=deleted_bpph.binarypackagerelease.version,
                    new=True)
            }, overrides)
Пример #3
0
    def test_binary_overrides_can_cross_archs(self):
        # calculateBinaryOverrides can be asked to ignore the archtag
        # and look for ancestry in any architecture.
        distroseries = self.factory.makeDistroSeries()
        amd64 = self.factory.makeDistroArchSeries(architecturetag='amd64',
                                                  distroseries=distroseries)
        i386 = self.factory.makeDistroArchSeries(architecturetag='i386',
                                                 distroseries=distroseries)
        distroseries.nominatedarchindep = i386
        bpn = self.factory.makeBinaryPackageName()
        pocket = self.factory.getAnyPocket()
        bpph = self.factory.makeBinaryPackagePublishingHistory(
            archive=distroseries.main_archive,
            distroarchseries=amd64,
            pocket=pocket,
            binarypackagename=bpn,
            architecturespecific=True)
        bpph_override = BinaryOverride(
            component=bpph.component,
            section=bpph.section,
            priority=bpph.priority,
            version=bpph.binarypackagerelease.version,
            new=False)

        # With any_arch=False only amd64 is found.
        policy = FromExistingOverridePolicy(distroseries.main_archive,
                                            distroseries, pocket)
        overrides = policy.calculateBinaryOverrides({
            (bpn, 'i386'):
            BinaryOverride(),
            (bpn, 'amd64'):
            BinaryOverride(),
            (bpn, None):
            BinaryOverride()
        })
        self.assertEqual({(bpn, 'amd64'): bpph_override}, overrides)

        # But with any_arch=True we get the amd64 overrides everywhere.
        policy = FromExistingOverridePolicy(distroseries.main_archive,
                                            distroseries,
                                            pocket,
                                            any_arch=True)
        overrides = policy.calculateBinaryOverrides({
            (bpn, 'i386'):
            BinaryOverride(),
            (bpn, 'amd64'):
            BinaryOverride(),
            (bpn, None):
            BinaryOverride()
        })
        self.assertEqual(
            {
                (bpn, 'i386'): bpph_override,
                (bpn, 'amd64'): bpph_override,
                (bpn, None): bpph_override
            }, overrides)
Пример #4
0
 def test_no_binary_overrides(self):
     # if the given binary is not published in the given distroarchseries,
     # an empty list is returned.
     distroseries = self.factory.makeDistroSeries()
     das = self.factory.makeDistroArchSeries(distroseries=distroseries)
     distroseries.nominatedarchindep = das
     bpn = self.factory.makeBinaryPackageName()
     pocket = self.factory.getAnyPocket()
     policy = FromExistingOverridePolicy()
     overrides = policy.calculateBinaryOverrides(
         distroseries.main_archive, distroseries, pocket, ((bpn, None),))
     self.assertEqual([], overrides)
Пример #5
0
 def test_binary_overrides_constant_query_count(self):
     # The query count is constant, no matter how many bpn-das pairs are
     # checked.
     bpns = []
     distroarchseries = self.factory.makeDistroArchSeries()
     distroseries = distroarchseries.distroseries
     distroseries.nominatedarchindep = distroarchseries
     pocket = self.factory.getAnyPocket()
     for i in xrange(10):
         bpph = self.factory.makeBinaryPackagePublishingHistory(
             distroarchseries=distroarchseries,
             archive=distroseries.main_archive, pocket=pocket)
         bpns.append((bpph.binarypackagerelease.binarypackagename, None))
     flush_database_caches()
     distroseries.main_archive
     bulk.reload(bpn[0] for bpn in bpns)
     policy = FromExistingOverridePolicy()
     with StormStatementRecorder() as recorder:
         policy.calculateBinaryOverrides(
             distroseries.main_archive, distroseries, pocket, bpns)
     self.assertThat(recorder, HasQueryCount(Equals(4)))
Пример #6
0
    def test_calculateBinaryOverrides_skips_unknown_arch(self):
        # If calculateBinaryOverrides is passed with an archtag that
        # does not correspond to an ArchSeries of the distroseries,
        # an empty list is returned.
        distroseries = self.factory.makeDistroSeries()
        das = self.factory.makeDistroArchSeries(
            architecturetag='amd64',
            distroseries=distroseries)
        distroseries.nominatedarchindep = das
        bpn = self.factory.makeBinaryPackageName()
        pocket = self.factory.getAnyPocket()
        policy = FromExistingOverridePolicy()
        overrides = policy.calculateBinaryOverrides(
            distroseries.main_archive, distroseries, pocket, ((bpn, 'i386'),))

        self.assertEqual([], overrides)
Пример #7
0
 def test_binary_overrides(self):
     # When a binary is published in the given distroarchseries, the
     # overrides are returned.
     bpph = self.factory.makeBinaryPackagePublishingHistory()
     distroseries = bpph.distroarchseries.distroseries
     distroseries.nominatedarchindep = bpph.distroarchseries
     policy = FromExistingOverridePolicy()
     overrides = policy.calculateBinaryOverrides(
         distroseries.main_archive, distroseries, bpph.pocket,
         ((bpph.binarypackagerelease.binarypackagename, None),))
     expected = [
         BinaryOverride(
             bpph.binarypackagerelease.binarypackagename,
             bpph.distroarchseries, bpph.component, bpph.section,
             bpph.priority, None)]
     self.assertEqual(expected, overrides)
Пример #8
0
 def test_binary_overrides(self):
     # When a binary is published in the given distroarchseries, the
     # overrides are returned. None means nominatedarchindep,
     # whatever that is in the target series.
     distroseries = self.factory.makeDistroSeries()
     bpph1 = self.factory.makeBinaryPackagePublishingHistory(
         archive=distroseries.main_archive,
         distroarchseries=self.factory.makeDistroArchSeries(distroseries))
     bpph2 = self.factory.makeBinaryPackagePublishingHistory(
         archive=distroseries.main_archive,
         pocket=bpph1.pocket,
         distroarchseries=self.factory.makeDistroArchSeries(distroseries))
     distroseries.nominatedarchindep = bpph1.distroarchseries
     policy = FromExistingOverridePolicy(distroseries.main_archive,
                                         distroseries, bpph1.pocket)
     overrides = policy.calculateBinaryOverrides({
         (bpph1.binarypackagerelease.binarypackagename, bpph1.distroarchseries.architecturetag):
         BinaryOverride(),
         (bpph2.binarypackagerelease.binarypackagename, bpph2.distroarchseries.architecturetag):
         BinaryOverride(),
         (bpph2.binarypackagerelease.binarypackagename, None):
         BinaryOverride(),
     })
     expected = {
         (bpph1.binarypackagerelease.binarypackagename, bpph1.distroarchseries.architecturetag):
         BinaryOverride(component=bpph1.component,
                        section=bpph1.section,
                        priority=bpph1.priority,
                        new=False,
                        version=bpph1.binarypackagerelease.version),
         (bpph2.binarypackagerelease.binarypackagename, bpph2.distroarchseries.architecturetag):
         BinaryOverride(component=bpph2.component,
                        section=bpph2.section,
                        priority=bpph2.priority,
                        new=False,
                        version=bpph2.binarypackagerelease.version),
         (bpph2.binarypackagerelease.binarypackagename, None):
         BinaryOverride(component=bpph2.component,
                        section=bpph2.section,
                        priority=bpph2.priority,
                        new=False,
                        version=bpph2.binarypackagerelease.version),
     }
     self.assertEqual(expected, overrides)