test_database.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import unittest
  2. from datetime import timedelta
  3. from celery import states
  4. from celery.task import PeriodicTask
  5. from celery.utils import gen_unique_id
  6. from celery.backends.database import DatabaseBackend
  7. class SomeClass(object):
  8. def __init__(self, data):
  9. self.data = data
  10. class MyPeriodicTask(PeriodicTask):
  11. name = "c.u.my-periodic-task-244"
  12. run_every = timedelta(seconds=1)
  13. def run(self, **kwargs):
  14. return 42
  15. class TestDatabaseBackend(unittest.TestCase):
  16. def test_backend(self):
  17. b = DatabaseBackend()
  18. tid = gen_unique_id()
  19. self.assertFalse(b.is_successful(tid))
  20. self.assertEquals(b.get_status(tid), states.PENDING)
  21. self.assertTrue(b.get_result(tid) is None)
  22. b.mark_as_done(tid, 42)
  23. self.assertTrue(b.is_successful(tid))
  24. self.assertEquals(b.get_status(tid), states.SUCCESS)
  25. self.assertEquals(b.get_result(tid), 42)
  26. self.assertTrue(b.get_result(tid), 42)
  27. tid2 = gen_unique_id()
  28. result = {"foo": "baz", "bar": SomeClass(12345)}
  29. b.mark_as_done(tid2, result)
  30. # is serialized properly.
  31. rindb = b.get_result(tid2)
  32. self.assertEquals(rindb.get("foo"), "baz")
  33. self.assertEquals(rindb.get("bar").data, 12345)
  34. tid3 = gen_unique_id()
  35. try:
  36. raise KeyError("foo")
  37. except KeyError, exception:
  38. pass
  39. b.mark_as_failure(tid3, exception)
  40. self.assertFalse(b.is_successful(tid3))
  41. self.assertEquals(b.get_status(tid3), states.FAILURE)
  42. self.assertTrue(isinstance(b.get_result(tid3), KeyError))
  43. def test_taskset_store(self):
  44. b = DatabaseBackend()
  45. tid = gen_unique_id()
  46. self.assertTrue(b.restore_taskset(tid) is None)
  47. result = {"foo": "baz", "bar": SomeClass(12345)}
  48. b.save_taskset(tid, result)
  49. rindb = b.restore_taskset(tid)
  50. self.assertTrue(rindb is not None)
  51. self.assertEquals(rindb.get("foo"), "baz")
  52. self.assertEquals(rindb.get("bar").data, 12345)