test_datastructures.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import sys
  2. from celery.tests.utils import unittest
  3. from Queue import Queue
  4. from celery.datastructures import PositionQueue, ExceptionInfo, LocalCache
  5. from celery.datastructures import LimitedSet, SharedCounter, consume_queue
  6. from celery.datastructures import AttributeDict
  7. class test_PositionQueue(unittest.TestCase):
  8. def test_position_queue_unfilled(self):
  9. q = PositionQueue(length=10)
  10. for position in q.data:
  11. self.assertIsInstance(position, q.UnfilledPosition)
  12. self.assertListEqual(q.filled, [])
  13. self.assertEqual(len(q), 0)
  14. self.assertFalse(q.full())
  15. def test_position_queue_almost(self):
  16. q = PositionQueue(length=10)
  17. q[3] = 3
  18. q[6] = 6
  19. q[9] = 9
  20. self.assertListEqual(q.filled, [3, 6, 9])
  21. self.assertEqual(len(q), 3)
  22. self.assertFalse(q.full())
  23. def test_position_queue_full(self):
  24. q = PositionQueue(length=10)
  25. for i in xrange(10):
  26. q[i] = i
  27. self.assertListEqual(q.filled, list(xrange(10)))
  28. self.assertEqual(len(q), 10)
  29. self.assertTrue(q.full())
  30. class test_ExceptionInfo(unittest.TestCase):
  31. def test_exception_info(self):
  32. try:
  33. raise LookupError("The quick brown fox jumps...")
  34. except LookupError:
  35. exc_info = sys.exc_info()
  36. einfo = ExceptionInfo(exc_info)
  37. self.assertEqual(str(einfo), einfo.traceback)
  38. self.assertIsInstance(einfo.exception, LookupError)
  39. self.assertTupleEqual(einfo.exception.args,
  40. ("The quick brown fox jumps...", ))
  41. self.assertTrue(einfo.traceback)
  42. r = repr(einfo)
  43. self.assertTrue(r)
  44. class test_utilities(unittest.TestCase):
  45. def test_consume_queue(self):
  46. x = Queue()
  47. it = consume_queue(x)
  48. self.assertRaises(StopIteration, it.next)
  49. x.put("foo")
  50. it = consume_queue(x)
  51. self.assertEqual(it.next(), "foo")
  52. self.assertRaises(StopIteration, it.next)
  53. class test_SharedCounter(unittest.TestCase):
  54. def test_initial_value(self):
  55. self.assertEqual(int(SharedCounter(10)), 10)
  56. def test_increment(self):
  57. c = SharedCounter(10)
  58. c.increment()
  59. self.assertEqual(int(c), 11)
  60. c.increment(2)
  61. self.assertEqual(int(c), 13)
  62. def test_decrement(self):
  63. c = SharedCounter(10)
  64. c.decrement()
  65. self.assertEqual(int(c), 9)
  66. c.decrement(2)
  67. self.assertEqual(int(c), 7)
  68. def test_iadd(self):
  69. c = SharedCounter(10)
  70. c += 10
  71. self.assertEqual(int(c), 20)
  72. def test_isub(self):
  73. c = SharedCounter(10)
  74. c -= 20
  75. self.assertEqual(int(c), -10)
  76. def test_repr(self):
  77. self.assertIn("<SharedCounter:", repr(SharedCounter(10)))
  78. class test_LimitedSet(unittest.TestCase):
  79. def test_add(self):
  80. s = LimitedSet(maxlen=2)
  81. s.add("foo")
  82. s.add("bar")
  83. for n in "foo", "bar":
  84. self.assertIn(n, s)
  85. s.add("baz")
  86. for n in "bar", "baz":
  87. self.assertIn(n, s)
  88. self.assertNotIn("foo", s)
  89. def test_iter(self):
  90. s = LimitedSet(maxlen=2)
  91. items = "foo", "bar"
  92. for item in items:
  93. s.add(item)
  94. l = list(iter(s))
  95. for item in items:
  96. self.assertIn(item, l)
  97. def test_repr(self):
  98. s = LimitedSet(maxlen=2)
  99. items = "foo", "bar"
  100. for item in items:
  101. s.add(item)
  102. self.assertIn("LimitedSet(", repr(s))
  103. class test_LocalCache(unittest.TestCase):
  104. def test_expires(self):
  105. limit = 100
  106. x = LocalCache(limit=limit)
  107. slots = list(range(limit * 2))
  108. for i in slots:
  109. x[i] = i
  110. self.assertListEqual(x.keys(), slots[limit:])
  111. class test_AttributeDict(unittest.TestCase):
  112. def test_getattr__setattr(self):
  113. x = AttributeDict({"foo": "bar"})
  114. self.assertEqual(x["foo"], "bar")
  115. self.assertRaises(AttributeError, getattr, x, "bar")
  116. x.bar = "foo"
  117. self.assertEqual(x["bar"], "foo")