aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py502
1 files changed, 0 insertions, 502 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py
deleted file mode 100644
index 245985a5..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_steps_trigger.py
+++ /dev/null
@@ -1,502 +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.python import failure
-from twisted.internet import defer, reactor
-from buildbot import config, interfaces
-from buildbot.process import properties
-from buildbot.status import master
-from buildbot.status.results import SUCCESS, FAILURE, EXCEPTION
-from buildbot.steps import trigger
-from buildbot.test.util import steps, compat
-from buildbot.test.fake import fakemaster, fakedb
-
-class FakeTriggerable(object):
- implements(interfaces.ITriggerableScheduler)
-
- triggered_with = None
- result = SUCCESS
- brids = {}
- exception = False
-
- def __init__(self, name):
- self.name = name
-
- def trigger(self, sourcestamps = None, set_props=None):
- self.triggered_with = (sourcestamps, set_props.properties)
- d = defer.Deferred()
- if self.exception:
- reactor.callLater(0, d.errback, RuntimeError('oh noes'))
- else:
- reactor.callLater(0, d.callback, (self.result, self.brids))
- return d
-
-
-class FakeSourceStamp(object):
-
- def __init__(self, **kwargs):
- self.__dict__.update(kwargs)
-
- def asDict(self, includePatch = True):
- return self.__dict__.copy()
-
-# Magic numbers that relate brid to other build settings
-BRID_TO_BSID = lambda brid: brid+2000
-BRID_TO_BID = lambda brid: brid+3000
-BRID_TO_BUILD_NUMBER = lambda brid: brid+4000
-
-class TestTrigger(steps.BuildStepMixin, unittest.TestCase):
-
- def setUp(self):
- return self.setUpBuildStep()
-
- def tearDown(self):
- return self.tearDownBuildStep()
-
- def setupStep(self, step, sourcestampsInBuild=None, gotRevisionsInBuild=None, *args, **kwargs):
- sourcestamps = sourcestampsInBuild or []
- got_revisions = gotRevisionsInBuild or {}
-
- steps.BuildStepMixin.setupStep(self, step, *args, **kwargs)
-
- # This step reaches deeply into a number of parts of Buildbot. That
- # should be fixed!
-
- # set up a buildmaster that knows about two fake schedulers, a and b
- m = fakemaster.make_master()
- self.build.builder.botmaster = m.botmaster
- m.db = fakedb.FakeDBConnector(self)
- m.status = master.Status(m)
- m.config.buildbotURL = "baseurl/"
-
- self.scheduler_a = a = FakeTriggerable(name='a')
- self.scheduler_b = b = FakeTriggerable(name='b')
- def allSchedulers():
- return [ a, b ]
- m.allSchedulers = allSchedulers
-
- a.brids = {'A': 11}
- b.brids = {'B': 22}
-
- make_fake_br = lambda brid, name: fakedb.BuildRequest(id=brid,
- buildsetid=BRID_TO_BSID(brid),
- buildername=name)
- make_fake_build = lambda brid: fakedb.Build(brid=brid,
- id=BRID_TO_BID(brid),
- number=BRID_TO_BUILD_NUMBER(brid))
-
- m.db.insertTestData([
- make_fake_br(11, "A"),
- make_fake_br(22, "B"),
- make_fake_build(11),
- make_fake_build(22),
- ])
-
- def getAllSourceStamps():
- return sourcestamps
- self.build.getAllSourceStamps = getAllSourceStamps
- def getAllGotRevisions():
- return got_revisions
- self.build.build_status.getAllGotRevisions = getAllGotRevisions
-
- self.exp_add_sourcestamp = None
- self.exp_a_trigger = None
- self.exp_b_trigger = None
- self.exp_added_urls = []
-
- def runStep(self, expect_waitForFinish=False):
- d = steps.BuildStepMixin.runStep(self)
-
- if expect_waitForFinish:
- # the build doesn't finish until after a callLater, so this has the
- # effect of checking whether the deferred has been fired already;
- # it should not have been!
- early = []
- d.addCallback(early.append)
- self.assertEqual(early, [])
-
- def check(_):
- self.assertEqual(self.scheduler_a.triggered_with,
- self.exp_a_trigger)
- self.assertEqual(self.scheduler_b.triggered_with,
- self.exp_b_trigger)
- self.assertEqual(self.step_status.addURL.call_args_list,
- self.exp_added_urls)
-
- if self.exp_add_sourcestamp:
- self.assertEqual(self.addSourceStamp_kwargs,
- self.exp_add_sourcestamp)
- d.addCallback(check)
-
- # pause runStep's completion until after any other callLater's are done
- def wait(_):
- d = defer.Deferred()
- reactor.callLater(0, d.callback, None)
- return d
- d.addCallback(wait)
-
- return d
-
- def expectTriggeredWith(self, a=None, b=None):
- self.exp_a_trigger = a
- self.exp_b_trigger = b
-
- def expectAddedSourceStamp(self, **kwargs):
- self.exp_add_sourcestamp = kwargs
-
- def expectTriggeredLinks(self, *args):
- def get_args(sch, name):
- label = lambda name, num: "%s #%d" % (name, num)
- url = lambda name, num: "baseurl/builders/%s/builds/%d" % (name, num )
-
- num = BRID_TO_BUILD_NUMBER(sch.brids[name])
-
- #returns the *args and **kwargs that will be called on addURL...
- # which is just addURL('label', 'url')
- return ( (label(name,num), url(name,num)) , {} )
-
- if 'a' in args:
- self.exp_added_urls.append(get_args(self.scheduler_a, 'A'))
- if 'b' in args:
- self.exp_added_urls.append(get_args(self.scheduler_b, 'B'))
-
-
- # tests
-
- def test_no_schedulerNames(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger())
-
- def test_sourceStamp_and_updateSourceStamp(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger(schedulerNames=['c'],
- sourceStamp=dict(x=1), updateSourceStamp=True))
-
- def test_sourceStamps_and_updateSourceStamp(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger(schedulerNames=['c'],
- sourceStamps=[dict(x=1), dict(x=2)],
- updateSourceStamp=True))
-
- def test_updateSourceStamp_and_alwaysUseLatest(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger(schedulerNames=['c'],
- updateSourceStamp=True, alwaysUseLatest=True))
-
- def test_sourceStamp_and_alwaysUseLatest(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger(schedulerNames=['c'],
- sourceStamp=dict(x=1), alwaysUseLatest=True))
-
- def test_sourceStamps_and_alwaysUseLatest(self):
- self.assertRaises(config.ConfigErrors, lambda :
- trigger.Trigger(schedulerNames=['c'],
- sourceStamps=[dict(x=1), dict(x=2)],
- alwaysUseLatest=True))
-
- def test_simple(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'], sourceStamps = {}))
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({}, {}))
- return self.runStep()
-
- def test_simple_failure(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a']))
- self.scheduler_a.result = FAILURE
- # not waitForFinish, so trigger step succeeds even though the build
- # didn't fail
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({}, {}))
- return self.runStep()
-
- @compat.usesFlushLoggedErrors
- def test_simple_exception(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a']))
- self.scheduler_a.exception = True
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=( {}, {}))
- d = self.runStep()
- def flush(_):
- self.assertEqual(len(self.flushLoggedErrors(RuntimeError)), 1)
- d.addCallback(flush)
- return d
-
- def test_bogus_scheduler(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a', 'x']))
- self.expectOutcome(result=FAILURE, status_text=['not valid scheduler:', 'x'])
- self.expectTriggeredWith(a=None) # a is not triggered!
- return self.runStep()
-
- def test_updateSourceStamp(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=True),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ],
- gotRevisionsInBuild = {'': 23456},
- )
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({'':{'codebase':'',
- 'repository': 'x',
- 'revision': 23456}
- }, {}))
- return self.runStep()
-
- def test_updateSourceStamp_no_got_revision(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=True),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ])
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({'':{'codebase':'',
- 'repository': 'x',
- 'revision': 11111} # uses old revision
- }, {}))
- return self.runStep()
-
- def test_not_updateSourceStamp(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=False),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ],
- gotRevisionsInBuild = {'': 23456},
- )
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({'':{'codebase':'',
- 'repository': 'x',
- 'revision': 11111}
- }, {}))
- return self.runStep()
-
- def test_updateSourceStamp_multiple_repositories(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=True),
- sourcestampsInBuild = [
- FakeSourceStamp(codebase='cb1',
- revision='12345'),
- FakeSourceStamp(codebase='cb2',
- revision='12345')
- ],
- gotRevisionsInBuild = {'cb1': 23456, 'cb2': 34567},
- )
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({'cb1': {'codebase':'cb1',
- 'revision':23456},
- 'cb2': {'codebase':'cb2',
- 'revision':34567}
- }, {}))
- return self.runStep()
-
- def test_updateSourceStamp_prop_false(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=properties.Property('usess')),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ],
- gotRevisionsInBuild = {'': 23456},
- )
- self.properties.setProperty('usess', False, 'me')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- # didn't use got_revision
- self.expectTriggeredWith(a=({'': { 'codebase':'',
- 'repository': 'x',
- 'revision': 11111
- }}, {}))
- return self.runStep()
-
- def test_updateSourceStamp_prop_true(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- updateSourceStamp=properties.Property('usess')),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ],
- gotRevisionsInBuild = {'': 23456},
- )
- self.properties.setProperty('usess', True, 'me')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- # didn't use got_revision
- self.expectTriggeredWith(a=({'': { 'codebase':'',
- 'repository': 'x',
- 'revision': 23456
- }}, {}))
- return self.runStep()
-
- def test_alwaysUseLatest(self):
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- alwaysUseLatest=True),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ])
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- # Do not pass setid
- self.expectTriggeredWith(b=({}, {}))
- return self.runStep()
-
- def test_alwaysUseLatest_prop_false(self):
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- alwaysUseLatest=properties.Property('aul')),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ])
- self.properties.setProperty('aul', False, 'me')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- # didn't use latest
- self.expectTriggeredWith(b=({'': { 'codebase':'',
- 'repository': 'x',
- 'revision': 11111}
- }, {}))
- return self.runStep()
-
- def test_alwaysUseLatest_prop_true(self):
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- alwaysUseLatest=properties.Property('aul')),
- sourcestampsInBuild = [FakeSourceStamp(codebase='',
- repository='x',
- revision=11111)
- ])
- self.properties.setProperty('aul', True, 'me')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- # didn't use latest
- self.expectTriggeredWith(b=({}, {}))
- return self.runStep()
-
- def test_sourceStamp(self):
- ss = dict(revision=9876, branch='dev')
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- sourceStamp=ss))
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- self.expectTriggeredWith(b=({'': ss}, {}))
- return self.runStep()
-
- def test_set_of_sourceStamps(self):
- ss1 = dict(codebase='cb1', repository='r1', revision=9876, branch='dev')
- ss2 = dict(codebase='cb2',repository='r2', revision=5432, branch='dev')
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- sourceStamps=[ss1,ss2]))
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- self.expectTriggeredWith(b=({'cb1':ss1, 'cb2':ss2}, {}))
- return self.runStep()
-
- def test_set_of_sourceStamps_override_build(self):
- ss1 = dict(codebase='cb1', repository='r1', revision=9876, branch='dev')
- ss2 = dict(codebase='cb2',repository='r2', revision=5432, branch='dev')
- ss3 = FakeSourceStamp(codebase='cb3', repository='r3', revision=1234, branch='dev')
- ss4 = FakeSourceStamp(codebase='cb4',repository='r4', revision=2345, branch='dev')
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- sourceStamps=[ss1,ss2]), sourcestampsInBuild=[ss3, ss4])
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- self.expectTriggeredWith(b=({'cb1':ss1, 'cb2':ss2}, {}))
- return self.runStep()
-
-
- def test_sourceStamp_prop(self):
- self.setupStep(trigger.Trigger(schedulerNames=['b'],
- sourceStamp=dict(revision=properties.Property('rev'),
- branch='dev')))
- self.properties.setProperty('rev', 602, 'me')
- expected_ss = dict(revision=602, branch='dev')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'b'])
- self.expectTriggeredWith(b=({'': expected_ss}, {}))
- return self.runStep()
-
- def test_waitForFinish(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a', 'b'],
- waitForFinish=True))
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a', 'b'])
- self.expectTriggeredWith(
- a=({}, {}),
- b=({}, {}))
- self.expectTriggeredLinks('a','b')
- return self.runStep(expect_waitForFinish=True)
-
- def test_waitForFinish_failure(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- waitForFinish=True))
- self.scheduler_a.result = FAILURE
- self.expectOutcome(result=FAILURE, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({}, {}))
- self.expectTriggeredLinks('a')
- return self.runStep(expect_waitForFinish=True)
-
- @compat.usesFlushLoggedErrors
- def test_waitForFinish_exception(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a', 'b'],
- waitForFinish=True))
- self.scheduler_b.exception = True
- self.expectOutcome(result=EXCEPTION,
- status_text=['triggered', 'a', 'b'])
- self.expectTriggeredWith(
- a=({}, {}),
- b=({}, {}))
- self.expectTriggeredLinks('a') # b doesn't return a brid
- d = self.runStep(expect_waitForFinish=True)
- def flush(_):
- self.assertEqual(len(self.flushLoggedErrors(RuntimeError)), 1)
- d.addCallback(flush)
- return d
-
- def test_set_properties(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- set_properties=dict(x=1, y=2)))
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({},
- dict(x=(1, 'Trigger'), y=(2, 'Trigger'))))
- return self.runStep()
-
- def test_set_properties_prop(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- set_properties=dict(x=properties.Property('X'), y=2)))
- self.properties.setProperty('X', 'xxx', 'here')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({},
- dict(x=('xxx', 'Trigger'), y=(2, 'Trigger'))))
- return self.runStep()
-
- def test_copy_properties(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- copy_properties=['a', 'b']))
- self.properties.setProperty('a', 'A', 'AA')
- self.properties.setProperty('b', 'B', 'BB')
- self.properties.setProperty('c', 'C', 'CC')
- self.expectOutcome(result=SUCCESS, status_text=['triggered', 'a'])
- self.expectTriggeredWith(a=({},
- dict(a=('A', 'Trigger'),
- b=('B', 'Trigger'))))
- return self.runStep()
-
- def test_interrupt(self):
- self.setupStep(trigger.Trigger(schedulerNames=['a'],
- waitForFinish=True))
- self.expectOutcome(result=EXCEPTION, status_text=['interrupted'])
- self.expectTriggeredWith(a=({}, {}))
- d = self.runStep(expect_waitForFinish=True)
-
- # interrupt before the callLater representing the Triggerable
- # schedulers completes
- self.step.interrupt(failure.Failure(RuntimeError('oh noes')))
-
- return d