From b3ef553f4f30614b97e23f2d4ad6d6576ec57adf Mon Sep 17 00:00:00 2001 From: Scott Date: Thu, 27 Jan 2022 13:42:09 -0800 Subject: Adding test code trying to improve test coverage. --- tests/thread_utils_test.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 tests/thread_utils_test.py (limited to 'tests/thread_utils_test.py') 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() -- cgit v1.3