diff --git a/oslo_service/tests/test_threadgroup.py b/oslo_service/tests/test_threadgroup.py index b88d9863..543710cc 100644 --- a/oslo_service/tests/test_threadgroup.py +++ b/oslo_service/tests/test_threadgroup.py @@ -79,3 +79,34 @@ class ThreadGroupTestCase(test_base.BaseTestCase): self.assertEqual(1, len(self.tg.timers)) self.tg.stop_timers() self.assertEqual(0, len(self.tg.timers)) + + def test_add_and_remove_timer(self): + + def foo(*args, **kwargs): + pass + + timer = self.tg.add_timer('1234', foo) + self.assertEqual(1, len(self.tg.timers)) + timer.stop() + self.assertEqual(1, len(self.tg.timers)) + + self.tg.timer_done(timer) + self.assertEqual(0, len(self.tg.timers)) + + def test_add_and_remove_dynamic_timer(self): + + def foo(*args, **kwargs): + pass + initial_delay = 1 + periodic_interval_max = 2 + timer = self.tg.add_dynamic_timer(foo, initial_delay, + periodic_interval_max) + + self.assertEqual(1, len(self.tg.timers)) + self.assertTrue(timer._running) + + timer.stop() + self.assertEqual(1, len(self.tg.timers)) + + self.tg.timer_done(timer) + self.assertEqual(0, len(self.tg.timers)) diff --git a/oslo_service/threadgroup.py b/oslo_service/threadgroup.py index 315df303..570f8e80 100644 --- a/oslo_service/threadgroup.py +++ b/oslo_service/threadgroup.py @@ -69,6 +69,7 @@ class ThreadGroup(object): timer.start(initial_delay=initial_delay, periodic_interval_max=periodic_interval_max) self.timers.append(timer) + return timer def add_timer(self, interval, callback, initial_delay=None, *args, **kwargs): @@ -76,6 +77,7 @@ class ThreadGroup(object): pulse.start(interval=interval, initial_delay=initial_delay) self.timers.append(pulse) + return pulse def add_thread(self, callback, *args, **kwargs): gt = self.pool.spawn(callback, *args, **kwargs) @@ -86,6 +88,9 @@ class ThreadGroup(object): def thread_done(self, thread): self.threads.remove(thread) + def timer_done(self, timer): + self.timers.remove(timer) + def _stop_threads(self): current = threading.current_thread()