|
@@ -13,6 +13,7 @@ from celery.worker import CarrotListener, WorkController
|
|
from celery.worker.job import TaskWrapper
|
|
from celery.worker.job import TaskWrapper
|
|
from celery.worker.scheduler import Scheduler
|
|
from celery.worker.scheduler import Scheduler
|
|
from celery.decorators import task as task_dec
|
|
from celery.decorators import task as task_dec
|
|
|
|
+from celery.decorators import periodic_task as periodic_task_dec
|
|
|
|
|
|
|
|
|
|
class MockEventDispatcher(object):
|
|
class MockEventDispatcher(object):
|
|
@@ -29,6 +30,11 @@ def foo_task(x, y, z, **kwargs):
|
|
return x * y * z
|
|
return x * y * z
|
|
|
|
|
|
|
|
|
|
|
|
+@periodic_task_dec()
|
|
|
|
+def foo_periodic_task():
|
|
|
|
+ return "foo"
|
|
|
|
+
|
|
|
|
+
|
|
class MockLogger(object):
|
|
class MockLogger(object):
|
|
|
|
|
|
def critical(self, *args, **kwargs):
|
|
def critical(self, *args, **kwargs):
|
|
@@ -86,7 +92,7 @@ class MockController(object):
|
|
|
|
|
|
|
|
|
|
def create_message(backend, **data):
|
|
def create_message(backend, **data):
|
|
- data["id"] = gen_unique_id()
|
|
|
|
|
|
+ data.setdefault("id", gen_unique_id())
|
|
return BaseMessage(backend, body=pickle.dumps(dict(**data)),
|
|
return BaseMessage(backend, body=pickle.dumps(dict(**data)),
|
|
content_type="application/x-python-serialize",
|
|
content_type="application/x-python-serialize",
|
|
content_encoding="binary")
|
|
content_encoding="binary")
|
|
@@ -134,6 +140,24 @@ class TestCarrotListener(unittest.TestCase):
|
|
self.assertEquals(in_bucket.execute(), 2 * 4 * 8)
|
|
self.assertEquals(in_bucket.execute(), 2 * 4 * 8)
|
|
self.assertTrue(self.eta_scheduler.empty())
|
|
self.assertTrue(self.eta_scheduler.empty())
|
|
|
|
|
|
|
|
+ def test_revoke(self):
|
|
|
|
+ ready_queue = Queue()
|
|
|
|
+ l = CarrotListener(ready_queue, self.eta_scheduler, self.logger,
|
|
|
|
+ send_events=False)
|
|
|
|
+ backend = MockBackend()
|
|
|
|
+ id = gen_unique_id()
|
|
|
|
+ c = create_message(backend, control={"command": "revoke", "task_id": id})
|
|
|
|
+ t = create_message(backend, task=foo_task.name, args=[2, 4, 8],
|
|
|
|
+ kwargs={}, id=id)
|
|
|
|
+ l.event_dispatcher = MockEventDispatcher()
|
|
|
|
+ l.receive_message(c.decode(), c)
|
|
|
|
+ from celery.worker.revoke import revoked
|
|
|
|
+ self.assertTrue(id in revoked)
|
|
|
|
+
|
|
|
|
+ l.receive_message(t.decode(), t)
|
|
|
|
+ self.assertTrue(ready_queue.empty())
|
|
|
|
+
|
|
|
|
+
|
|
def test_receieve_message_not_registered(self):
|
|
def test_receieve_message_not_registered(self):
|
|
l = CarrotListener(self.ready_queue, self.eta_scheduler, self.logger,
|
|
l = CarrotListener(self.ready_queue, self.eta_scheduler, self.logger,
|
|
send_events=False)
|
|
send_events=False)
|