コード例 #1
0
 def test_makeDailyBuilds_logs_builds(self):
     # If a logger is passed into the makeDailyBuilds method, each recipe
     # that a build is requested for gets logged.
     owner = self.factory.makePerson(name='eric')
     self.factory.makeSourcePackageRecipe(
         owner=owner, name=u'funky-recipe', build_daily=True)
     logger = BufferLogger()
     SourcePackageRecipeBuild.makeDailyBuilds(logger)
     self.assertEqual(
         'DEBUG Recipe eric/funky-recipe is stale\n'
         'DEBUG  - build requested for Warty (4.10)\n',
         logger.getLogBuffer())
コード例 #2
0
 def test_makeDailyBuilds_with_disallowed_series(self):
     # If a recipe is set to build into a disallowed series,
     # makeDailyBuilds won't OOPS.
     recipe = self.factory.makeSourcePackageRecipe(build_daily=True,
                                                   is_stale=True)
     self.factory.makeArchive(owner=recipe.owner)
     logger = BufferLogger()
     distroseries = list(recipe.distroseries)[0]
     removeSecurityProxy(distroseries).status = SeriesStatus.OBSOLETE
     SourcePackageRecipeBuild.makeDailyBuilds(logger)
     self.assertEqual([], self.oopses)
     self.assertIn("DEBUG  - cannot build against Warty (4.10).",
                   logger.getLogBuffer())
コード例 #3
0
 def test_makeDailyBuilds_with_disallowed_series(self):
     # If a recipe is set to build into a disallowed series,
     # makeDailyBuilds won't OOPS.
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     self.factory.makeArchive(owner=recipe.owner)
     logger = BufferLogger()
     distroseries = list(recipe.distroseries)[0]
     removeSecurityProxy(distroseries).status = SeriesStatus.OBSOLETE
     SourcePackageRecipeBuild.makeDailyBuilds(logger)
     self.assertEquals([], self.oopses)
     self.assertIn(
         "DEBUG  - cannot build against Warty (4.10).",
         logger.getLogBuffer())
コード例 #4
0
 def test_getByBuildFarmJobs(self):
     sprbs = [self.makeSourcePackageRecipeBuild() for i in range(10)]
     Store.of(sprbs[0]).flush()
     self.assertContentEqual(
         sprbs,
         SourcePackageRecipeBuild.getByBuildFarmJobs(
             [sprb.build_farm_job for sprb in sprbs]))
コード例 #5
0
    def test_makeDailyBuilds_skips_builds_already_queued(self):
        # If the recipe already has an identical build pending,
        # makeDailyBuilds() won't create a build.
        owner = self.factory.makePerson(name='eric')
        recipe = self.factory.makeSourcePackageRecipe(owner=owner,
                                                      name='funky-recipe',
                                                      build_daily=True,
                                                      is_stale=True)
        series = list(recipe.distroseries)[0]
        self.factory.makeSourcePackageRecipeBuild(
            recipe=recipe,
            archive=recipe.daily_build_archive,
            requester=recipe.owner,
            distroseries=series,
            pocket=PackagePublishingPocket.RELEASE,
            date_created=datetime.now(utc) - timedelta(hours=24, seconds=1))
        removeSecurityProxy(recipe).is_stale = True

        logger = BufferLogger()
        daily_builds = SourcePackageRecipeBuild.makeDailyBuilds(logger)
        self.assertEqual([], daily_builds)
        self.assertEqual(
            'DEBUG Recipe eric/funky-recipe is stale\n'
            'DEBUG  - build already pending for Warty (4.10)\n',
            logger.getLogBuffer())
コード例 #6
0
 def test_makeDailyBuilds_skips_missing_archive(self):
     """When creating daily builds, skip ones that are already pending."""
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     with person_logged_in(recipe.owner):
         recipe.daily_build_archive = None
     builds = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEqual([], builds)
コード例 #7
0
 def test_makeDailyBuilds_skips_if_built_in_last_24_hours(self):
     # We won't create a build during makeDailyBuilds() if the recipe
     # has been built in the last 24 hours.
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     recipe.requestBuild(
         recipe.daily_build_archive, recipe.owner,
         list(recipe.distroseries)[0], PackagePublishingPocket.RELEASE)
     daily_builds = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEqual([], daily_builds)
