test_utils.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from __future__ import absolute_import
  2. import pytz
  3. from datetime import datetime, date, time, timedelta
  4. from mock import Mock, patch
  5. from kombu import Queue
  6. from celery.utils import (
  7. chunks,
  8. is_iterable,
  9. cached_property,
  10. warn_deprecated,
  11. worker_direct,
  12. gen_task_name,
  13. jsonify,
  14. )
  15. from celery.tests.case import Case
  16. def double(x):
  17. return x * 2
  18. class test_worker_direct(Case):
  19. def test_returns_if_queue(self):
  20. q = Queue('foo')
  21. self.assertIs(worker_direct(q), q)
  22. class test_gen_task_name(Case):
  23. def test_no_module(self):
  24. app = Mock()
  25. app.name == '__main__'
  26. self.assertTrue(gen_task_name(app, 'foo', 'axsadaewe'))
  27. class test_jsonify(Case):
  28. def test_simple(self):
  29. self.assertTrue(jsonify(Queue('foo')))
  30. self.assertTrue(jsonify(['foo', 'bar', 'baz']))
  31. self.assertTrue(jsonify({'foo': 'bar'}))
  32. self.assertTrue(jsonify(datetime.utcnow()))
  33. self.assertTrue(jsonify(datetime.utcnow().replace(tzinfo=pytz.utc)))
  34. self.assertTrue(jsonify(datetime.utcnow().replace(microsecond=0)))
  35. self.assertTrue(jsonify(date(2012, 1, 1)))
  36. self.assertTrue(jsonify(time(hour=1, minute=30)))
  37. self.assertTrue(jsonify(time(hour=1, minute=30, microsecond=3)))
  38. self.assertTrue(jsonify(timedelta(seconds=30)))
  39. self.assertTrue(jsonify(10))
  40. self.assertTrue(jsonify(10.3))
  41. self.assertTrue(jsonify('hello'))
  42. with self.assertRaises(ValueError):
  43. jsonify(object())
  44. class test_chunks(Case):
  45. def test_chunks(self):
  46. # n == 2
  47. x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2)
  48. self.assertListEqual(
  49. list(x),
  50. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]],
  51. )
  52. # n == 3
  53. x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3)
  54. self.assertListEqual(
  55. list(x),
  56. [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]],
  57. )
  58. # n == 2 (exact)
  59. x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 2)
  60. self.assertListEqual(
  61. list(x),
  62. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]],
  63. )
  64. class test_utils(Case):
  65. def test_is_iterable(self):
  66. for a in 'f', ['f'], ('f', ), {'f': 'f'}:
  67. self.assertTrue(is_iterable(a))
  68. for b in object(), 1:
  69. self.assertFalse(is_iterable(b))
  70. def test_cached_property(self):
  71. def fun(obj):
  72. return fun.value
  73. x = cached_property(fun)
  74. self.assertIs(x.__get__(None), x)
  75. self.assertIs(x.__set__(None, None), x)
  76. self.assertIs(x.__delete__(None), x)
  77. @patch('warnings.warn')
  78. def test_warn_deprecated(self, warn):
  79. warn_deprecated('Foo')
  80. self.assertTrue(warn.called)