When removing hidden times and returning the data, make sure we're not updating the running schedule.

This commit is contained in:
Gareth J. Greenaway 2023-02-13 19:11:45 -08:00 committed by Megan Wilhite
parent e34e2a8ea7
commit 171a9e33d5
2 changed files with 65 additions and 11 deletions

View file

@ -208,20 +208,21 @@ class Schedule:
pillar_schedule = self.opts.get("pillar", {}).get("schedule", {})
if not isinstance(pillar_schedule, dict):
raise ValueError("Schedule must be of type dict.")
schedule.update(pillar_schedule)
schedule.update(copy.deepcopy(pillar_schedule))
if include_opts:
opts_schedule = self.opts.get("schedule", {})
if not isinstance(opts_schedule, dict):
raise ValueError("Schedule must be of type dict.")
schedule.update(opts_schedule)
schedule.update(copy.deepcopy(opts_schedule))
if remove_hidden:
_schedule = copy.deepcopy(schedule)
for job in _schedule:
if isinstance(_schedule[job], dict):
for item in _schedule[job]:
for job in schedule:
if isinstance(schedule[job], dict):
for item in schedule[job]:
if item.startswith("_"):
del schedule[job][item]
del _schedule[job][item]
return _schedule
return schedule
def _check_max_running(self, func, data, opts, now):

View file

@ -1,24 +1,77 @@
import copy
import datetime
import logging
log = logging.getLogger(__name__)
def test_get_schedule(schedule):
def test_get_schedule_remove_hidden_true(schedule):
"""
verify that the _get_schedule function works
when remove_hidden is True and schedule data
contains enabled key
contains enabled key and that opts["schedule"]
is not changed.
"""
job_name = "test_get_schedule"
job = {
"schedule": {
"enabled": True,
job_name: {"function": "test.ping", "seconds": 60},
job_name: {
"function": "test.ping",
"seconds": 60,
"_next_fire_time": datetime.datetime(2023, 2, 13, 18, 25, 16, 271796),
"_splay": None,
"_seconds": 3600,
"_next_scheduled_fire_time": datetime.datetime(
2023, 2, 13, 18, 25, 16, 271796
),
"_skip_reason": "disabled",
"_skipped_time": datetime.datetime(2023, 2, 13, 17, 26, 16, 271381),
"_skipped": True,
},
}
}
expected_ret = {
"enabled": True,
job_name: {"function": "test.ping", "seconds": 60},
}
# Add the job to the scheduler
schedule.opts.update(copy.deepcopy(job))
ret = schedule._get_schedule(remove_hidden=True)
assert expected_ret == ret
assert schedule.opts["schedule"][job_name] == job["schedule"][job_name]
def test_get_schedule_remove_hidden_false(schedule):
"""
verify that the _get_schedule function works
when remove_hidden is False and schedule data
contains enabled key and that opts["schedule"]
is not changed.
"""
job_name = "test_get_schedule"
job = {
"schedule": {
"enabled": True,
job_name: {
"function": "test.ping",
"seconds": 60,
"_next_fire_time": datetime.datetime(2023, 2, 13, 18, 25, 16),
"_splay": None,
"_seconds": 3600,
"_next_scheduled_fire_time": datetime.datetime(2023, 2, 13, 18, 25, 16),
"_skip_reason": "disabled",
"_skipped_time": datetime.datetime(2023, 2, 13, 17, 26, 16),
"_skipped": True,
},
}
}
# Add the job to the scheduler
schedule.opts.update(job)
schedule.opts.update(copy.deepcopy(job))
ret = schedule._get_schedule(remove_hidden=True)
ret = schedule._get_schedule(remove_hidden=False)
assert job["schedule"] == ret