Skip to content

Commit 1048eb6

Browse files
author
Ask Solem
committed
91% coverage for celery.worker.scheduler
1 parent df7fd46 commit 1048eb6

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

celery/tests/test_worker_scheduler.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
from __future__ import generators
22

33
import unittest2 as unittest
4-
from Queue import Queue, Empty
4+
55
from datetime import datetime, timedelta
6+
from Queue import Queue, Empty
67

78
from celery.worker.scheduler import Scheduler
89

910

1011
class MockItem(object):
11-
is_revoked = False
1212

13-
def __init__(self, value):
13+
def __init__(self, value, revoked=False):
1414
self.task_id = value
15+
self.is_revoked = revoked
1516

1617
def revoked(self):
1718
return self.is_revoked
1819

1920

20-
class TestScheduler(unittest.TestCase):
21+
class test_Scheduler(unittest.TestCase):
2122

2223
def test_sched_and_run_now(self):
2324
ready_queue = Queue()
@@ -35,6 +36,44 @@ def callback():
3536
self.assertTrue(callback_called[0])
3637
self.assertEqual(ready_queue.get_nowait().task_id, "foo")
3738

39+
def test_sched_revoked(self):
40+
ready_queue = Queue()
41+
sched = Scheduler(ready_queue)
42+
now = datetime.now()
43+
44+
callback_called = [False]
45+
def callback():
46+
callback_called[0] = True
47+
48+
sched.enter(MockItem("foo", revoked=True), eta=now, callback=callback)
49+
remaining = iter(sched).next()
50+
self.assertFalse(callback_called[0])
51+
self.assertRaises(Empty, ready_queue.get_nowait)
52+
self.assertFalse(sched.queue)
53+
sched.clear()
54+
55+
def test_sched_clear(self):
56+
ready_queue = Queue()
57+
sched = Scheduler(ready_queue)
58+
sched.enter(MockItem("foo"), eta=datetime.now(), callback=None)
59+
self.assertFalse(sched.empty())
60+
sched.clear()
61+
self.assertTrue(sched.empty())
62+
63+
def test_sched_info(self):
64+
ready_queue = Queue()
65+
sched = Scheduler(ready_queue)
66+
item = MockItem("foo")
67+
sched.enter(item, eta=10, callback=None)
68+
self.assertDictEqual({"eta": 10, "priority": 0,
69+
"item": item}, sched.info().next())
70+
71+
def test_sched_queue(self):
72+
ready_queue = Queue()
73+
sched = Scheduler(ready_queue)
74+
sched.enter(MockItem("foo"), eta=datetime.now(), callback=None)
75+
self.assertTrue(sched.queue)
76+
3877
def test_sched_run_later(self):
3978
ready_queue = Queue()
4079
sched = Scheduler(ready_queue)

celery/worker/scheduler.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import time
44
import heapq
55

6+
from datetime import datetime
7+
68
from celery import log
79

810
DEFAULT_MAX_INTERVAL = 2
@@ -34,7 +36,9 @@ def enter(self, item, eta=None, priority=0, callback=None):
3436
This callback takes no arguments.
3537
3638
"""
37-
eta = eta and time.mktime(eta.timetuple()) or time.time()
39+
if isinstance(eta, datetime):
40+
eta = time.mktime(eta.timetuple())
41+
eta = eta or time.time()
3842
heapq.heappush(self._queue, (eta, priority, item, callback))
3943

4044
def __iter__(self):

0 commit comments

Comments
 (0)