test_base.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import unittest
  2. from celery.backends.base import find_nearest_pickleable_exception as fnpe
  3. from celery.backends.base import BaseBackend
  4. from celery.backends.base import UnpickleableExceptionWrapper
  5. from django.db.models.base import subclass_exception
  6. class wrapobject(object):
  7. def __init__(self, *args, **kwargs):
  8. self.args = args
  9. Unpickleable = subclass_exception("Unpickleable", KeyError, "foo.module")
  10. Impossible = subclass_exception("Impossible", object, "foo.module")
  11. Lookalike = subclass_exception("Lookalike", wrapobject, "foo.module")
  12. b = BaseBackend()
  13. class TestPickleException(unittest.TestCase):
  14. def test_BaseException(self):
  15. self.assertTrue(fnpe(Exception()) is None)
  16. def test_unpickleable(self):
  17. self.assertTrue(isinstance(fnpe(Unpickleable()), KeyError))
  18. self.assertEquals(fnpe(Impossible()), None)
  19. class TestPrepareException(unittest.TestCase):
  20. def test_unpickleable(self):
  21. x = b.prepare_exception(Unpickleable(1, 2, "foo"))
  22. self.assertTrue(isinstance(x, KeyError))
  23. y = b.exception_to_python(x)
  24. self.assertTrue(isinstance(y, KeyError))
  25. def test_impossible(self):
  26. x = b.prepare_exception(Impossible())
  27. self.assertTrue(isinstance(x, UnpickleableExceptionWrapper))
  28. y = b.exception_to_python(x)
  29. self.assertEquals(y.__class__.__name__, "Impossible")
  30. self.assertEquals(y.__class__.__module__, "foo.module")
  31. def test_regular(self):
  32. x = b.prepare_exception(KeyError("baz"))
  33. self.assertTrue(isinstance(x, KeyError))
  34. y = b.exception_to_python(x)
  35. self.assertTrue(isinstance(y, KeyError))