def test_init_reconf(self): # test reconf = True self.factory = GNUAutoconf(source=BuildStep(), reconf=True) self.test_init() reconfPresent = False selfreconfPresent = False for step in self.factory.steps: try: if step.buildStep().command[0] == 'autoreconf': reconfPresent = True except (AttributeError, KeyError): pass self.assertTrue(reconfPresent) # test setting your own reconfiguration step self.factory = GNUAutoconf(source=BuildStep(), reconf=['notsoautoreconf']) self.test_init() for step in self.factory.steps: try: if step.buildStep().command == ['notsoautoreconf']: selfreconfPresent = True except (AttributeError, KeyError): pass self.assertTrue(selfreconfPresent)
def test_addSteps(self): factory = BuildFactory() factory.addSteps([BuildStep(), BuildStep()]) self.assertEqual( factory.steps, [_BuildStepFactory(BuildStep), _BuildStepFactory(BuildStep)])
def test_getSummaryStatistic(self): b = self.build b.executedSteps = [BuildStep(), BuildStep(), BuildStep()] b.executedSteps[0].setStatistic('casualties', 7) b.executedSteps[2].setStatistic('casualties', 4) add = operator.add self.assertEqual(b.getSummaryStatistic('casualties', add), 11) self.assertEqual(b.getSummaryStatistic('casualties', add, 10), 21)
def testStopBuildWaitingForStepLocks(self): b = self.build lock = WorkerLock('lock') lock_access = lock.access('counting') lock.access = lambda mode: lock_access real_workerlock = yield b.builder.botmaster.getLockByID(lock, 0) real_lock = real_workerlock.getLockForWorker(self.workerforbuilder.worker.workername) step = BuildStep(locks=[lock_access]) b.setStepFactories([FakeStepFactory(step)]) real_lock.claim(Mock(), lock.access('counting')) gotLocks = [False] def acquireLocks(res=None): gotLocks[0] = True retval = BuildStep.acquireLocks(step, res) self.assertTrue(b.currentStep is step) b.stopBuild('stop it') return retval step.acquireLocks = acquireLocks b.startBuild(self.workerforbuilder) self.assertEqual(gotLocks, [True]) self.assertEqual(b.results, CANCELLED)
def test_addStep_ArgumentsInTheWrongPlace(self): self.assertRaises(TypeError, self.factory.addStep, BuildStep(), name="name") # this also raises a deprecation error, which we don't care about (see # test_s) self.flushWarnings()
def setUp(self): config = """ from buildbot.status import html from buildbot.process.factory import BasicBuildFactory from buildbot.buildslave import BuildSlave f1 = BasicBuildFactory('cvsroot', 'cvsmodule') BuildmasterConfig = { 'slaves': [BuildSlave('bot1', 'passwd1')], 'schedulers': [], 'builders': [{'name': 'builder1', 'slavename': 'bot1', 'builddir':'workdir', 'factory':f1}], 'slavePortnum': 0, 'status': [html.WebStatus(http_port=0)], } """ if os.path.exists("test_logfile"): shutil.rmtree("test_logfile") os.mkdir("test_logfile") self.master = m = ConfiguredMaster("test_logfile", config) m.startService() # hack to find out what randomly-assigned port it is listening on port = self.find_webstatus(m).getPortnum() self.port = port # insert an event req = base.BuildRequest("reason", sourcestamp.SourceStamp()) build1 = base.Build([req]) bs = m.status.getBuilder("builder1").newBuild() bs.setReason("reason") bs.buildStarted(build1) step1 = BuildStep(name="setup") step1.setBuild(build1) bss = bs.addStepWithName("setup") step1.setStepStatus(bss) bss.stepStarted() log1 = step1.addLog("output") log1.addStdout("some stdout\n") log1.finish() log2 = step1.addHTMLLog("error", "<html>ouch</html>") log3 = step1.addLog("big") log3.addStdout("big log\n") for i in range(1000): log3.addStdout("a" * 500) log3.addStderr("b" * 500) log3.finish() log4 = step1.addCompleteLog("bigcomplete", "big2 log\n" + "a" * 1 * 1000 * 1000) step1.step_status.stepFinished(builder.SUCCESS) bs.buildFinished()
def test_addStep(self): # create a string random string that will probably not collide # with what is already in the factory string = ''.join(choice(ascii_uppercase) for x in range(6)) length = len(self.factory.steps) step = BuildStep(name=string) self.factory.addStep(step) # check if the number of nodes grew by one self.assertTrue(length + 1, len(self.factory.steps)) # check if the 'right' node added in the factory self.assertEqual(self.factory.steps[-1], _BuildStepFactory(BuildStep, name=string))
def test_init_none(self): """Default steps can be uninitialized by setting None""" self.factory = GNUAutoconf(source=BuildStep(), compile=None, test=None, distcheck=None) for step in self.factory.steps: try: cmd = step.buildStep().command self.assertNotIn(cmd, [['make', 'all'], ['make', 'check'], ['make', 'distcheck']], f"Build step {cmd} should not be present.") except (AttributeError, KeyError): pass
def _started(ign): # hack to find out what randomly-assigned port it is listening on port = self.find_webstatus(m).getPortnum() self.port = port # insert an event req = BuildRequest("reason", sourcestamp.SourceStamp(), 'test_builder') build1 = base.Build([req]) bs = m.status.getBuilder("builder1").newBuild() bs.setReason("reason") bs.buildStarted(build1) step1 = BuildStep(name="setup") step1.setBuild(build1) bss = bs.addStepWithName("setup") step1.setStepStatus(bss) bss.stepStarted() log1 = step1.addLog("output") log1.addStdout(u"s\N{LATIN CAPITAL LETTER O WITH GRAVE}me stdout\n".encode("utf-8")) log1.finish() log2 = step1.addHTMLLog("error", "<html>ouch</html>") del log2 log3 = step1.addLog("big") log3.addStdout("big log\n") for i in range(1000): log3.addStdout("a" * 500) log3.addStderr("b" * 500) log3.finish() log4 = step1.addCompleteLog("bigcomplete", "big2 log\n" + "a" * 1*1000*1000) del log4 log5 = step1.addLog("mixed") log5.addHeader("header content") log5.addStdout("this is stdout content") log5.addStderr("errors go here") log5.addEntry(5, "non-standard content on channel 5") log5.addStderr(" and some trailing stderr") d1 = defer.maybeDeferred(step1.step_status.stepFinished, builder.SUCCESS) bs.buildFinished() return d1
def test_addStep(self): step = BuildStep() factory = BuildFactory() factory.addStep(step) self.assertEqual(factory.steps, [(BuildStep, {})])
def test_init(self): step = BuildStep() factory = BuildFactory([step]) self.assertEqual(factory.steps, [(BuildStep, {})])
def setUp(self): config = """ from buildbot.status import html from buildbot.process.factory import BasicBuildFactory from buildbot.buildslave import BuildSlave from buildbot.config import BuilderConfig f1 = BasicBuildFactory('cvsroot', 'cvsmodule') BuildmasterConfig = c = { 'slaves': [BuildSlave('bot1', 'passwd1')], 'schedulers': [], 'slavePortnum': 0, 'status': [html.WebStatus(http_port=0)], } c['builders'] = [ BuilderConfig(name='builder1', slavename='bot1', factory=f1), ] """ if os.path.exists("test_logfile"): shutil.rmtree("test_logfile") os.mkdir("test_logfile") self.master = m = ConfiguredMaster("test_logfile", config) m.startService() # hack to find out what randomly-assigned port it is listening on port = self.find_webstatus(m).getPortnum() self.port = port # insert an event req = base.BuildRequest("reason", sourcestamp.SourceStamp(), 'test_builder') build1 = base.Build([req]) bs = m.status.getBuilder("builder1").newBuild() bs.setReason("reason") bs.buildStarted(build1) step1 = BuildStep(name="setup") step1.setBuild(build1) bss = bs.addStepWithName("setup") step1.setStepStatus(bss) bss.stepStarted() log1 = step1.addLog("output") log1.addStdout(u"sÒme stdout\n") log1.finish() log2 = step1.addHTMLLog("error", "<html>ouch</html>") log3 = step1.addLog("big") log3.addStdout("big log\n") for i in range(1000): log3.addStdout("a" * 500) log3.addStderr("b" * 500) log3.finish() log4 = step1.addCompleteLog("bigcomplete", "big2 log\n" + "a" * 1 * 1000 * 1000) log5 = step1.addLog("mixed") log5.addHeader("header content") log5.addStdout("this is stdout content") log5.addStderr("errors go here") log5.addEntry(5, "non-standard content on channel 5") log5.addStderr(" and some trailing stderr") d = defer.maybeDeferred(step1.step_status.stepFinished, builder.SUCCESS) bs.buildFinished() return d
def test_addSteps(self): self.factory.addSteps([BuildStep(), BuildStep()]) self.assertEqual( self.factory.steps[-2:], [_BuildStepFactory(BuildStep), _BuildStepFactory(BuildStep)])
def test_init(self): step = BuildStep() self.factory = BuildFactory([step]) self.assertEqual(self.factory.steps, [_BuildStepFactory(BuildStep)])
def create_status(self): for i in range(5): if i % 2 == 0: branch = "release" else: branch = None c = Change("user", ["foo.c"] * i, "see ticket #%i" % i, revision=str(42 + i), when=0.1 * i, branch=branch) self.master.change_svc.addChange(c) ss = sourcestamp.SourceStamp(revision=42) req = BuildRequest("reason", ss, 'test_builder') build1 = base.Build([req]) bs = self.master.status.getBuilder("builder1").newBuild() bs.setReason("reason") bs.buildStarted(build1) bs.setSourceStamp(ss) bs.setProperty("revision", "42", "testcase") bs.setProperty("got_revision", "47", "testcase") bs.setProperty("branch", "release", "testcase") step1 = BuildStep(name="setup") step1.setBuild(build1) bss = bs.addStepWithName("setup") step1.setStepStatus(bss) bss.stepStarted() step2 = BuildStep(name="build") step2.setBuild(build1) bss = bs.addStepWithName("build") step2.setStepStatus(bss) bss.stepStarted() step1.addURL("url1", "http://logurl.net/1") step1.addURL("url2", "http://logurl.net/2") step1.addURL("url3", "http://logurl.net/3") log1 = step1.addLog("output") log1.addStdout( u"some stdout\n") # FIXME: Unicode here fails validation log1.finish() # this has to validate too for the test to pass log2 = step1.addHTMLLog( "error", ''' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head><title>Teh Log</title></head> <body>Aaaiight</body> </html>''') del log2 log3 = step1.addLog("big") log3.addStdout("somewhat big log\n") for i in range(50): log3.addStdout("a" * 50 + "\n") log3.addStderr("b" * 50 + "\n") log3.finish() log5 = step1.addLog("mixed") log5.addHeader("header content") log5.addStdout("this is stdout content") log5.addStderr("errors go here") log5.addEntry(5, "non-standard content on channel 5") log5.addStderr(" and some trailing stderr") d = defer.succeed(None) for i in range(1, 3): ss = sourcestamp.SourceStamp(revision=42 + i, branch='release') req = BuildRequest("reason", ss, 'test_builder') build = base.Build([req] * i) bs = self.master.status.getBuilder("builder%i" % i).newBuild() bs.setReason("reason") bs.buildStarted(build) bs.setSourceStamp(ss) s = BuildStep(name="setup") s.setBuild(build1) bss = bs.addStepWithName("setup") s.setStepStatus(bss) bss.stepStarted() log = s.addLog("stdio") log.finish() d.chainDeferred( defer.maybeDeferred(step1.step_status.stepFinished, builder.SUCCESS)) bs.buildFinished() return d
def test_addStep_ArgumentsInTheWrongPlace(self): factory = BuildFactory() self.assertRaises(ArgumentsInTheWrongPlace, factory.addStep, BuildStep(), name="name")
def test_addSteps(self): factory = BuildFactory() factory.addSteps([BuildStep(), BuildStep()]) self.assertEqual(factory.steps, [(BuildStep, {}), (BuildStep, {})])
def setUp(self): self.factory = GNUAutoconf(source=BuildStep())