mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
These are not integration tests.
Additionally, created a base class which takes care of setup and cleanup
This commit is contained in:
parent
0a56079148
commit
10a33a9eeb
15 changed files with 296 additions and 388 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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"},
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
75
tests/unit/utils/scheduler/base.py
Normal file
75
tests/unit/utils/scheduler/base.py
Normal 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)
|
|
@ -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 = (
|
|
@ -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)
|
||||
|
38
tests/unit/utils/scheduler/test_helpers.py
Normal file
38
tests/unit/utils/scheduler/test_helpers.py
Normal 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)
|
|
@ -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
|
|
@ -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
|
34
tests/unit/utils/scheduler/test_run_job.py
Normal file
34
tests/unit/utils/scheduler/test_run_job.py
Normal 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)
|
|
@ -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)
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue