test_pickle.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from __future__ import absolute_import
  2. from celery.utils.serialization import pickle
  3. from celery.tests.case import Case
  4. class RegularException(Exception):
  5. pass
  6. class ArgOverrideException(Exception):
  7. def __init__(self, message, status_code=10):
  8. self.status_code = status_code
  9. Exception.__init__(self, message, status_code)
  10. class test_Pickle(Case):
  11. def test_pickle_regular_exception(self):
  12. exc = None
  13. try:
  14. raise RegularException('RegularException raised')
  15. except RegularException as exc_:
  16. exc = exc_
  17. pickled = pickle.dumps({'exception': exc})
  18. unpickled = pickle.loads(pickled)
  19. exception = unpickled.get('exception')
  20. self.assertTrue(exception)
  21. self.assertIsInstance(exception, RegularException)
  22. self.assertTupleEqual(exception.args, ('RegularException raised', ))
  23. def test_pickle_arg_override_exception(self):
  24. exc = None
  25. try:
  26. raise ArgOverrideException(
  27. 'ArgOverrideException raised', status_code=100,
  28. )
  29. except ArgOverrideException as exc_:
  30. exc = exc_
  31. pickled = pickle.dumps({'exception': exc})
  32. unpickled = pickle.loads(pickled)
  33. exception = unpickled.get('exception')
  34. self.assertTrue(exception)
  35. self.assertIsInstance(exception, ArgOverrideException)
  36. self.assertTupleEqual(exception.args, (
  37. 'ArgOverrideException raised', 100))
  38. self.assertEqual(exception.status_code, 100)