Page Menu
Home
VyOS Platform
Search
Configure Global Search
Log In
Files
F117520597
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
14 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/src/tests/test_config_parser.py b/src/tests/test_config_parser.py
index e47770a7f..5b922e2dd 100644
--- a/src/tests/test_config_parser.py
+++ b/src/tests/test_config_parser.py
@@ -1,61 +1,58 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2018 VyOS maintainers and contributors
+# Copyright (C) 2018-2020 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 unittest import TestCase, mock
+from unittest import TestCase
import vyos.configtree
-
class TestConfigParser(TestCase):
def setUp(self):
with open('tests/data/config.valid', 'r') as f:
config_string = f.read()
self.config = vyos.configtree.ConfigTree(config_string)
def test_top_level_valueless(self):
self.assertTrue(self.config.exists(["top-level-valueless-node"]))
def test_top_level_leaf(self):
self.assertTrue(self.config.exists(["top-level-leaf-node"]))
self.assertEqual(self.config.return_value(["top-level-leaf-node"]), "foo")
def test_top_level_tag(self):
self.assertTrue(self.config.exists(["top-level-tag-node"]))
# No sorting is intentional, child order must be preserved
self.assertEqual(self.config.list_nodes(["top-level-tag-node"]), ["foo", "bar"])
def test_copy(self):
self.config.copy(["top-level-tag-node", "bar"], ["top-level-tag-node", "baz"])
print(self.config.to_string())
self.assertTrue(self.config.exists(["top-level-tag-node", "baz"]))
def test_copy_duplicate(self):
with self.assertRaises(vyos.configtree.ConfigTreeError):
self.config.copy(["top-level-tag-node", "foo"], ["top-level-tag-node", "bar"])
def test_rename(self):
self.config.rename(["top-level-tag-node", "bar"], "quux")
print(self.config.to_string())
self.assertTrue(self.config.exists(["top-level-tag-node", "quux"]))
def test_rename_duplicate(self):
with self.assertRaises(vyos.configtree.ConfigTreeError):
self.config.rename(["top-level-tag-node", "foo"], "bar")
diff --git a/src/tests/test_initial_setup.py b/src/tests/test_initial_setup.py
index 1597025e8..cb843ff09 100644
--- a/src/tests/test_initial_setup.py
+++ b/src/tests/test_initial_setup.py
@@ -1,105 +1,102 @@
#!/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 unittest import TestCase, mock
-
-from vyos import xml
import vyos.configtree
import vyos.initialsetup as vis
+from unittest import TestCase
+from vyos import xml
class TestInitialSetup(TestCase):
def setUp(self):
with open('tests/data/config.boot.default', 'r') as f:
config_string = f.read()
self.config = vyos.configtree.ConfigTree(config_string)
self.xml = xml.load_configuration()
def test_set_user_password(self):
vis.set_user_password(self.config, 'vyos', 'vyosvyos')
# Old password hash from the default config
old_pw = '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
new_pw = self.config.return_value(["system", "login", "user", "vyos", "authentication", "encrypted-password"])
# Just check it changed the hash, don't try to check if hash is good
self.assertNotEqual(old_pw, new_pw)
def test_disable_user_password(self):
vis.disable_user_password(self.config, 'vyos')
new_pw = self.config.return_value(["system", "login", "user", "vyos", "authentication", "encrypted-password"])
self.assertEqual(new_pw, '!')
def test_set_ssh_key_with_name(self):
test_ssh_key = " ssh-rsa fakedata vyos@vyos "
vis.set_user_ssh_key(self.config, 'vyos', test_ssh_key)
key_type = self.config.return_value(["system", "login", "user", "vyos", "authentication", "public-keys", "vyos@vyos", "type"])
key_data = self.config.return_value(["system", "login", "user", "vyos", "authentication", "public-keys", "vyos@vyos", "key"])
self.assertEqual(key_type, 'ssh-rsa')
self.assertEqual(key_data, 'fakedata')
self.assertTrue(self.xml.is_tag(["system", "login", "user", "vyos", "authentication", "public-keys"]))
def test_set_ssh_key_without_name(self):
# If key file doesn't include a name, the function will use user name for the key name
test_ssh_key = " ssh-rsa fakedata "
vis.set_user_ssh_key(self.config, 'vyos', test_ssh_key)
key_type = self.config.return_value(["system", "login", "user", "vyos", "authentication", "public-keys", "vyos", "type"])
key_data = self.config.return_value(["system", "login", "user", "vyos", "authentication", "public-keys", "vyos", "key"])
self.assertEqual(key_type, 'ssh-rsa')
self.assertEqual(key_data, 'fakedata')
self.assertTrue(self.xml.is_tag(["system", "login", "user", "vyos", "authentication", "public-keys"]))
def test_create_user(self):
vis.create_user(self.config, 'jrandomhacker', password='qwerty', key=" ssh-rsa fakedata jrandomhacker@foovax ")
self.assertTrue(self.config.exists(["system", "login", "user", "jrandomhacker"]))
self.assertTrue(self.config.exists(["system", "login", "user", "jrandomhacker", "authentication", "public-keys", "jrandomhacker@foovax"]))
self.assertTrue(self.config.exists(["system", "login", "user", "jrandomhacker", "authentication", "encrypted-password"]))
self.assertEqual(self.config.return_value(["system", "login", "user", "jrandomhacker", "level"]), "admin")
def test_set_hostname(self):
vis.set_host_name(self.config, "vyos-test")
self.assertEqual(self.config.return_value(["system", "host-name"]), "vyos-test")
def test_set_name_servers(self):
vis.set_name_servers(self.config, ["192.0.2.10", "203.0.113.20"])
servers = self.config.return_values(["system", "name-server"])
self.assertIn("192.0.2.10", servers)
self.assertIn("203.0.113.20", servers)
def test_set_gateway(self):
vis.set_default_gateway(self.config, '192.0.2.1')
self.assertTrue(self.config.exists(['protocols', 'static', 'route', '0.0.0.0/0', 'next-hop', '192.0.2.1']))
self.assertTrue(self.xml.is_tag(['protocols', 'static', 'multicast', 'route', '0.0.0.0/0', 'next-hop']))
self.assertTrue(self.xml.is_tag(['protocols', 'static', 'multicast', 'route']))
if __name__ == "__main__":
unittest.main()
diff --git a/src/tests/test_task_scheduler.py b/src/tests/test_task_scheduler.py
index 084bd868c..f15fcde88 100644
--- a/src/tests/test_task_scheduler.py
+++ b/src/tests/test_task_scheduler.py
@@ -1,130 +1,129 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2018 VyOS maintainers and contributors
+# Copyright (C) 2018-2020 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()
diff --git a/src/tests/test_util.py b/src/tests/test_util.py
index 0e56a67a8..09bf947b8 100644
--- a/src/tests/test_util.py
+++ b/src/tests/test_util.py
@@ -1,34 +1,32 @@
#!/usr/bin/env python3
#
# Copyright (C) 2020 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 unittest
from unittest import TestCase
import vyos.util
class TestVyOSUtil(TestCase):
def setUp(self):
pass
def test_key_mangline(self):
data = {"foo-bar": {"baz-quux": None}}
expected_data = {"foo_bar": {"baz_quux": None}}
new_data = vyos.util.mangle_dict_keys(data, '-', '_')
self.assertEqual(new_data, expected_data)
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Sep 26, 11:15 AM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4285010
Default Alt Text
(14 KB)
Attached To
Mode
rVYOSONEX vyos-1x
Attached
Detach File
Event Timeline
Log In to Comment