Преглед на файлове

Unittest testing if pickling of exceptions works on the current installation, if this test doesn't pass please report it!

Ask Solem преди 16 години
родител
ревизия
b25dd22bbf
променени са 1 файла, в които са добавени 49 реда и са изтрити 0 реда
  1. 49 0
      celery/tests/test_pickle.py

+ 49 - 0
celery/tests/test_pickle.py

@@ -0,0 +1,49 @@
+import unittest
+import pickle
+from django.http import Http404
+
+class RegularException(Exception):
+    pass
+
+
+class ArgOverrideException(Exception):
+    def __init__(self, message, status_code=10):
+        self.status_code = status_code
+        super(ArgOverrideException, self).__init__(message, status_code)
+
+
+class TestPickle(unittest.TestCase):
+
+    def test_pickle_regular_exception(self):
+
+        e = None
+        try:
+            raise RegularException("RegularException raised")
+        except RegularException, e:
+            pass
+
+        pickled = pickle.dumps({"exception": e})
+        unpickled = pickle.loads(pickled)
+        exception = unpickled.get("exception")
+        self.assertTrue(exception)
+        self.assertTrue(isinstance(exception, RegularException))
+        self.assertEquals(exception.args, ("RegularException raised", ))
+
+
+    def test_pickle_arg_override_exception(self):
+
+        e = None
+        try:
+            raise ArgOverrideException("ArgOverrideException raised",
+                    status_code=100)
+        except ArgOverrideException, e:
+            pass
+
+        pickled = pickle.dumps({"exception": e})
+        unpickled = pickle.loads(pickled)
+        exception = unpickled.get("exception")
+        self.assertTrue(exception)
+        self.assertTrue(isinstance(exception, ArgOverrideException))
+        self.assertEquals(exception.args, ("ArgOverrideException raised",
+                                          100))
+        self.assertEquals(exception.status_code, 100)