Browse Source

Regression test for ignore_result syntax error.

Ask Solem 15 years ago
parent
commit
365e3d09a2
3 changed files with 32 additions and 16 deletions
  1. 2 1
      celery/tests/test_worker.py
  2. 24 8
      celery/tests/test_worker_job.py
  3. 6 7
      celery/worker/__init__.py

+ 2 - 1
celery/tests/test_worker.py

@@ -194,7 +194,8 @@ class TestCarrotListener(unittest.TestCase):
 class TestWorkController(unittest.TestCase):
 
     def setUp(self):
-        self.worker = WorkController(concurrency=1, loglevel=0,
+        self.worker = WorkController(concurrency=1,
+                                     loglevel=0,
                                      is_detached=False)
         self.worker.logger = MockLogger()
 

+ 24 - 8
celery/tests/test_worker_job.py

@@ -1,22 +1,24 @@
 # -*- coding: utf-8 -*-
 import sys
+import logging
 import unittest
 import simplejson
-import logging
 from StringIO import StringIO
 
-from carrot.backends.base import BaseMessage
 from django.core import cache
+from carrot.backends.base import BaseMessage
 
-from celery.worker.job import WorkerTaskTrace, TaskWrapper
-from celery.datastructures import ExceptionInfo
+from celery.log import setup_logger
+from celery.task.base import Task
+from celery.utils import gen_unique_id
 from celery.models import TaskMeta
-from celery.registry import tasks, NotRegistered
+from celery.result import AsyncResult
+from celery.worker.job import WorkerTaskTrace, TaskWrapper
 from celery.worker.pool import TaskPool
-from celery.utils import gen_unique_id
-from celery.log import setup_logger
-from celery.decorators import task as task_dec
+from celery.registry import tasks, NotRegistered
 from celery.exceptions import RetryTaskError
+from celery.decorators import task as task_dec
+from celery.datastructures import ExceptionInfo
 
 scratch = {"ACK": False}
 some_kwargs_scratchpad = {}
@@ -40,6 +42,13 @@ def mytask_no_kwargs(i):
     return i ** i
 
 
+class MyTaskIgnoreResult(Task):
+    ignore_result = True
+
+    def run(self, i):
+        return i ** i
+
+
 @task_dec()
 def mytask_some_kwargs(i, logfile):
     some_kwargs_scratchpad["logfile"] = logfile
@@ -81,6 +90,13 @@ class TestJail(unittest.TestCase):
         self.assertTrue(isinstance(ret, ExceptionInfo))
         self.assertEquals(ret.exception.args, (4, ))
 
+    def test_execute_ignore_result(self):
+        task_id = gen_unique_id()
+        ret = jail(id, MyTaskIgnoreResult.name,
+                   [4], {})
+        self.assertTrue(ret, 8)
+        self.assertFalse(AsyncResult(task_id).ready())
+
     def test_django_db_connection_is_closed(self):
         from django.db import connection
         connection._was_closed = False

+ 6 - 7
celery/worker/__init__.py

@@ -134,13 +134,12 @@ class WorkController(object):
         self.mediator = Mediator(self.ready_queue, self.safe_process_task,
                                  logger=self.logger)
 
-        self.clockservice = None
-        if self.embed_clockservice:
-            # Need a tight loop interval when embedded so the program
-            # can be stopped in a sensible short time.
-            self.clockservice = ClockServiceThread(logger=self.logger,
-                                                is_detached=self.is_detached,
-                                                max_interval=1)
+        # Need a tight loop interval when embedded so the program
+        # can be stopped in a sensible short time.
+        self.clockservice = self.embed_clockservice and ClockServiceThread(
+                                logger=self.logger,
+                                is_detached=self.is_detached,
+                                max_interval=1) or None
 
         # The order is important here;
         #   the first in the list is the first to start,