test_time_every.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from datetime import timedelta, datetime
  2. from pprint import pprint
  3. import pytest
  4. from larigira.timegen_every import FrequencyAlarm, SingleAlarm
  5. from larigira.timegen import timegenerate
  6. def eq_(a, b, reason=None):
  7. '''migrating tests from nose'''
  8. if reason is not None:
  9. assert a == b, reason
  10. else:
  11. assert a == b
  12. @pytest.fixture
  13. def now():
  14. return datetime.now()
  15. @pytest.fixture(params=['seconds', 'human', 'humanlong', 'coloned'])
  16. def onehour(now, request):
  17. '''a FrequencyAlarm: every hour for one day'''
  18. intervals = dict(seconds=3600, human='1h', humanlong='30m 1800s',
  19. coloned='01:00:00')
  20. return FrequencyAlarm({
  21. 'start': now - timedelta(days=1),
  22. 'interval': intervals[request.param],
  23. 'end': now + days(1)})
  24. @pytest.fixture(params=['seconds', 'human', 'coloned'])
  25. def tenseconds(now, request):
  26. '''a FrequencyAlarm: every 10 seconds for one day'''
  27. intervals = dict(seconds=10, human='10s', coloned='00:10')
  28. return FrequencyAlarm({
  29. 'start': now - timedelta(days=1),
  30. 'interval': intervals[request.param],
  31. 'end': now + days(1)})
  32. def days(n):
  33. return timedelta(days=n)
  34. def test_single_creations(now):
  35. return SingleAlarm({
  36. 'timestamp': now
  37. })
  38. def test_freq_creations(now):
  39. return FrequencyAlarm({
  40. 'start': now - timedelta(days=1),
  41. 'interval': 3600,
  42. 'end': now})
  43. @pytest.mark.timeout(1)
  44. def test_single_ring(now):
  45. dt = now + days(1)
  46. s = SingleAlarm({'timestamp': dt})
  47. eq_(s.next_ring(), dt)
  48. eq_(s.next_ring(now), dt)
  49. assert s.next_ring(dt) is None, "%s - %s" % (str(s.next_ring(dt)), str(dt))
  50. assert s.next_ring(now + days(2)) is None
  51. assert s.has_ring(dt)
  52. assert not s.has_ring(now)
  53. assert not s.has_ring(now + days(2))
  54. @pytest.mark.timeout(1)
  55. def test_single_all(now):
  56. dt = now + timedelta(days=1)
  57. s = SingleAlarm({'timestamp': dt})
  58. eq_(list(s.all_rings()), [dt])
  59. eq_(list(s.all_rings(now)), [dt])
  60. eq_(list(s.all_rings(now + days(2))), [])
  61. def test_freq_short(now, tenseconds):
  62. f = tenseconds
  63. assert now in f.all_rings(now - days(3))
  64. assert f.next_ring(now) is not None
  65. assert f.next_ring(now) != now
  66. assert f.next_ring(now) > now
  67. assert now not in f.all_rings(now)
  68. for r in f.all_rings(now):
  69. assert r > now
  70. @pytest.mark.timeout(1)
  71. def test_freq_ring(now, onehour):
  72. f = onehour
  73. assert now in f.all_rings(now - days(3))
  74. assert f.next_ring(now) is not None
  75. assert f.next_ring(now) != now
  76. assert f.next_ring(now) > now
  77. assert now not in f.all_rings(now)
  78. for r in f.all_rings(now):
  79. assert r > now
  80. allr = list(f.all_rings(now))
  81. eq_(len(allr), 24)
  82. eq_(len(tuple(f.all_rings(now + days(2)))), 0)
  83. allr = tuple(f.all_rings(now - days(20)))
  84. eq_(f.next_ring(now - days(20)), now - days(1))
  85. eq_(len(allr), 49, pprint(allr))
  86. def test_single_registered():
  87. timegenerate({
  88. 'kind': 'single',
  89. 'timestamp': 1234567890
  90. })
  91. def test_frequency_registered():
  92. timegenerate({
  93. 'kind': 'frequency',
  94. 'start': 1234567890,
  95. 'interval': 60*15
  96. })