test_database.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 celery.models import PeriodicTaskMeta
  7. from datetime import datetime, timedelta
  8. class SomeClass(object):
  9. def __init__(self, data):
  10. self.data = data
  11. class MyPeriodicTask(PeriodicTask):
  12. name = "c.u.my-periodic-task-244"
  13. run_every = timedelta(seconds=1)
  14. def run(self, **kwargs):
  15. return 42
  16. registry.tasks.register(MyPeriodicTask)
  17. class TestDatabaseBackend(unittest.TestCase):
  18. def test_run_periodic_tasks(self):
  19. #obj, created = PeriodicTaskMeta.objects.get_or_create(
  20. # name=MyPeriodicTask.name,
  21. # defaults={"last_run_at": datetime.now() -
  22. # timedelta(days=-4)})
  23. #if not created:
  24. # obj.last_run_at = datetime.now() - timedelta(days=4)
  25. # obj.save()
  26. b = Backend()
  27. b.run_periodic_tasks()
  28. def test_backend(self):
  29. b = Backend()
  30. tid = gen_unique_id()
  31. self.assertFalse(b.is_done(tid))
  32. self.assertEquals(b.get_status(tid), "PENDING")
  33. self.assertEquals(b.get_result(tid), '')
  34. b.mark_as_done(tid, 42)
  35. self.assertTrue(b.is_done(tid))
  36. self.assertEquals(b.get_status(tid), "DONE")
  37. self.assertEquals(b.get_result(tid), 42)
  38. self.assertTrue(b._cache.get(tid))
  39. self.assertTrue(b.get_result(tid), 42)
  40. tid2 = gen_unique_id()
  41. result = {"foo": "baz", "bar": SomeClass(12345)}
  42. b.mark_as_done(tid2, result)
  43. # is serialized properly.
  44. rindb = b.get_result(tid2)
  45. self.assertEquals(rindb.get("foo"), "baz")
  46. self.assertEquals(rindb.get("bar").data, 12345)
  47. tid3 = gen_unique_id()
  48. try:
  49. raise KeyError("foo")
  50. except KeyError, exception:
  51. pass
  52. b.mark_as_failure(tid3, exception)
  53. self.assertFalse(b.is_done(tid3))
  54. self.assertEquals(b.get_status(tid3), "FAILURE")
  55. self.assertTrue(isinstance(b.get_result(tid3), KeyError))