test_context.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # -*- coding: utf-8 -*-'
  2. from __future__ import absolute_import
  3. from celery.app.task import Context
  4. from celery.tests.case import AppCase
  5. # Retreive the values of all context attributes as a
  6. # dictionary in an implementation-agnostic manner.
  7. def get_context_as_dict(ctx, getter=getattr):
  8. defaults = {}
  9. for attr_name in dir(ctx):
  10. if attr_name.startswith('_'):
  11. continue # Ignore pseudo-private attributes
  12. attr = getter(ctx, attr_name)
  13. if callable(attr):
  14. continue # Ignore methods and other non-trivial types
  15. defaults[attr_name] = attr
  16. return defaults
  17. default_context = get_context_as_dict(Context())
  18. class test_Context(AppCase):
  19. def test_default_context(self):
  20. # A bit of a tautological test, since it uses the same
  21. # initializer as the default_context constructor.
  22. defaults = dict(default_context, children=[])
  23. self.assertDictEqual(get_context_as_dict(Context()), defaults)
  24. def test_updated_context(self):
  25. expected = dict(default_context)
  26. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  27. ctx = Context()
  28. expected.update(changes)
  29. ctx.update(changes)
  30. self.assertDictEqual(get_context_as_dict(ctx), expected)
  31. self.assertDictEqual(get_context_as_dict(Context()), default_context)
  32. def test_modified_context(self):
  33. expected = dict(default_context)
  34. ctx = Context()
  35. expected['id'] = 'unique id'
  36. expected['args'] = ['some', 1]
  37. ctx.id = 'unique id'
  38. ctx.args = ['some', 1]
  39. self.assertDictEqual(get_context_as_dict(ctx), expected)
  40. self.assertDictEqual(get_context_as_dict(Context()), default_context)
  41. def test_cleared_context(self):
  42. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  43. ctx = Context()
  44. ctx.update(changes)
  45. ctx.clear()
  46. defaults = dict(default_context, children=[])
  47. self.assertDictEqual(get_context_as_dict(ctx), defaults)
  48. self.assertDictEqual(get_context_as_dict(Context()), defaults)
  49. def test_context_get(self):
  50. expected = dict(default_context)
  51. changes = dict(id='unique id', args=['some', 1], wibble='wobble')
  52. ctx = Context()
  53. expected.update(changes)
  54. ctx.update(changes)
  55. ctx_dict = get_context_as_dict(ctx, getter=Context.get)
  56. self.assertDictEqual(ctx_dict, expected)
  57. self.assertDictEqual(get_context_as_dict(Context()), default_context)