Page Menu
Home
VyOS Platform
Search
Configure Global Search
Log In
Files
F118310035
test_task_scheduler.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
test_task_scheduler.py
View Options
#!/usr/bin/env python3
#
# Copyright (C) 2018 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#
import
os
import
tempfile
import
unittest
from
vyos
import
ConfigError
try
:
from
src.conf_mode
import
task_scheduler
except
ModuleNotFoundError
:
# for unittest.main()
import
sys
sys
.
path
.
append
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'../..'
))
from
src.conf_mode
import
task_scheduler
class
TestUpdateCrontab
(
unittest
.
TestCase
):
def
test_verify
(
self
):
tests
=
[
{
'name'
:
'one_task'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
None
},
{
'name'
:
'has_interval_and_spec'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
'0 * * * *'
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'has_no_interval_and_spec'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
''
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'invalid_interval'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'1y'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'invalid_interval_min'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'61m'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'invalid_interval_hour'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'25h'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'invalid_interval_day'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'32d'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
ConfigError
},
{
'name'
:
'no_executable'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
''
,
'executable'
:
''
,
'args'
:
''
}],
'expected'
:
ConfigError
},
{
'name'
:
'invalid_executable'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
''
,
'executable'
:
'/bin/aaa'
,
'args'
:
''
}],
'expected'
:
ConfigError
}
]
for
t
in
tests
:
with
self
.
subTest
(
msg
=
t
[
'name'
],
tasks
=
t
[
'tasks'
],
expected
=
t
[
'expected'
]):
if
t
[
'expected'
]
is
not
None
:
with
self
.
assertRaises
(
t
[
'expected'
]):
task_scheduler
.
verify
(
t
[
'tasks'
])
else
:
task_scheduler
.
verify
(
t
[
'tasks'
])
def
test_generate
(
self
):
tests
=
[
{
'name'
:
'zero_task'
,
'tasks'
:
[],
'expected'
:
[]
},
{
'name'
:
'one_task'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
[
'### Generated by vyos-update-crontab.py ###'
,
'*/60 * * * * root sg vyattacfg
\"
/bin/ls -l
\"
'
]
},
{
'name'
:
'one_task_with_hour'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'10h'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
[
'### Generated by vyos-update-crontab.py ###'
,
'0 */10 * * * root sg vyattacfg
\"
/bin/ls -l
\"
'
]
},
{
'name'
:
'one_task_with_day'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'10d'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
}],
'expected'
:
[
'### Generated by vyos-update-crontab.py ###'
,
'0 0 */10 * * root sg vyattacfg
\"
/bin/ls -l
\"
'
]
},
{
'name'
:
'multiple_tasks'
,
'tasks'
:
[{
'name'
:
'aaa'
,
'interval'
:
'60m'
,
'spec'
:
''
,
'executable'
:
'/bin/ls'
,
'args'
:
'-l'
},
{
'name'
:
'bbb'
,
'interval'
:
''
,
'spec'
:
'0 0 * * *'
,
'executable'
:
'/bin/ls'
,
'args'
:
'-ltr'
}
],
'expected'
:
[
'### Generated by vyos-update-crontab.py ###'
,
'*/60 * * * * root sg vyattacfg
\"
/bin/ls -l
\"
'
,
'0 0 * * * root sg vyattacfg
\"
/bin/ls -ltr
\"
'
]
}
]
for
t
in
tests
:
with
self
.
subTest
(
msg
=
t
[
'name'
],
tasks
=
t
[
'tasks'
],
expected
=
t
[
'expected'
]):
task_scheduler
.
crontab_file
=
tempfile
.
mkstemp
()[
1
]
task_scheduler
.
generate
(
t
[
'tasks'
])
if
len
(
t
[
'expected'
])
>
0
:
self
.
assertTrue
(
os
.
path
.
isfile
(
task_scheduler
.
crontab_file
))
with
open
(
task_scheduler
.
crontab_file
)
as
f
:
actual
=
f
.
read
()
self
.
assertEqual
(
t
[
'expected'
],
actual
.
splitlines
())
os
.
remove
(
task_scheduler
.
crontab_file
)
else
:
self
.
assertFalse
(
os
.
path
.
isfile
(
task_scheduler
.
crontab_file
))
if
__name__
==
"__main__"
:
unittest
.
main
()
File Metadata
Details
Attached
Mime Type
text/x-script.python
Expires
Sat, Oct 17, 12:54 AM (1 d, 12 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4350071
Default Alt Text
test_task_scheduler.py (5 KB)
Attached To
Mode
rVYOSONEX vyos-1x
Attached
Detach File
Event Timeline
Log In to Comment