def test_dispatchBuildToSlave(self): # Ensure dispatchBuildToSlave will make the right calls to the slave job = self.makeJob() test_publisher = SoyuzTestPublisher() test_publisher.addFakeChroots(job.build.distroseries) slave = OkSlave() builder = MockBuilder("bob-de-bouwer") builder.processor = getUtility(IProcessorSet).getByName("386") job.setBuilder(builder, slave) logger = BufferLogger() d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger) def check_dispatch(ignored): self.assertThat( logger.getLogBuffer(), StartsWith( dedent( """\ INFO Sending chroot file for recipe build to bob-de-bouwer INFO Initiating build 1-someid on http://fake:0000 """ ) ), ) self.assertEquals(["ensurepresent", "build"], [call[0] for call in slave.call_log]) build_args = slave.call_log[1][1:] self.assertEquals(build_args[0], job.getBuildCookie()) self.assertEquals(build_args[1], "sourcepackagerecipe") self.assertEquals(build_args[3], []) distroarchseries = job.build.distroseries.architectures[0] self.assertEqual(build_args[4], job._extraBuildArgs(distroarchseries)) return d.addCallback(check_dispatch)
def makeJob(self, archive=None, pocket=PackagePublishingPocket.RELEASE, with_builder=False, **kwargs): """Create a sample `ILiveFSBuildBehaviour`.""" if archive is None: distribution = self.factory.makeDistribution(name="distro") else: distribution = archive.distribution distroseries = self.factory.makeDistroSeries(distribution=distribution, name="unstable") processor = getUtility(IProcessorSet).getByName("386") distroarchseries = self.factory.makeDistroArchSeries( distroseries=distroseries, architecturetag="i386", processor=processor) build = self.factory.makeLiveFSBuild(archive=archive, distroarchseries=distroarchseries, pocket=pocket, name="test-livefs", **kwargs) job = IBuildFarmJobBehaviour(build) if with_builder: builder = MockBuilder() builder.processor = processor job.setBuilder(builder, None) return job
def test_dispatchBuildToSlave(self): # Ensure dispatchBuildToSlave will make the right calls to the slave job = self.makeJob() test_publisher = SoyuzTestPublisher() test_publisher.addFakeChroots(job.build.distroseries) slave = OkSlave() builder = MockBuilder("bob-de-bouwer") builder.processor = getUtility(IProcessorSet).getByName('386') job.setBuilder(builder, slave) logger = BufferLogger() d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger) def check_dispatch(ignored): self.assertThat( logger.getLogBuffer(), StartsWith( dedent("""\ INFO Sending chroot file for recipe build to bob-de-bouwer INFO Initiating build 1-someid on http://fake:0000 """))) self.assertEquals(["ensurepresent", "build"], [call[0] for call in slave.call_log]) build_args = slave.call_log[1][1:] self.assertEquals(build_args[0], job.getBuildCookie()) self.assertEquals(build_args[1], "sourcepackagerecipe") self.assertEquals(build_args[3], []) distroarchseries = job.build.distroseries.architectures[0] self.assertEqual(build_args[4], job._extraBuildArgs(distroarchseries)) return d.addCallback(check_dispatch)
def makeJob(self, **kwargs): # We need a builder slave in these tests, in order that requesting a # proxy token can piggyback on its reactor and pool. job = super(TestAsyncSnapBuildBehaviour, self).makeJob(**kwargs) builder = MockBuilder() builder.processor = job.build.processor slave = self.useFixture(SlaveTestHelpers()).getClientSlave() job.setBuilder(builder, slave) self.addCleanup(slave.pool.closeCachedConnections) return job
def test_dispatchBuildToSlave_nochroot(self): # dispatchBuildToSlave will fail when there is not chroot tarball # available for the distroseries to build for. job = self.makeJob() # test_publisher = SoyuzTestPublisher() builder = MockBuilder("bob-de-bouwer") builder.processor = getUtility(IProcessorSet).getByName("386") job.setBuilder(builder, OkSlave()) logger = BufferLogger() d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger) return assert_fails_with(d, CannotBuild)
def test_dispatchBuildToSlave_nochroot(self): # dispatchBuildToSlave will fail when there is not chroot tarball # available for the distroseries to build for. job = self.makeJob() #test_publisher = SoyuzTestPublisher() builder = MockBuilder("bob-de-bouwer") builder.processor = getUtility(IProcessorSet).getByName('386') job.setBuilder(builder, OkSlave()) logger = BufferLogger() d = defer.maybeDeferred(job.dispatchBuildToSlave, "someid", logger) return assert_fails_with(d, CannotBuild)
def test_dispatchBuildToSlave_falls_back_to_chroot(self): job = self.makeJob(allow_internet=False) builder = MockBuilder() builder.processor = job.build.processor slave = OkSlave() job.setBuilder(builder, slave) chroot_lfa = self.factory.makeLibraryFileAlias(db_only=True) job.build.distro_arch_series.addOrUpdateChroot( chroot_lfa, image_type=BuildBaseImageType.CHROOT) yield job.dispatchBuildToSlave(DevNullLogger()) self.assertEqual(('ensurepresent', chroot_lfa.http_url, '', ''), slave.call_log[0])
def makeJob(self, recipe_registrant=None, recipe_owner=None, archive=None, git=False, with_builder=False): """Create a sample `ISourcePackageRecipeBuild`.""" spn = self.factory.makeSourcePackageName("apackage") if archive is None: distro = self.factory.makeDistribution(name="distro") else: distro = archive.distribution distroseries = self.factory.makeDistroSeries( name="mydistro", distribution=distro) processor = getUtility(IProcessorSet).getByName('386') distroseries.nominatedarchindep = distroseries.newArch( 'i386', processor, True, self.factory.makePerson()) sourcepackage = self.factory.makeSourcePackage(spn, distroseries) if recipe_registrant is None: recipe_registrant = self.factory.makePerson( email="*****@*****.**", name="joe", displayname="Joe User") if recipe_owner is None: recipe_owner = recipe_registrant if git: [somebranch] = self.factory.makeGitRefs( owner=recipe_owner, name="pkg", target=self.factory.makeProduct("someapp"), paths=["refs/heads/packaging"]) else: somebranch = self.factory.makeBranch( owner=recipe_owner, name="pkg", product=self.factory.makeProduct("someapp")) recipe = self.factory.makeSourcePackageRecipe( recipe_registrant, recipe_owner, distroseries, "recept", "Recipe description", branches=[somebranch]) spb = self.factory.makeSourcePackageRecipeBuild( sourcepackage=sourcepackage, archive=archive, recipe=recipe, requester=recipe_owner, distroseries=distroseries) job = IBuildFarmJobBehaviour(spb) if with_builder: builder = MockBuilder() builder.processor = processor job.setBuilder(builder, None) return job