Ticket #296: builder-busyness.diff

File builder-busyness.diff, 4.4 kB (added by bhearsum, 7 months ago)

expose builder busyness in a simple way (w/ tests)

  • buildbot/interfaces.py

    old new  
    346346        # 'interlocked' too, but things like the Change list might still be 
    347347        # subject to change 
    348348 
     349    def isBusy(): 
     350        """Returns True if slave is busy (where busy is defined as "is 
     351           currently building", False otherwise. 
     352        """ 
     353 
    349354    def getLastFinishedBuild(): 
    350355        """Return the IBuildStatus object representing the last finished 
    351356        build, which may be None if the builder has not yet finished any 
  • buildbot/process/builder.py

    old new  
    435435                return b 
    436436        return None 
    437437 
     438    def isBusy(self): 
     439        return self.builder_status.isBusy() 
     440 
    438441    def fireTestEvent(self, name, fire_with=None): 
    439442        if fire_with is None: 
    440443            fire_with = self 
  • buildbot/status/builder.py

    old new  
    14551455    def getCurrentBuilds(self): 
    14561456        return self.currentBuilds 
    14571457 
     1458    def isBusy(self): 
     1459        if len(self.currentBuilds) > 0: 
     1460            return True 
     1461        else: 
     1462            return False 
     1463 
    14581464    def getLastFinishedBuild(self): 
    14591465        b = self.getBuild(-1) 
    14601466        if not (b and b.isFinished()): 
  • buildbot/test/test_run.py

    old new  
    215215        return d 
    216216 
    217217 
     218class Idle(RunMixin, unittest.TestCase): 
     219    def setUp(self): 
     220        RunMixin.setUp(self) 
     221 
     222        self.master.loadConfig(config_can_build) 
     223        self.master.readConfig = True 
     224        self.master.startService() 
     225 
     226        return self.connectSlave() 
     227 
     228    def isBusy(self): 
     229        b = self.master.botmaster.builders['dummy'].builder_status 
     230        return b.isBusy() 
     231 
     232    def doBuild(self): 
     233        c = changes.Change("foo", ["blah"], "stuff") 
     234        self.master.change_svc.addChange(c) 
     235 
     236    def testIsIdle(self): 
     237        self.failIf(self.isBusy()) 
     238 
     239    def testIsBusy(self): 
     240        self.doBuild() 
     241        d = defer.Deferred() 
     242        # wait for it to start 
     243        reactor.callLater(1, d.callback, None) 
     244        d.addCallback(self._testIsBusy_1) 
     245        return d 
     246 
     247    def _testIsBusy_1(self, res): 
     248        self.failUnless(self.isBusy()) 
     249        d = defer.Deferred() 
     250        reactor.callLater(4, d.callback, None) 
     251        d.addCallback(self._testIsBusy_2) 
     252        return d 
     253 
     254    def _testIsBusy_2(self, res): 
     255        self.failIf(self.isBusy()) 
     256 
     257    def testMultiBuild(self): 
     258        self.doBuild() 
     259        d = defer.Deferred() 
     260        # wait for it to start 
     261        reactor.callLater(1, d.callback, None) 
     262        d.addCallback(self._testMultiBuild_1) 
     263        return d 
     264 
     265    def _testMultiBuild_1(self, res): 
     266        self.failUnless(self.isBusy()) 
     267        self.doBuild() 
     268        self.doBuild() 
     269        d = defer.Deferred() 
     270        reactor.callLater(4, d.callback, None) 
     271        d.addCallback(self._testMultiBuild_2) 
     272        return d 
     273 
     274    def _testMultiBuild_2(self, res): 
     275        self.failUnless(self.isBusy()) 
     276        d = defer.Deferred() 
     277        reactor.callLater(6, d.callback, None) 
     278        d.addCallback(self._testMultiBuild_3) 
     279        return d 
     280 
     281    def _testMultiBuild_3(self, res): 
     282        self.failIf(self.isBusy()) 
     283 
     284 
     285 
    218286class Ping(RunMixin, unittest.TestCase): 
    219287    def testPing(self): 
    220288        self.master.loadConfig(config_2)