test_compat.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from __future__ import absolute_import
  2. from datetime import timedelta
  3. import sys
  4. sys.modules.pop('celery.task', None)
  5. from celery.schedules import schedule
  6. from celery.task import (
  7. periodic_task,
  8. PeriodicTask
  9. )
  10. from celery.utils.timeutils import timedelta_seconds
  11. from celery.tests.case import AppCase, depends_on_current_app
  12. class test_Task(AppCase):
  13. def test_base_task_inherits_magic_kwargs_from_app(self):
  14. from celery.task import Task as OldTask
  15. class timkX(OldTask):
  16. abstract = True
  17. with self.Celery(set_as_current=False,
  18. accept_magic_kwargs=True) as app:
  19. timkX.bind(app)
  20. # see #918
  21. self.assertFalse(timkX.accept_magic_kwargs)
  22. from celery import Task as NewTask
  23. class timkY(NewTask):
  24. abstract = True
  25. timkY.bind(app)
  26. self.assertFalse(timkY.accept_magic_kwargs)
  27. @depends_on_current_app
  28. class test_periodic_tasks(AppCase):
  29. def setup(self):
  30. @periodic_task(app=self.app, shared=False,
  31. run_every=schedule(timedelta(hours=1), app=self.app))
  32. def my_periodic():
  33. pass
  34. self.my_periodic = my_periodic
  35. def now(self):
  36. return self.app.now()
  37. def test_must_have_run_every(self):
  38. with self.assertRaises(NotImplementedError):
  39. type('Foo', (PeriodicTask, ), {'__module__': __name__})
  40. def test_remaining_estimate(self):
  41. s = self.my_periodic.run_every
  42. self.assertIsInstance(
  43. s.remaining_estimate(s.maybe_make_aware(self.now())),
  44. timedelta)
  45. def test_is_due_not_due(self):
  46. due, remaining = self.my_periodic.run_every.is_due(self.now())
  47. self.assertFalse(due)
  48. # This assertion may fail if executed in the
  49. # first minute of an hour, thus 59 instead of 60
  50. self.assertGreater(remaining, 59)
  51. def test_is_due(self):
  52. p = self.my_periodic
  53. due, remaining = p.run_every.is_due(
  54. self.now() - p.run_every.run_every,
  55. )
  56. self.assertTrue(due)
  57. self.assertEqual(remaining,
  58. timedelta_seconds(p.run_every.run_every))
  59. def test_schedule_repr(self):
  60. p = self.my_periodic
  61. self.assertTrue(repr(p.run_every))