source file: /opt/devel/celery/testproj/../celery/tests/test_models.py
file stats: 57 lines, 57 executed: 100.0% covered
   1. import unittest
   2. import uuid
   3. from datetime import datetime, timedelta
   4. from celery.models import TaskMeta, PeriodicTaskMeta
   5. from celery.task import PeriodicTask
   6. from celery.registry import tasks
   7. 
   8. 
   9. class TestPeriodicTask(PeriodicTask):
  10.     name = "celery.unittest.test_models.test_periodic_task"
  11.     run_every = timedelta(days=1)
  12. 
  13. 
  14. class TestModels(unittest.TestCase):
  15. 
  16.     def createTaskMeta(self):
  17.         id = str(uuid.uuid4())
  18.         taskmeta, created = TaskMeta.objects.get_or_create(task_id=id)
  19.         return taskmeta
  20. 
  21.     def createPeriodicTaskMeta(self, name):
  22.         ptaskmeta, created = PeriodicTaskMeta.objects.get_or_create(name=name)
  23.         return ptaskmeta
  24. 
  25.     def test_taskmeta(self):
  26.         m1 = self.createTaskMeta()
  27.         m2 = self.createTaskMeta()
  28.         m3 = self.createTaskMeta()
  29.         self.assertTrue(unicode(m1).startswith("<Task:"))
  30.         self.assertTrue(m1.task_id)
  31.         self.assertTrue(isinstance(m1.date_done, datetime))
  32. 
  33.         self.assertEquals(TaskMeta.objects.get_task(m1.task_id).task_id,
  34.                 m1.task_id)
  35.         self.assertFalse(TaskMeta.objects.is_done(m1.task_id))
  36.         TaskMeta.objects.mark_as_done(m1.task_id)
  37.         TaskMeta.objects.mark_as_done(m2.task_id)
  38.         self.assertTrue(TaskMeta.objects.is_done(m1.task_id))
  39.         self.assertTrue(TaskMeta.objects.is_done(m2.task_id))
  40. 
  41.         # Have to avoid save() because it applies the auto_now=True.
  42.         TaskMeta.objects.filter(task_id=m1.task_id).update(
  43.                 date_done=datetime.now() - timedelta(days=10))
  44. 
  45.         expired = TaskMeta.objects.get_all_expired()
  46.         self.assertTrue(m1 in expired)
  47.         self.assertFalse(m2 in expired)
  48.         self.assertFalse(m3 in expired)
  49. 
  50.         TaskMeta.objects.delete_expired()
  51.         self.assertFalse(m1 in TaskMeta.objects.all())
  52. 
  53.     def test_periodic_taskmeta(self):
  54.         tasks.register(TestPeriodicTask)
  55.         p = self.createPeriodicTaskMeta(TestPeriodicTask.name)
  56.         # check that repr works.
  57.         self.assertTrue(unicode(p).startswith("<PeriodicTask:"))
  58.         self.assertFalse(p in PeriodicTaskMeta.objects.get_waiting_tasks())
  59.         # Have to avoid save() because it applies the auto_now=True.
  60.         PeriodicTaskMeta.objects.filter(name=p.name).update(
  61.                 last_run_at=datetime.now() - TestPeriodicTask.run_every)
  62.         self.assertTrue(p in PeriodicTaskMeta.objects.get_waiting_tasks())
  63.         self.assertTrue(isinstance(p.task, TestPeriodicTask))
  64. 
  65.         p.delay()
  66.