def test_copy_archive_without_leak(self):
     # If source publications are copied to a .COPY archive, they don't
     # "leak" into SourcePackage.getBuildRecords().
     admin = getUtility(IPersonSet).getByEmail(ADMIN_EMAIL)
     # Set up a distroseries and related bits, so we can create builds.
     source_name = self.factory.getUniqueString()
     spn = self.factory.makeSourcePackageName(name=source_name)
     processor = self.factory.makeProcessor()
     distroseries = self.factory.makeDistroSeries()
     das = self.factory.makeDistroArchSeries(distroseries=distroseries,
                                             processor=processor,
                                             supports_virtualized=True)
     with person_logged_in(admin):
         publisher = SoyuzTestPublisher()
         publisher.prepareBreezyAutotest()
         publisher.addFakeChroots(distroseries=distroseries)
         distroseries.nominatedarchindep = das
         self.factory.makeBuilder(processor=processor)
     spph = self.factory.makeSourcePackagePublishingHistory(
         sourcepackagename=spn, distroseries=distroseries)
     spph.createMissingBuilds()
     # Create a copy archive.
     copy = self.factory.makeArchive(purpose=ArchivePurpose.COPY,
                                     distribution=distroseries.distribution)
     # And copy the publication into it.
     copy_spph = spph.copyTo(distroseries, PackagePublishingPocket.RELEASE,
                             copy)
     [copy_build] = copy_spph.createMissingBuilds()
     builds = copy.getBuildRecords()
     self.assertEquals([copy_build], list(builds))
     source = SourcePackage(spn, spph.distroseries)
     # SourcePackage.getBuildRecords() doesn't have two build records.
     builds = source.getBuildRecords().count()
     self.assertEquals(1, builds)
 def test_copy_archive_without_leak(self):
     # If source publications are copied to a .COPY archive, they don't
     # "leak" into SourcePackage.getBuildRecords().
     admin = getUtility(IPersonSet).getByEmail(ADMIN_EMAIL)
     # Set up a distroseries and related bits, so we can create builds.
     source_name = self.factory.getUniqueString()
     spn = self.factory.makeSourcePackageName(name=source_name)
     processor = self.factory.makeProcessor()
     distroseries = self.factory.makeDistroSeries()
     das = self.factory.makeDistroArchSeries(
         distroseries=distroseries, processor=processor,
         supports_virtualized=True)
     with person_logged_in(admin):
         publisher = SoyuzTestPublisher()
         publisher.prepareBreezyAutotest()
         publisher.addFakeChroots(distroseries=distroseries)
         distroseries.nominatedarchindep = das
         self.factory.makeBuilder(processor=processor)
     spph = self.factory.makeSourcePackagePublishingHistory(
         sourcepackagename=spn, distroseries=distroseries)
     spph.createMissingBuilds()
     # Create a copy archive.
     copy = self.factory.makeArchive(
         purpose=ArchivePurpose.COPY,
         distribution=distroseries.distribution)
     # And copy the publication into it.
     copy_spph = spph.copyTo(
         distroseries, PackagePublishingPocket.RELEASE, copy)
     [copy_build] = copy_spph.createMissingBuilds()
     builds = copy.getBuildRecords()
     self.assertEquals([copy_build], list(builds))
     source = SourcePackage(spn, spph.distroseries)
     # SourcePackage.getBuildRecords() doesn't have two build records.
     builds = source.getBuildRecords().count()
     self.assertEquals(1, builds)
