test_loaders.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import os
  2. import sys
  3. import unittest2 as unittest
  4. from celery import task
  5. from celery import loaders
  6. from celery.loaders import base
  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("default"),
  12. default.Loader)
  13. @with_environ("CELERY_LOADER", "default")
  14. def test_detect_loader_CELERY_LOADER(self):
  15. self.assertIsInstance(loaders.setup_loader(), default.Loader)
  16. class DummyLoader(base.BaseLoader):
  17. class Config(object):
  18. def __init__(self, **kwargs):
  19. for attr, val in kwargs.items():
  20. setattr(self, attr, val)
  21. def read_configuration(self):
  22. return self.Config(foo="bar", CELERY_IMPORTS=("os", "sys"))
  23. class TestLoaderBase(unittest.TestCase):
  24. def setUp(self):
  25. self.loader = DummyLoader()
  26. def test_handlers_pass(self):
  27. self.loader.on_task_init("foo.task", "feedface-cafebabe")
  28. self.loader.on_worker_init()
  29. def test_import_task_module(self):
  30. self.assertEqual(sys, self.loader.import_task_module("sys"))
  31. def test_conf_property(self):
  32. self.assertEqual(self.loader.conf.foo, "bar")
  33. self.assertEqual(self.loader._conf_cache.foo, "bar")
  34. self.assertEqual(self.loader.conf.foo, "bar")
  35. def test_import_default_modules(self):
  36. self.assertItemsEqual(self.loader.import_default_modules(),
  37. [os, sys, task])
  38. class TestDefaultLoader(unittest.TestCase):
  39. def test_wanted_module_item(self):
  40. self.assertTrue(default.wanted_module_item("FOO"))
  41. self.assertTrue(default.wanted_module_item("foo"))
  42. self.assertFalse(default.wanted_module_item("_foo"))
  43. self.assertFalse(default.wanted_module_item("__foo"))
  44. def test_read_configuration(self):
  45. from types import ModuleType
  46. class ConfigModule(ModuleType):
  47. pass
  48. celeryconfig = ConfigModule("celeryconfig")
  49. celeryconfig.CELERY_IMPORTS = ("os", "sys")
  50. configname = os.environ.get("CELERY_CONFIG_MODULE") or "celeryconfig"
  51. prevconfig = sys.modules[configname]
  52. sys.modules[configname] = celeryconfig
  53. try:
  54. l = default.Loader()
  55. settings = l.read_configuration()
  56. self.assertTupleEqual(settings.CELERY_IMPORTS, ("os", "sys"))
  57. settings = l.read_configuration()
  58. self.assertTupleEqual(settings.CELERY_IMPORTS, ("os", "sys"))
  59. l.on_worker_init()
  60. finally:
  61. sys.modules[configname] = prevconfig