aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_schedulers_basic.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_schedulers_basic.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_schedulers_basic.py452
1 files changed, 0 insertions, 452 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_schedulers_basic.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_schedulers_basic.py
deleted file mode 100644
index db8e848e..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_schedulers_basic.py
+++ /dev/null
@@ -1,452 +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
-
-import mock
-from twisted.trial import unittest
-from twisted.internet import defer, task
-from buildbot import config
-from buildbot.test.fake import fakedb
-from buildbot.schedulers import basic
-from buildbot.test.util import scheduler
-
-class CommonStuffMixin(object):
-
- def makeScheduler(self, klass, **kwargs_override):
- kwargs = dict(name="tsched", treeStableTimer=60,
- builderNames=['tbuild'])
- kwargs.update(kwargs_override)
- sched = self.attachScheduler(klass(**kwargs), self.OBJECTID)
-
- # add a Clock to help checking timing issues
- self.clock = sched._reactor = task.Clock()
-
- # keep track of builds in self.events
- self.events = []
- def addBuildsetForChanges(reason='', external_idstring=None, changeids=[]):
- self.assertEqual(external_idstring, None)
- self.assertEqual(reason, 'scheduler') # basic schedulers all use this
- self.events.append('B%s@%d' % (`changeids`.replace(' ',''),
- self.clock.seconds()))
- return defer.succeed(None)
- sched.addBuildsetForChanges = addBuildsetForChanges
-
- # see self.assertConsumingChanges
- self.consumingChanges = None
- def startConsumingChanges(**kwargs):
- self.consumingChanges = kwargs
- return defer.succeed(None)
- sched.startConsumingChanges = startConsumingChanges
-
- return sched
-
- def assertConsumingChanges(self, **kwargs):
- self.assertEqual(self.consumingChanges, kwargs)
-
-class BaseBasicScheduler(CommonStuffMixin,
- scheduler.SchedulerMixin, unittest.TestCase):
-
- OBJECTID = 244
-
- # a custom subclass since we're testing the base class. This basically
- # re-implements SingleBranchScheduler, but with more asserts
- class Subclass(basic.BaseBasicScheduler):
- timer_started = False
- def getChangeFilter(self, *args, **kwargs):
- return kwargs.get('change_filter')
-
- def getTimerNameForChange(self, change):
- self.timer_started = True
- return "xxx"
-
- def getChangeClassificationsForTimer(self, objectid, timer_name):
- assert timer_name == "xxx"
- assert objectid == BaseBasicScheduler.OBJECTID
- return self.master.db.schedulers.getChangeClassifications(objectid)
-
- def setUp(self):
- self.setUpScheduler()
-
- def tearDown(self):
- self.tearDownScheduler()
-
- # tests
-
- def test_constructor_positional_exception(self):
- self.assertRaises(config.ConfigErrors,
- lambda : self.Subclass("tsched", "master", 60))
-
- def test_startService_no_treeStableTimer(self):
- cf = mock.Mock('cf')
- fII = mock.Mock('fII')
- sched = self.makeScheduler(self.Subclass, treeStableTimer=None, change_filter=cf,
- fileIsImportant=fII)
-
- self.db.schedulers.fakeClassifications(self.OBJECTID, { 20 : True })
-
- d = sched.startService(_returnDeferred=True)
-
- # check that the scheduler has started to consume changes, and the
- # classifications *have* been flushed, since they will not be used
- def check(_):
- self.assertConsumingChanges(fileIsImportant=fII, change_filter=cf,
- onlyImportant=False)
- self.db.schedulers.assertClassifications(self.OBJECTID, {})
- d.addCallback(check)
- d.addCallback(lambda _ : sched.stopService())
- return d
-
- def test_subclass_fileIsImportant(self):
- class Subclass(self.Subclass):
- def fileIsImportant(self, change):
- return False
- sched = self.makeScheduler(Subclass, onlyImportant=True)
- self.failUnlessEqual(Subclass.fileIsImportant.__get__(sched), sched.fileIsImportant)
-
- def test_startService_treeStableTimer(self):
- cf = mock.Mock()
- sched = self.makeScheduler(self.Subclass, treeStableTimer=10, change_filter=cf)
-
- self.db.schedulers.fakeClassifications(self.OBJECTID, { 20 : True })
- self.master.db.insertTestData([
- fakedb.Change(changeid=20),
- fakedb.SchedulerChange(objectid=self.OBJECTID,
- changeid=20, important=1)
- ])
-
- d = sched.startService(_returnDeferred=True)
-
- # check that the scheduler has started to consume changes, and no
- # classifications have been flushed. Furthermore, the existing
- # classification should have been acted on, so the timer should be
- # running
- def check(_):
- self.assertConsumingChanges(fileIsImportant=None, change_filter=cf,
- onlyImportant=False)
- self.db.schedulers.assertClassifications(self.OBJECTID, { 20 : True })
- self.assertTrue(sched.timer_started)
- self.assertEqual(sched.getPendingBuildTimes(), [ 10 ])
- self.clock.advance(10)
- self.assertEqual(sched.getPendingBuildTimes(), [])
- d.addCallback(check)
- d.addCallback(lambda _ : sched.stopService())
- return d
-
- def test_gotChange_no_treeStableTimer_unimportant(self):
- sched = self.makeScheduler(self.Subclass, treeStableTimer=None, branch='master')
-
- sched.startService()
-
- d = sched.gotChange(self.makeFakeChange(branch='master', number=13), False)
- def check(_):
- self.assertEqual(self.events, [])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_no_treeStableTimer_important(self):
- sched = self.makeScheduler(self.Subclass, treeStableTimer=None, branch='master')
-
- sched.startService()
-
- d = sched.gotChange(self.makeFakeChange(branch='master', number=13), True)
- def check(_):
- self.assertEqual(self.events, [ 'B[13]@0' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_treeStableTimer_unimportant(self):
- sched = self.makeScheduler(self.Subclass, treeStableTimer=10, branch='master')
-
- sched.startService()
-
- d = sched.gotChange(self.makeFakeChange(branch='master', number=13), False)
- def check(_):
- self.assertEqual(self.events, [])
- d.addCallback(check)
- d.addCallback(lambda _ : self.clock.advance(10))
- d.addCallback(check) # should still be empty
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_treeStableTimer_important(self):
- sched = self.makeScheduler(self.Subclass, treeStableTimer=10, branch='master')
-
- sched.startService()
-
- d = sched.gotChange(self.makeFakeChange(branch='master', number=13), True)
- d.addCallback(lambda _ : self.clock.advance(10))
- def check(_):
- self.assertEqual(self.events, [ 'B[13]@10' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- @defer.inlineCallbacks
- def test_gotChange_treeStableTimer_sequence(self):
- sched = self.makeScheduler(self.Subclass, treeStableTimer=9, branch='master')
- self.master.db.insertTestData([
- fakedb.Change(changeid=1, branch='master', when_timestamp=1110),
- fakedb.ChangeFile(changeid=1, filename='readme.txt'),
- fakedb.Change(changeid=2, branch='master', when_timestamp=2220),
- fakedb.ChangeFile(changeid=2, filename='readme.txt'),
- fakedb.Change(changeid=3, branch='master', when_timestamp=3330),
- fakedb.ChangeFile(changeid=3, filename='readme.txt'),
- fakedb.Change(changeid=4, branch='master', when_timestamp=4440),
- fakedb.ChangeFile(changeid=4, filename='readme.txt'),
- ])
- sched.startService()
-
- self.clock.advance(2220)
-
- # this important change arrives at 2220, so the stable timer will last
- # until 2229
- yield sched.gotChange(
- self.makeFakeChange(branch='master', number=1, when=2220),
- True)
- self.assertEqual(self.events, [])
- self.assertEqual(sched.getPendingBuildTimes(), [2229])
- self.db.schedulers.assertClassifications(self.OBJECTID, { 1 : True })
-
- # but another (unimportant) change arrives before then
- self.clock.advance(6) # to 2226
- self.assertEqual(self.events, [])
-
- yield sched.gotChange(
- self.makeFakeChange(branch='master', number=2, when=2226),
- False)
- self.assertEqual(self.events, [])
- self.assertEqual(sched.getPendingBuildTimes(), [2235])
- self.db.schedulers.assertClassifications(self.OBJECTID, { 1 : True, 2 : False })
-
- self.clock.advance(3) # to 2229
- self.assertEqual(self.events, [])
-
- self.clock.advance(3) # to 2232
- self.assertEqual(self.events, [])
-
- # another important change arrives at 2232
- yield sched.gotChange(
- self.makeFakeChange(branch='master', number=3, when=2232),
- True)
- self.assertEqual(self.events, [])
- self.assertEqual(sched.getPendingBuildTimes(), [2241])
- self.db.schedulers.assertClassifications(self.OBJECTID, { 1 : True, 2 : False, 3 : True })
-
- self.clock.advance(3) # to 2235
- self.assertEqual(self.events, [])
-
- # finally, time to start the build!
- self.clock.advance(6) # to 2241
- self.assertEqual(self.events, [ 'B[1,2,3]@2241' ])
- self.assertEqual(sched.getPendingBuildTimes(), [])
- self.db.schedulers.assertClassifications(self.OBJECTID, { })
-
- yield sched.stopService()
-
-
-class SingleBranchScheduler(CommonStuffMixin,
- scheduler.SchedulerMixin, unittest.TestCase):
-
- OBJECTID = 245
-
- def setUp(self):
- self.setUpScheduler()
-
- def tearDown(self):
- self.tearDownScheduler()
-
- def test_constructor_branch_mandatory(self):
- self.assertRaises(config.ConfigErrors,
- lambda : basic.SingleBranchScheduler(name="tsched", treeStableTimer=60))
-
- def test_constructor_no_branch_but_filter(self):
- # this shouldn't fail
- basic.SingleBranchScheduler(name="tsched", treeStableTimer=60,
- builderNames=['a','b'], change_filter=mock.Mock())
-
- def test_constructor_branches_forbidden(self):
- self.assertRaises(config.ConfigErrors,
- lambda : basic.SingleBranchScheduler(name="tsched", treeStableTimer=60, branches='x'))
-
- def test_gotChange_treeStableTimer_important(self):
- # this looks suspiciously like the same test above, because SingleBranchScheduler
- # is about the same as the test subclass used above
- sched = self.makeScheduler(basic.SingleBranchScheduler,
- treeStableTimer=10, branch='master')
-
- sched.startService()
-
- d = sched.gotChange(self.makeFakeChange(branch='master', number=13), True)
- d.addCallback(lambda _ : self.clock.advance(10))
- def check(_):
- self.assertEqual(self.events, [ 'B[13]@10' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
-
-class AnyBranchScheduler(CommonStuffMixin,
- scheduler.SchedulerMixin, unittest.TestCase):
-
- OBJECTID = 246
-
- def setUp(self):
- self.setUpScheduler()
-
- def tearDown(self):
- self.tearDownScheduler()
-
- def test_constructor_branch_forbidden(self):
- self.assertRaises(config.ConfigErrors,
- lambda : basic.SingleBranchScheduler(name="tsched", treeStableTimer=60, branch='x'))
-
- def test_gotChange_treeStableTimer_multiple_branches(self):
- """Two changes with different branches get different treeStableTimers"""
- sched = self.makeScheduler(basic.AnyBranchScheduler,
- treeStableTimer=10, branches=['master', 'devel', 'boring'])
-
- sched.startService()
-
- def mkch(**kwargs):
- ch = self.makeFakeChange(**kwargs)
- self.db.changes.fakeAddChangeInstance(ch)
- return ch
-
- d = defer.succeed(None)
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', number=13), True))
- d.addCallback(lambda _ :
- self.assertEqual(sched.getPendingBuildTimes(), [10]))
- d.addCallback(lambda _ :
- self.clock.advance(1)) # time is now 1
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', number=14), False))
- d.addCallback(lambda _ :
- self.assertEqual(sched.getPendingBuildTimes(), [11]))
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='boring', number=15), False))
- d.addCallback(lambda _ :
- self.clock.pump([1]*4)) # time is now 5
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='devel', number=16), True))
- d.addCallback(lambda _ :
- self.assertEqual(sorted(sched.getPendingBuildTimes()), [11,15]))
- d.addCallback(lambda _ :
- self.clock.pump([1]*10)) # time is now 15
- def check(_):
- self.assertEqual(self.events, [ 'B[13,14]@11', 'B[16]@15' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_treeStableTimer_multiple_repositories(self):
- """Two repositories, even with the same branch name, have different treeStableTimers"""
- sched = self.makeScheduler(basic.AnyBranchScheduler,
- treeStableTimer=10, branches=['master'])
-
- sched.startService()
-
- def mkch(**kwargs):
- ch = self.makeFakeChange(**kwargs)
- self.db.changes.fakeAddChangeInstance(ch)
- return ch
-
- d = defer.succeed(None)
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', repository="repo", number=13), True))
- d.addCallback(lambda _ :
- self.clock.advance(1)) # time is now 1
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', repository="repo", number=14), False))
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', repository="other_repo", number=15), False))
- d.addCallback(lambda _ :
- self.clock.pump([1]*4)) # time is now 5
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', repository="other_repo", number=17), True))
- d.addCallback(lambda _ :
- self.clock.pump([1]*10)) # time is now 15
- def check(_):
- self.assertEqual(self.events, [ 'B[13,14]@11', 'B[15,17]@15' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_treeStableTimer_multiple_projects(self):
- """Two projects, even with the same branch name, have different treeStableTimers"""
- sched = self.makeScheduler(basic.AnyBranchScheduler,
- treeStableTimer=10, branches=['master'])
-
- sched.startService()
-
- def mkch(**kwargs):
- ch = self.makeFakeChange(**kwargs)
- self.db.changes.fakeAddChangeInstance(ch)
- return ch
-
- d = defer.succeed(None)
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', project="proj", number=13), True))
- d.addCallback(lambda _ :
- self.clock.advance(1)) # time is now 1
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', project="proj", number=14), False))
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', project="other_proj", number=15), False))
- d.addCallback(lambda _ :
- self.clock.pump([1]*4)) # time is now 5
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', project="other_proj", number=17), True))
- d.addCallback(lambda _ :
- self.clock.pump([1]*10)) # time is now 15
- def check(_):
- self.assertEqual(self.events, [ 'B[13,14]@11', 'B[15,17]@15' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())
-
- def test_gotChange_treeStableTimer_multiple_codebases(self):
- """Two codebases, even with the same branch name, have different treeStableTimers"""
- sched = self.makeScheduler(basic.AnyBranchScheduler,
- treeStableTimer=10, branches=['master'])
-
- sched.startService()
-
- def mkch(**kwargs):
- ch = self.makeFakeChange(**kwargs)
- self.db.changes.fakeAddChangeInstance(ch)
- return ch
-
- d = defer.succeed(None)
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', codebase="base", number=13), True))
- d.addCallback(lambda _ :
- self.clock.advance(1)) # time is now 1
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', codebase="base", number=14), False))
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', codebase="other_base", number=15), False))
- d.addCallback(lambda _ :
- self.clock.pump([1]*4)) # time is now 5
- d.addCallback(lambda _ :
- sched.gotChange(mkch(branch='master', codebase="other_base", number=17), True))
- d.addCallback(lambda _ :
- self.clock.pump([1]*10)) # time is now 15
- def check(_):
- self.assertEqual(self.events, [ 'B[13,14]@11', 'B[15,17]@15' ])
- d.addCallback(check)
-
- d.addCallback(lambda _ : sched.stopService())