class TestSourcePackageHasBuildRecords(TestHasBuildRecordsInterface):
    """Test the SourcePackage implementation of IHasBuildRecords."""
    def setUp(self):
        super(TestSourcePackageHasBuildRecords, self).setUp()
        gedit_name = self.builds[0].source_package_release.sourcepackagename
        self.context = SourcePackage(
            gedit_name, self.builds[0].distro_arch_series.distroseries)

        # Convert the other two builds to be builds of
        # gedit as well so that the one source package (gedit) will have
        # three builds.
        for build in self.builds[1:3]:
            spr = build.source_package_release
            removeSecurityProxy(spr).sourcepackagename = gedit_name
            IStore(SourcePackagePublishingHistory).find(
                SourcePackagePublishingHistory, sourcepackagerelease=spr).set(
                    sourcepackagenameID=gedit_name.id)

        # Set them as sucessfully built
        for build in self.builds:
            build.updateStatus(BuildStatus.BUILDING)
            build.updateStatus(BuildStatus.FULLYBUILT)

    def test_get_build_records(self):
        # We can fetch builds records from a SourcePackage.
        builds = self.context.getBuildRecords(
            build_state=BuildStatus.FULLYBUILT).count()
        self.assertEquals(3, builds)
        builds = self.context.getBuildRecords(
            pocket=PackagePublishingPocket.RELEASE).count()
        self.assertEquals(3, builds)
        builds = self.context.getBuildRecords(
            pocket=PackagePublishingPocket.UPDATES).count()
        self.assertEquals(0, builds)

    def test_ordering_date(self):
        # Build records returned are ordered by creation date.
        builds = self.context.getBuildRecords(
            build_state=BuildStatus.FULLYBUILT)
        date_created = [build.date_created for build in builds]
        self.assertTrue(date_created[0] > date_created[1] > date_created[2])

    def test_ordering_lastscore(self):
        # PENDING build records returned are ordered by score.
        spph = self.factory.makeSourcePackagePublishingHistory()
        spr = spph.sourcepackagerelease
        source_package = SourcePackage.new(
            spph.sourcepackagerelease.sourcepackagename, spph.distroseries)
        build1 = self.factory.makeBinaryPackageBuild(
            source_package_release=spr)
        build2 = self.factory.makeBinaryPackageBuild(
            source_package_release=spr)
        build1.queueBuild()
        build2.queueBuild()
        build1.buildqueue_record.lastscore = 10
        build2.buildqueue_record.lastscore = 1000
        builds = list(source_package.getBuildRecords())
        self.assertEquals([build2, build1], builds)

    def test_copy_archive_without_leak(self):
        # If source publications are copied to a .COPY archive, they don't
        # "leak" into SourcePackage.getBuildRecords().
        admin = getUtility(IPersonSet).getByEmail(ADMIN_EMAIL)
        # Set up a distroseries and related bits, so we can create builds.
        source_name = self.factory.getUniqueString()
        spn = self.factory.makeSourcePackageName(name=source_name)
        processor = self.factory.makeProcessor()
        distroseries = self.factory.makeDistroSeries()
        das = self.factory.makeDistroArchSeries(distroseries=distroseries,
                                                processor=processor,
                                                supports_virtualized=True)
        with person_logged_in(admin):
            publisher = SoyuzTestPublisher()
            publisher.prepareBreezyAutotest()
            publisher.addFakeChroots(distroseries=distroseries)
            distroseries.nominatedarchindep = das
            self.factory.makeBuilder(processor=processor)
        spph = self.factory.makeSourcePackagePublishingHistory(
            sourcepackagename=spn, distroseries=distroseries)
        spph.createMissingBuilds()
        # Create a copy archive.
        copy = self.factory.makeArchive(purpose=ArchivePurpose.COPY,
                                        distribution=distroseries.distribution)
        # And copy the publication into it.
        copy_spph = spph.copyTo(distroseries, PackagePublishingPocket.RELEASE,
                                copy)
        [copy_build] = copy_spph.createMissingBuilds()
        builds = copy.getBuildRecords()
        self.assertEquals([copy_build], list(builds))
        source = SourcePackage(spn, spph.distroseries)
        # SourcePackage.getBuildRecords() doesn't have two build records.
        builds = source.getBuildRecords().count()
        self.assertEquals(1, builds)
