diff options
Diffstat (limited to 'tests/unit/common')
-rw-r--r-- | tests/unit/common/test_ansible_common.py | 213 | ||||
-rw-r--r-- | tests/unit/common/test_utils.py | 43 | ||||
-rw-r--r-- | tests/unit/common/test_yaml_loader.py | 32 |
3 files changed, 256 insertions, 32 deletions
diff --git a/tests/unit/common/test_ansible_common.py b/tests/unit/common/test_ansible_common.py new file mode 100644 index 000000000..a1eaf969e --- /dev/null +++ b/tests/unit/common/test_ansible_common.py @@ -0,0 +1,213 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from __future__ import absolute_import + +import os +import tempfile +from collections import defaultdict + +import mock +import unittest + +from six.moves.configparser import ConfigParser + +from yardstick.common import ansible_common + +PREFIX = 'yardstick.common.ansible_common' + + +class OverwriteDictTestCase(unittest.TestCase): + + def test_overwrite_dict_cfg(self): + c = ConfigParser(allow_no_value=True) + d = { + "section_a": "empty_value", + "section_b": {"key_c": "val_d", "key_d": "val_d"}, + "section_c": ["key_c", "key_d"], + } + ansible_common.overwrite_dict_to_cfg(c, d) + # Python3 and Python2 convert empty values into None or '' + # we don't really care but we need to compare correctly for unittest + self.assertTrue(c.has_option("section_a", "empty_value")) + self.assertEqual(sorted(c.items("section_b")), [('key_c', 'val_d'), ('key_d', 'val_d')]) + self.assertTrue(c.has_option("section_c", "key_c")) + self.assertTrue(c.has_option("section_c", "key_d")) + + +class FilenameGeneratorTestCase(unittest.TestCase): + @mock.patch('{}.NamedTemporaryFile'.format(PREFIX)) + def test__handle_existing_file(self, mock_tmp): + f = ansible_common.FileNameGenerator._handle_existing_file("/dev/null") + + def test_get_generator_from_file(self): + f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "", "") + + def test_get_generator_from_file_middle(self): + f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "", + "null") + + def test_get_generator_from_file_prefix(self): + f = ansible_common.FileNameGenerator.get_generator_from_filename("/dev/null", "", "null", + "middle") + + +class AnsibleNodeTestCase(unittest.TestCase): + def test_ansible_node(self): + a = ansible_common.AnsibleNode() + + def test_ansible_node_len(self): + a = ansible_common.AnsibleNode() + len(a) + + def test_ansible_node_repr(self): + a = ansible_common.AnsibleNode() + repr(a) + + def test_ansible_node_iter(self): + a = ansible_common.AnsibleNode() + for _ in a: + pass + + def test_is_role(self): + a = ansible_common.AnsibleNode() + self.assertFalse(a.is_role("", default="foo")) + + def test_ansible_node_get_tuple(self): + a = ansible_common.AnsibleNode({"name": "name"}) + self.assertEqual(a.get_tuple(), ('name', a)) + + def test_gen_inventory_line(self): + a = ansible_common.AnsibleNode(defaultdict(str)) + self.assertEqual(a.gen_inventory_line(), "") + + def test_ansible_node_delitem(self): + a = ansible_common.AnsibleNode({"name": "name"}) + del a['name'] + + def test_ansible_node_getattr(self): + a = ansible_common.AnsibleNode({"name": "name"}) + self.assertEqual(getattr(a, "nosuch", None), None) + + +class AnsibleNodeDictTestCase(unittest.TestCase): + def test_ansible_node_dict(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + + def test_ansible_node_dict_len(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + len(a) + + def test_ansible_node_dict_repr(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + repr(a) + + def test_ansible_node_dict_iter(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + for _ in a: + pass + + def test_ansible_node_dict_get(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + self.assertIsNone(a.get("")) + + def test_gen_inventory_lines_for_all_of_type(self): + n = ansible_common.AnsibleNode() + a = ansible_common.AnsibleNodeDict(n, {}) + self.assertEqual(a.gen_inventory_lines_for_all_of_type(""), []) + + +class AnsibleCommonTestCase(unittest.TestCase): + def test_get_timeouts(self): + self.assertAlmostEquals(ansible_common.AnsibleCommon.get_timeout(-100), 1200.0) + + def test__init__(self): + a = ansible_common.AnsibleCommon({}) + + def test_reset(self): + a = ansible_common.AnsibleCommon({}) + a.reset() + + def test_do_install_no_dir(self): + a = ansible_common.AnsibleCommon({}) + self.assertRaises(OSError, a.do_install, '', '') + + def test_gen_inventory_dict(self): + a = ansible_common.AnsibleCommon({}) + a.inventory_dict = {} + self.assertIsNone(a.gen_inventory_ini_dict()) + + def test_deploy_dir(self): + a = ansible_common.AnsibleCommon({}) + self.assertRaises(ValueError, getattr, a, "deploy_dir") + + def test_deploy_dir_set(self): + a = ansible_common.AnsibleCommon({}) + a.deploy_dir = "" + + def test_deploy_dir_set_get(self): + a = ansible_common.AnsibleCommon({}) + a.deploy_dir = "d" + self.assertEqual(a.deploy_dir, "d") + + @mock.patch('{}.open'.format(PREFIX)) + def test__gen_ansible_playbook_file_list(self, mock_open): + d = tempfile.mkdtemp() + try: + a = ansible_common.AnsibleCommon({}) + a._gen_ansible_playbook_file(["a"], d) + finally: + os.rmdir(d) + + @mock.patch('{}.NamedTemporaryFile'.format(PREFIX)) + @mock.patch('{}.open'.format(PREFIX)) + def test__gen_ansible_playbook_file_list_multiple(self, mock_open, mock_tmp): + d = tempfile.mkdtemp() + try: + a = ansible_common.AnsibleCommon({}) + a._gen_ansible_playbook_file(["a", "b"], d) + finally: + os.rmdir(d) + + @mock.patch('{}.NamedTemporaryFile'.format(PREFIX)) + @mock.patch('{}.Popen'.format(PREFIX)) + @mock.patch('{}.open'.format(PREFIX)) + def test_do_install_tmp_dir(self, mock_open, mock_popen, mock_tmp): + mock_popen.return_value.communicate.return_value = "", "" + mock_popen.return_value.wait.return_value = 0 + d = tempfile.mkdtemp() + try: + a = ansible_common.AnsibleCommon({}) + a.do_install('', d) + finally: + os.rmdir(d) + + @mock.patch('{}.NamedTemporaryFile'.format(PREFIX)) + @mock.patch('{}.Popen'.format(PREFIX)) + @mock.patch('{}.open'.format(PREFIX)) + def test_execute_ansible_check(self, mock_open, mock_popen, mock_tmp): + mock_popen.return_value.communicate.return_value = "", "" + mock_popen.return_value.wait.return_value = 0 + d = tempfile.mkdtemp() + try: + a = ansible_common.AnsibleCommon({}) + a.execute_ansible('', d, ansible_check=True, verbose=True) + finally: + os.rmdir(d) diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py index f25e6cc07..923ec4aaa 100644 --- a/tests/unit/common/test_utils.py +++ b/tests/unit/common/test_utils.py @@ -20,6 +20,7 @@ from itertools import product, chain import mock from six.moves import configparser +import yardstick from yardstick.common import utils from yardstick.common import constants @@ -45,47 +46,25 @@ class IterSubclassesTestCase(unittest.TestCase): self.assertEqual([B, C, D], list(utils.itersubclasses(A))) -class TryAppendModuleTestCase(unittest.TestCase): - - @mock.patch('yardstick.common.utils.importutils') - def test_try_append_module_not_in_modules(self, mock_importutils): - - modules = {} - name = 'foo' - utils.try_append_module(name, modules) - mock_importutils.import_module.assert_called_with(name) - - @mock.patch('yardstick.common.utils.importutils') - def test_try_append_module_already_in_modules(self, mock_importutils): - - modules = {'foo'} - name = 'foo' - utils.try_append_module(name, modules) - self.assertFalse(mock_importutils.import_module.called) - - class ImportModulesFromPackageTestCase(unittest.TestCase): @mock.patch('yardstick.common.utils.os.walk') - @mock.patch('yardstick.common.utils.try_append_module') - def test_import_modules_from_package_no_mod(self, mock_append, mock_walk): - - sep = os.sep + def test_import_modules_from_package_no_mod(self, mock_walk): + yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__)) mock_walk.return_value = ([ - ('..' + sep + 'foo', ['bar'], ['__init__.py']), - ('..' + sep + 'foo' + sep + 'bar', [], ['baz.txt', 'qux.rst']) + (os.path.join(yardstick_root, 'foo'), ['bar'], ['__init__.py']), + (os.path.join(yardstick_root, 'foo', 'bar'), [], ['baz.txt', 'qux.rst']) ]) utils.import_modules_from_package('foo.bar') - self.assertFalse(mock_append.called) @mock.patch('yardstick.common.utils.os.walk') @mock.patch('yardstick.common.utils.importutils') def test_import_modules_from_package(self, mock_importutils, mock_walk): - sep = os.sep + yardstick_root = os.path.dirname(os.path.dirname(yardstick.__file__)) mock_walk.return_value = ([ - ('foo' + sep + '..' + sep + 'bar', [], ['baz.py']) + (os.path.join(yardstick_root, 'foo', os.pardir, 'bar'), [], ['baz.py']) ]) utils.import_modules_from_package('foo.bar') @@ -268,7 +247,7 @@ address sizes : 46 bits physical, 48 bits virtual power management: """ - socket_map = utils.parse_cpuinfo(cpuinfo) + socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo) assert sorted(socket_map.keys()) == [0] assert sorted(socket_map[0].keys()) == [2, 3, 4] @@ -356,7 +335,7 @@ address sizes : 39 bits physical, 48 bits virtual power management: """ - socket_map = utils.parse_cpuinfo(cpuinfo) + socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo) assert sorted(socket_map.keys()) == [0] assert sorted(socket_map[0].keys()) == [1, 2, 3] assert sorted(socket_map[0][1]) == [5] @@ -555,7 +534,7 @@ address sizes : 46 bits physical, 48 bits virtual power management: """ - socket_map = utils.parse_cpuinfo(cpuinfo) + socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo) assert sorted(socket_map.keys()) == [0, 1] assert sorted(socket_map[0].keys()) == [0, 1, 2] assert sorted(socket_map[1].keys()) == [26, 27, 28] @@ -758,7 +737,7 @@ address sizes : 46 bits physical, 48 bits virtual power management: """ - socket_map = utils.parse_cpuinfo(cpuinfo) + socket_map = utils.SocketTopology.parse_cpuinfo(cpuinfo) processors = socket_map.processors() assert processors == [1, 2, 43, 44, 85, 86, 87] cores = socket_map.cores() diff --git a/tests/unit/common/test_yaml_loader.py b/tests/unit/common/test_yaml_loader.py new file mode 100644 index 000000000..90cbb8157 --- /dev/null +++ b/tests/unit/common/test_yaml_loader.py @@ -0,0 +1,32 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# yardstick: this file is copied from python-heatclient and slightly modified + +from __future__ import absolute_import +import unittest + +from yardstick.common import yaml_loader + + +class TemplateFormatTestCase(unittest.TestCase): + + def test_parse_to_value_exception(self): + + self.assertEquals(yaml_loader.yaml_load("string"), u"string") + + +def main(): + unittest.main() + +if __name__ == '__main__': + main() |