Exemple #1
0
    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)
Exemple #2
0
 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)
Exemple #4
0
    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)
Exemple #5
0
 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()
Exemple #6
0
    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()
Exemple #7
0
    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))
Exemple #8
0
    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
Exemple #9
0
        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
Exemple #10
0
 def test_addStep(self):
     step = BuildStep()
     factory = BuildFactory()
     factory.addStep(step)
     self.assertEqual(factory.steps, [(BuildStep, {})])
Exemple #11
0
 def test_init(self):
     step = BuildStep()
     factory = BuildFactory([step])
     self.assertEqual(factory.steps, [(BuildStep, {})])
Exemple #12
0
    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
Exemple #13
0
 def test_addSteps(self):
     self.factory.addSteps([BuildStep(), BuildStep()])
     self.assertEqual(
         self.factory.steps[-2:],
         [_BuildStepFactory(BuildStep),
          _BuildStepFactory(BuildStep)])
Exemple #14
0
 def test_init(self):
     step = BuildStep()
     self.factory = BuildFactory([step])
     self.assertEqual(self.factory.steps, [_BuildStepFactory(BuildStep)])
Exemple #15
0
    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
Exemple #16
0
 def test_addStep_ArgumentsInTheWrongPlace(self):
     factory = BuildFactory()
     self.assertRaises(ArgumentsInTheWrongPlace,
                       factory.addStep,
                       BuildStep(),
                       name="name")
Exemple #17
0
 def test_addSteps(self):
     factory = BuildFactory()
     factory.addSteps([BuildStep(), BuildStep()])
     self.assertEqual(factory.steps, [(BuildStep, {}), (BuildStep, {})])
Exemple #18
0
 def setUp(self):
     self.factory = GNUAutoconf(source=BuildStep())