diff options
author | Selwin Ong <selwin.ong@gmail.com> | 2022-08-07 13:18:50 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-07 13:18:50 +0700 |
commit | 8e3283dab3713360981027fb814372c60f914b06 (patch) | |
tree | 173fee774cada8dec440c4bde2ad75a7229fd112 /tests | |
parent | 9db728921d92b3edc8107154e07362b3ed7a8e24 (diff) | |
download | rq-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.py | 49 | ||||
-rw-r--r-- | tests/test_job.py | 34 |
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' |