X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=tests%2Fthread_utils_test.py;fp=tests%2Fthread_utils_test.py;h=7fcdca8f74fe04f890b68bea68a696fcfe61dab2;hb=b3ef553f4f30614b97e23f2d4ad6d6576ec57adf;hp=0000000000000000000000000000000000000000;hpb=c901f3eb1acf78fd4933d8faeedc517ccafe627e;p=python_utils.git diff --git a/tests/thread_utils_test.py b/tests/thread_utils_test.py new file mode 100755 index 0000000..7fcdca8 --- /dev/null +++ b/tests/thread_utils_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +import threading +import time +import unittest + +import thread_utils +import unittest_utils + + +class TestThreadUtils(unittest.TestCase): + invocation_count = 0 + + @thread_utils.background_thread + def background_thread(self, a: int, b: str, stop_event: threading.Event) -> None: + while not stop_event.is_set(): + self.assertEqual(123, a) + self.assertEqual('abc', b) + time.sleep(0.1) + + def test_background_thread(self): + (thread, event) = self.background_thread(123, 'abc') + self.assertTrue(thread.is_alive()) + time.sleep(1.0) + event.set() + thread.join() + self.assertFalse(thread.is_alive()) + + @thread_utils.periodically_invoke(period_sec=0.3, stop_after=3) + def periodic_invocation_target(self, a: int, b: str): + self.assertEqual(123, a) + self.assertEqual('abc', b) + TestThreadUtils.invocation_count += 1 + + def test_periodically_invoke_with_limit(self): + TestThreadUtils.invocation_count = 0 + (thread, event) = self.periodic_invocation_target(123, 'abc') + self.assertTrue(thread.is_alive()) + time.sleep(1.0) + self.assertEqual(3, TestThreadUtils.invocation_count) + self.assertFalse(thread.is_alive()) + + @thread_utils.periodically_invoke(period_sec=0.1, stop_after=None) + def forever_periodic_invocation_target(self, a: int, b: str): + self.assertEqual(123, a) + self.assertEqual('abc', b) + TestThreadUtils.invocation_count += 1 + + def test_periodically_invoke_runs_forever(self): + TestThreadUtils.invocation_count = 0 + (thread, event) = self.forever_periodic_invocation_target(123, 'abc') + self.assertTrue(thread.is_alive()) + time.sleep(1.0) + self.assertTrue(thread.is_alive()) + time.sleep(1.0) + event.set() + thread.join() + self.assertFalse(thread.is_alive()) + self.assertTrue(TestThreadUtils.invocation_count >= 19) + + +if __name__ == '__main__': + unittest.main()