| Index: third_party/buildbot_7_12/buildbot/test/test_properties.py
|
| diff --git a/third_party/buildbot_7_12/buildbot/test/test_properties.py b/third_party/buildbot_7_12/buildbot/test/test_properties.py
|
| deleted file mode 100644
|
| index 3d0d9093e955d9f628ed6ad8a79f48191c7f8f45..0000000000000000000000000000000000000000
|
| --- a/third_party/buildbot_7_12/buildbot/test/test_properties.py
|
| +++ /dev/null
|
| @@ -1,278 +0,0 @@
|
| -# -*- test-case-name: buildbot.test.test_properties -*-
|
| -
|
| -import os
|
| -
|
| -from twisted.trial import unittest
|
| -
|
| -from buildbot.sourcestamp import SourceStamp
|
| -from buildbot.process import base
|
| -from buildbot.process.properties import WithProperties, Properties
|
| -from buildbot.status import builder
|
| -from buildbot.slave.commands import rmdirRecursive
|
| -from buildbot.test.runutils import RunMixin
|
| -
|
| -
|
| -class FakeBuild:
|
| - pass
|
| -class FakeBuildMaster:
|
| - properties = Properties(masterprop="master")
|
| -class FakeBotMaster:
|
| - parent = FakeBuildMaster()
|
| -class FakeBuilder:
|
| - statusbag = None
|
| - name = "fakebuilder"
|
| - botmaster = FakeBotMaster()
|
| -class FakeSlave:
|
| - slavename = "bot12"
|
| - properties = Properties(slavename="bot12")
|
| -class FakeSlaveBuilder:
|
| - slave = FakeSlave()
|
| - def getSlaveCommandVersion(self, command, oldversion=None):
|
| - return "1.10"
|
| -class FakeScheduler:
|
| - name = "fakescheduler"
|
| -
|
| -class TestProperties(unittest.TestCase):
|
| - def setUp(self):
|
| - self.props = Properties()
|
| -
|
| - def testDictBehavior(self):
|
| - self.props.setProperty("do-tests", 1, "scheduler")
|
| - self.props.setProperty("do-install", 2, "scheduler")
|
| -
|
| - self.assert_(self.props.has_key('do-tests'))
|
| - self.failUnlessEqual(self.props['do-tests'], 1)
|
| - self.failUnlessEqual(self.props['do-install'], 2)
|
| - self.assertRaises(KeyError, lambda : self.props['do-nothing'])
|
| - self.failUnlessEqual(self.props.getProperty('do-install'), 2)
|
| -
|
| - def testUpdate(self):
|
| - self.props.setProperty("x", 24, "old")
|
| - newprops = { 'a' : 1, 'b' : 2 }
|
| - self.props.update(newprops, "new")
|
| -
|
| - self.failUnlessEqual(self.props.getProperty('x'), 24)
|
| - self.failUnlessEqual(self.props.getPropertySource('x'), 'old')
|
| - self.failUnlessEqual(self.props.getProperty('a'), 1)
|
| - self.failUnlessEqual(self.props.getPropertySource('a'), 'new')
|
| -
|
| - def testUpdateFromProperties(self):
|
| - self.props.setProperty("x", 24, "old")
|
| - newprops = Properties()
|
| - newprops.setProperty('a', 1, "new")
|
| - newprops.setProperty('b', 2, "new")
|
| - self.props.updateFromProperties(newprops)
|
| -
|
| - self.failUnlessEqual(self.props.getProperty('x'), 24)
|
| - self.failUnlessEqual(self.props.getPropertySource('x'), 'old')
|
| - self.failUnlessEqual(self.props.getProperty('a'), 1)
|
| - self.failUnlessEqual(self.props.getPropertySource('a'), 'new')
|
| -
|
| - # render() is pretty well tested by TestWithProperties
|
| -
|
| -class TestWithProperties(unittest.TestCase):
|
| - def setUp(self):
|
| - self.props = Properties()
|
| -
|
| - def testBasic(self):
|
| - # test basic substitution with WithProperties
|
| - self.props.setProperty("revision", "47", "test")
|
| - command = WithProperties("build-%s.tar.gz", "revision")
|
| - self.failUnlessEqual(self.props.render(command),
|
| - "build-47.tar.gz")
|
| -
|
| - def testDict(self):
|
| - # test dict-style substitution with WithProperties
|
| - self.props.setProperty("other", "foo", "test")
|
| - command = WithProperties("build-%(other)s.tar.gz")
|
| - self.failUnlessEqual(self.props.render(command),
|
| - "build-foo.tar.gz")
|
| -
|
| - def testDictColonMinus(self):
|
| - # test dict-style substitution with WithProperties
|
| - self.props.setProperty("prop1", "foo", "test")
|
| - command = WithProperties("build-%(prop1:-empty)s-%(prop2:-empty)s.tar.gz")
|
| - self.failUnlessEqual(self.props.render(command),
|
| - "build-foo-empty.tar.gz")
|
| -
|
| - def testDictColonPlus(self):
|
| - # test dict-style substitution with WithProperties
|
| - self.props.setProperty("prop1", "foo", "test")
|
| - command = WithProperties("build-%(prop1:+exists)s-%(prop2:+exists)s.tar.gz")
|
| - self.failUnlessEqual(self.props.render(command),
|
| - "build-exists-.tar.gz")
|
| -
|
| - def testEmpty(self):
|
| - # None should render as ''
|
| - self.props.setProperty("empty", None, "test")
|
| - command = WithProperties("build-%(empty)s.tar.gz")
|
| - self.failUnlessEqual(self.props.render(command),
|
| - "build-.tar.gz")
|
| -
|
| - def testRecursiveList(self):
|
| - self.props.setProperty("x", 10, "test")
|
| - self.props.setProperty("y", 20, "test")
|
| - command = [ WithProperties("%(x)s %(y)s"), "and",
|
| - WithProperties("%(y)s %(x)s") ]
|
| - self.failUnlessEqual(self.props.render(command),
|
| - ["10 20", "and", "20 10"])
|
| -
|
| - def testRecursiveTuple(self):
|
| - self.props.setProperty("x", 10, "test")
|
| - self.props.setProperty("y", 20, "test")
|
| - command = ( WithProperties("%(x)s %(y)s"), "and",
|
| - WithProperties("%(y)s %(x)s") )
|
| - self.failUnlessEqual(self.props.render(command),
|
| - ("10 20", "and", "20 10"))
|
| -
|
| - def testRecursiveDict(self):
|
| - self.props.setProperty("x", 10, "test")
|
| - self.props.setProperty("y", 20, "test")
|
| - command = { WithProperties("%(x)s %(y)s") :
|
| - WithProperties("%(y)s %(x)s") }
|
| - self.failUnlessEqual(self.props.render(command),
|
| - {"10 20" : "20 10"})
|
| -
|
| -class BuildProperties(unittest.TestCase):
|
| - """Test the properties that a build should have."""
|
| - def setUp(self):
|
| - self.builder = FakeBuilder()
|
| - self.builder_status = builder.BuilderStatus("fakebuilder")
|
| - self.builder_status.basedir = "test_properties"
|
| - self.builder_status.nextBuildNumber = 5
|
| - rmdirRecursive(self.builder_status.basedir)
|
| - os.mkdir(self.builder_status.basedir)
|
| - self.build_status = self.builder_status.newBuild()
|
| - req = base.BuildRequest("reason",
|
| - SourceStamp(branch="branch2", revision="1234"),
|
| - 'test_builder',
|
| - properties=Properties(scheduler="fakescheduler"))
|
| - self.build = base.Build([req])
|
| - self.build.build_status = self.build_status
|
| - self.build.setBuilder(self.builder)
|
| - self.build.setupProperties()
|
| - self.build.setupSlaveBuilder(FakeSlaveBuilder())
|
| -
|
| - def testProperties(self):
|
| - self.failUnlessEqual(self.build.getProperty("scheduler"), "fakescheduler")
|
| - self.failUnlessEqual(self.build.getProperty("branch"), "branch2")
|
| - self.failUnlessEqual(self.build.getProperty("revision"), "1234")
|
| - self.failUnlessEqual(self.build.getProperty("slavename"), "bot12")
|
| - self.failUnlessEqual(self.build.getProperty("buildnumber"), 5)
|
| - self.failUnlessEqual(self.build.getProperty("buildername"), "fakebuilder")
|
| - self.failUnlessEqual(self.build.getProperty("masterprop"), "master")
|
| -
|
| -run_config = """
|
| -from buildbot.process import factory
|
| -from buildbot.steps.shell import ShellCommand, WithProperties
|
| -from buildbot.buildslave import BuildSlave
|
| -from buildbot.config import BuilderConfig
|
| -s = factory.s
|
| -
|
| -BuildmasterConfig = c = {}
|
| -c['slaves'] = [BuildSlave('bot1', 'sekrit', properties={'slprop':'slprop'})]
|
| -c['schedulers'] = []
|
| -c['slavePortnum'] = 0
|
| -c['properties'] = { 'global' : 'global' }
|
| -
|
| -# Note: when run against twisted-1.3.0, this locks up about 5% of the time. I
|
| -# suspect that a command with no output that finishes quickly triggers a race
|
| -# condition in 1.3.0's process-reaping code. The 'touch' process becomes a
|
| -# zombie and the step never completes. To keep this from messing up the unit
|
| -# tests too badly, this step runs with a reduced timeout.
|
| -
|
| -f1 = factory.BuildFactory([s(ShellCommand,
|
| - flunkOnFailure=True,
|
| - command=['touch',
|
| - WithProperties('%s-%s-%s',
|
| - 'slavename', 'global', 'slprop'),
|
| - ],
|
| - workdir='.',
|
| - timeout=10,
|
| - )])
|
| -
|
| -c['builders'] = [
|
| - BuilderConfig(name='full1', slavename='bot1', factory=f1, builddir='bd1'),
|
| -]
|
| -
|
| -"""
|
| -
|
| -class Run(RunMixin, unittest.TestCase):
|
| - def testInterpolate(self):
|
| - # run an actual build with a step that interpolates a build property
|
| - d = self.master.loadConfig(run_config)
|
| - d.addCallback(lambda res: self.master.startService())
|
| - d.addCallback(lambda res: self.connectOneSlave("bot1"))
|
| - d.addCallback(lambda res: self.requestBuild("full1"))
|
| - d.addCallback(self.failUnlessBuildSucceeded)
|
| - def _check_touch(res):
|
| - f = os.path.join("slavebase-bot1", "bd1", "bot1-global-slprop")
|
| - self.failUnless(os.path.exists(f))
|
| - return res
|
| - d.addCallback(_check_touch)
|
| - return d
|
| -
|
| - SetProperty_base_config = """
|
| -from buildbot.process import factory
|
| -from buildbot.steps.shell import ShellCommand, SetProperty, WithProperties
|
| -from buildbot.buildslave import BuildSlave
|
| -from buildbot.config import BuilderConfig
|
| -s = factory.s
|
| -
|
| -BuildmasterConfig = c = {}
|
| -c['slaves'] = [BuildSlave('bot1', 'sekrit')]
|
| -c['schedulers'] = []
|
| -c['slavePortnum'] = 0
|
| -
|
| -f1 = factory.BuildFactory([
|
| -##STEPS##
|
| -])
|
| -
|
| -c['builders'] = [
|
| - BuilderConfig(name='full1', slavename='bot1', factory=f1, builddir='bd1'),
|
| -]
|
| -"""
|
| -
|
| - SetPropertySimple_config = SetProperty_base_config.replace("##STEPS##", """
|
| - SetProperty(property='foo', command="echo foo"),
|
| - SetProperty(property=WithProperties('wp'), command="echo wp"),
|
| - SetProperty(property='bar', command="echo bar", strip=False),
|
| - """)
|
| -
|
| - def testSetPropertySimple(self):
|
| - d = self.master.loadConfig(self.SetPropertySimple_config)
|
| - d.addCallback(lambda res: self.master.startService())
|
| - d.addCallback(lambda res: self.connectOneSlave("bot1"))
|
| - d.addCallback(lambda res: self.requestBuild("full1"))
|
| - d.addCallback(self.failUnlessBuildSucceeded)
|
| - def _check_props(bs):
|
| - self.failUnlessEqual(bs.getProperty("foo"), "foo")
|
| - self.failUnlessEqual(bs.getProperty("wp"), "wp")
|
| - # (will this fail on some platforms, due to newline differences?)
|
| - self.failUnlessEqual(bs.getProperty("bar"), "bar\n")
|
| - return bs
|
| - d.addCallback(_check_props)
|
| - return d
|
| -
|
| - SetPropertyExtractFn_config = SetProperty_base_config.replace("##STEPS##", """
|
| - SetProperty(
|
| - extract_fn=lambda rc,stdout,stderr : {
|
| - 'foo' : stdout.strip(),
|
| - 'bar' : stderr.strip() },
|
| - command="echo foo; echo bar >&2"),
|
| - """)
|
| -
|
| - def testSetPropertyExtractFn(self):
|
| - d = self.master.loadConfig(self.SetPropertyExtractFn_config)
|
| - d.addCallback(lambda res: self.master.startService())
|
| - d.addCallback(lambda res: self.connectOneSlave("bot1"))
|
| - d.addCallback(lambda res: self.requestBuild("full1"))
|
| - d.addCallback(self.failUnlessBuildSucceeded)
|
| - def _check_props(bs):
|
| - self.failUnlessEqual(bs.getProperty("foo"), "foo")
|
| - self.failUnlessEqual(bs.getProperty("bar"), "bar")
|
| - return bs
|
| - d.addCallback(_check_props)
|
| - return d
|
| -
|
| -# we test got_revision in test_vc
|
|
|