Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: third_party/buildbot_7_12/buildbot/test/test_steps.py

Issue 12207158: Bye bye buildbot 0.7.12. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/buildbot_7_12/buildbot/test/test_steps.py
diff --git a/third_party/buildbot_7_12/buildbot/test/test_steps.py b/third_party/buildbot_7_12/buildbot/test/test_steps.py
deleted file mode 100644
index 353b4562a095ad9b2c431ec63d08a40005e60920..0000000000000000000000000000000000000000
--- a/third_party/buildbot_7_12/buildbot/test/test_steps.py
+++ /dev/null
@@ -1,955 +0,0 @@
-# -*- test-case-name: buildbot.test.test_steps -*-
-
-# create the BuildStep with a fake .remote instance that logs the
-# .callRemote invocations and compares them against the expected calls. Then
-# the test harness should send statusUpdate() messages in with assorted
-# data, eventually calling remote_complete(). Then we can verify that the
-# Step's rc was correct, and that the status it was supposed to return
-# matches.
-
-# sometimes, .callRemote should raise an exception because of a stale
-# reference. Sometimes it should errBack with an UnknownCommand failure.
-# Or other failure.
-
-# todo: test batched updates, by invoking remote_update(updates) instead of
-# statusUpdate(update). Also involves interrupted builds.
-
-import sys
-import os
-
-from twisted.trial import unittest
-from twisted.internet import reactor, defer
-
-from buildbot.sourcestamp import SourceStamp
-from buildbot.process import buildstep, base, factory
-from buildbot.process.properties import Properties, WithProperties
-from buildbot.buildslave import BuildSlave
-from buildbot.steps import shell, source, python, master
-from buildbot.status import builder
-from buildbot.status.builder import SUCCESS, WARNINGS, FAILURE, SKIPPED
-from buildbot.test.runutils import RunMixin, rmtree
-from buildbot.test.runutils import makeBuildStep, StepTester
-from buildbot.slave import commands, registry
-
-
-class MyShellCommand(shell.ShellCommand):
- started = False
- def runCommand(self, c):
- self.started = True
- self.rc = c
- return shell.ShellCommand.runCommand(self, c)
-
-class FakeBuild:
- pass
-class FakeBuilder:
- statusbag = None
- name = "fakebuilder"
-class FakeSlaveBuilder:
- def getSlaveCommandVersion(self, command, oldversion=None):
- return "1.10"
-
-class FakeRemote:
- def __init__(self):
- self.events = []
- self.remoteCalls = 0
- #self.callRemoteNotifier = None
- def callRemote(self, methname, *args):
- event = ["callRemote", methname, args]
- self.events.append(event)
-## if self.callRemoteNotifier:
-## reactor.callLater(0, self.callRemoteNotifier, event)
- self.remoteCalls += 1
- self.deferred = defer.Deferred()
- return self.deferred
- def notifyOnDisconnect(self, callback):
- pass
- def dontNotifyOnDisconnect(self, callback):
- pass
-
-
-class BuildStep(unittest.TestCase):
-
- def setUp(self):
- rmtree("test_steps")
- self.builder = FakeBuilder()
- self.builder_status = builder.BuilderStatus("fakebuilder")
- self.builder_status.basedir = "test_steps"
- self.builder_status.nextBuildNumber = 0
- os.mkdir(self.builder_status.basedir)
- self.build_status = self.builder_status.newBuild()
- req = base.BuildRequest("reason", SourceStamp(), 'test_builder')
- self.build = base.Build([req])
- self.build.build_status = self.build_status # fake it
- self.build.builder = self.builder
- self.build.slavebuilder = FakeSlaveBuilder()
- self.remote = FakeRemote()
- self.finished = 0
-
- def callback(self, results):
- self.failed = 0
- self.failure = None
- self.results = results
- self.finished = 1
- def errback(self, failure):
- self.failed = 1
- self.failure = failure
- self.results = None
- self.finished = 1
-
- def testShellCommand1(self):
- cmd = "argle bargle"
- dir = "murkle"
- self.expectedEvents = []
- buildstep.RemoteCommand.commandCounter[0] = 3
- c = MyShellCommand(workdir=dir, command=cmd, timeout=10)
- c.setBuild(self.build)
- c.setBuildSlave(BuildSlave("name", "password"))
- self.assertEqual(self.remote.events, self.expectedEvents)
- c.step_status = self.build_status.addStepWithName("myshellcommand")
- d = c.startStep(self.remote)
- self.failUnless(c.started)
- d.addCallbacks(self.callback, self.errback)
- d2 = self.poll()
- d2.addCallback(self._testShellCommand1_2, c)
- return d2
- testShellCommand1.timeout = 10
-
- def poll(self, ignored=None):
- # TODO: This is gross, but at least it's no longer using
- # reactor.iterate() . Still, get rid of this some day soon.
- if self.remote.remoteCalls == 0:
- d = defer.Deferred()
- d.addCallback(self.poll)
- reactor.callLater(0.1, d.callback, None)
- return d
- return defer.succeed(None)
-
- def _testShellCommand1_2(self, res, c):
- rc = c.rc
- self.expectedEvents.append(["callRemote", "startCommand",
- (rc, "3",
- "shell",
- {'command': "argle bargle",
- 'workdir': "murkle",
- 'logEnviron' : True,
- 'want_stdout': 1,
- 'want_stderr': 1,
- 'logfiles': {},
- 'timeout': 10,
- 'maxTime': None,
- 'usePTY': 'slave-config',
- 'env': None}) ] )
- self.assertEqual(self.remote.events, self.expectedEvents)
-
- # we could do self.remote.deferred.errback(UnknownCommand) here. We
- # could also do .callback(), but generally the master end silently
- # ignores the slave's ack
-
- logs = c.step_status.getLogs()
- for log in logs:
- if log.getName() == "log":
- break
-
- rc.remoteUpdate({'header':
- "command 'argle bargle' in dir 'murkle'\n\n"})
- rc.remoteUpdate({'stdout': "foo\n"})
- self.assertEqual(log.getText(), "foo\n")
- self.assertEqual(log.getTextWithHeaders(),
- "command 'argle bargle' in dir 'murkle'\n\n"
- "foo\n")
- rc.remoteUpdate({'stderr': "bar\n"})
- self.assertEqual(log.getText(), "foo\nbar\n")
- self.assertEqual(log.getTextWithHeaders(),
- "command 'argle bargle' in dir 'murkle'\n\n"
- "foo\nbar\n")
- rc.remoteUpdate({'rc': 0})
- self.assertEqual(rc.rc, 0)
-
- rc.remote_complete()
- # that should fire the Deferred
- d = self.poll2()
- d.addCallback(self._testShellCommand1_3)
- return d
-
- def poll2(self, ignored=None):
- if not self.finished:
- d = defer.Deferred()
- d.addCallback(self.poll2)
- reactor.callLater(0.1, d.callback, None)
- return d
- return defer.succeed(None)
-
- def _testShellCommand1_3(self, res):
- self.assertEqual(self.failed, 0)
- self.assertEqual(self.results, 0)
-
-
-class MyObserver(buildstep.LogObserver):
- out = ""
- def outReceived(self, data):
- self.out = self.out + data
-
-class Steps(unittest.TestCase):
- def testMultipleStepInstances(self):
- steps = [
- (source.CVS, {'cvsroot': "root", 'cvsmodule': "module"}),
- (shell.Configure, {'command': "./configure"}),
- (shell.Compile, {'command': "make"}),
- (shell.Compile, {'command': "make more"}),
- (shell.Compile, {'command': "make evenmore"}),
- (shell.Test, {'command': "make test"}),
- (shell.Test, {'command': "make testharder"}),
- ]
- f = factory.ConfigurableBuildFactory(steps)
- req = base.BuildRequest("reason", SourceStamp(), 'test_builder')
- b = f.newBuild([req])
- #for s in b.steps: print s.name
-
- def failUnlessClones(self, s1, attrnames):
- f1 = s1.getStepFactory()
- f,args = f1
- s2 = f(**args)
- for name in attrnames:
- self.failUnlessEqual(getattr(s1, name), getattr(s2, name))
-
- def clone(self, s1):
- f1 = s1.getStepFactory()
- f,args = f1
- s2 = f(**args)
- return s2
-
- def testClone(self):
- s1 = shell.ShellCommand(command=["make", "test"],
- timeout=1234,
- workdir="here",
- description="yo",
- descriptionDone="yoyo",
- env={'key': 'value'},
- want_stdout=False,
- want_stderr=False,
- logfiles={"name": "filename"},
- )
- shellparms = (buildstep.BuildStep.parms +
- ("remote_kwargs description descriptionDone "
- "command logfiles").split() )
- self.failUnlessClones(s1, shellparms)
-
-
- # test the various methods available to buildsteps
-
- def test_getProperty(self):
- s = makeBuildStep("test_steps.Steps.test_getProperty")
- bs = s.step_status.getBuild()
-
- s.setProperty("prop1", "value1", "test")
- s.setProperty("prop2", "value2", "test")
- self.failUnlessEqual(s.getProperty("prop1"), "value1")
- self.failUnlessEqual(bs.getProperty("prop1"), "value1")
- self.failUnlessEqual(s.getProperty("prop2"), "value2")
- self.failUnlessEqual(bs.getProperty("prop2"), "value2")
- s.setProperty("prop1", "value1a", "test")
- self.failUnlessEqual(s.getProperty("prop1"), "value1a")
- self.failUnlessEqual(bs.getProperty("prop1"), "value1a")
-
-
- def test_addURL(self):
- s = makeBuildStep("test_steps.Steps.test_addURL")
- s.addURL("coverage", "http://coverage.example.org/target")
- s.addURL("icon", "http://coverage.example.org/icon.png")
- bs = s.step_status
- links = bs.getURLs()
- expected = {"coverage": "http://coverage.example.org/target",
- "icon": "http://coverage.example.org/icon.png",
- }
- self.failUnlessEqual(links, expected)
-
- def test_addLog(self):
- s = makeBuildStep("test_steps.Steps.test_addLog")
- l = s.addLog("newlog")
- l.addStdout("some stdout here")
- l.finish()
- bs = s.step_status
- logs = bs.getLogs()
- self.failUnlessEqual(len(logs), 1)
- l1 = logs[0]
- self.failUnlessEqual(l1.getText(), "some stdout here")
- l1a = s.getLog("newlog")
- self.failUnlessEqual(l1a.getText(), "some stdout here")
-
- def test_addHTMLLog(self):
- s = makeBuildStep("test_steps.Steps.test_addHTMLLog")
- l = s.addHTMLLog("newlog", "some html here")
- bs = s.step_status
- logs = bs.getLogs()
- self.failUnlessEqual(len(logs), 1)
- l1 = logs[0]
- self.failUnless(isinstance(l1, builder.HTMLLogFile))
- self.failUnlessEqual(l1.getText(), "some html here")
-
- def test_addCompleteLog(self):
- s = makeBuildStep("test_steps.Steps.test_addCompleteLog")
- l = s.addCompleteLog("newlog", "some stdout here")
- bs = s.step_status
- logs = bs.getLogs()
- self.failUnlessEqual(len(logs), 1)
- l1 = logs[0]
- self.failUnlessEqual(l1.getText(), "some stdout here")
- l1a = s.getLog("newlog")
- self.failUnlessEqual(l1a.getText(), "some stdout here")
-
- def test_addLogObserver(self):
- s = makeBuildStep("test_steps.Steps.test_addLogObserver")
- bss = s.step_status
- o1,o2,o3 = MyObserver(), MyObserver(), MyObserver()
-
- # add the log before the observer
- l1 = s.addLog("one")
- l1.addStdout("onestuff")
- s.addLogObserver("one", o1)
- self.failUnlessEqual(o1.out, "onestuff")
- l1.addStdout(" morestuff")
- self.failUnlessEqual(o1.out, "onestuff morestuff")
-
- # add the observer before the log
- s.addLogObserver("two", o2)
- l2 = s.addLog("two")
- l2.addStdout("twostuff")
- self.failUnlessEqual(o2.out, "twostuff")
-
- # test more stuff about ShellCommands
-
- def test_description(self):
- s = makeBuildStep("test_steps.Steps.test_description.1",
- step_class=shell.ShellCommand,
- workdir="dummy",
- description=["list", "of", "strings"],
- descriptionDone=["another", "list"])
- self.failUnlessEqual(s.description, ["list", "of", "strings"])
- self.failUnlessEqual(s.descriptionDone, ["another", "list"])
-
- s = makeBuildStep("test_steps.Steps.test_description.2",
- step_class=shell.ShellCommand,
- workdir="dummy",
- description="single string",
- descriptionDone="another string")
- self.failUnlessEqual(s.description, ["single string"])
- self.failUnlessEqual(s.descriptionDone, ["another string"])
-
-class VersionCheckingStep(buildstep.BuildStep):
- def start(self):
- # give our test a chance to run. It is non-trivial for a buildstep to
- # claw its way back out to the test case which is currently running.
- master = self.build.builder.botmaster.parent
- checker = master._checker
- checker(self)
- # then complete
- self.finished(buildstep.SUCCESS)
-
-version_config = """
-from buildbot.process import factory
-from buildbot.test.test_steps import VersionCheckingStep
-from buildbot.buildslave import BuildSlave
-from buildbot.config import BuilderConfig
-BuildmasterConfig = c = {}
-f1 = factory.BuildFactory([
- factory.s(VersionCheckingStep),
- ])
-c['slaves'] = [BuildSlave('bot1', 'sekrit')]
-c['schedulers'] = []
-c['builders'] = [
- BuilderConfig(name='quick', slavename='bot1', factory=f1,
- builddir='quickdir', slavebuilddir='quickslavedir'),
-]
-c['slavePortnum'] = 0
-"""
-
-class SlaveVersion(RunMixin, unittest.TestCase):
- def setUp(self):
- RunMixin.setUp(self)
- self.master.loadConfig(version_config)
- self.master.startService()
- d = self.connectSlave(["quick"])
- return d
-
- def doBuild(self, buildername):
- br = base.BuildRequest("forced", SourceStamp(), 'test_builder')
- d = br.waitUntilFinished()
- self.control.getBuilder(buildername).requestBuild(br)
- return d
-
-
- def checkCompare(self, s):
- cver = commands.command_version
- v = s.slaveVersion("svn", None)
- # this insures that we are getting the version correctly
- self.failUnlessEqual(s.slaveVersion("svn", None), cver)
- # and that non-existent commands do not provide a version
- self.failUnlessEqual(s.slaveVersion("NOSUCHCOMMAND"), None)
- # TODO: verify that a <=0.5.0 buildslave (which does not implement
- # remote_getCommands) handles oldversion= properly. This requires a
- # mutant slave which does not offer that method.
- #self.failUnlessEqual(s.slaveVersion("NOSUCHCOMMAND", "old"), "old")
-
- # now check the comparison functions
- self.failIf(s.slaveVersionIsOlderThan("svn", cver))
- self.failIf(s.slaveVersionIsOlderThan("svn", "1.1"))
- self.failUnless(s.slaveVersionIsOlderThan("svn", cver + ".1"))
-
- self.failUnlessEqual(s.getSlaveName(), "bot1")
-
- def testCompare(self):
- self.master._checker = self.checkCompare
- d = self.doBuild("quick")
- return d
-
-
-class _SimpleBuildStep(buildstep.BuildStep):
- def start(self):
- args = {"arg1": "value"}
- cmd = buildstep.RemoteCommand("simple", args)
- d = self.runCommand(cmd)
- d.addCallback(lambda res: self.finished(SUCCESS))
-
-class _SimpleCommand(commands.Command):
- def start(self):
- self.builder.flag = True
- self.builder.flag_args = self.args
- return defer.succeed(None)
-
-class CheckStepTester(StepTester, unittest.TestCase):
- def testSimple(self):
- self.slavebase = "testSimple.slave"
- self.masterbase = "testSimple.master"
- sb = self.makeSlaveBuilder()
- sb.flag = False
- registry.registerSlaveCommand("simple", _SimpleCommand, "1")
- step = self.makeStep(_SimpleBuildStep)
- d = self.runStep(step)
- def _checkSimple(results):
- self.failUnless(sb.flag)
- self.failUnlessEqual(sb.flag_args, {"arg1": "value"})
- d.addCallback(_checkSimple)
- return d
-
-class Python(StepTester, unittest.TestCase):
- def testPyFlakes1(self):
- self.masterbase = "Python.testPyFlakes1"
- step = self.makeStep(python.PyFlakes)
- output = \
-"""pyflakes buildbot
-buildbot/changes/freshcvsmail.py:5: 'FCMaildirSource' imported but unused
-buildbot/clients/debug.py:9: redefinition of unused 'gtk' from line 9
-buildbot/clients/debug.py:9: 'gnome' imported but unused
-buildbot/scripts/runner.py:323: redefinition of unused 'run' from line 321
-buildbot/scripts/runner.py:325: redefinition of unused 'run' from line 323
-buildbot/scripts/imaginary.py:12: undefined name 'size'
-buildbot/scripts/imaginary.py:18: 'from buildbot import *' used; unable to detect undefined names
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- desc = step.descriptionDone
- self.failUnless("unused=2" in desc)
- self.failUnless("undefined=1" in desc)
- self.failUnless("redefs=3" in desc)
- self.failUnless("import*=1" in desc)
- self.failIf("misc=" in desc)
-
- self.failUnlessEqual(step.getProperty("pyflakes-unused"), 2)
- self.failUnlessEqual(step.getProperty("pyflakes-undefined"), 1)
- self.failUnlessEqual(step.getProperty("pyflakes-redefs"), 3)
- self.failUnlessEqual(step.getProperty("pyflakes-import*"), 1)
- self.failUnlessEqual(step.getProperty("pyflakes-misc"), 0)
- self.failUnlessEqual(step.getProperty("pyflakes-total"), 7)
-
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
-
- for name in ["unused", "undefined", "redefs", "import*"]:
- self.failUnless(name in logs)
- self.failIf("misc" in logs)
- lines = logs["unused"].readlines()
- self.failUnlessEqual(len(lines), 2)
- self.failUnlessEqual(lines[0], "buildbot/changes/freshcvsmail.py:5: 'FCMaildirSource' imported but unused\n")
-
- cmd = buildstep.RemoteCommand(None, {})
- cmd.rc = 0
- results = step.evaluateCommand(cmd)
- self.failUnlessEqual(results, FAILURE) # because of the 'undefined'
-
- def testPyFlakes2(self):
- self.masterbase = "Python.testPyFlakes2"
- step = self.makeStep(python.PyFlakes)
- output = \
-"""pyflakes buildbot
-some more text here that should be ignored
-buildbot/changes/freshcvsmail.py:5: 'FCMaildirSource' imported but unused
-buildbot/clients/debug.py:9: redefinition of unused 'gtk' from line 9
-buildbot/clients/debug.py:9: 'gnome' imported but unused
-buildbot/scripts/runner.py:323: redefinition of unused 'run' from line 321
-buildbot/scripts/runner.py:325: redefinition of unused 'run' from line 323
-buildbot/scripts/imaginary.py:12: undefined name 'size'
-could not compile 'blah/blah.py':3:
-pretend there was an invalid line here
-buildbot/scripts/imaginary.py:18: 'from buildbot import *' used; unable to detect undefined names
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- desc = step.descriptionDone
- self.failUnless("unused=2" in desc)
- self.failUnless("undefined=1" in desc)
- self.failUnless("redefs=3" in desc)
- self.failUnless("import*=1" in desc)
- self.failUnless("misc=2" in desc)
-
-
- def testPyFlakes3(self):
- self.masterbase = "Python.testPyFlakes3"
- step = self.makeStep(python.PyFlakes)
- output = \
-"""buildbot/changes/freshcvsmail.py:5: 'FCMaildirSource' imported but unused
-buildbot/clients/debug.py:9: redefinition of unused 'gtk' from line 9
-buildbot/clients/debug.py:9: 'gnome' imported but unused
-buildbot/scripts/runner.py:323: redefinition of unused 'run' from line 321
-buildbot/scripts/runner.py:325: redefinition of unused 'run' from line 323
-buildbot/scripts/imaginary.py:12: undefined name 'size'
-buildbot/scripts/imaginary.py:18: 'from buildbot import *' used; unable to detect undefined names
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- desc = step.descriptionDone
- self.failUnless("unused=2" in desc)
- self.failUnless("undefined=1" in desc)
- self.failUnless("redefs=3" in desc)
- self.failUnless("import*=1" in desc)
- self.failIf("misc" in desc)
-
-
-class OrdinaryCompile(shell.Compile):
- warningPattern = "ordinary line"
-
-class Warnings(StepTester, unittest.TestCase):
- def testCompile1(self):
- self.masterbase = "Warnings.testCompile1"
- step = self.makeStep(shell.Compile)
- output = \
-"""Compile started
-normal line
-warning: oh noes!
-ordinary line
-error (but we aren't looking for errors now, are we)
-line 23: warning: we are now on line 23
-ending line
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- self.failUnlessEqual(step.getProperty("warnings-count"), 2)
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
- self.failUnless("warnings" in logs)
- lines = logs["warnings"].readlines()
- self.failUnlessEqual(len(lines), 2)
- self.failUnlessEqual(lines[0], "warning: oh noes!\n")
- self.failUnlessEqual(lines[1],
- "line 23: warning: we are now on line 23\n")
-
- cmd = buildstep.RemoteCommand(None, {})
- cmd.rc = 0
- results = step.evaluateCommand(cmd)
- self.failUnlessEqual(results, WARNINGS)
-
- def testCompile2(self):
- self.masterbase = "Warnings.testCompile2"
- step = self.makeStep(shell.Compile, warningPattern="ordinary line")
- output = \
-"""Compile started
-normal line
-warning: oh noes!
-ordinary line
-error (but we aren't looking for errors now, are we)
-line 23: warning: we are now on line 23
-ending line
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- self.failUnlessEqual(step.getProperty("warnings-count"), 1)
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
- self.failUnless("warnings" in logs)
- lines = logs["warnings"].readlines()
- self.failUnlessEqual(len(lines), 1)
- self.failUnlessEqual(lines[0], "ordinary line\n")
-
- cmd = buildstep.RemoteCommand(None, {})
- cmd.rc = 0
- results = step.evaluateCommand(cmd)
- self.failUnlessEqual(results, WARNINGS)
-
- def testCompile3(self):
- self.masterbase = "Warnings.testCompile3"
- step = self.makeStep(OrdinaryCompile)
- output = \
-"""Compile started
-normal line
-warning: oh noes!
-ordinary line
-error (but we aren't looking for errors now, are we)
-line 23: warning: we are now on line 23
-ending line
-"""
- step.setProperty("warnings-count", 10, "test")
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- self.failUnlessEqual(step.getProperty("warnings-count"), 11)
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
- self.failUnless("warnings" in logs)
- lines = logs["warnings"].readlines()
- self.failUnlessEqual(len(lines), 1)
- self.failUnlessEqual(lines[0], "ordinary line\n")
-
- cmd = buildstep.RemoteCommand(None, {})
- cmd.rc = 0
- results = step.evaluateCommand(cmd)
- self.failUnlessEqual(results, WARNINGS)
-
- def testCompile4(self):
- # Test suppression of warnings.
- self.masterbase = "Warnings.testCompile4"
- step = self.makeStep(shell.Compile,
- warningPattern="^(.*?):([0-9]+): [Ww]arning: (.*)$",
- warningExtractor=shell.Compile.warnExtractFromRegexpGroups,
- directoryEnterPattern="make.*: Entering directory [\"`'](.*)['`\"]",
- directoryLeavePattern="make.*: Leaving directory")
- step.addSuppression([(r"/subdir/", r"xyzzy", None, None),
- (r"foo.c", r".*", None, 20),
- (r"foo.c", r".*", 200, None),
- (r"foo.c", r".*", 50, 50),
- (r"xxx", r".*", None, None),
- ])
- log = step.addLog("stdio")
- output = \
-"""Making all in .
-make[1]: Entering directory `/abs/path/build'
-foo.c:10: warning: `bar' defined but not used
-foo.c:50: warning: `bar' defined but not used
-make[2]: Entering directory `/abs/path/build/subdir'
-baz.c:33: warning: `xyzzy' defined but not used
-baz.c:34: warning: `magic' defined but not used
-make[2]: Leaving directory `/abs/path/build/subdir'
-foo.c:100: warning: `xyzzy' defined but not used
-foo.c:200: warning: `bar' defined but not used
-make[2]: Leaving directory `/abs/path/build'
-"""
- log.addStdout(output)
- log.finish()
- step.createSummary(log)
- self.failUnlessEqual(step.getProperty("warnings-count"), 2)
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
- self.failUnless("warnings" in logs)
- lines = logs["warnings"].readlines()
- self.failUnlessEqual(len(lines), 2)
- self.failUnlessEqual(lines[0], "baz.c:34: warning: `magic' defined but not used\n")
- self.failUnlessEqual(lines[1], "foo.c:100: warning: `xyzzy' defined but not used\n")
-
- cmd = buildstep.RemoteCommand(None, {})
- cmd.rc = 0
- results = step.evaluateCommand(cmd)
- self.failUnlessEqual(results, WARNINGS)
-
- def filterArgs(self, args):
- if "writer" in args:
- args["writer"] = self.wrap(args["writer"])
- return args
-
- suppressionFileData = """
-# Sample suppressions file for testing
-
-/subdir/ : xyzzy
-foo.c: .* : 0-20
-foo.c: .*: 200-10000
-foo.c :.*: 50
-xxx : .*
-"""
- def testCompile5(self):
- # Test downloading warning suppression file from slave.
- self.slavebase = "Warnings.testCompile5.slave"
- self.masterbase = "Warnings.testCompile5.master"
- sb = self.makeSlaveBuilder()
- os.mkdir(os.path.join(self.slavebase, self.slavebuilderbase,
- "build"))
- output = \
-"""Making all in .
-make[1]: Entering directory `/abs/path/build'
-foo.c:10: warning: `bar' defined but not used
-foo.c:50: warning: `bar' defined but not used
-make[2]: Entering directory `/abs/path/build/subdir'
-baz.c:33: warning: `xyzzy' defined but not used
-baz.c:34: warning: `magic' defined but not used
-make[2]: Leaving directory `/abs/path/build/subdir'
-foo.c:100: warning: `xyzzy' defined but not used
-foo.c:200: warning: `bar' defined but not used
-make[2]: Leaving directory `/abs/path/build'
-"""
- printStatement = ('print """%s"""' % output)
- step = self.makeStep(shell.Compile,
- warningPattern="^(.*?):([0-9]+): [Ww]arning: (.*)$",
- warningExtractor=shell.Compile.warnExtractFromRegexpGroups,
- suppressionFile="warnings.supp",
- command=[sys.executable, "-c", printStatement])
- self.failUnlessEqual(step.step_status.getText(), ['compiling'])
- slavesrc = os.path.join(self.slavebase,
- self.slavebuilderbase,
- "build",
- "warnings.supp")
- open(slavesrc, "w").write(self.suppressionFileData)
-
- d = self.runStep(step)
- def _checkResult(result):
- self.failUnlessEqual(step.getProperty("warnings-count"), 2)
- logs = {}
- for log in step.step_status.getLogs():
- logs[log.getName()] = log
- self.failUnless("warnings" in logs)
- lines = logs["warnings"].readlines()
- self.failUnlessEqual(len(lines), 2)
- self.failUnlessEqual(lines[0], "baz.c:34: warning: `magic' defined but not used\n")
- self.failUnlessEqual(lines[1], "foo.c:100: warning: `xyzzy' defined but not used\n")
- self.failUnlessEqual(step.step_status.getText(), ['compile',
- 'warnings'])
-
- d.addCallback(_checkResult)
- return d
-
-class TreeSize(StepTester, unittest.TestCase):
- def testTreeSize(self):
- self.slavebase = "TreeSize.testTreeSize.slave"
- self.masterbase = "TreeSize.testTreeSize.master"
-
- sb = self.makeSlaveBuilder()
- step = self.makeStep(shell.TreeSize)
- d = self.runStep(step)
- def _check(results):
- self.failUnlessEqual(results, SUCCESS)
- kib = step.getProperty("tree-size-KiB")
- self.failUnless(isinstance(kib, int))
- self.failUnless(kib < 100) # should be empty, I get '4'
- s = step.step_status
- self.failUnlessEqual(" ".join(s.getText()),
- "treesize %d KiB" % kib)
- d.addCallback(_check)
- return d
-
-class FakeCommand:
- def __init__(self, rc):
- self.rc = rc
-
-class PerlModuleTest(StepTester, unittest.TestCase):
- def testAllTestsPassed(self):
- self.masterbase = "PMT.testAllTestsPassed"
- step = self.makeStep(shell.PerlModuleTest)
- output = \
-"""ok 1
-ok 2
-All tests successful
-Files=1, Tests=123, other stuff
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- rc = step.evaluateCommand(FakeCommand(rc=241))
- self.failUnlessEqual(rc, SUCCESS)
- ss = step.step_status
- self.failUnlessEqual(ss.getStatistic('tests-failed'), 0)
- self.failUnlessEqual(ss.getStatistic('tests-total'), 123)
- self.failUnlessEqual(ss.getStatistic('tests-passed'), 123)
-
- def testFailures_OldTestHarness(self):
- self.masterbase = "PMT.testFailures_OldTestHarness"
- step = self.makeStep(shell.PerlModuleTest)
- output = \
-"""
-ok 1
-ok 2
-3/7 subtests failed
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- rc = step.evaluateCommand(FakeCommand(rc = 123))
- self.failUnlessEqual(rc, FAILURE)
- ss = step.step_status
- self.failUnlessEqual(ss.getStatistic('tests-failed'), 3)
- self.failUnlessEqual(ss.getStatistic('tests-total'), 7)
- self.failUnlessEqual(ss.getStatistic('tests-passed'), 4)
-
- def testFailures_UnparseableStdio(self):
- self.masterbase = "PMT.testFailures_UnparseableStdio"
- step = self.makeStep(shell.PerlModuleTest)
- output = \
-"""
-just some random stuff, you know
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- rc = step.evaluateCommand(FakeCommand(rc = 243))
- self.failUnlessEqual(rc, 243)
- ss = step.step_status
- self.failUnlessEqual(ss.getStatistic('tests-failed'), None)
- self.failUnlessEqual(ss.getStatistic('tests-total'), None)
- self.failUnlessEqual(ss.getStatistic('tests-passed'), None)
-
- def testFailures_NewTestHarness(self):
- self.masterbase = "PMT.testFailures_NewTestHarness"
- step = self.makeStep(shell.PerlModuleTest)
- output = \
-"""
-# Looks like you failed 15 tests of 18.
-tests/services.......................... Failed 265/30904 subtests
- (less 16 skipped subtests: 30623 okay)
-tests/simple_query_backend..............ok
-tests/simple_query_middleware...........ok
-tests/soap_globalcollect................ok
-tests/three_d_me........................ok
-tests/three_d_me_callback...............ok
-tests/transaction_create................ok
-tests/unique_txid.......................ok
-
-Test Summary Report
--------------------
-tests/000policies (Wstat: 5632 Tests: 9078 Failed: 22)
- Failed tests: 2409, 2896-2897, 2900-2901, 2940-2941, 2944-2945
- 2961-2962, 2965-2966, 2969-2970, 2997-2998
- 3262, 3281-3282, 3288-3289
- Non-zero exit status: 22
-tests/services (Wstat: 0 Tests: 30904 Failed: 265)
- Failed tests: 14, 16-21, 64-69, 71-96, 98, 30157, 30159
- 30310, 30316, 30439-30543, 30564, 30566-30577
- 30602, 30604-30607, 30609-30612, 30655
- 30657-30668, 30675, 30697-30716, 30718-30720
- 30722-30736, 30773-30774, 30776-30777, 30786
- 30791, 30795, 30797, 30801, 30822-30827
- 30830-30831, 30848-30855, 30858-30859, 30888-30899
- 30901, 30903-30904
-Files=68, Tests=264809, 1944 wallclock secs (17.59 usr 0.63 sys + 470.04 cusr 131.40 csys = 619.66 CPU)
-Result: FAIL
-"""
- log = step.addLog("stdio")
- log.addStdout(output)
- log.finish()
- rc = step.evaluateCommand(FakeCommand(rc=87))
- self.failUnlessEqual(rc, FAILURE)
- ss = step.step_status
- self.failUnlessEqual(ss.getStatistic('tests-failed'), 287)
- self.failUnlessEqual(ss.getStatistic('tests-total'), 264809)
- self.failUnlessEqual(ss.getStatistic('tests-passed'), 264522)
-
-class MasterShellCommand(StepTester, unittest.TestCase):
- def testMasterShellCommand(self):
- self.slavebase = "testMasterShellCommand.slave"
- self.masterbase = "testMasterShellCommand.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(master.MasterShellCommand, command=['echo',
- WithProperties("hi build-%(other)s.tar.gz")])
- step.build.setProperty("other", "foo", "test")
-
- # we can't invoke runStep until the reactor is started .. hence this
- # little dance
- d = defer.Deferred()
- def _dotest(_):
- return self.runStep(step)
- d.addCallback(_dotest)
-
- def _check(results):
- self.failUnlessEqual(results, SUCCESS)
- logtxt = step.getLog("stdio").getText()
- self.failUnlessEqual(logtxt.strip(), "hi build-foo.tar.gz")
- d.addCallback(_check)
- reactor.callLater(0, d.callback, None)
- return d
-
- def testMasterShellCommand_badexit(self):
- self.slavebase = "testMasterShellCommand_badexit.slave"
- self.masterbase = "testMasterShellCommand_badexit.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(master.MasterShellCommand, command="exit 1")
-
- # we can't invoke runStep until the reactor is started .. hence this
- # little dance
- d = defer.Deferred()
- def _dotest(_):
- return self.runStep(step)
- d.addCallback(_dotest)
-
- def _check(results):
- self.failUnlessEqual(results, FAILURE)
- d.addCallback(_check)
- reactor.callLater(0, d.callback, None)
- return d
-
-class SuccessStep(buildstep.BuildStep):
- def start(self):
- self.finished(buildstep.SUCCESS)
-
-class ConditionalStepTest(StepTester, unittest.TestCase):
- def testNotSkipped(self):
- self.slavebase = "testNotSkipped.slave"
- self.masterbase = "testNotSkipped.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(SuccessStep)
- d = self.runStep(step)
- def _checkResults(results):
- self.failUnlessEqual(SUCCESS, results)
- d.addCallback(_checkResults)
- return d
-
- def testSkipped(self):
- self.slavebase = "testSkipped.slave"
- self.masterbase = "testSkipped.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(SuccessStep, doStepIf=False)
- d = self.runStep(step)
- def _checkResults(results):
- self.failUnlessEqual(SKIPPED, results)
- d.addCallback(_checkResults)
- return d
-
- def testNotSkippedFunc(self):
- self.slavebase = "testNotSkippedFunc.slave"
- self.masterbase = "testNotSkippedFunc.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(SuccessStep, doStepIf=lambda s: True)
- d = self.runStep(step)
- def _checkResults(results):
- self.failUnlessEqual(SUCCESS, results)
- d.addCallback(_checkResults)
- return d
-
- def testSkippedFunc(self):
- self.slavebase = "testSkippedFunc.slave"
- self.masterbase = "testSkippedFunc.master"
- sb = self.makeSlaveBuilder()
- step = self.makeStep(SuccessStep, doStepIf=lambda s: False)
- d = self.runStep(step)
- def _checkResults(results):
- self.failUnlessEqual(SKIPPED, results)
- d.addCallback(_checkResults)
- return d
« no previous file with comments | « third_party/buildbot_7_12/buildbot/test/test_status_push.py ('k') | third_party/buildbot_7_12/buildbot/test/test_svnpoller.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698