diff options
author | Selwin Ong <selwin.ong@gmail.com> | 2022-07-01 09:27:17 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-01 09:27:17 +0700 |
commit | 87bacb650eb33fb6bde4d9fcb96b0f455eeb9757 (patch) | |
tree | 957368db90fa00e06840e6b7ea67b32748f792e5 /tests | |
parent | aff877cfcf89cf900e23a202b83169a0f3fec761 (diff) | |
download | rq-87bacb650eb33fb6bde4d9fcb96b0f455eeb9757.tar.gz |
Jobs that are run synchronously should always raise an exception (#1671)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_callbacks.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/tests/test_callbacks.py b/tests/test_callbacks.py index 8d8edc7..d115a6a 100644 --- a/tests/test_callbacks.py +++ b/tests/test_callbacks.py @@ -1,4 +1,5 @@ from datetime import timedelta +from uuid import uuid4 from tests import RQTestCase from tests.fixtures import div_by_zero, erroneous_callback, save_exception, save_result, say_hello @@ -59,7 +60,13 @@ class SyncJobCallback(RQTestCase): job.result ) - job = queue.enqueue(div_by_zero, on_success=save_result) + # Callback is not executed when job fails + job_id = str(uuid4()) + try: + job = queue.enqueue(div_by_zero, on_success=save_result, job_id=job_id) + except TypeError: + pass + job = Job.fetch(id=job_id) self.assertEqual(job.get_status(), JobStatus.FAILED) self.assertFalse(self.testconn.exists('success_callback:%s' % job.id)) @@ -67,15 +74,32 @@ class SyncJobCallback(RQTestCase): """queue.enqueue* methods with on_failure is persisted correctly""" queue = Queue(is_async=False) - job = queue.enqueue(div_by_zero, on_failure=save_exception) + job_id = str(uuid4()) + try: + job = queue.enqueue(div_by_zero, on_failure=save_exception, job_id=job_id) + except: + pass + job = Job.fetch(id=job_id) self.assertEqual(job.get_status(), JobStatus.FAILED) self.assertIn('div_by_zero', self.testconn.get('failure_callback:%s' % job.id).decode()) - job = queue.enqueue(div_by_zero, on_success=save_result) + # If there's no failure callback, exception should be raised + job_id = str(uuid4()) + with self.assertRaises(TypeError): + job = queue.enqueue(div_by_zero, on_success=save_result, job_id=job_id) + job = Job.fetch(id=job_id) self.assertEqual(job.get_status(), JobStatus.FAILED) self.assertFalse(self.testconn.exists('failure_callback:%s' % job.id)) + # If failure callback is specified, exception is raised after callback is executed + job_id = str(uuid4()) + with self.assertRaises(TypeError): + job = queue.enqueue(div_by_zero, on_failure=save_exception, job_id=job_id) + job = Job.fetch(id=job_id) + self.assertEqual(job.get_status(), JobStatus.FAILED) + self.assertTrue(self.testconn.exists('failure_callback:%s' % job.id)) + class WorkerCallbackTestCase(RQTestCase): def test_success_callback(self): |