def test_create_single_timer(self): # test creating a new timer that is one-time-only # create the timer resource # create the event listener # call scheduler to set the timer # create then cancel the timer, verify that event is not received # create the timer resource # create the event listener # call scheduler to set the timer # call scheduler to cancel the timer # wait until after expiry to verify that event is not sent self.single_timer_count = 0 event_origin = "Time of Day" sub = EventSubscriber(event_type="ResourceEvent", callback=self.single_timer_call_back, origin=event_origin) sub.start() # Time out in 3 seconds now = datetime.datetime.utcnow() + timedelta(seconds=3) times_of_day =[{'hour': str(now.hour),'minute' : str(now.minute), 'second':str(now.second) }] ss = SchedulerService() id = ss.create_time_of_day_timer(times_of_day=times_of_day, expires=time.time()+25200+60, event_origin=event_origin, event_subtype="") self.assertEqual(type(id), str) ss.cancel_timer(id) gevent.sleep(5) # Validate the event is not sent self.assertEqual(self.single_timer_count, 0)
def test_create_interval_timer(self): # test creating a new timer that is one-time-only # create the interval timer resource # create the event listener # call scheduler to set the timer # receive a few intervals, validate that arrival time is as expected # cancel the timer # wait until after next interval to verify that timer was correctly cancelled self.interval_timer_count = 0 self.interval_timer_sent_time = 0 self.interval_timer_received_time = 0 self.interval_timer_interval = 3 self.interval_timer_number_of_intervals = 4 event_origin = "Interval Timer" sub = EventSubscriber(event_type="ResourceEvent", callback=self.interval_timer_callback, origin=event_origin) sub.start() ss = SchedulerService() id = ss.create_interval_timer(start_time= time.time(), interval=self.interval_timer_interval, number_of_intervals=self.interval_timer_number_of_intervals, event_origin=event_origin, event_subtype="") self.interval_timer_sent_time = datetime.datetime.utcnow() self.assertEqual(type(id), str) # Wait until two events are published gevent.sleep((self.interval_timer_interval * 2) + 1) ss.cancel_timer(id) # Validate the timer id is invalid once it has been canceled with self.assertRaises(BadRequest): ss.cancel_timer(id) # Wait until all events are generated gevent.sleep(self.interval_timer_interval * self.interval_timer_number_of_intervals) # Validate events are not generated after canceling the timer self.assertEqual(self.interval_timer_count, 2)