test_backends.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from __future__ import absolute_import
  2. from mock import patch
  3. from celery import backends
  4. from celery.backends.amqp import AMQPBackend
  5. from celery.backends.cache import CacheBackend
  6. from celery.tests.case import AppCase, depends_on_current_app
  7. class test_backends(AppCase):
  8. def test_get_backend_aliases(self):
  9. expects = [('amqp://', AMQPBackend),
  10. ('cache+memory://', CacheBackend)]
  11. for url, expect_cls in expects:
  12. backend, url = backends.get_backend_by_url(url, self.app.loader)
  13. self.assertIsInstance(
  14. backend(app=self.app, url=url),
  15. expect_cls,
  16. )
  17. def test_get_backend_cache(self):
  18. backends.get_backend_cls.clear()
  19. hits = backends.get_backend_cls.hits
  20. misses = backends.get_backend_cls.misses
  21. self.assertTrue(backends.get_backend_cls('amqp', self.app.loader))
  22. self.assertEqual(backends.get_backend_cls.misses, misses + 1)
  23. self.assertTrue(backends.get_backend_cls('amqp', self.app.loader))
  24. self.assertEqual(backends.get_backend_cls.hits, hits + 1)
  25. def test_unknown_backend(self):
  26. with self.assertRaises(ImportError):
  27. backends.get_backend_cls('fasodaopjeqijwqe', self.app.loader)
  28. @depends_on_current_app
  29. def test_default_backend(self):
  30. self.assertEqual(backends.default_backend, self.app.backend)
  31. def test_backend_by_url(self, url='redis://localhost/1'):
  32. from celery.backends.redis import RedisBackend
  33. backend, url_ = backends.get_backend_by_url(url, self.app.loader)
  34. self.assertIs(backend, RedisBackend)
  35. self.assertEqual(url_, url)
  36. def test_sym_raises_ValuError(self):
  37. with patch('celery.backends.symbol_by_name') as sbn:
  38. sbn.side_effect = ValueError()
  39. with self.assertRaises(ValueError):
  40. backends.get_backend_cls('xxx.xxx:foo', self.app.loader)