| OLD | NEW |
| (Empty) |
| 1 from twisted.trial import unittest | |
| 2 from twisted.internet import reactor, defer | |
| 3 | |
| 4 from buildbot.test.runutils import RunMixin, TestFlagMixin, rmtree | |
| 5 from buildbot.changes import changes | |
| 6 from buildbot.sourcestamp import SourceStamp | |
| 7 from buildbot.process.base import BuildRequest | |
| 8 | |
| 9 nextslave_config = """ | |
| 10 from buildbot.process import factory | |
| 11 from buildbot.steps import dummy | |
| 12 from buildbot.buildslave import BuildSlave | |
| 13 from buildbot.scheduler import Scheduler | |
| 14 from buildbot.config import BuilderConfig | |
| 15 | |
| 16 f1 = factory.BuildFactory([dummy.Dummy(timeout=0)]) | |
| 17 | |
| 18 def nextSlave(builder, slaves): | |
| 19 for s in slaves: | |
| 20 if s.slave.slavename == 'bot1': | |
| 21 return s | |
| 22 | |
| 23 BuildmasterConfig = c = {} | |
| 24 c['slaves'] = [BuildSlave('bot1', 'sekrit'), BuildSlave('bot2', 'sekrit')] | |
| 25 c['schedulers'] = [Scheduler('dummy', None, 0, ['dummy'])] | |
| 26 c['builders'] = [ | |
| 27 BuilderConfig(name='dummy', slavenames=['bot1', 'bot2'], | |
| 28 factory=f1, nextSlave=nextSlave), | |
| 29 ] | |
| 30 c['slavePortnum'] = 0 | |
| 31 c['mergeRequests'] = lambda builder, req1, req2: False | |
| 32 """ | |
| 33 class NextSlave(RunMixin, unittest.TestCase): | |
| 34 def rmtree(self, d): | |
| 35 rmtree(d) | |
| 36 | |
| 37 def testNextSlave(self): | |
| 38 d = self.master.loadConfig(nextslave_config) | |
| 39 self.master.readConfig = True | |
| 40 d.addCallback(lambda res: self.master.startService()) | |
| 41 d.addCallback(lambda res: self.connectSlave(slavename='bot1')) | |
| 42 d.addCallback(lambda res: self.connectSlave(slavename='bot2')) | |
| 43 | |
| 44 def check(res): | |
| 45 builder = self.status.getBuilder("dummy") | |
| 46 self.failUnlessEqual(len(builder.slavenames), 2) | |
| 47 for i in range(5): | |
| 48 build = builder.getBuild(i) | |
| 49 self.failUnlessEqual(build.slavename, 'bot1') | |
| 50 | |
| 51 def _send(res): | |
| 52 # send some build requests | |
| 53 reqs = [] | |
| 54 ss = SourceStamp() | |
| 55 for i in range(5): | |
| 56 req = BuildRequest(str(i), ss, "dummy") | |
| 57 self.master.botmaster.builders['dummy'].submitBuildRequest(req) | |
| 58 reqs.append(req.waitUntilFinished()) | |
| 59 | |
| 60 dl = defer.DeferredList(reqs) | |
| 61 dl.addCallback(check) | |
| 62 return dl | |
| 63 | |
| 64 d.addCallback(_send) | |
| 65 | |
| 66 return d | |
| 67 | |
| 68 # Test nextBuild | |
| 69 nextbuild_config = """ | |
| 70 from buildbot.process import factory | |
| 71 from buildbot.steps import dummy | |
| 72 from buildbot.buildslave import BuildSlave | |
| 73 from buildbot.scheduler import Scheduler | |
| 74 from buildbot.config import BuilderConfig | |
| 75 | |
| 76 f1 = factory.BuildFactory([dummy.Dummy(timeout=0)]) | |
| 77 | |
| 78 def nextBuild(builder, requests): | |
| 79 # Return the newest request first | |
| 80 return requests[-1] | |
| 81 | |
| 82 BuildmasterConfig = c = {} | |
| 83 c['slaves'] = [BuildSlave('bot1', 'sekrit')] | |
| 84 c['schedulers'] = [Scheduler('dummy', None, 0, ['dummy'])] | |
| 85 c['builders'] = [ | |
| 86 BuilderConfig(name='dummy', slavenames=['bot1'], factory=f1, nextBuild=nextB
uild), | |
| 87 ] | |
| 88 c['slavePortnum'] = 0 | |
| 89 c['mergeRequests'] = lambda builder, req1, req2: False | |
| 90 """ | |
| 91 class NextBuild(RunMixin, unittest.TestCase): | |
| 92 def rmtree(self, d): | |
| 93 rmtree(d) | |
| 94 | |
| 95 def testNextBuild(self): | |
| 96 d = self.master.loadConfig(nextbuild_config) | |
| 97 self.master.readConfig = True | |
| 98 d.addCallback(lambda res: self.master.startService()) | |
| 99 | |
| 100 start_order = [] | |
| 101 reqs = [] | |
| 102 | |
| 103 def check(res): | |
| 104 builder = self.status.getBuilder("dummy") | |
| 105 self.failUnlessEqual(len(builder.slavenames), 1) | |
| 106 self.failUnlessEqual(start_order, [4,3,2,1,0]) | |
| 107 | |
| 108 def send(res): | |
| 109 # send some build requests | |
| 110 ss = SourceStamp() | |
| 111 for i in range(5): | |
| 112 req = BuildRequest(str(i), ss, "dummy") | |
| 113 self.master.botmaster.builders['dummy'].submitBuildRequest(req) | |
| 114 req.submittedAt = i | |
| 115 def append(build): | |
| 116 start_order.append(int(build.reason)) | |
| 117 req.subscribe(append) | |
| 118 reqs.append(req.waitUntilFinished()) | |
| 119 | |
| 120 d.addCallback(send) | |
| 121 d.addCallback(lambda res: self.connectSlave(slavename='bot1')) | |
| 122 | |
| 123 def connected(res): | |
| 124 return defer.DeferredList(reqs) | |
| 125 d.addCallback(connected) | |
| 126 d.addCallback(check) | |
| 127 return d | |
| 128 | |
| 129 # Test prioritizeBuilders | |
| 130 prioritizebuilders_config = """ | |
| 131 from buildbot.process import factory | |
| 132 from buildbot.steps import dummy | |
| 133 from buildbot.buildslave import BuildSlave | |
| 134 from buildbot.scheduler import Scheduler | |
| 135 from buildbot.config import BuilderConfig | |
| 136 | |
| 137 f1 = factory.BuildFactory([dummy.Dummy(timeout=0)]) | |
| 138 | |
| 139 def prioritizeBuilders(buildmaster, builders): | |
| 140 for builder in builders: | |
| 141 if builder.name == 'dummy1': | |
| 142 return [builder] | |
| 143 return [] | |
| 144 | |
| 145 BuildmasterConfig = c = {} | |
| 146 c['slaves'] = [BuildSlave('bot1', 'sekrit')] | |
| 147 c['schedulers'] = [Scheduler('dummy', None, 0, ['dummy1', 'dummy2'])] | |
| 148 c['builders'] = [ | |
| 149 BuilderConfig(name='dummy1', slavename='bot1', factory=f1), | |
| 150 BuilderConfig(name='dummy2', slavename='bot1', factory=f1), | |
| 151 ] | |
| 152 c['slavePortnum'] = 0 | |
| 153 c['mergeRequests'] = lambda builder, req1, req2: False | |
| 154 c['prioritizeBuilders'] = prioritizeBuilders | |
| 155 """ | |
| 156 class PrioritizeBuilders(RunMixin, unittest.TestCase): | |
| 157 def rmtree(self, d): | |
| 158 rmtree(d) | |
| 159 | |
| 160 def testPrioritizeBuilders(self): | |
| 161 d = self.master.loadConfig(prioritizebuilders_config) | |
| 162 self.master.readConfig = True | |
| 163 d.addCallback(lambda res: self.master.startService()) | |
| 164 | |
| 165 builder_names = [] | |
| 166 reqs = [] | |
| 167 incomplete_reqs = [] | |
| 168 complete_reqs = [] | |
| 169 | |
| 170 def check(res): | |
| 171 builder = self.status.getBuilder("dummy1") | |
| 172 self.failUnlessEqual(len(builder.slavenames), 1) | |
| 173 self.failUnlessEqual(builder_names, ['dummy1'] * 5) | |
| 174 for req in incomplete_reqs: | |
| 175 self.failUnlessEqual(req.startCount, 0) | |
| 176 for req in complete_reqs: | |
| 177 self.failUnlessEqual(req.startCount, 1) | |
| 178 | |
| 179 def send(res): | |
| 180 # send some build requests | |
| 181 ss = SourceStamp() | |
| 182 for i in range(5): | |
| 183 req1 = BuildRequest(str(i), ss, "dummy") | |
| 184 self.master.botmaster.builders['dummy1'].submitBuildRequest(req1
) | |
| 185 req2 = BuildRequest(str(i), ss, "dummy") | |
| 186 self.master.botmaster.builders['dummy2'].submitBuildRequest(req2
) | |
| 187 def append(build): | |
| 188 builder_names.append(build.builder.name) | |
| 189 req1.subscribe(append) | |
| 190 req2.subscribe(append) | |
| 191 reqs.append(req1.waitUntilFinished()) | |
| 192 complete_reqs.append(req1) | |
| 193 incomplete_reqs.append(req2) | |
| 194 | |
| 195 d.addCallback(send) | |
| 196 d.addCallback(lambda res: self.connectSlave(slavename='bot1', builders=[
'dummy1', 'dummy2'])) | |
| 197 | |
| 198 def connected(res): | |
| 199 return defer.DeferredList(reqs) | |
| 200 d.addCallback(connected) | |
| 201 d.addCallback(check) | |
| 202 return d | |
| OLD | NEW |