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))
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)
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)
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)
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)))
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)
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)
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)