OLD | NEW |
| (Empty) |
1 # -*- test-case-name: buildbot.test.test_control -*- | |
2 | |
3 import os | |
4 | |
5 from twisted.trial import unittest | |
6 from twisted.internet import defer | |
7 | |
8 from buildbot import master, interfaces | |
9 from buildbot.sourcestamp import SourceStamp | |
10 from buildbot.slave import bot | |
11 from buildbot.status.builder import SUCCESS | |
12 from buildbot.process import base | |
13 from buildbot.test.runutils import rmtree | |
14 | |
15 config = """ | |
16 from buildbot.process import factory | |
17 from buildbot.steps import dummy | |
18 from buildbot.buildslave import BuildSlave | |
19 from buildbot.config import BuilderConfig | |
20 | |
21 def s(klass, **kwargs): | |
22 return (klass, kwargs) | |
23 | |
24 f1 = factory.BuildFactory([ | |
25 s(dummy.Dummy, timeout=1), | |
26 ]) | |
27 c = {} | |
28 c['slaves'] = [BuildSlave('bot1', 'sekrit')] | |
29 c['schedulers'] = [] | |
30 c['builders'] = [ | |
31 BuilderConfig(name='force', slavename='bot1', factory=f1), | |
32 ] | |
33 c['slavePortnum'] = 0 | |
34 BuildmasterConfig = c | |
35 """ | |
36 | |
37 class FakeBuilder: | |
38 name = "fake" | |
39 def getSlaveCommandVersion(self, command, oldversion=None): | |
40 return "1.10" | |
41 | |
42 | |
43 class Force(unittest.TestCase): | |
44 | |
45 def rmtree(self, d): | |
46 rmtree(d) | |
47 | |
48 def setUp(self): | |
49 self.master = None | |
50 self.slave = None | |
51 self.rmtree("control_basedir") | |
52 os.mkdir("control_basedir") | |
53 self.master = master.BuildMaster("control_basedir") | |
54 self.slavebase = os.path.abspath("control_slavebase") | |
55 self.rmtree(self.slavebase) | |
56 os.mkdir("control_slavebase") | |
57 | |
58 def connectSlave(self): | |
59 port = self.master.slavePort._port.getHost().port | |
60 slave = bot.BuildSlave("localhost", port, "bot1", "sekrit", | |
61 self.slavebase, keepalive=0, usePTY=1) | |
62 self.slave = slave | |
63 slave.startService() | |
64 d = self.master.botmaster.waitUntilBuilderAttached("force") | |
65 return d | |
66 | |
67 def tearDown(self): | |
68 dl = [] | |
69 if self.slave: | |
70 dl.append(self.master.botmaster.waitUntilBuilderDetached("force")) | |
71 dl.append(defer.maybeDeferred(self.slave.stopService)) | |
72 if self.master: | |
73 dl.append(defer.maybeDeferred(self.master.stopService)) | |
74 return defer.DeferredList(dl) | |
75 | |
76 def testRequest(self): | |
77 m = self.master | |
78 m.loadConfig(config) | |
79 m.startService() | |
80 d = self.connectSlave() | |
81 d.addCallback(self._testRequest_1) | |
82 return d | |
83 def _testRequest_1(self, res): | |
84 c = interfaces.IControl(self.master) | |
85 req = base.BuildRequest("I was bored", SourceStamp(), 'test_builder') | |
86 builder_control = c.getBuilder("force") | |
87 d = defer.Deferred() | |
88 req.subscribe(d.callback) | |
89 builder_control.requestBuild(req) | |
90 d.addCallback(self._testRequest_2) | |
91 # we use the same check-the-results code as testForce | |
92 return d | |
93 | |
94 def _testRequest_2(self, build_control): | |
95 self.failUnless(interfaces.IBuildControl.providedBy(build_control)) | |
96 d = build_control.getStatus().waitUntilFinished() | |
97 d.addCallback(self._testRequest_3) | |
98 return d | |
99 | |
100 def _testRequest_3(self, bs): | |
101 self.failUnless(interfaces.IBuildStatus.providedBy(bs)) | |
102 self.failUnless(bs.isFinished()) | |
103 self.failUnlessEqual(bs.getResults(), SUCCESS) | |
104 #self.failUnlessEqual(bs.getResponsibleUsers(), ["bob"]) # TODO | |
105 self.failUnlessEqual(bs.getChanges(), ()) | |
106 #self.failUnlessEqual(bs.getReason(), "forced") # TODO | |
OLD | NEW |