コード例 #8
0
 def test_makeDailyBuilds_with_an_older_build(self):
     # If a previous build is more than 24 hours old, and the recipe is
     # stale, we'll fire another off.
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     build = self.factory.makeSourcePackageRecipeBuild(
         recipe=recipe, archive=recipe.daily_build_archive,
         requester=recipe.owner, distroseries=list(recipe.distroseries)[0],
         pocket=PackagePublishingPocket.RELEASE,
         date_created=datetime.now(utc) - timedelta(hours=24, seconds=1),
         status=BuildStatus.FULLYBUILT)
     daily_builds = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEquals(1, len(daily_builds))
     actual_title = [b.title for b in daily_builds]
     self.assertEquals([build.title], actual_title)
コード例 #9
0
 def test_makeDailyBuilds_with_an_older_and_newer_build(self):
     # If a recipe has been built twice, and the most recent build is
     # within 24 hours, makeDailyBuilds() won't create a build.
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     for timediff in (timedelta(hours=24, seconds=1), timedelta(hours=8)):
         self.factory.makeSourcePackageRecipeBuild(
             recipe=recipe, archive=recipe.daily_build_archive,
             requester=recipe.owner,
             distroseries=list(recipe.distroseries)[0],
             pocket=PackagePublishingPocket.RELEASE,
             date_created=datetime.now(utc) - timediff,
             status=BuildStatus.FULLYBUILT)
     daily_builds = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEquals([], list(daily_builds))
コード例 #10
0
 def test_makeDailyBuilds_with_new_build_different_archive(self):
     # If a recipe has been built into an archive that isn't the
     # daily_build_archive, we will create a build.
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     archive = self.factory.makeArchive(owner=recipe.owner)
     build = self.factory.makeSourcePackageRecipeBuild(
         recipe=recipe, archive=archive, requester=recipe.owner,
         distroseries=list(recipe.distroseries)[0],
         pocket=PackagePublishingPocket.RELEASE,
         date_created=datetime.now(utc) - timedelta(hours=8),
         status=BuildStatus.FULLYBUILT)
     daily_builds = SourcePackageRecipeBuild.makeDailyBuilds()
     actual_title = [b.title for b in daily_builds]
     self.assertEquals([build.title], actual_title)
コード例 #11
0
    def test_makeDailyBuilds_skips_disabled_archive(self):
        # If the recipe's daily build archive is disabled, makeDailyBuilds()
        # won't create a build.
        owner = self.factory.makePerson(name='eric')
        recipe = self.factory.makeSourcePackageRecipe(
            owner=owner, name=u'funky-recipe', build_daily=True,
            is_stale=True)
        archive = self.factory.makeArchive(owner=recipe.owner, name="ppa")
        removeSecurityProxy(recipe).daily_build_archive = archive
        removeSecurityProxy(archive).disable()

        logger = BufferLogger()
        daily_builds = SourcePackageRecipeBuild.makeDailyBuilds(logger)
        self.assertEqual([], daily_builds)
        self.assertEqual(
            'DEBUG Recipe eric/funky-recipe is stale\n'
            'DEBUG  - daily build failed for Warty (4.10): ' +
            "ArchiveDisabled(u'PPA for Eric is disabled.',)\n",
            logger.getLogBuffer())
コード例 #12
0
    def test_makeDailyBuilds_skips_archive_with_no_permission(self):
        # If the recipe's daily build archive cannot be uploaded to due to
        # insufficient permissions, makeDailyBuilds() won't create a build.
        owner = self.factory.makePerson(name='eric')
        recipe = self.factory.makeSourcePackageRecipe(
            owner=owner, name=u'funky-recipe', build_daily=True,
            is_stale=True)
        archive = self.factory.makeArchive(name="ppa")
        removeSecurityProxy(recipe).daily_build_archive = archive

        logger = BufferLogger()
        daily_builds = SourcePackageRecipeBuild.makeDailyBuilds(logger)
        self.assertEqual([], daily_builds)
        self.assertEqual(
            'DEBUG Recipe eric/funky-recipe is stale\n'
            'DEBUG  - daily build failed for Warty (4.10): '
            "CannotUploadToPPA('Signer has no upload rights "
            "to this PPA.',)\n",
            logger.getLogBuffer())
