seitime-frappe/frappe/tests/test_background_jobs.py
2022-08-17 16:39:42 +05:30

49 lines
1.3 KiB
Python

import time
from rq import Queue
import frappe
from frappe.core.page.background_jobs.background_jobs import remove_failed_jobs
from frappe.tests.utils import FrappeTestCase
from frappe.utils.background_jobs import generate_qname, get_redis_conn
class TestBackgroundJobs(FrappeTestCase):
def test_remove_failed_jobs(self):
frappe.enqueue(method="frappe.tests.test_background_jobs.fail_function", queue="short")
# wait for enqueued job to execute
time.sleep(2)
conn = get_redis_conn()
queues = Queue.all(conn)
for queue in queues:
if queue.name == generate_qname("short"):
fail_registry = queue.failed_job_registry
self.assertGreater(fail_registry.count, 0)
remove_failed_jobs()
for queue in queues:
if queue.name == generate_qname("short"):
fail_registry = queue.failed_job_registry
self.assertEqual(fail_registry.count, 0)
def test_enqueue_at_front(self):
kwargs = {
"method": "frappe.handler.ping",
"queue": "short",
}
# give worker something to work on first so that get_position doesn't return None
frappe.enqueue(**kwargs)
# test enqueue with at_front=True
low_priority_job = frappe.enqueue(**kwargs)
high_priority_job = frappe.enqueue(**kwargs, at_front=True)
# lesser is earlier
self.assertTrue(high_priority_job.get_position() < low_priority_job.get_position())
def fail_function():
return 1 / 0