Page MenuHomeVyOS Platform

No OneTemporary

Size
14 KB
Referenced Files
None
Subscribers
None
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

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)

Event Timeline