summaryrefslogtreecommitdiff
path: root/tests/thread_utils_test.py
diff options
context:
space:
mode:
authorScott <[email protected]>2022-01-27 13:42:09 -0800
committerScott <[email protected]>2022-01-27 13:42:09 -0800
commitb3ef553f4f30614b97e23f2d4ad6d6576ec57adf (patch)
treea8ad1d0d07d6ba439b020581360f896ad1a737ea /tests/thread_utils_test.py
parentc901f3eb1acf78fd4933d8faeedc517ccafe627e (diff)
Adding test code trying to improve test coverage.
Diffstat (limited to 'tests/thread_utils_test.py')
-rwxr-xr-xtests/thread_utils_test.py63
1 files changed, 63 insertions, 0 deletions
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()