These are not integration tests.

Additionally, created a base class which takes care of setup and cleanup
This commit is contained in:
Pedro Algarvio 2020-04-22 08:28:08 +01:00
parent 0a56079148
commit 10a33a9eeb
No known key found for this signature in database
GPG key ID: BB36BF6584A298FF
15 changed files with 296 additions and 388 deletions

View file

@ -225,12 +225,13 @@ salt/utils/docker/*:
- unit.utils.test_docker
salt/utils/schedule.py:
- integration.scheduler.test_error
- integration.scheduler.test_eval
- integration.scheduler.test_postpone
- integration.scheduler.test_skip
- integration.scheduler.test_maxrunning
- integration.scheduler.test_helpers
- unit.utils.scheduler.test_error
- unit.utils.scheduler.test_eval
- unit.utils.scheduler.test_postpone
- unit.utils.scheduler.test_skip
- unit.utils.scheduler.test_maxrunning
- unit.utils.scheduler.test_helpers
- unit.utils.scheduler.test_schedule
salt/utils/vt.py:
- integration.cli.test_custom_module

View file

@ -1,64 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import copy
import logging
import os
import pytest
import salt.utils.platform
import salt.utils.schedule
from salt.modules.test import ping
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
@pytest.mark.windows_whitelisted
class SchedulerHelpersTest(ModuleCase, SaltReturnAssertsMixin):
"""
Test scheduler helper functions
"""
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
self.schedule.opts["loop_interval"] = 1
def tearDown(self):
self.schedule.reset()
def test_get_schedule(self):
"""
verify that the _get_schedule function works
when remove_hidden is True and schedule data
contains enabled key
"""
job_name = "test_get_schedule"
job = {
"schedule": {
"enabled": True,
job_name: {"function": "test.ping", "seconds": 60},
}
}
# Add the job to the scheduler
self.schedule.opts.update(job)
ret = self.schedule._get_schedule(remove_hidden=True)
self.assertEqual(job["schedule"], ret)

View file

@ -1,70 +0,0 @@
# -*- coding: utf-8 -*-
# Import Python libs
from __future__ import absolute_import
import copy
import logging
import os
import salt.utils.platform
# Import Salt libs
import salt.utils.schedule
from salt.modules.test import ping
# Import Salt Testing libs
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
try:
import croniter # pylint: disable=W0611
HAS_CRONITER = True
except ImportError:
HAS_CRONITER = False
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
class SchedulerRunJobTest(ModuleCase, SaltReturnAssertsMixin):
"""
Validate the pkg module
"""
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
self.schedule.opts["loop_interval"] = 1
def tearDown(self):
self.schedule.reset()
def test_run_job(self):
"""
verify that scheduled job runs
"""
job_name = "test_run_job"
job = {"schedule": {job_name: {"function": "test.ping"}}}
# Add the job to the scheduler
self.schedule.opts.update(job)
# Run job
self.schedule.run_job(job_name)
ret = self.schedule.job_status(job_name)
expected = {"function": "test.ping", "run": True, "name": "test_run_job"}
self.assertEqual(ret, expected)

View file

@ -129,7 +129,6 @@ TEST_SUITES_UNORDERED = {
"proxy": {"display_name": "Proxy", "path": "integration/proxy"},
"external_api": {"display_name": "ExternalAPIs", "path": "integration/externalapi"},
"daemons": {"display_name": "Daemon", "path": "integration/daemons"},
"scheduler": {"display_name": "Scheduler", "path": "integration/scheduler"},
"sdb": {"display_name": "Sdb", "path": "integration/sdb"},
"logging": {"display_name": "Logging", "path": "integration/logging"},
}

View file

@ -50,6 +50,7 @@ EXCLUDED_FILES = [
os.path.join("tests", "virtualname.py"),
os.path.join("tests", "committer_parser.py"),
os.path.join("tests", "zypp_plugin.py"),
os.path.join("tests", "unit", "utils", "scheduler", "base.py"),
os.path.join("tests", "unit", "transport", "mixins.py"),
os.path.join("tests", "integration", "utils", "testprogram.py"),
]
@ -161,13 +162,14 @@ class BadTestModuleNamesTestCase(TestCase):
"integration.reactor.test_reactor",
"integration.returners.test_noop_return",
"integration.runners.test_runner_returns",
"integration.scheduler.test_error",
"integration.scheduler.test_eval",
"integration.scheduler.test_postpone",
"integration.scheduler.test_skip",
"integration.scheduler.test_maxrunning",
"integration.scheduler.test_helpers",
"integration.scheduler.test_run_job",
"unit.utils.scheduler.test_error",
"unit.utils.scheduler.test_eval",
"unit.utils.scheduler.test_postpone",
"unit.utils.scheduler.test_skip",
"unit.utils.scheduler.test_maxrunning",
"unit.utils.scheduler.test_helpers",
"unit.utils.scheduler.test_run_job",
"unit.utils.scheduler.test_schedule",
"integration.setup.test_bdist",
"integration.setup.test_egg",
"integration.shell.test_spm",

View file

@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
"""
tests.unit.utils.scheduler.base
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"""
from __future__ import absolute_import
import copy
import logging
import os
import salt.utils.platform
import salt.utils.schedule
from salt.modules.test import ping
from salt.utils.process import SubprocessList
from tests.support.case import TestCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.processes import terminate_process
from tests.support.runtests import RUNTIME_VARS
log = logging.getLogger(__name__)
class SchedulerTestsBase(TestCase, SaltReturnAssertsMixin):
"""
Validate the pkg module
"""
@classmethod
def setUpClass(cls):
root_dir = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
sock_dir = os.path.join(root_dir, "test-socks")
default_config = salt.config.minion_config(None)
default_config["conf_dir"] = root_dir
default_config["root_dir"] = root_dir
default_config["sock_dir"] = sock_dir
default_config["pki_dir"] = os.path.join(root_dir, "pki")
default_config["cachedir"] = os.path.join(root_dir, "cache")
cls.default_config = default_config
cls.subprocess_list = SubprocessList()
@classmethod
def tearDownClass(cls):
del cls.default_config
del cls.subprocess_list
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(self.default_config), functions, returners={}
)
self.schedule._subprocess_list = self.subprocess_list
def tearDown(self):
subprocess_list = self.subprocess_list
processes = subprocess_list.processes
self.schedule.reset()
del self.schedule
for proc in processes:
if proc.is_alive():
terminate_process(proc.pid, kill_children=True, slow_stop=True)
subprocess_list.cleanup()
processes = subprocess_list.processes
if processes:
for proc in processes:
if proc.is_alive():
terminate_process(proc.pid, kill_children=True, slow_stop=False)
subprocess_list.cleanup()
processes = subprocess_list.processes
if processes:
log.warning("Processes left running: %s", processes)

View file

@ -1,62 +1,40 @@
# -*- coding: utf-8 -*-
# Import Python libs
from __future__ import absolute_import
import copy
import logging
import os
import dateutil.parser as dateutil_parser
# Import Salt libs
import salt.utils.schedule
from salt.modules.test import ping
# Import Salt Testing libs
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
from tests.support.unit import skipIf
from tests.unit.utils.scheduler.base import SchedulerTestsBase
try:
import croniter # pylint: disable=W0611
import dateutil.parser
HAS_DATEUTIL_PARSER = True
except ImportError:
HAS_DATEUTIL_PARSER = False
try:
import croniter # pylint: disable=unused-import
HAS_CRONITER = True
except ImportError:
HAS_CRONITER = False
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
"""
Validate the pkg module
"""
@skipIf(
HAS_DATEUTIL_PARSER is False, "The 'dateutil.parser' library is not available",
)
class SchedulerErrorTest(SchedulerTestsBase):
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
super(SchedulerErrorTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
self.schedule.opts["grains"]["whens"] = {"tea time": "11/29/2017 12:00pm"}
def tearDown(self):
self.schedule.reset()
@skipIf(not HAS_CRONITER, "Cannot find croniter python module")
def test_eval_cron_invalid(self):
"""
@ -67,7 +45,7 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
# Add the job to the scheduler
self.schedule.opts.update(job)
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
with patch("croniter.croniter.get_next", MagicMock(return_value=run_time)):
self.schedule.eval(now=run_time)
@ -79,7 +57,7 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
verify that scheduled job does not run
and returns the right error
"""
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
job = {
"schedule": {"job1": {"function": "test.ping", "when": "13/29/2017 1:00pm"}}
@ -100,7 +78,7 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
verify that scheduled job does not run
and returns the right error
"""
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
job = {"schedule": {"job1": {"function": "test.ping", "when": "tea time"}}}
@ -126,7 +104,7 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
"job1": {"function": "test.ping", "once": "2017-13-13T13:00:00"}
}
}
run_time = dateutil_parser.parse("12/13/2017 1:00pm")
run_time = dateutil.parser.parse("12/13/2017 1:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -161,12 +139,12 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 3:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
# eval at 4:00pm to prime
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
_expected = (
@ -194,12 +172,12 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 3:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
# eval at 4:00pm to prime
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
_expected = (
@ -229,12 +207,12 @@ class SchedulerErrorTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 3:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
# eval at 4:00pm to prime
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status("job1")
_expected = (

View file

@ -2,25 +2,20 @@
from __future__ import absolute_import
import copy
import datetime
import logging
import os
import random
import time
import pytest
import salt.utils.platform
import salt.utils.schedule
from salt.modules.test import ping
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
from tests.support.unit import skipIf
from tests.unit.utils.scheduler.base import SchedulerTestsBase
try:
import dateutil.parser as dateutil_parser
import dateutil.parser
HAS_DATEUTIL_PARSER = True
except ImportError:
@ -35,32 +30,16 @@ except ImportError:
HAS_CRONITER = False
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
@skipIf(HAS_DATEUTIL_PARSER is False, "The 'dateutil.parser' library is not available")
@skipIf(
HAS_DATEUTIL_PARSER is False, "The 'dateutil.parser' library is not available",
)
@pytest.mark.windows_whitelisted
class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
"""
Validate the pkg module
"""
class SchedulerEvalTest(SchedulerTestsBase):
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
super(SchedulerEvalTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
self.schedule.opts["grains"]["whens"] = {"tea time": "11/29/2017 12:00pm"}
def tearDown(self):
@ -77,7 +56,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
job_name: {"function": "test.ping", "when": "11/29/2017 4:00pm"}
}
}
run_time2 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time2 = dateutil.parser.parse("11/29/2017 4:00pm")
run_time1 = run_time2 - datetime.timedelta(seconds=1)
# Add the job to the scheduler
@ -110,8 +89,8 @@ 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")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
run_time2 = dateutil.parser.parse("11/29/2017 5:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -135,7 +114,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
"""
job_name = "test_eval_whens"
job = {"schedule": {job_name: {"function": "test.ping", "when": "tea time"}}}
run_time = dateutil_parser.parse("11/29/2017 12:00pm")
run_time = dateutil.parser.parse("11/29/2017 12:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -160,7 +139,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
LOOP_INTERVAL = random.randint(30, 59)
self.schedule.opts["loop_interval"] = LOOP_INTERVAL
run_time2 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time2 = dateutil.parser.parse("11/29/2017 4:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -194,10 +173,10 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
LOOP_INTERVAL = random.randint(30, 59)
self.schedule.opts["loop_interval"] = LOOP_INTERVAL
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm") + datetime.timedelta(
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm") + datetime.timedelta(
seconds=LOOP_INTERVAL
)
run_time2 = dateutil_parser.parse("11/29/2017 5:00pm") + datetime.timedelta(
run_time2 = dateutil.parser.parse("11/29/2017 5:00pm") + datetime.timedelta(
seconds=LOOP_INTERVAL
)
@ -227,7 +206,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
job_name: {"function": "test.ping", "once": "2017-12-13T13:00:00"}
}
}
run_time = dateutil_parser.parse("12/13/2017 1:00pm")
run_time = dateutil.parser.parse("12/13/2017 1:00pm")
# Add the job to the scheduler
self.schedule.opts["schedule"] = {}
@ -254,7 +233,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts["loop_interval"] = LOOP_INTERVAL
# Run the job at the right plus LOOP_INTERVAL
run_time = dateutil_parser.parse("12/13/2017 1:00pm") + datetime.timedelta(
run_time = dateutil.parser.parse("12/13/2017 1:00pm") + datetime.timedelta(
seconds=LOOP_INTERVAL
)
@ -279,7 +258,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
# Add the job to the scheduler
self.schedule.opts.update(job)
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
with patch("croniter.croniter.get_next", MagicMock(return_value=run_time)):
self.schedule.eval(now=run_time)
@ -302,7 +281,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
# Add the job to the scheduler
self.schedule.opts.update(job)
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
with patch("croniter.croniter.get_next", MagicMock(return_value=run_time)):
self.schedule.eval(now=run_time)
@ -334,12 +313,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 3:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -347,7 +326,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 4:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -355,7 +334,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 5:00pm, will not run
run_time = dateutil_parser.parse("11/29/2017 5:00pm")
run_time = dateutil.parser.parse("11/29/2017 5:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_skip_reason"], "until_passed")
@ -382,33 +361,33 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 3:00pm, will not run.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
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")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.eval(now=run_time)
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")
run_time = dateutil.parser.parse("11/29/2017 5:00pm")
self.schedule.eval(now=run_time)
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")
run_time = dateutil.parser.parse("11/29/2017 6:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -425,7 +404,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
job_name: {"function": "test.ping", "when": "11/29/2017 4:00pm"},
}
}
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -449,7 +428,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
job_name: {"function": "test.ping", "when": "11/29/2017 4:00pm"},
}
}
run_time2 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time2 = dateutil.parser.parse("11/29/2017 4:00pm")
run_time1 = run_time2 - datetime.timedelta(seconds=1)
# Add the job to the scheduler
@ -476,7 +455,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
job_name: {"function": "test.ping", "when": "11/29/2017 4:00pm"},
}
}
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -505,7 +484,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
},
}
}
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
@ -535,13 +514,13 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 2:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
# eval at 3:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -562,12 +541,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
with patch("random.randint", MagicMock(return_value=10)):
# eval at 2:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 2:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 2:00:40pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00:40pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:40pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -593,12 +572,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
with patch("random.randint", MagicMock(return_value=10)):
# eval at 2:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 2:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 2:00:40pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00:40pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:40pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -621,12 +600,12 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
with patch("random.randint", MagicMock(return_value=10)):
# eval at 2:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/29/2017 2:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 2:00:40pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00:40pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:40pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -646,21 +625,21 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
next_run_time = run_time + datetime.timedelta(seconds=30)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 2:00:01pm, will not run.
run_time = dateutil_parser.parse("11/29/2017 2:00:01pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:01pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 2:00:30pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00:30pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:30pm")
next_run_time = run_time + datetime.timedelta(seconds=30)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -670,7 +649,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 2:01:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:01:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:01:00pm")
next_run_time = run_time + datetime.timedelta(seconds=30)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -680,7 +659,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 2:01:30pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:01:30pm")
run_time = dateutil.parser.parse("11/29/2017 2:01:30pm")
next_run_time = run_time + datetime.timedelta(seconds=30)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -702,21 +681,21 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
next_run_time = run_time + datetime.timedelta(minutes=30)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 2:00:01pm, will not run.
run_time = dateutil_parser.parse("11/29/2017 2:00:01pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:01pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 2:30:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:30:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:30:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -724,7 +703,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 3:00:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:00:00pm")
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)
@ -732,7 +711,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 3:30:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:30:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:30:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -752,21 +731,21 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
next_run_time = run_time + datetime.timedelta(hours=2)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 2:00:01pm, will not run.
run_time = dateutil_parser.parse("11/29/2017 2:00:01pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:01pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 4:00:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 4:00:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -774,7 +753,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 6:00:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 6:00:00pm")
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)
@ -782,7 +761,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 8:00:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 8:00:00pm")
run_time = dateutil.parser.parse("11/29/2017 8:00:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -806,14 +785,14 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 11/23/2017 2:00pm to prime, simulate minion start up.
run_time = dateutil_parser.parse("11/23/2017 2:00pm")
run_time = dateutil.parser.parse("11/23/2017 2:00pm")
next_run_time = run_time + datetime.timedelta(days=2)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 11/25/2017 2:00:00pm, will run.
run_time = dateutil_parser.parse("11/25/2017 2:00:00pm")
run_time = dateutil.parser.parse("11/25/2017 2:00:00pm")
next_run_time = run_time + datetime.timedelta(days=2)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -821,7 +800,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_next_fire_time"], next_run_time)
# eval at 11/26/2017 2:00:00pm, will not run.
run_time = dateutil_parser.parse("11/26/2017 2:00:00pm")
run_time = dateutil.parser.parse("11/26/2017 2:00:00pm")
last_run_time = run_time - datetime.timedelta(days=1)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -831,7 +810,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 11/27/2017 2:00:00pm, will run.
run_time = dateutil_parser.parse("11/27/2017 2:00:00pm")
run_time = dateutil.parser.parse("11/27/2017 2:00:00pm")
next_run_time = run_time + datetime.timedelta(days=2)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -841,7 +820,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
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")
run_time = dateutil.parser.parse("11/28/2017 2:00:00pm")
last_run_time = run_time - datetime.timedelta(days=1)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -851,7 +830,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
time.sleep(2)
# eval at 11/29/2017 2:00:00pm, will run.
run_time = dateutil_parser.parse("11/29/2017 2:00:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:00pm")
next_run_time = run_time + datetime.timedelta(days=2)
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -874,7 +853,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
}
}
}
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
run_time2 = run_time1 + datetime.timedelta(seconds=splay)
run_time3 = run_time2 + datetime.timedelta(seconds=1)
@ -883,7 +862,7 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
with patch("random.randint", MagicMock(return_value=splay)):
# Evaluate to prime
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
@ -919,13 +898,13 @@ class SchedulerEvalTest(ModuleCase, SaltReturnAssertsMixin):
}
}
}
run_time1 = dateutil_parser.parse("11/29/2017 4:00pm")
run_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
# Add the job to the scheduler
self.schedule.opts.update(job)
# Evaluate to prime
run_time = dateutil_parser.parse("11/29/2017 3:00pm")
run_time = dateutil.parser.parse("11/29/2017 3:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)

View file

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import logging
from tests.unit.utils.scheduler.base import SchedulerTestsBase
log = logging.getLogger(__name__)
class SchedulerHelpersTest(SchedulerTestsBase):
"""
Test scheduler helper functions
"""
def setUp(self):
super(SchedulerHelpersTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
def test_get_schedule(self):
"""
verify that the _get_schedule function works
when remove_hidden is True and schedule data
contains enabled key
"""
job_name = "test_get_schedule"
job = {
"schedule": {
"enabled": True,
job_name: {"function": "test.ping", "seconds": 60},
}
}
# Add the job to the scheduler
self.schedule.opts.update(job)
ret = self.schedule._get_schedule(remove_hidden=True)
self.assertEqual(job["schedule"], ret)

View file

@ -1,59 +1,25 @@
# -*- coding: utf-8 -*-
# Import Python libs
from __future__ import absolute_import
import copy
import logging
import os
import dateutil.parser as dateutil_parser
# Import Salt libs
import salt.utils.schedule
from salt.modules.test import ping
# Import Salt Testing libs
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
try:
import croniter # pylint: disable=W0611
HAS_CRONITER = True
except ImportError:
HAS_CRONITER = False
from tests.unit.utils.scheduler.base import SchedulerTestsBase
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
class SchedulerMaxRunningTest(ModuleCase, SaltReturnAssertsMixin):
class SchedulerMaxRunningTest(SchedulerTestsBase):
"""
Validate the pkg module
"""
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
super(SchedulerMaxRunningTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
def tearDown(self):
self.schedule.reset()
def test_maxrunning_minion(self):
"""
verify that scheduled job runs

View file

@ -2,45 +2,32 @@
from __future__ import absolute_import
import copy
import datetime
import logging
import os
import dateutil.parser as dateutil_parser
import pytest
import salt.utils.schedule
from salt.modules.test import ping
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
from tests.support.unit import skipIf
from tests.unit.utils.scheduler.base import SchedulerTestsBase
try:
import dateutil.parser
HAS_DATEUTIL_PARSER = True
except ImportError:
HAS_DATEUTIL_PARSER = False
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
@pytest.mark.windows_whitelisted
class SchedulerPostponeTest(ModuleCase, SaltReturnAssertsMixin):
@skipIf(
HAS_DATEUTIL_PARSER is False, "The 'dateutil.parser' library is not available",
)
class SchedulerPostponeTest(SchedulerTestsBase):
"""
Validate the pkg module
"""
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
super(SchedulerPostponeTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
def tearDown(self):
@ -56,7 +43,7 @@ class SchedulerPostponeTest(ModuleCase, SaltReturnAssertsMixin):
}
# 11/29/2017 4pm
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
# 5 minute delay
delay = 300

View file

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import logging
from tests.unit.utils.scheduler.base import SchedulerTestsBase
log = logging.getLogger(__name__)
class SchedulerRunJobTest(SchedulerTestsBase):
"""
Validate the pkg module
"""
def setUp(self):
super(SchedulerRunJobTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
def test_run_job(self):
"""
verify that scheduled job runs
"""
job_name = "test_run_job"
job = {"schedule": {job_name: {"function": "test.ping"}}}
# Add the job to the scheduler
self.schedule.opts.update(job)
# Run job
self.schedule.run_job(job_name)
ret = self.schedule.job_status(job_name)
expected = {"function": "test.ping", "run": True, "name": "test_run_job"}
self.assertEqual(ret, expected)

View file

@ -2,44 +2,31 @@
from __future__ import absolute_import
import copy
import logging
import os
import dateutil.parser as dateutil_parser
import pytest
import salt.utils.schedule
from salt.modules.test import ping
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS
from tests.support.unit import skipIf
from tests.unit.utils.scheduler.base import SchedulerTestsBase
try:
import dateutil.parser
HAS_DATEUTIL_PARSER = True
except ImportError:
HAS_DATEUTIL_PARSER = False
log = logging.getLogger(__name__)
ROOT_DIR = os.path.join(RUNTIME_VARS.TMP, "schedule-unit-tests")
SOCK_DIR = os.path.join(ROOT_DIR, "test-socks")
DEFAULT_CONFIG = salt.config.minion_config(None)
DEFAULT_CONFIG["conf_dir"] = ROOT_DIR
DEFAULT_CONFIG["root_dir"] = ROOT_DIR
DEFAULT_CONFIG["sock_dir"] = SOCK_DIR
DEFAULT_CONFIG["pki_dir"] = os.path.join(ROOT_DIR, "pki")
DEFAULT_CONFIG["cachedir"] = os.path.join(ROOT_DIR, "cache")
@pytest.mark.windows_whitelisted
class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
@skipIf(
HAS_DATEUTIL_PARSER is False, "The 'dateutil.parser' library is not available",
)
class SchedulerSkipTest(SchedulerTestsBase):
"""
Validate the pkg module
"""
def setUp(self):
with patch("salt.utils.schedule.clean_proc_dir", MagicMock(return_value=None)):
functions = {"test.ping": ping}
self.schedule = salt.utils.schedule.Schedule(
copy.deepcopy(DEFAULT_CONFIG), functions, returners={}
)
super(SchedulerSkipTest, self).setUp()
self.schedule.opts["loop_interval"] = 1
def tearDown(self):
@ -63,7 +50,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
# Add job to schedule
self.schedule.opts.update(job)
run_time = dateutil_parser.parse("11/29/2017 4:00pm")
run_time = dateutil.parser.parse("11/29/2017 4:00pm")
self.schedule.skip_job(
job_name,
{
@ -80,7 +67,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_skipped_time"], run_time)
# Run 11/29/2017 at 5pm
run_time = dateutil_parser.parse("11/29/2017 5:00pm")
run_time = dateutil.parser.parse("11/29/2017 5:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -108,12 +95,12 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 1:30pm to prime.
run_time = dateutil_parser.parse("11/29/2017 1:30pm")
run_time = dateutil.parser.parse("11/29/2017 1:30pm")
self.schedule.eval(now=run_time)
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")
run_time = dateutil.parser.parse("11/29/2017 2:30pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
@ -121,7 +108,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_skipped_time"], run_time)
# eval at 3:30pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:30pm")
run_time = dateutil.parser.parse("11/29/2017 3:30pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -130,7 +117,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
"""
verify that scheduled job is not not and returns the right error string
"""
run_time = dateutil_parser.parse("11/29/2017 2:30pm")
run_time = dateutil.parser.parse("11/29/2017 2:30pm")
job_name1 = "skip_during_range_invalid_datestring1"
job1 = {
@ -207,12 +194,12 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 1:30pm to prime.
run_time = dateutil_parser.parse("11/29/2017 1:30pm")
run_time = dateutil.parser.parse("11/29/2017 1:30pm")
self.schedule.eval(now=run_time)
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")
run_time = dateutil.parser.parse("11/29/2017 2:30pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
@ -220,7 +207,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_skipped_time"], run_time)
# eval at 3:30pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:30pm")
run_time = dateutil.parser.parse("11/29/2017 3:30pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -249,7 +236,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 2:30pm, will not run during range.
run_time = dateutil_parser.parse("11/29/2017 2:30pm")
run_time = dateutil.parser.parse("11/29/2017 2:30pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertNotIn("_last_run", ret)
@ -257,7 +244,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_skipped_time"], run_time)
# eval at 3:00:01pm, will run.
run_time = dateutil_parser.parse("11/29/2017 3:00:01pm")
run_time = dateutil.parser.parse("11/29/2017 3:00:01pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
self.assertEqual(ret["_last_run"], run_time)
@ -274,17 +261,17 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.schedule.opts.update(job)
# eval at 2:00pm, to prime the scheduler
run_time = dateutil_parser.parse("11/29/2017 2:00pm")
run_time = dateutil.parser.parse("11/29/2017 2:00pm")
self.schedule.eval(now=run_time)
ret = self.schedule.job_status(job_name)
# eval at 2:00:10pm
run_time = dateutil_parser.parse("11/29/2017 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(job_name)
# Skip at 2:00:20pm
run_time = dateutil_parser.parse("11/29/2017 2:00:20pm")
run_time = dateutil.parser.parse("11/29/2017 2:00:20pm")
self.schedule.skip_job(
job_name,
{
@ -299,7 +286,7 @@ class SchedulerSkipTest(ModuleCase, SaltReturnAssertsMixin):
self.assertEqual(ret["_skipped_time"], run_time)
# Run at 2:00:30pm
run_time = dateutil_parser.parse("11/29/2017 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(job_name)
self.assertIn("_last_run", ret)

View file

@ -69,10 +69,6 @@ integration.runners.test_manage
integration.runners.test_runner_returns
integration.runners.test_nacl
integration.runners.test_salt
integration.scheduler.test_eval
integration.scheduler.test_postpone
integration.scheduler.test_skip
integration.scheduler.test_helpers
integration.sdb.test_env
integration.shell.test_arguments
integration.shell.test_auth