test_loaders.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import os
  2. import sys
  3. import unittest2 as unittest
  4. from celery import loaders
  5. from celery.loaders import base
  6. from celery.loaders import djangoapp
  7. from celery.loaders import default
  8. from celery.tests.utils import with_environ
  9. class TestLoaders(unittest.TestCase):
  10. def test_get_loader_cls(self):
  11. self.assertEqual(loaders.get_loader_cls("django"),
  12. loaders.DjangoLoader)
  13. self.assertEqual(loaders.get_loader_cls("default"),
  14. loaders.DefaultLoader)
  15. # Execute cached branch.
  16. self.assertEqual(loaders.get_loader_cls("django"),
  17. loaders.DjangoLoader)
  18. self.assertEqual(loaders.get_loader_cls("default"),
  19. loaders.DefaultLoader)
  20. @with_environ("CELERY_LOADER", "default")
  21. def test_detect_loader_CELERY_LOADER(self):
  22. self.assertEqual(loaders.detect_loader(), loaders.DefaultLoader)
  23. class DummyLoader(base.BaseLoader):
  24. class Config(object):
  25. def __init__(self, **kwargs):
  26. for attr, val in kwargs.items():
  27. setattr(self, attr, val)
  28. def read_configuration(self):
  29. return self.Config(foo="bar", CELERY_IMPORTS=("os", "sys"))
  30. class TestLoaderBase(unittest.TestCase):
  31. def setUp(self):
  32. self.loader = DummyLoader()
  33. def test_handlers_pass(self):
  34. self.loader.on_task_init("foo.task", "feedface-cafebabe")
  35. self.loader.on_worker_init()
  36. def test_import_task_module(self):
  37. self.assertEqual(sys, self.loader.import_task_module("sys"))
  38. def test_conf_property(self):
  39. self.assertEqual(self.loader.conf.foo, "bar")
  40. self.assertEqual(self.loader._conf_cache.foo, "bar")
  41. self.assertEqual(self.loader.conf.foo, "bar")
  42. def test_import_default_modules(self):
  43. self.assertSameElements(self.loader.import_default_modules(),
  44. [os, sys])
  45. class TestDjangoLoader(unittest.TestCase):
  46. def setUp(self):
  47. self.loader = loaders.DjangoLoader()
  48. def test_on_worker_init(self):
  49. from django.conf import settings
  50. old_imports = settings.CELERY_IMPORTS
  51. settings.CELERY_IMPORTS = ("xxx.does.not.exist", )
  52. try:
  53. self.assertRaises(ImportError, self.loader.on_worker_init)
  54. finally:
  55. settings.CELERY_IMPORTS = old_imports
  56. def test_race_protection(self):
  57. djangoapp._RACE_PROTECTION = True
  58. try:
  59. self.assertFalse(self.loader.on_worker_init())
  60. finally:
  61. djangoapp._RACE_PROTECTION = False
  62. def test_find_related_module_no_path(self):
  63. self.assertFalse(djangoapp.find_related_module("sys", "tasks"))
  64. def test_find_related_module_no_related(self):
  65. self.assertFalse(djangoapp.find_related_module("someapp",
  66. "frobulators"))
  67. class TestDefaultLoader(unittest.TestCase):
  68. def test_wanted_module_item(self):
  69. self.assertTrue(default.wanted_module_item("FOO"))
  70. self.assertTrue(default.wanted_module_item("foo"))
  71. self.assertFalse(default.wanted_module_item("_foo"))
  72. self.assertFalse(default.wanted_module_item("__foo"))
  73. def test_read_configuration(self):
  74. from types import ModuleType
  75. class ConfigModule(ModuleType):
  76. pass
  77. celeryconfig = ConfigModule("celeryconfig")
  78. celeryconfig.CELERY_IMPORTS = ("os", "sys")
  79. sys.modules["celeryconfig"] = celeryconfig
  80. try:
  81. l = default.Loader()
  82. settings = l.read_configuration()
  83. self.assertTupleEqual(settings.CELERY_IMPORTS, ("os", "sys"))
  84. from django.conf import settings
  85. settings.configured = False
  86. settings = l.read_configuration()
  87. self.assertTupleEqual(settings.CELERY_IMPORTS, ("os", "sys"))
  88. self.assertTrue(settings.configured)
  89. l.on_worker_init()
  90. finally:
  91. sys.modules.pop("celeryconfig", None)