mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #50187 from garethgreenaway/port_49871_to_2018_3
[2018.3] Adding fixes to scheduler tests to 2018.3
This commit is contained in:
commit
462314b286
2 changed files with 116 additions and 61 deletions
|
@ -7,6 +7,7 @@ import datetime
|
|||
import logging
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
|
||||
import dateutil.parser as dateutil_parser
|
||||
import datetime
|
||||
|
@ -22,6 +23,7 @@ import tests.integration as integration
|
|||
|
||||
# Import Salt libs
|
||||
import salt.utils.schedule
|
||||
import salt.utils.platform
|
||||
|
||||
from salt.modules.test import ping as ping
|
||||
|
||||
|
@ -60,9 +62,10 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': '11/29/2017 4:00pm',
|
||||
}
|
||||
|
@ -76,21 +79,22 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate 1 second before the run time
|
||||
self.schedule.eval(now=run_time1)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
|
||||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time2)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time2)
|
||||
|
||||
def test_eval_multiple_whens(self):
|
||||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_multiple_whens'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': [
|
||||
'11/29/2017 4:00pm',
|
||||
|
@ -99,6 +103,9 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
}
|
||||
}
|
||||
}
|
||||
if salt.utils.platform.is_darwin():
|
||||
job['schedule'][job_name]['dry_run'] = True
|
||||
|
||||
run_time1 = dateutil_parser.parse('11/29/2017 4:00pm')
|
||||
run_time2 = dateutil_parser.parse('11/29/2017 5:00pm')
|
||||
|
||||
|
@ -107,21 +114,24 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate run time1
|
||||
self.schedule.eval(now=run_time1)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time1)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# Evaluate run time2
|
||||
self.schedule.eval(now=run_time2)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time2)
|
||||
|
||||
def test_eval_loop_interval(self):
|
||||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_loop_interval'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': '11/29/2017 4:00pm',
|
||||
}
|
||||
|
@ -139,24 +149,28 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time2 + datetime.timedelta(seconds=LOOP_INTERVAL))
|
||||
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time2 + datetime.timedelta(seconds=LOOP_INTERVAL))
|
||||
|
||||
def test_eval_multiple_whens_loop_interval(self):
|
||||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_multiple_whens_loop_interval'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': [
|
||||
'11/29/2017 4:00pm',
|
||||
'11/29/2017 5:00pm',
|
||||
]
|
||||
],
|
||||
}
|
||||
}
|
||||
}
|
||||
if salt.utils.platform.is_darwin():
|
||||
job['schedule'][job_name]['dry_run'] = True
|
||||
|
||||
# 30 second loop interval
|
||||
LOOP_INTERVAL = random.randint(30, 59)
|
||||
self.schedule.opts['loop_interval'] = LOOP_INTERVAL
|
||||
|
@ -169,21 +183,24 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time1)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time1)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time2)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time2)
|
||||
|
||||
def test_eval_once(self):
|
||||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_once'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'once': '2017-12-13T13:00:00',
|
||||
}
|
||||
|
@ -196,16 +213,17 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_eval_once_loop_interval(self):
|
||||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_once_loop_interval'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'once': '2017-12-13T13:00:00',
|
||||
}
|
||||
|
@ -223,7 +241,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate at the run time
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
@skipIf(not HAS_CRONITER, 'Cannot find croniter python module')
|
||||
|
@ -231,11 +249,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_cron'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'cron': '0 16 29 11 *'
|
||||
'cron': '0 16 29 11 *',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -248,7 +267,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
with patch('croniter.croniter.get_next', MagicMock(return_value=run_time)):
|
||||
self.schedule.eval(now=run_time)
|
||||
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
@skipIf(not HAS_CRONITER, 'Cannot find croniter python module')
|
||||
|
@ -256,11 +275,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
'''
|
||||
verify that scheduled job runs
|
||||
'''
|
||||
job_name = 'test_eval_cron_loop_interval'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'cron': '0 16 29 11 *'
|
||||
'cron': '0 16 29 11 *',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -275,7 +295,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
with patch('croniter.croniter.get_next', MagicMock(return_value=run_time)):
|
||||
self.schedule.eval(now=run_time)
|
||||
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_eval_until(self):
|
||||
|
@ -283,40 +303,48 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
verify that scheduled job is skipped once the current
|
||||
time reaches the specified until time
|
||||
'''
|
||||
job_name = 'test_eval_until'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job_eval_after': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'hours': '1',
|
||||
'until': '11/29/2017 5:00pm'
|
||||
'until': '11/29/2017 5:00pm',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if salt.utils.platform.is_darwin():
|
||||
job['schedule'][job_name]['dry_run'] = True
|
||||
|
||||
# Add job to schedule
|
||||
self.schedule.opts.update(job)
|
||||
|
||||
# eval at 2:00pm to prime, simulate minion start up.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job_eval_after')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# eval at 3:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job_eval_after')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 4:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 4:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job_eval_after')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 5:00pm, will not run
|
||||
run_time = dateutil_parser.parse('11/29/2017 5:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job_eval_after')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_skip_reason'], 'until_passed')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
||||
|
@ -325,12 +353,13 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
verify that scheduled job is skipped until after the specified
|
||||
time has been reached.
|
||||
'''
|
||||
job_name = 'test_eval_after'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'hours': '1',
|
||||
'after': '11/29/2017 5:00pm'
|
||||
'after': '11/29/2017 5:00pm',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -341,33 +370,33 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 2:00pm to prime, simulate minion start up.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# eval at 3:00pm, will not run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_skip_reason'], 'after_not_passed')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
||||
# eval at 4:00pm, will not run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 4:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_skip_reason'], 'after_not_passed')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
||||
# eval at 5:00pm, will not run
|
||||
run_time = dateutil_parser.parse('11/29/2017 5:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_skip_reason'], 'after_not_passed')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
||||
# eval at 6:00pm, will run
|
||||
run_time = dateutil_parser.parse('11/29/2017 6:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_eval_run_on_start(self):
|
||||
|
@ -393,6 +422,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
ret = self.schedule.job_status('job1')
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 3:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
|
@ -405,10 +436,11 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
when the enabled key is in place
|
||||
https://github.com/saltstack/salt/issues/47695
|
||||
'''
|
||||
job_name = 'test_eval_enabled'
|
||||
job = {
|
||||
'schedule': {
|
||||
'enabled': True,
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': '11/29/2017 4:00pm',
|
||||
}
|
||||
|
@ -422,12 +454,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
|
||||
# Evaluate 1 second before the run time
|
||||
self.schedule.eval(now=run_time1)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
|
||||
# Evaluate 1 second at the run time
|
||||
self.schedule.eval(now=run_time2)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time2)
|
||||
|
||||
def test_eval_seconds(self):
|
||||
|
@ -472,6 +504,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertEqual(ret['_last_run'], run_time)
|
||||
self.assertEqual(ret['_next_fire_time'], next_run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 2:01:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:01:00pm')
|
||||
next_run_time = run_time + datetime.timedelta(seconds=30)
|
||||
|
@ -480,6 +514,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertEqual(ret['_last_run'], run_time)
|
||||
self.assertEqual(ret['_next_fire_time'], next_run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 2:01:30pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:01:30pm')
|
||||
next_run_time = run_time + datetime.timedelta(seconds=30)
|
||||
|
@ -528,12 +564,16 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 3:00:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:00:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 3:30:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:30:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
|
@ -580,12 +620,16 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 6:00:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 6:00:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 8:00:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 8:00:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
|
@ -636,6 +680,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertEqual(ret['_last_run'], last_run_time)
|
||||
self.assertEqual(ret['_next_fire_time'], next_run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 11/27/2017 2:00:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/27/2017 2:00:00pm')
|
||||
next_run_time = run_time + datetime.timedelta(days=2)
|
||||
|
@ -644,6 +690,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertEqual(ret['_last_run'], run_time)
|
||||
self.assertEqual(ret['_next_fire_time'], next_run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 11/28/2017 2:00:00pm, will not run.
|
||||
run_time = dateutil_parser.parse('11/28/2017 2:00:00pm')
|
||||
last_run_time = run_time - datetime.timedelta(days=1)
|
||||
|
@ -652,6 +700,8 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.assertEqual(ret['_last_run'], last_run_time)
|
||||
self.assertEqual(ret['_next_fire_time'], next_run_time)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
# eval at 11/29/2017 2:00:00pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00:00pm')
|
||||
next_run_time = run_time + datetime.timedelta(days=2)
|
||||
|
|
|
@ -50,9 +50,10 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
'''
|
||||
verify that scheduled job is skipped at the specified time
|
||||
'''
|
||||
job_name = 'test_skip'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': ['11/29/2017 4pm', '11/29/2017 5pm'],
|
||||
}
|
||||
|
@ -63,12 +64,12 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
self.schedule.opts.update(job)
|
||||
|
||||
run_time = dateutil_parser.parse('11/29/2017 4:00pm')
|
||||
self.schedule.skip_job('job1', {'time': run_time.strftime('%Y-%m-%dT%H:%M:%S'),
|
||||
'time_fmt': '%Y-%m-%dT%H:%M:%S'})
|
||||
self.schedule.skip_job(job_name, {'time': run_time.strftime('%Y-%m-%dT%H:%M:%S'),
|
||||
'time_fmt': '%Y-%m-%dT%H:%M:%S'})
|
||||
|
||||
# Run 11/29/2017 at 4pm
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
self.assertEqual(ret['_skip_reason'], 'skip_explicit')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
@ -76,16 +77,17 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# Run 11/29/2017 at 5pm
|
||||
run_time = dateutil_parser.parse('11/29/2017 5:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_skip_during_range(self):
|
||||
'''
|
||||
verify that scheduled job is skipped during the specified range
|
||||
'''
|
||||
job_name = 'test_skip_during_range'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'hours': '1',
|
||||
'skip_during_range': {
|
||||
|
@ -102,12 +104,12 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 1:30pm to prime.
|
||||
run_time = dateutil_parser.parse('11/29/2017 1:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# eval at 2:30pm, will not run during range.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
self.assertEqual(ret['_skip_reason'], 'in_skip_range')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
@ -115,20 +117,21 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 3:30pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_skip_during_range_global(self):
|
||||
'''
|
||||
verify that scheduled job is skipped during the specified range
|
||||
'''
|
||||
job_name = 'skip_during_range_global'
|
||||
job = {
|
||||
'schedule': {
|
||||
'skip_during_range': {
|
||||
'start': '11/29/2017 2pm',
|
||||
'end': '11/29/2017 3pm'
|
||||
},
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'hours': '1',
|
||||
}
|
||||
|
@ -141,12 +144,12 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 1:30pm to prime.
|
||||
run_time = dateutil_parser.parse('11/29/2017 1:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# eval at 2:30pm, will not run during range.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
self.assertEqual(ret['_skip_reason'], 'in_skip_range')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
@ -154,16 +157,17 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 3:30pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_run_after_skip_range(self):
|
||||
'''
|
||||
verify that scheduled job is skipped during the specified range
|
||||
'''
|
||||
job_name = 'skip_run_after_skip_range'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'when': '11/29/2017 2:30pm',
|
||||
'run_after_skip_range': True,
|
||||
|
@ -181,7 +185,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 2:30pm, will not run during range.
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertNotIn('_last_run', ret)
|
||||
self.assertEqual(ret['_skip_reason'], 'in_skip_range')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
@ -189,16 +193,17 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 3:00:01pm, will run.
|
||||
run_time = dateutil_parser.parse('11/29/2017 3:00:01pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertEqual(ret['_last_run'], run_time)
|
||||
|
||||
def test_run_seconds_skip(self):
|
||||
'''
|
||||
verify that scheduled job is skipped during the specified range
|
||||
'''
|
||||
job_name = 'run_seconds_skip'
|
||||
job = {
|
||||
'schedule': {
|
||||
'job1': {
|
||||
job_name: {
|
||||
'function': 'test.ping',
|
||||
'seconds': '10',
|
||||
}
|
||||
|
@ -211,19 +216,19 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# eval at 2:00pm, to prime the scheduler
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# eval at 2:00:10pm
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00:10pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
|
||||
# Skip at 2:00:20pm
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00:20pm')
|
||||
self.schedule.skip_job('job1', {'time': run_time.strftime('%Y-%m-%dT%H:%M:%S'),
|
||||
'time_fmt': '%Y-%m-%dT%H:%M:%S'})
|
||||
self.schedule.skip_job(job_name, {'time': run_time.strftime('%Y-%m-%dT%H:%M:%S'),
|
||||
'time_fmt': '%Y-%m-%dT%H:%M:%S'})
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertIn('_next_fire_time', ret)
|
||||
self.assertEqual(ret['_skip_reason'], 'skip_explicit')
|
||||
self.assertEqual(ret['_skipped_time'], run_time)
|
||||
|
@ -231,5 +236,5 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
|
|||
# Run at 2:00:30pm
|
||||
run_time = dateutil_parser.parse('11/29/2017 2:00:30pm')
|
||||
self.schedule.eval(now=run_time)
|
||||
ret = self.schedule.job_status('job1')
|
||||
ret = self.schedule.job_status(job_name)
|
||||
self.assertIn('_last_run', ret)
|
||||
|
|
Loading…
Add table
Reference in a new issue