92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
|
import datetime
|
||
|
import unittest
|
||
|
|
||
|
from huey import crontab
|
||
|
|
||
|
|
||
|
class CrontabTestCase(unittest.TestCase):
|
||
|
def test_crontab_month(self):
|
||
|
# validates the following months, 1, 4, 7, 8, 9
|
||
|
valids = [1, 4, 7, 8, 9]
|
||
|
validate_m = crontab(month='1,4,*/6,8-9')
|
||
|
|
||
|
for x in range(1, 13):
|
||
|
res = validate_m(datetime.datetime(2011, x, 1))
|
||
|
self.assertEqual(res, x in valids)
|
||
|
|
||
|
def test_crontab_day(self):
|
||
|
# validates the following days
|
||
|
valids = [1, 4, 7, 8, 9, 13, 19, 25, 31]
|
||
|
validate_d = crontab(day='*/6,1,4,8-9')
|
||
|
|
||
|
for x in range(1, 32):
|
||
|
res = validate_d(datetime.datetime(2011, 1, x))
|
||
|
self.assertEqual(res, x in valids)
|
||
|
|
||
|
def test_crontab_hour(self):
|
||
|
# validates the following hours
|
||
|
valids = [0, 1, 4, 6, 8, 9, 12, 18]
|
||
|
validate_h = crontab(hour='8-9,*/6,1,4')
|
||
|
|
||
|
for x in range(24):
|
||
|
res = validate_h(datetime.datetime(2011, 1, 1, x))
|
||
|
self.assertEqual(res, x in valids)
|
||
|
|
||
|
edge = crontab(hour=0)
|
||
|
self.assertTrue(edge(datetime.datetime(2011, 1, 1, 0, 0)))
|
||
|
self.assertFalse(edge(datetime.datetime(2011, 1, 1, 12, 0)))
|
||
|
|
||
|
def test_crontab_minute(self):
|
||
|
# validates the following minutes
|
||
|
valids = [0, 1, 4, 6, 8, 9, 12, 18, 24, 30, 36, 42, 48, 54]
|
||
|
validate_m = crontab(minute='4,8-9,*/6,1')
|
||
|
|
||
|
for x in range(60):
|
||
|
res = validate_m(datetime.datetime(2011, 1, 1, 1, x))
|
||
|
self.assertEqual(res, x in valids)
|
||
|
|
||
|
def test_crontab_day_of_week(self):
|
||
|
# validates the following days of week
|
||
|
# jan, 1, 2011 is a saturday
|
||
|
valids = [2, 4, 9, 11, 16, 18, 23, 25, 30]
|
||
|
validate_dow = crontab(day_of_week='0,2')
|
||
|
|
||
|
for x in range(1, 32):
|
||
|
res = validate_dow(datetime.datetime(2011, 1, x))
|
||
|
self.assertEqual(res, x in valids)
|
||
|
|
||
|
def test_crontab_all_together(self):
|
||
|
# jan 1, 2011 is a saturday
|
||
|
# may 1, 2011 is a sunday
|
||
|
validate = crontab(
|
||
|
month='1,5',
|
||
|
day='1,4,7',
|
||
|
day_of_week='0,6',
|
||
|
hour='*/4',
|
||
|
minute='1-5,10-15,50'
|
||
|
)
|
||
|
|
||
|
self.assertTrue(validate(datetime.datetime(2011, 5, 1, 4, 11)))
|
||
|
self.assertTrue(validate(datetime.datetime(2011, 5, 7, 20, 50)))
|
||
|
self.assertTrue(validate(datetime.datetime(2011, 1, 1, 0, 1)))
|
||
|
|
||
|
# fails validation on month
|
||
|
self.assertFalse(validate(datetime.datetime(2011, 6, 4, 4, 11)))
|
||
|
|
||
|
# fails validation on day
|
||
|
self.assertFalse(validate(datetime.datetime(2011, 1, 6, 4, 11)))
|
||
|
|
||
|
# fails validation on day_of_week
|
||
|
self.assertFalse(validate(datetime.datetime(2011, 1, 4, 4, 11)))
|
||
|
|
||
|
# fails validation on hour
|
||
|
self.assertFalse(validate(datetime.datetime(2011, 1, 1, 1, 11)))
|
||
|
|
||
|
# fails validation on minute
|
||
|
self.assertFalse(validate(datetime.datetime(2011, 1, 1, 4, 6)))
|
||
|
|
||
|
def test_invalid_crontabs(self):
|
||
|
# check invalid configurations are detected and reported
|
||
|
self.assertRaises(ValueError, crontab, minute='61')
|
||
|
self.assertRaises(ValueError, crontab, minute='0-61')
|