test_base.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import sys
  2. import types
  3. import unittest
  4. from django.db.models.base import subclass_exception
  5. from billiard.serialization import find_nearest_pickleable_exception as fnpe
  6. from billiard.serialization import UnpickleableExceptionWrapper
  7. from billiard.serialization import get_pickleable_exception as gpe
  8. from celery import states
  9. from celery.backends.base import BaseBackend, KeyValueStoreBackend
  10. class wrapobject(object):
  11. def __init__(self, *args, **kwargs):
  12. self.args = args
  13. Oldstyle = types.ClassType("Oldstyle", (), {})
  14. Unpickleable = subclass_exception("Unpickleable", KeyError, "foo.module")
  15. Impossible = subclass_exception("Impossible", object, "foo.module")
  16. Lookalike = subclass_exception("Lookalike", wrapobject, "foo.module")
  17. b = BaseBackend()
  18. class TestBaseBackendInterface(unittest.TestCase):
  19. def test_get_status(self):
  20. self.assertRaises(NotImplementedError,
  21. b.is_successful, "SOMExx-N0Nex1stant-IDxx-")
  22. def test_store_result(self):
  23. self.assertRaises(NotImplementedError,
  24. b.store_result, "SOMExx-N0nex1stant-IDxx-", 42, states.SUCCESS)
  25. def test_get_result(self):
  26. self.assertRaises(NotImplementedError,
  27. b.get_result, "SOMExx-N0nex1stant-IDxx-")
  28. def test_restore_taskset(self):
  29. self.assertRaises(NotImplementedError,
  30. b.restore_taskset, "SOMExx-N0nex1stant-IDxx-")
  31. def test_save_taskset(self):
  32. self.assertRaises(NotImplementedError,
  33. b.save_taskset, "SOMExx-N0nex1stant-IDxx-", "blergh")
  34. def test_get_traceback(self):
  35. self.assertRaises(NotImplementedError,
  36. b.get_traceback, "SOMExx-N0nex1stant-IDxx-")
  37. class TestPickleException(unittest.TestCase):
  38. def test_oldstyle(self):
  39. self.assertTrue(fnpe(Oldstyle()) is None)
  40. def test_BaseException(self):
  41. self.assertTrue(fnpe(Exception()) is None)
  42. def test_get_pickleable_exception(self):
  43. exc = Exception("foo")
  44. self.assertEquals(gpe(exc), exc)
  45. def test_unpickleable(self):
  46. self.assertTrue(isinstance(fnpe(Unpickleable()), KeyError))
  47. self.assertEquals(fnpe(Impossible()), None)
  48. class TestPrepareException(unittest.TestCase):
  49. def test_unpickleable(self):
  50. x = b.prepare_exception(Unpickleable(1, 2, "foo"))
  51. self.assertTrue(isinstance(x, KeyError))
  52. y = b.exception_to_python(x)
  53. self.assertTrue(isinstance(y, KeyError))
  54. def test_impossible(self):
  55. x = b.prepare_exception(Impossible())
  56. self.assertTrue(isinstance(x, UnpickleableExceptionWrapper))
  57. y = b.exception_to_python(x)
  58. self.assertEquals(y.__class__.__name__, "Impossible")
  59. if sys.version_info < (2, 5):
  60. self.assertTrue(y.__class__.__module__)
  61. else:
  62. self.assertEquals(y.__class__.__module__, "foo.module")
  63. def test_regular(self):
  64. x = b.prepare_exception(KeyError("baz"))
  65. self.assertTrue(isinstance(x, KeyError))
  66. y = b.exception_to_python(x)
  67. self.assertTrue(isinstance(y, KeyError))
  68. class TestKeyValueStoreBackendInterface(unittest.TestCase):
  69. def test_get(self):
  70. self.assertRaises(NotImplementedError, KeyValueStoreBackend().get,
  71. "a")
  72. def test_set(self):
  73. self.assertRaises(NotImplementedError, KeyValueStoreBackend().set,
  74. "a", 1)
  75. def test_cleanup(self):
  76. self.assertFalse(KeyValueStoreBackend().cleanup())