summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSelwin Ong <selwin.ong@gmail.com>2022-08-07 13:18:50 +0700
committerGitHub <noreply@github.com>2022-08-07 13:18:50 +0700
commit8e3283dab3713360981027fb814372c60f914b06 (patch)
tree173fee774cada8dec440c4bde2ad75a7229fd112 /tests
parent9db728921d92b3edc8107154e07362b3ed7a8e24 (diff)
downloadrq-8e3283dab3713360981027fb814372c60f914b06.tar.gz
Job should not be enqueued if dependency is canceled (#1695)
* Fix job.dependencies_are_met() if dependency is canceled * Slightly better test coverage on dependencies_are_met() * Fixed job.cancel(enqueue_dependent=True)
Diffstat (limited to 'tests')
-rw-r--r--tests/test_dependencies.py49
-rw-r--r--tests/test_job.py34
2 files changed, 47 insertions, 36 deletions
diff --git a/tests/test_dependencies.py b/tests/test_dependencies.py
index 6d2f776..12b956d 100644
--- a/tests/test_dependencies.py
+++ b/tests/test_dependencies.py
@@ -1,7 +1,7 @@
from tests import RQTestCase
-from tests.fixtures import div_by_zero, say_hello
+from tests.fixtures import check_dependencies_are_met, div_by_zero, say_hello
-from rq import Queue, SimpleWorker
+from rq import Queue, SimpleWorker, Worker
from rq.job import Job, JobStatus, Dependency
@@ -97,3 +97,48 @@ class TestDependencies(RQTestCase):
w.work(burst=True)
job = Job.fetch(job.id, connection=self.testconn)
self.assertEqual(job.get_status(), JobStatus.FINISHED)
+
+ def test_dependencies_are_met_if_parent_is_canceled(self):
+ """When parent job is canceled, it should be treated as failed"""
+ queue = Queue(connection=self.testconn)
+ job = queue.enqueue(say_hello)
+ job.set_status(JobStatus.CANCELED)
+ dependent_job = queue.enqueue(say_hello, depends_on=job)
+ # dependencies_are_met() should return False, whether or not
+ # parent_job is provided
+ self.assertFalse(dependent_job.dependencies_are_met(job))
+ self.assertFalse(dependent_job.dependencies_are_met())
+
+ def test_can_enqueue_job_if_dependency_is_deleted(self):
+ queue = Queue(connection=self.testconn)
+
+ dependency_job = queue.enqueue(say_hello, result_ttl=0)
+
+ w = Worker([queue])
+ w.work(burst=True)
+
+ assert queue.enqueue(say_hello, depends_on=dependency_job)
+
+ def test_dependencies_are_met_if_dependency_is_deleted(self):
+ queue = Queue(connection=self.testconn)
+
+ dependency_job = queue.enqueue(say_hello, result_ttl=0)
+ dependent_job = queue.enqueue(say_hello, depends_on=dependency_job)
+
+ w = Worker([queue])
+ w.work(burst=True, max_jobs=1)
+
+ assert dependent_job.dependencies_are_met()
+ assert dependent_job.get_status() == JobStatus.QUEUED
+
+ def test_dependencies_are_met_at_execution_time(self):
+ queue = Queue(connection=self.testconn)
+ queue.empty()
+ queue.enqueue(say_hello, job_id="A")
+ queue.enqueue(say_hello, job_id="B")
+ job_c = queue.enqueue(check_dependencies_are_met, job_id="C", depends_on=["A", "B"])
+
+ job_c.dependencies_are_met()
+ w = Worker([queue])
+ w.work(burst=True)
+ assert job_c.result \ No newline at end of file
diff --git a/tests/test_job.py b/tests/test_job.py
index 6106afb..317e2f9 100644
--- a/tests/test_job.py
+++ b/tests/test_job.py
@@ -1119,40 +1119,6 @@ class TestJob(RQTestCase):
pipeline.touch(Job.key_for(dependent_job.id))
pipeline.execute()
- def test_can_enqueue_job_if_dependency_is_deleted(self):
- queue = Queue(connection=self.testconn)
-
- dependency_job = queue.enqueue(fixtures.say_hello, result_ttl=0)
-
- w = Worker([queue])
- w.work(burst=True)
-
- assert queue.enqueue(fixtures.say_hello, depends_on=dependency_job)
-
- def test_dependents_are_met_if_dependency_is_deleted(self):
- queue = Queue(connection=self.testconn)
-
- dependency_job = queue.enqueue(fixtures.say_hello, result_ttl=0)
- dependent_job = queue.enqueue(fixtures.say_hello, depends_on=dependency_job)
-
- w = Worker([queue])
- w.work(burst=True, max_jobs=1)
-
- assert dependent_job.dependencies_are_met()
- assert dependent_job.get_status() == JobStatus.QUEUED
-
- def test_dependencies_are_met_at_execution_time(self):
- queue = Queue(connection=self.testconn)
- queue.empty()
- queue.enqueue(fixtures.say_hello, job_id="A")
- queue.enqueue(fixtures.say_hello, job_id="B")
- job_C = queue.enqueue(fixtures.check_dependencies_are_met, job_id="C", depends_on=["A", "B"])
-
- job_C.dependencies_are_met()
- w = Worker([queue])
- w.work(burst=True)
- assert job_C.result
-
def test_execution_order_with_sole_dependency(self):
queue = Queue(connection=self.testconn)
key = 'test_job:job_order'