コード例 #13
0
    def test_makeDailyBuilds_skips_builds_already_queued(self):
        # If the recipe already has an identical build pending,
        # makeDailyBuilds() won't create a build.
        owner = self.factory.makePerson(name='eric')
        recipe = self.factory.makeSourcePackageRecipe(
            owner=owner, name=u'funky-recipe', build_daily=True,
            is_stale=True)
        series = list(recipe.distroseries)[0]
        self.factory.makeSourcePackageRecipeBuild(
            recipe=recipe, archive=recipe.daily_build_archive,
            requester=recipe.owner, distroseries=series,
            pocket=PackagePublishingPocket.RELEASE,
            date_created=datetime.now(utc) - timedelta(hours=24, seconds=1))
        removeSecurityProxy(recipe).is_stale = True

        logger = BufferLogger()
        daily_builds = SourcePackageRecipeBuild.makeDailyBuilds(logger)
        self.assertEqual([], daily_builds)
        self.assertEqual(
            'DEBUG Recipe eric/funky-recipe is stale\n'
            'DEBUG  - build already pending for Warty (4.10)\n',
            logger.getLogBuffer())
コード例 #14
0
 def isOverQuota(self, requester, distroseries):
     """See `ISourcePackageRecipe`."""
     return SourcePackageRecipeBuild.getRecentBuilds(
         requester, self, distroseries).count() >= 5
コード例 #15
0
 def test_getByID(self):
     job = self.makeJob()
     transaction.commit()
     self.assertEquals(job.build, SourcePackageRecipeBuild.getByID(job.build.id))
コード例 #16
0
 def preloadJobsData(cls, jobs):
     load_related(Job, jobs, ['job_id'])
     builds = load_related(
         SourcePackageRecipeBuild, jobs, ['build_id'])
     SourcePackageRecipeBuild.preloadBuildsData(builds)
コード例 #17
0
 def test_getByBuildFarmJobs_empty(self):
     self.assertContentEqual(
         [],
         SourcePackageRecipeBuild.getByBuildFarmJobs([]))
コード例 #18
0
 def preloadJobsData(cls, jobs):
     load_related(Job, jobs, ['job_id'])
     builds = load_related(SourcePackageRecipeBuild, jobs, ['build_id'])
     SourcePackageRecipeBuild.preloadBuildsData(builds)
コード例 #19
0
 def test_getByBuildFarmJob(self):
     sprb = self.makeSourcePackageRecipeBuild()
     Store.of(sprb).flush()
     self.assertEqual(
         sprb,
         SourcePackageRecipeBuild.getByBuildFarmJob(sprb.build_farm_job))
コード例 #20
0
 def get_recent():
     Store.of(build).flush()
     return SourcePackageRecipeBuild.getRecentBuilds(
         requester, recipe, series, _now=now)
コード例 #21
0
 def isOverQuota(self, requester, distroseries):
     """See `ISourcePackageRecipe`."""
     return SourcePackageRecipeBuild.getRecentBuilds(
         requester, self, distroseries).count() >= 5
コード例 #22
0
 def test_getByID(self):
     job = self.makeJob()
     transaction.commit()
     self.assertEquals(job.build,
                       SourcePackageRecipeBuild.getByID(job.build.id))
コード例 #23
0
 def test_makeDailyBuilds(self):
     self.assertEqual([], SourcePackageRecipeBuild.makeDailyBuilds())
     recipe = self.factory.makeSourcePackageRecipe(build_daily=True)
     [build] = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEqual(recipe, build.recipe)
     self.assertEqual(list(recipe.distroseries), [build.distroseries])
コード例 #24
0
 def test_makeDailyBuilds_clears_is_stale(self):
     recipe = self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=True)
     SourcePackageRecipeBuild.makeDailyBuilds()[0]
     self.assertFalse(recipe.is_stale)
コード例 #25
0
 def test_makeDailyBuilds_skips_non_stale_builds(self):
     # If the recipe isn't stale, makeDailyBuilds() won't create a build.
     self.factory.makeSourcePackageRecipe(
         build_daily=True, is_stale=False)
     daily_builds = SourcePackageRecipeBuild.makeDailyBuilds()
     self.assertEqual([], daily_builds)