test_registry.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import pytest
  2. from celery.app.registry import _unpickle_task, _unpickle_task_v2
  3. def returns():
  4. return 1
  5. @pytest.mark.usefixtures('depends_on_current_app')
  6. class test_unpickle_task:
  7. def test_unpickle_v1(self, app):
  8. app.tasks['txfoo'] = 'bar'
  9. assert _unpickle_task('txfoo') == 'bar'
  10. def test_unpickle_v2(self, app):
  11. app.tasks['txfoo1'] = 'bar1'
  12. assert _unpickle_task_v2('txfoo1') == 'bar1'
  13. assert _unpickle_task_v2('txfoo1', module='celery') == 'bar1'
  14. class test_TaskRegistry:
  15. def setup(self):
  16. self.mytask = self.app.task(name='A', shared=False)(returns)
  17. self.myperiodic = self.app.task(
  18. name='B', shared=False, type='periodic',
  19. )(returns)
  20. def test_NotRegistered_str(self):
  21. assert repr(self.app.tasks.NotRegistered('tasks.add'))
  22. def assert_register_unregister_cls(self, r, task):
  23. r.unregister(task)
  24. with pytest.raises(r.NotRegistered):
  25. r.unregister(task)
  26. r.register(task)
  27. assert task.name in r
  28. def test_task_registry(self):
  29. r = self.app._tasks
  30. assert isinstance(r, dict)
  31. self.assert_register_unregister_cls(r, self.mytask)
  32. self.assert_register_unregister_cls(r, self.myperiodic)
  33. r.register(self.myperiodic)
  34. r.unregister(self.myperiodic.name)
  35. assert self.myperiodic not in r
  36. r.register(self.myperiodic)
  37. tasks = dict(r)
  38. assert tasks.get(self.mytask.name) is self.mytask
  39. assert tasks.get(self.myperiodic.name) is self.myperiodic
  40. assert r[self.mytask.name] is self.mytask
  41. assert r[self.myperiodic.name] is self.myperiodic
  42. r.unregister(self.mytask)
  43. assert self.mytask.name not in r
  44. r.unregister(self.myperiodic)
  45. assert self.myperiodic.name not in r
  46. assert self.mytask.run()
  47. assert self.myperiodic.run()
  48. def test_compat(self):
  49. assert self.app.tasks.regular()
  50. assert self.app.tasks.periodic()