test_database.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import unittest
  2. from celery.backends.database import Backend
  3. from celery.utils import gen_unique_id
  4. from celery.task import PeriodicTask
  5. from celery import registry
  6. from datetime import datetime, timedelta
  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 = Backend()
  18. tid = gen_unique_id()
  19. self.assertFalse(b.is_successful(tid))
  20. self.assertEquals(b.get_status(tid), "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), "SUCCESS")
  25. self.assertEquals(b.get_result(tid), 42)
  26. self.assertTrue(b._cache.get(tid))
  27. self.assertTrue(b.get_result(tid), 42)
  28. tid2 = gen_unique_id()
  29. result = {"foo": "baz", "bar": SomeClass(12345)}
  30. b.mark_as_done(tid2, result)
  31. # is serialized properly.
  32. rindb = b.get_result(tid2)
  33. self.assertEquals(rindb.get("foo"), "baz")
  34. self.assertEquals(rindb.get("bar").data, 12345)
  35. tid3 = gen_unique_id()
  36. try:
  37. raise KeyError("foo")
  38. except KeyError, exception:
  39. pass
  40. b.mark_as_failure(tid3, exception)
  41. self.assertFalse(b.is_successful(tid3))
  42. self.assertEquals(b.get_status(tid3), "FAILURE")
  43. self.assertTrue(isinstance(b.get_result(tid3), KeyError))