| 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 |