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 |