summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRony Lutsky <3050627+ronlut@users.noreply.github.com>2023-02-22 01:35:43 +0200
committerGitHub <noreply@github.com>2023-02-22 06:35:43 +0700
commitaedc9b9e06abc26417cd71e842266c4ae5c658b6 (patch)
tree2114bf455bd3dc78f9efefbb46dac7e6758b2d52 /tests
parent41406db3ebd287ab1aa8885948140ec63f22d88a (diff)
downloadrq-aedc9b9e06abc26417cd71e842266c4ae5c658b6.tar.gz
Worker - max_idle_time feature (#1795)
* fix accessing None when dequeued result is None (burst=True, or timeout=None) * add a test * implement + tests * fix if * adjust test * merge * test * test * merge master * take max_idle_time into account for dequeue_timeout * refactor a bit * potential bug fix * tests * math.ceil * buffer tests
Diffstat (limited to 'tests')
-rw-r--r--tests/test_worker.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/tests/test_worker.py b/tests/test_worker.py
index 99f6595..239252c 100644
--- a/tests/test_worker.py
+++ b/tests/test_worker.py
@@ -608,6 +608,31 @@ class TestWorker(RQTestCase):
# Should not have created evidence of execution
self.assertEqual(os.path.exists(SENTINEL_FILE), False)
+ @slow
+ def test_max_idle_time(self):
+ q = Queue()
+ w = Worker([q])
+ q.enqueue(say_hello, args=('Frank',))
+ self.assertIsNotNone(w.dequeue_job_and_maintain_ttl(1))
+
+ # idle for 1 second
+ self.assertIsNone(w.dequeue_job_and_maintain_ttl(1, max_idle_time=1))
+
+ # idle for 3 seconds
+ now = utcnow()
+ self.assertIsNone(w.dequeue_job_and_maintain_ttl(1, max_idle_time=3))
+ self.assertLess((utcnow()-now).total_seconds(), 5) # 5 for some buffer
+
+ # idle for 2 seconds because idle_time is less than timeout
+ now = utcnow()
+ self.assertIsNone(w.dequeue_job_and_maintain_ttl(3, max_idle_time=2))
+ self.assertLess((utcnow()-now).total_seconds(), 4) # 4 for some buffer
+
+ # idle for 3 seconds because idle_time is less than two rounds of timeout
+ now = utcnow()
+ self.assertIsNone(w.dequeue_job_and_maintain_ttl(2, max_idle_time=3))
+ self.assertLess((utcnow()-now).total_seconds(), 5) # 5 for some buffer
+
@slow # noqa
def test_timeouts(self):
"""Worker kills jobs after timeout."""
@@ -640,7 +665,6 @@ class TestWorker(RQTestCase):
q = Queue()
w = Worker([q])
- # Put it on the queue with a timeout value
self.assertIsNone(w.dequeue_job_and_maintain_ttl(None))
def test_worker_ttl_param_resolves_timeout(self):