| OLD | NEW |
| (Empty) |
| 1 from twisted.trial import unittest | |
| 2 from twisted.internet import reactor, defer | |
| 3 from twisted.python import log | |
| 4 | |
| 5 from buildbot.test.runutils import RunMixin | |
| 6 from buildbot.sourcestamp import SourceStamp | |
| 7 | |
| 8 config_base = """ | |
| 9 from buildbot.process import factory | |
| 10 from buildbot.steps import dummy | |
| 11 from buildbot.buildslave import BuildSlave | |
| 12 from buildbot.scheduler import Triggerable, Dependent | |
| 13 from buildbot.config import BuilderConfig | |
| 14 | |
| 15 BuildmasterConfig = c = {} | |
| 16 | |
| 17 f = factory.BuildFactory() | |
| 18 f.addStep(dummy.Dummy, timeout=%d) | |
| 19 | |
| 20 c['slaves'] = [BuildSlave('bot1', 'sekrit')] | |
| 21 | |
| 22 upstream = Triggerable('s_upstream', ['upstream'], {'prop': '%s'}) | |
| 23 dep = Dependent('s_dep', upstream, ['depend'], {'dep prop': '%s'}) | |
| 24 c['schedulers'] = [upstream, dep] | |
| 25 c['builders'] = [ | |
| 26 BuilderConfig(name='upstream', slavename='bot1', factory=f), | |
| 27 BuilderConfig(name='depend', slavename='bot1', factory=f), | |
| 28 ] | |
| 29 c['slavePortnum'] = 0 | |
| 30 """ | |
| 31 | |
| 32 class DependingScheduler(RunMixin, unittest.TestCase): | |
| 33 '''Test an upstream and a dependent scheduler while reconfiguring.''' | |
| 34 | |
| 35 def testReconfig(self): | |
| 36 self.reconfigured = 0 | |
| 37 self.master.loadConfig(config_base % (1, 'prop value', 'dep prop value')
) | |
| 38 self.prop_value = 'prop value' | |
| 39 self.dep_prop_value = 'dep prop value' | |
| 40 self.master.readConfig = True | |
| 41 self.master.startService() | |
| 42 d = self.connectSlave(builders=['upstream', 'depend']) | |
| 43 d.addCallback(self._triggerUpstream) | |
| 44 return d | |
| 45 def _triggerUpstream(self, res): | |
| 46 log.msg("trigger upstream") | |
| 47 ss = SourceStamp() | |
| 48 upstream = [s for s in self.master.allSchedulers() | |
| 49 if s.name == 's_upstream'][0] | |
| 50 d = upstream.trigger(ss) | |
| 51 d.addCallback(self._gotBuild) | |
| 52 return d | |
| 53 | |
| 54 def _gotBuild(self, res): | |
| 55 log.msg("done") | |
| 56 d = defer.Deferred() | |
| 57 d.addCallback(self._doChecks) | |
| 58 reactor.callLater(2, d.callback, None) | |
| 59 return d | |
| 60 | |
| 61 def _doChecks(self, res): | |
| 62 log.msg("starting tests") | |
| 63 ub = self.status.getBuilder('upstream').getLastFinishedBuild() | |
| 64 tb = self.status.getBuilder('depend').getLastFinishedBuild() | |
| 65 self.assertEqual(ub.getProperty('prop'), self.prop_value) | |
| 66 self.assertEqual(ub.getNumber(), self.reconfigured) | |
| 67 self.assertEqual(tb.getProperty('dep prop'), self.dep_prop_value) | |
| 68 self.assertEqual(tb.getNumber(), self.reconfigured) | |
| 69 | |
| 70 # now further on to the reconfig | |
| 71 if self.reconfigured > 2: | |
| 72 # actually, we're done, | |
| 73 return | |
| 74 if self.reconfigured == 0: | |
| 75 # reconfig without changes now | |
| 76 d = self.master.loadConfig(config_base% (1, 'prop value', | |
| 77 'dep prop value')) | |
| 78 elif self.reconfigured == 1: | |
| 79 # reconfig with changes to upstream now | |
| 80 d = self.master.loadConfig(config_base% (1, 'other prop value', | |
| 81 'dep prop value')) | |
| 82 self.prop_value = 'other prop value' | |
| 83 self.dep_prop_value = 'dep prop value' | |
| 84 else: | |
| 85 # reconfig with changes to dep now | |
| 86 d = self.master.loadConfig(config_base% (1, 'other prop value', | |
| 87 'other dep prop value')) | |
| 88 self.prop_value = 'other prop value' | |
| 89 self.dep_prop_value = 'other dep prop value' | |
| 90 self.reconfigured += 1 | |
| 91 d.addCallback(self._triggerUpstream) | |
| 92 return d | |
| OLD | NEW |