def makeScheduler(self, firstBuildDuration=0, firstBuildError=False, exp_branch=None, **kwargs): self.sched = sched = timed.Periodic(**kwargs) sched._reactor = self.reactor self.attachScheduler(self.sched, self.OBJECTID, self.SCHEDULERID) # keep track of builds in self.events self.events = [] def addBuildsetForSourceStampsWithDefaults(reason, sourcestamps, waited_for=False, properties=None, builderNames=None, **kw): self.assertIn('Periodic scheduler named', reason) # TODO: check branch isFirst = not self.events if self.reactor.seconds() == 0 and firstBuildError: raise TestException() self.events.append(f'B@{int(self.reactor.seconds())}') if isFirst and firstBuildDuration: d = defer.Deferred() self.reactor.callLater(firstBuildDuration, d.callback, None) return d return defer.succeed(None) sched.addBuildsetForSourceStampsWithDefaults = addBuildsetForSourceStampsWithDefaults # handle state locally self.state = {} def getState(k, default): return defer.succeed(self.state.get(k, default)) sched.getState = getState def setState(k, v): self.state[k] = v return defer.succeed(None) sched.setState = setState return sched
def makeScheduler(self, firstBuildDuration=0, exp_branch=None, **kwargs): self.sched = sched = timed.Periodic(**kwargs) self.attachScheduler(self.sched, self.OBJECTID, self.SCHEDULERID) # add a Clock to help checking timing issues self.clock = sched._reactor = task.Clock() # keep track of builds in self.events self.events = [] def addBuildsetForSourceStampsWithDefaults(reason, sourcestamps, waited_for=False, properties=None, builderNames=None, **kw): self.assertIn('Periodic scheduler named', reason) # TODO: check branch isFirst = (self.events == []) self.events.append('B@%d' % self.clock.seconds()) if isFirst and firstBuildDuration: d = defer.Deferred() self.clock.callLater(firstBuildDuration, d.callback, None) return d else: return defer.succeed(None) sched.addBuildsetForSourceStampsWithDefaults = addBuildsetForSourceStampsWithDefaults # handle state locally self.state = {} def getState(k, default): return defer.succeed(self.state.get(k, default)) sched.getState = getState def setState(k, v): self.state[k] = v return defer.succeed(None) sched.setState = setState return sched
def makeScheduler(self, firstBuildDuration=0, exp_branch=None, **kwargs): self.sched = sched = timed.Periodic(**kwargs) self.attachScheduler(self.sched, self.OBJECTID) # add a Clock to help checking timing issues self.clock = sched._reactor = task.Clock() # keep track of builds in self.events self.events = [] def addBuildsetForLatest(reason=None, branch=None): self.assertIn('Periodic scheduler named', reason) self.assertEqual(branch, exp_branch) isFirst = (self.events == []) self.events.append('B@%d' % self.clock.seconds()) if isFirst and firstBuildDuration: d = defer.Deferred() self.clock.callLater(firstBuildDuration, d.callback, None) return d else: return defer.succeed(None) sched.addBuildsetForLatest = addBuildsetForLatest # handle state locally self.state = {} def getState(k, default): return defer.succeed(self.state.get(k, default)) sched.getState = getState def setState(k, v): self.state[k] = v return defer.succeed(None) sched.setState = setState return sched
def test_constructor_invalid(self): self.assertRaises( config.ConfigErrors, lambda: timed.Periodic( name='test', builderNames=['test'], periodicBuildTimer=-2))