def testBasic(self): global ELAPSED # setup timeout = (5,30) watchdog = WatchDog(journal=Journal(self.jdir)) # tracking watchdog.track(SN, REPLYTO, ANY, timeout) path = os.path.join(self.jdir, '%s.jnl' % SN) self.assertTrue(os.path.exists(path)) envelope = json.load(open(path)) self.assertEquals(envelope['sn'], SN) self.assertEquals(envelope['idx'], 0) self.assertEquals(envelope['ts'][0], NOW+timeout[0]) self.assertEquals(envelope['ts'][1], NOW+timeout[1]) self.assertEquals(envelope['ts'][envelope['idx']], NOW+timeout[0]) self.assertEquals(envelope['replyto'], REPLYTO) self.assertEquals(envelope['any'], ANY) # started watchdog.started(SN) envelope = json.load(open(path)) self.assertEquals(envelope['sn'], SN) self.assertEquals(envelope['idx'], 1) self.assertEquals(envelope['ts'][0], NOW+timeout[0]) self.assertEquals(envelope['ts'][1], NOW+timeout[1]) self.assertEquals(envelope['ts'][envelope['idx']], NOW+timeout[1]) self.assertEquals(envelope['replyto'], REPLYTO) self.assertEquals(envelope['any'], ANY) # progress watchdog.progress(SN) envelope = json.load(open(path)) self.assertEquals(envelope['sn'], SN) self.assertEquals(envelope['idx'], 1) self.assertEquals(envelope['ts'][0], NOW+timeout[0]) self.assertEquals(envelope['ts'][1], NOW+timeout[1]) self.assertEquals(envelope['ts'][envelope['idx']], NOW+timeout[1]) self.assertEquals(envelope['replyto'], REPLYTO) self.assertEquals(envelope['any'], ANY) # progress (with 5 of timeout) ELAPSED = 28 watchdog.progress(SN) envelope = json.load(open(path)) self.assertEquals(envelope['sn'], SN) self.assertEquals(envelope['idx'], 1) self.assertEquals(envelope['ts'][0], NOW+timeout[0]) self.assertEquals(envelope['ts'][1], now()+5) self.assertEquals(envelope['ts'][envelope['idx']], now()+5) # completed watchdog.completed(SN) path = os.path.join(self.jdir, '%s.jnl' % SN) self.assertFalse(os.path.exists(path))
class WatchDog: def __init__(self): jdir = cfg.journal.dir self.__impl = Impl(journal=Journal(jdir)) @remote def track(self, sn, replyto, any, timeout): return self.__impl.track(sn, replyto, any, timeout) @remote def hack(self, sn): return self.__impl.hack(sn) @remote @action(seconds=1) def process(self): self.__impl.process()