test_context.py 2.5 KB

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