Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_clocks.py 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from __future__ import absolute_import
  2. import pickle
  3. from heapq import heappush
  4. from time import time
  5. from kombu.clocks import LamportClock, timetuple
  6. from .case import Mock, Case
  7. class test_LamportClock(Case):
  8. def test_clocks(self):
  9. c1 = LamportClock()
  10. c2 = LamportClock()
  11. c1.forward()
  12. c2.forward()
  13. c1.forward()
  14. c1.forward()
  15. c2.adjust(c1.value)
  16. self.assertEqual(c2.value, c1.value + 1)
  17. self.assertTrue(repr(c1))
  18. c2_val = c2.value
  19. c2.forward()
  20. c2.forward()
  21. c2.adjust(c1.value)
  22. self.assertEqual(c2.value, c2_val + 2 + 1)
  23. c1.adjust(c2.value)
  24. self.assertEqual(c1.value, c2.value + 1)
  25. def test_sort(self):
  26. c = LamportClock()
  27. pid1 = 'a.example.com:312'
  28. pid2 = 'b.example.com:311'
  29. events = []
  30. m1 = (c.forward(), pid1)
  31. heappush(events, m1)
  32. m2 = (c.forward(), pid2)
  33. heappush(events, m2)
  34. m3 = (c.forward(), pid1)
  35. heappush(events, m3)
  36. m4 = (30, pid1)
  37. heappush(events, m4)
  38. m5 = (30, pid2)
  39. heappush(events, m5)
  40. self.assertEqual(str(c), str(c.value))
  41. self.assertEqual(c.sort_heap(events), m1)
  42. self.assertEqual(c.sort_heap([m4, m5]), m4)
  43. self.assertEqual(c.sort_heap([m4, m5, m1]), m4)
  44. class test_timetuple(Case):
  45. def test_repr(self):
  46. x = timetuple(133, time(), 'id', Mock())
  47. self.assertTrue(repr(x))
  48. def test_pickleable(self):
  49. x = timetuple(133, time(), 'id', 'obj')
  50. self.assertEqual(pickle.loads(pickle.dumps(x)), tuple(x))
  51. def test_order(self):
  52. t1 = time()
  53. t2 = time() + 300 # windows clock not reliable
  54. a = timetuple(133, t1, 'A', 'obj')
  55. b = timetuple(140, t1, 'A', 'obj')
  56. self.assertTrue(a.__getnewargs__())
  57. self.assertEqual(a.clock, 133)
  58. self.assertEqual(a.timestamp, t1)
  59. self.assertEqual(a.id, 'A')
  60. self.assertEqual(a.obj, 'obj')
  61. self.assertTrue(
  62. a <= b,
  63. )
  64. self.assertTrue(
  65. b >= a,
  66. )
  67. self.assertEqual(
  68. timetuple(134, time(), 'A', 'obj').__lt__(tuple()),
  69. NotImplemented,
  70. )
  71. self.assertGreater(
  72. timetuple(134, t2, 'A', 'obj'),
  73. timetuple(133, t1, 'A', 'obj'),
  74. )
  75. self.assertGreater(
  76. timetuple(134, t1, 'B', 'obj'),
  77. timetuple(134, t1, 'A', 'obj'),
  78. )
  79. self.assertGreater(
  80. timetuple(None, t2, 'B', 'obj'),
  81. timetuple(None, t1, 'A', 'obj'),
  82. )