diff options
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_process_build.py')
-rw-r--r-- | lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_process_build.py | 823 |
1 files changed, 0 insertions, 823 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_process_build.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_process_build.py deleted file mode 100644 index 784ea172..00000000 --- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_process_build.py +++ /dev/null @@ -1,823 +0,0 @@ -# This file is part of Buildbot. Buildbot is free software: you can -# redistribute it and/or modify it under the terms of the GNU General Public -# License as published by the Free Software Foundation, version 2. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Copyright Buildbot Team Members - -from zope.interface import implements -from twisted.trial import unittest -from twisted.internet import defer -from buildbot import interfaces -from buildbot.process.build import Build -from buildbot.process.properties import Properties -from buildbot.status.results import FAILURE, SUCCESS, WARNINGS, RETRY, EXCEPTION -from buildbot.locks import SlaveLock -from buildbot.process.buildstep import LoggingBuildStep -from buildbot.test.fake.fakemaster import FakeBotMaster -from buildbot import config - -from mock import Mock - -class FakeChange: - properties = Properties() - def __init__(self, number = None): - self.number = number - self.who = "me" - -class FakeSource: - def __init__(self): - self.sourcestampsetid = None - self.changes = [] - self.branch = None - self.revision = None - self.repository = '' - self.codebase = '' - self.project = '' - self.patch_info = None - self.patch = None - - def getRepository(self): - return self.repository - -class FakeRequest: - def __init__(self): - self.sources = [] - self.reason = "Because" - self.properties = Properties() - - def mergeSourceStampsWith(self, others): - return self.sources - - def mergeReasons(self, others): - return self.reason - -class FakeBuildStep: - def __init__(self): - self.haltOnFailure = False - self.flunkOnWarnings = False - self.flunkOnFailure = True - self.warnOnWarnings = True - self.warnOnFailure = False - self.alwaysRun = False - self.name = 'fake' - -class FakeMaster: - def __init__(self): - self.locks = {} - self.parent = Mock() - self.config = config.MasterConfig() - - def getLockByID(self, lockid): - if not lockid in self.locks: - self.locks[lockid] = lockid.lockClass(lockid) - return self.locks[lockid] - -class FakeBuildStatus(Mock): - implements(interfaces.IProperties) - -class FakeBuilderStatus: - implements(interfaces.IBuilderStatus) - -class FakeStepFactory(object): - """Fake step factory that just returns a fixed step object.""" - implements(interfaces.IBuildStepFactory) - def __init__(self, step): - self.step = step - - def buildStep(self): - return self.step - -class TestBuild(unittest.TestCase): - - def setUp(self): - r = FakeRequest() - r.sources = [FakeSource()] - r.sources[0].changes = [FakeChange()] - r.sources[0].revision = "12345" - - self.request = r - self.master = FakeMaster() - - self.master.botmaster = FakeBotMaster(master=self.master) - - self.builder = self.createBuilder() - self.build = Build([r]) - self.build.setBuilder(self.builder) - - def createBuilder(self): - bldr = Mock() - bldr.botmaster = self.master.botmaster - return bldr - - def testRunSuccessfulBuild(self): - b = self.build - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - b.setStepFactories([FakeStepFactory(step)]) - - slavebuilder = Mock() - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assertEqual(b.result, SUCCESS) - self.assert_( ('startStep', (slavebuilder.remote,), {}) - in step.method_calls) - - def testStopBuild(self): - b = self.build - - step = Mock() - step.return_value = step - b.setStepFactories([FakeStepFactory(step)]) - - slavebuilder = Mock() - - def startStep(*args, **kw): - # Now interrupt the build - b.stopBuild("stop it") - return defer.Deferred() - step.startStep = startStep - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assertEqual(b.result, EXCEPTION) - - self.assert_( ('interrupt', ('stop it',), {}) in step.method_calls) - - def testAlwaysRunStepStopBuild(self): - """Test that steps marked with alwaysRun=True still get run even if - the build is stopped.""" - - # Create a build with 2 steps, the first one will get interrupted, and - # the second one is marked with alwaysRun=True - b = self.build - - step1 = Mock() - step1.return_value = step1 - step1.alwaysRun = False - step2 = Mock() - step2.return_value = step2 - step2.alwaysRun = True - b.setStepFactories([ - FakeStepFactory(step1), - FakeStepFactory(step2), - ]) - - slavebuilder = Mock() - - def startStep1(*args, **kw): - # Now interrupt the build - b.stopBuild("stop it") - return defer.succeed( SUCCESS ) - step1.startStep = startStep1 - step1.stepDone.return_value = False - - step2Started = [False] - def startStep2(*args, **kw): - step2Started[0] = True - return defer.succeed( SUCCESS ) - step2.startStep = startStep2 - step1.stepDone.return_value = False - - d = b.startBuild(FakeBuildStatus(), None, slavebuilder) - def check(ign): - self.assertEqual(b.result, EXCEPTION) - self.assert_( ('interrupt', ('stop it',), {}) in step1.method_calls) - self.assert_(step2Started[0]) - d.addCallback(check) - return d - - def testBuildcanStartWithSlavebuilder(self): - b = self.build - - slavebuilder1 = Mock() - slavebuilder2 = Mock() - - l = SlaveLock('lock') - counting_access = l.access('counting') - real_lock = b.builder.botmaster.getLockByID(l) - - # no locks, so both these pass (call twice to verify there's no state/memory) - lock_list = [(real_lock, counting_access)] - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - - slave_lock_1 = real_lock.getLock(slavebuilder1.slave) - slave_lock_2 = real_lock.getLock(slavebuilder2.slave) - - # then have slavebuilder2 claim its lock: - slave_lock_2.claim(slavebuilder2, counting_access) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertFalse(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - self.assertFalse(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - slave_lock_2.release(slavebuilder2, counting_access) - - # then have slavebuilder1 claim its lock: - slave_lock_1.claim(slavebuilder1, counting_access) - self.assertFalse(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertFalse(Build.canStartWithSlavebuilder(lock_list, slavebuilder1)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - self.assertTrue(Build.canStartWithSlavebuilder(lock_list, slavebuilder2)) - slave_lock_1.release(slavebuilder1, counting_access) - - - def testBuildLocksAcquired(self): - b = self.build - - slavebuilder = Mock() - - l = SlaveLock('lock') - claimCount = [0] - lock_access = l.access('counting') - l.access = lambda mode: lock_access - real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder.slave) - def claim(owner, access): - claimCount[0] += 1 - return real_lock.old_claim(owner, access) - real_lock.old_claim = real_lock.claim - real_lock.claim = claim - b.setLocks([lock_access]) - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - b.setStepFactories([FakeStepFactory(step)]) - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assertEqual(b.result, SUCCESS) - self.assert_( ('startStep', (slavebuilder.remote,), {}) - in step.method_calls) - self.assertEquals(claimCount[0], 1) - - def testBuildLocksOrder(self): - """Test that locks are acquired in FIFO order; specifically that - counting locks cannot jump ahead of exclusive locks""" - eBuild = self.build - - cBuilder = self.createBuilder() - cBuild = Build([self.request]) - cBuild.setBuilder(cBuilder) - - eSlavebuilder = Mock() - cSlavebuilder = Mock() - - slave = eSlavebuilder.slave - cSlavebuilder.slave = slave - - l = SlaveLock('lock', 2) - claimLog = [] - realLock = self.master.botmaster.getLockByID(l).getLock(slave) - def claim(owner, access): - claimLog.append(owner) - return realLock.oldClaim(owner, access) - realLock.oldClaim = realLock.claim - realLock.claim = claim - - eBuild.setLocks([l.access('exclusive')]) - cBuild.setLocks([l.access('counting')]) - - fakeBuild = Mock() - fakeBuildAccess = l.access('counting') - realLock.claim(fakeBuild, fakeBuildAccess) - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - eBuild.setStepFactories([FakeStepFactory(step)]) - cBuild.setStepFactories([FakeStepFactory(step)]) - - e = eBuild.startBuild(FakeBuildStatus(), None, eSlavebuilder) - c = cBuild.startBuild(FakeBuildStatus(), None, cSlavebuilder) - d = defer.DeferredList([e, c]) - - realLock.release(fakeBuild, fakeBuildAccess) - - def check(ign): - self.assertEqual(eBuild.result, SUCCESS) - self.assertEqual(cBuild.result, SUCCESS) - self.assertEquals(claimLog, [fakeBuild, eBuild, cBuild]) - - d.addCallback(check) - return d - - def testBuildWaitingForLocks(self): - b = self.build - - slavebuilder = Mock() - - l = SlaveLock('lock') - claimCount = [0] - lock_access = l.access('counting') - l.access = lambda mode: lock_access - real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder.slave) - def claim(owner, access): - claimCount[0] += 1 - return real_lock.old_claim(owner, access) - real_lock.old_claim = real_lock.claim - real_lock.claim = claim - b.setLocks([lock_access]) - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - b.setStepFactories([FakeStepFactory(step)]) - - real_lock.claim(Mock(), l.access('counting')) - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assert_( ('startStep', (slavebuilder.remote,), {}) - not in step.method_calls) - self.assertEquals(claimCount[0], 1) - self.assert_(b.currentStep is None) - self.assert_(b._acquiringLock is not None) - - def testStopBuildWaitingForLocks(self): - b = self.build - - slavebuilder = Mock() - - l = SlaveLock('lock') - lock_access = l.access('counting') - l.access = lambda mode: lock_access - real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder) - b.setLocks([lock_access]) - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - step.alwaysRun = False - b.setStepFactories([FakeStepFactory(step)]) - - real_lock.claim(Mock(), l.access('counting')) - - def acquireLocks(res=None): - retval = Build.acquireLocks(b, res) - b.stopBuild('stop it') - return retval - b.acquireLocks = acquireLocks - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assert_( ('startStep', (slavebuilder.remote,), {}) - not in step.method_calls) - self.assert_(b.currentStep is None) - self.assertEqual(b.result, EXCEPTION) - self.assert_( ('interrupt', ('stop it',), {}) not in step.method_calls) - - def testStopBuildWaitingForLocks_lostRemote(self): - b = self.build - - slavebuilder = Mock() - - l = SlaveLock('lock') - lock_access = l.access('counting') - l.access = lambda mode: lock_access - real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder) - b.setLocks([lock_access]) - - step = Mock() - step.return_value = step - step.startStep.return_value = SUCCESS - step.alwaysRun = False - b.setStepFactories([FakeStepFactory(step)]) - - real_lock.claim(Mock(), l.access('counting')) - - def acquireLocks(res=None): - retval = Build.acquireLocks(b, res) - b.lostRemote() - return retval - b.acquireLocks = acquireLocks - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assert_( ('startStep', (slavebuilder.remote,), {}) - not in step.method_calls) - self.assert_(b.currentStep is None) - self.assertEqual(b.result, RETRY) - self.assert_( ('interrupt', ('stop it',), {}) not in step.method_calls) - self.build.build_status.setText.assert_called_with(["retry", "lost", "remote"]) - self.build.build_status.setResults.assert_called_with(RETRY) - - def testStopBuildWaitingForStepLocks(self): - b = self.build - - slavebuilder = Mock() - - l = SlaveLock('lock') - lock_access = l.access('counting') - l.access = lambda mode: lock_access - real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder) - - step = LoggingBuildStep(locks=[lock_access]) - b.setStepFactories([FakeStepFactory(step)]) - - real_lock.claim(Mock(), l.access('counting')) - - gotLocks = [False] - - def acquireLocks(res=None): - gotLocks[0] = True - retval = LoggingBuildStep.acquireLocks(step, res) - self.assert_(b.currentStep is step) - b.stopBuild('stop it') - return retval - step.acquireLocks = acquireLocks - step.setStepStatus = Mock() - step.step_status = Mock() - step.step_status.addLog().chunkSize = 10 - step.step_status.getLogs.return_value = [] - - b.startBuild(FakeBuildStatus(), None, slavebuilder) - - self.assertEqual(gotLocks, [True]) - self.assert_(('stepStarted', (), {}) in step.step_status.method_calls) - self.assertEqual(b.result, EXCEPTION) - - def testStepDone(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - terminate = b.stepDone(SUCCESS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, SUCCESS) - - def testStepDoneHaltOnFailure(self): - b = self.build - b.results = [] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.haltOnFailure = True - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, True) - self.assertEqual(b.result, FAILURE) - - def testStepDoneHaltOnFailureNoFlunkOnFailure(self): - b = self.build - b.results = [] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.flunkOnFailure = False - step.haltOnFailure = True - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, True) - self.assertEqual(b.result, SUCCESS) - - def testStepDoneFlunkOnWarningsFlunkOnFailure(self): - b = self.build - b.results = [] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.flunkOnFailure = True - step.flunkOnWarnings = True - b.stepDone(WARNINGS, step) - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneNoWarnOnWarnings(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.warnOnWarnings = False - terminate = b.stepDone(WARNINGS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, SUCCESS) - - def testStepDoneWarnings(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - terminate = b.stepDone(WARNINGS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, WARNINGS) - - def testStepDoneFail(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneFailOverridesWarnings(self): - b = self.build - b.results = [SUCCESS, WARNINGS] - b.result = WARNINGS - b.remote = Mock() - step = FakeBuildStep() - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneWarnOnFailure(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.warnOnFailure = True - step.flunkOnFailure = False - terminate = b.stepDone(FAILURE, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, WARNINGS) - - def testStepDoneFlunkOnWarnings(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.flunkOnWarnings = True - terminate = b.stepDone(WARNINGS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneHaltOnFailureFlunkOnWarnings(self): - b = self.build - b.results = [SUCCESS] - b.result = SUCCESS - b.remote = Mock() - step = FakeBuildStep() - step.flunkOnWarnings = True - self.haltOnFailure = True - terminate = b.stepDone(WARNINGS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneWarningsDontOverrideFailure(self): - b = self.build - b.results = [FAILURE] - b.result = FAILURE - b.remote = Mock() - step = FakeBuildStep() - terminate = b.stepDone(WARNINGS, step) - self.assertEqual(terminate, False) - self.assertEqual(b.result, FAILURE) - - def testStepDoneRetryOverridesAnythingElse(self): - b = self.build - b.results = [RETRY] - b.result = RETRY - b.remote = Mock() - step = FakeBuildStep() - step.alwaysRun = True - b.stepDone(WARNINGS, step) - b.stepDone(FAILURE, step) - b.stepDone(SUCCESS, step) - terminate = b.stepDone(EXCEPTION, step) - self.assertEqual(terminate, True) - self.assertEqual(b.result, RETRY) - -class TestMultipleSourceStamps(unittest.TestCase): - - def setUp(self): - r = FakeRequest() - s1 = FakeSource() - s1.repository = "repoA" - s1.codebase = "A" - s1.changes = [FakeChange(10), FakeChange(11)] - s1.revision = "12345" - s2 = FakeSource() - s2.repository = "repoB" - s2.codebase = "B" - s2.changes = [FakeChange(12),FakeChange(13)] - s2.revision = "67890" - s3 = FakeSource() - s3.repository = "repoC" - # no codebase defined - s3.changes = [FakeChange(14),FakeChange(15)] - s3.revision = "111213" - r.sources.extend([s1,s2,s3]) - - self.build = Build([r]) - - def test_buildReturnSourceStamp(self): - """ - Test that a build returns the correct sourcestamp - """ - source1 = self.build.getSourceStamp("A") - source2 = self.build.getSourceStamp("B") - - self.assertEqual( [source1.repository, source1.revision], ["repoA", "12345"]) - self.assertEqual( [source2.repository, source2.revision], ["repoB", "67890"]) - - def test_buildReturnSourceStamp_empty_codebase(self): - """ - Test that a build returns the correct sourcestamp if codebase is empty - """ - codebase = '' - source3 = self.build.getSourceStamp(codebase) - self.assertTrue(source3 is not None) - self.assertEqual( [source3.repository, source3.revision], ["repoC", "111213"]) - - -class TestBuildBlameList(unittest.TestCase): - - def setUp(self): - self.sourceByMe = FakeSource() - self.sourceByMe.repository = "repoA" - self.sourceByMe.codebase = "A" - self.sourceByMe.changes = [FakeChange(10), FakeChange(11)] - self.sourceByMe.changes[0].who = "me" - self.sourceByMe.changes[1].who = "me" - - self.sourceByHim = FakeSource() - self.sourceByHim.repository = "repoB" - self.sourceByHim.codebase = "B" - self.sourceByHim.changes = [FakeChange(12), FakeChange(13)] - self.sourceByHim.changes[0].who = "him" - self.sourceByHim.changes[1].who = "him" - - self.patchSource = FakeSource() - self.patchSource.repository = "repoB" - self.patchSource.codebase = "B" - self.patchSource.changes = [] - self.patchSource.revision = "67890" - self.patchSource.patch_info = ("jeff", "jeff's new feature") - - def test_blamelist_for_changes(self): - r = FakeRequest() - r.sources.extend([self.sourceByMe, self.sourceByHim]) - build = Build([r]) - blamelist = build.blamelist() - self.assertEqual(blamelist, ['him', 'me']) - - def test_blamelist_for_patch(self): - r = FakeRequest() - r.sources.extend([self.patchSource]) - build = Build([r]) - blamelist = build.blamelist() - self.assertEqual(blamelist, ['jeff']) - -class TestSetupProperties_MultipleSources(unittest.TestCase): - """ - Test that the property values, based on the available requests, are - initialized properly - """ - def setUp(self): - self.props = {} - r = FakeRequest() - r.sources = [] - r.sources.append(FakeSource()) - r.sources[0].changes = [FakeChange()] - r.sources[0].repository = "http://svn-repo-A" - r.sources[0].codebase = "A" - r.sources[0].branch = "develop" - r.sources[0].revision = "12345" - r.sources.append(FakeSource()) - r.sources[1].changes = [FakeChange()] - r.sources[1].repository = "http://svn-repo-B" - r.sources[1].codebase = "B" - r.sources[1].revision = "34567" - self.build = Build([r]) - self.build.setStepFactories([]) - self.builder = Mock() - self.build.setBuilder(self.builder) - self.build.build_status = FakeBuildStatus() - # record properties that will be set - self.build.build_status.setProperty = self.setProperty - - def setProperty(self, n,v,s, runtime = False): - if s not in self.props: - self.props[s] = {} - if not self.props[s]: - self.props[s] = {} - self.props[s][n] = v - - def test_sourcestamp_properties_not_set(self): - self.build.setupProperties() - self.assertTrue("codebase" not in self.props["Build"]) - self.assertTrue("revision" not in self.props["Build"]) - self.assertTrue("branch" not in self.props["Build"]) - self.assertTrue("project" not in self.props["Build"]) - self.assertTrue("repository" not in self.props["Build"]) - -class TestSetupProperties_SingleSource(unittest.TestCase): - """ - Test that the property values, based on the available requests, are - initialized properly - """ - def setUp(self): - self.props = {} - r = FakeRequest() - r.sources = [] - r.sources.append(FakeSource()) - r.sources[0].changes = [FakeChange()] - r.sources[0].repository = "http://svn-repo-A" - r.sources[0].codebase = "A" - r.sources[0].branch = "develop" - r.sources[0].revision = "12345" - self.build = Build([r]) - self.build.setStepFactories([]) - self.builder = Mock() - self.build.setBuilder(self.builder) - self.build.build_status = FakeBuildStatus() - # record properties that will be set - self.build.build_status.setProperty = self.setProperty - - def setProperty(self, n,v,s, runtime = False): - if s not in self.props: - self.props[s] = {} - if not self.props[s]: - self.props[s] = {} - self.props[s][n] = v - - def test_properties_codebase(self): - self.build.setupProperties() - codebase = self.props["Build"]["codebase"] - self.assertEqual(codebase, "A") - - def test_properties_repository(self): - self.build.setupProperties() - repository = self.props["Build"]["repository"] - self.assertEqual(repository, "http://svn-repo-A") - - def test_properties_revision(self): - self.build.setupProperties() - revision = self.props["Build"]["revision"] - self.assertEqual(revision, "12345") - - def test_properties_branch(self): - self.build.setupProperties() - branch = self.props["Build"]["branch"] - self.assertEqual(branch, "develop") - - def test_property_project(self): - self.build.setupProperties() - project = self.props["Build"]["project"] - self.assertEqual(project, '') - -class TestBuildProperties(unittest.TestCase): - """ - Test that a Build has the necessary L{IProperties} methods, and that they - properly delegate to the C{build_status} attribute - so really just a test - of the L{IProperties} adapter. - """ - - def setUp(self): - r = FakeRequest() - r.sources = [FakeSource()] - r.sources[0].changes = [FakeChange()] - r.sources[0].revision = "12345" - self.build = Build([r]) - self.build.setStepFactories([]) - self.builder = Mock() - self.build.setBuilder(self.builder) - self.build_status = FakeBuildStatus() - self.build.startBuild(self.build_status, None, Mock()) - - def test_getProperty(self): - self.build.getProperty('x') - self.build_status.getProperty.assert_called_with('x', None) - - def test_getProperty_default(self): - self.build.getProperty('x', 'nox') - self.build_status.getProperty.assert_called_with('x', 'nox') - - def test_setProperty(self): - self.build.setProperty('n', 'v', 's') - self.build_status.setProperty.assert_called_with('n', 'v', 's', - runtime=True) - - def test_hasProperty(self): - self.build_status.hasProperty.return_value = True - self.assertTrue(self.build.hasProperty('p')) - self.build_status.hasProperty.assert_called_with('p') - - def test_has_key(self): - self.build_status.has_key.return_value = True - self.assertTrue(self.build.has_key('p')) - # has_key calls through to hasProperty - self.build_status.hasProperty.assert_called_with('p') - - def test_render(self): - self.build.render("xyz") - self.build_status.render.assert_called_with("xyz") |