class TestSourcePackageHasBuildRecords(TestHasBuildRecordsInterface):
    """Test the SourcePackage implementation of IHasBuildRecords."""

    def setUp(self):
        super(TestSourcePackageHasBuildRecords, self).setUp()
        gedit_name = self.builds[0].source_package_release.sourcepackagename
        self.context = SourcePackage(
            gedit_name, self.builds[0].distro_arch_series.distroseries)

        # Convert the other two builds to be builds of
        # gedit as well so that the one source package (gedit) will have
        # three builds.
        for build in self.builds[1:3]:
            spr = build.source_package_release
            removeSecurityProxy(spr).sourcepackagename = gedit_name
            IStore(SourcePackagePublishingHistory).find(
                SourcePackagePublishingHistory, sourcepackagerelease=spr
                ).set(sourcepackagenameID=gedit_name.id)

        # Set them as sucessfully built
        for build in self.builds:
            build.updateStatus(BuildStatus.BUILDING)
            build.updateStatus(BuildStatus.FULLYBUILT)

    def test_get_build_records(self):
        # We can fetch builds records from a SourcePackage.
        builds = self.context.getBuildRecords(
            build_state=BuildStatus.FULLYBUILT).count()
        self.assertEquals(3, builds)
        builds = self.context.getBuildRecords(
            pocket=PackagePublishingPocket.RELEASE).count()
        self.assertEquals(3, builds)
        builds = self.context.getBuildRecords(
            pocket=PackagePublishingPocket.UPDATES).count()
        self.assertEquals(0, builds)

    def test_ordering_date(self):
        # Build records returned are ordered by creation date.
        builds = self.context.getBuildRecords(
            build_state=BuildStatus.FULLYBUILT)
        date_created = [build.date_created for build in builds]
        self.assertTrue(date_created[0] > date_created[1] > date_created[2])

    def test_ordering_lastscore(self):
        # PENDING build records returned are ordered by score.
        spph = self.factory.makeSourcePackagePublishingHistory()
        spr = spph.sourcepackagerelease
        source_package = SourcePackage.new(
            spph.sourcepackagerelease.sourcepackagename, spph.distroseries)
        build1 = self.factory.makeBinaryPackageBuild(
            source_package_release=spr)
        build2 = self.factory.makeBinaryPackageBuild(
            source_package_release=spr)
        build1.queueBuild()
        build2.queueBuild()
        build1.buildqueue_record.lastscore = 10
        build2.buildqueue_record.lastscore = 1000
        builds = list(source_package.getBuildRecords())
        self.assertEquals([build2, build1], builds)

    def test_copy_archive_without_leak(self):
        # If source publications are copied to a .COPY archive, they don't
        # "leak" into SourcePackage.getBuildRecords().
        admin = getUtility(IPersonSet).getByEmail(ADMIN_EMAIL)
        # Set up a distroseries and related bits, so we can create builds.
        source_name = self.factory.getUniqueString()
        spn = self.factory.makeSourcePackageName(name=source_name)
        processor = self.factory.makeProcessor()
        distroseries = self.factory.makeDistroSeries()
        das = self.factory.makeDistroArchSeries(
            distroseries=distroseries, processor=processor,
            supports_virtualized=True)
        with person_logged_in(admin):
            publisher = SoyuzTestPublisher()
            publisher.prepareBreezyAutotest()
            publisher.addFakeChroots(distroseries=distroseries)
            distroseries.nominatedarchindep = das
            self.factory.makeBuilder(processor=processor)
        spph = self.factory.makeSourcePackagePublishingHistory(
            sourcepackagename=spn, distroseries=distroseries)
        spph.createMissingBuilds()
        # Create a copy archive.
        copy = self.factory.makeArchive(
            purpose=ArchivePurpose.COPY,
            distribution=distroseries.distribution)
        # And copy the publication into it.
        copy_spph = spph.copyTo(
            distroseries, PackagePublishingPocket.RELEASE, copy)
        [copy_build] = copy_spph.createMissingBuilds()
        builds = copy.getBuildRecords()
        self.assertEquals([copy_build], list(builds))
        source = SourcePackage(spn, spph.distroseries)
        # SourcePackage.getBuildRecords() doesn't have two build records.
        builds = source.getBuildRecords().count()
        self.assertEquals(1, builds)