From 0611949240f3b3e5bffe80df786f24e49199884b Mon Sep 17 00:00:00 2001 From: Ukov Dmitry Date: Fri, 2 Sep 2016 12:20:50 +0300 Subject: [PATCH] Unit tests for openstack_config and utils modules Change-Id: I20e7be8e0d440efb1709f28c9b3b08ef79377de6 --- fuel_external_git/tests/__init__.py | 0 fuel_external_git/tests/base.py | 14 +++++ .../tests/cfgs/controller_configs/nova.conf | 5 ++ .../tests/cfgs/node_1_configs/nova.conf | 3 + fuel_external_git/tests/cfgs/nova.conf | 3 + fuel_external_git/tests/cfgs/overrides.yaml | 8 +++ .../tests/test_openstack_config.py | 25 ++++++++ fuel_external_git/tests/test_utils.py | 59 +++++++++++++++++++ setup.py | 13 ++-- test-requirements.txt | 17 ++++++ tox.ini | 41 +++++++++++++ 11 files changed, 184 insertions(+), 4 deletions(-) create mode 100644 fuel_external_git/tests/__init__.py create mode 100644 fuel_external_git/tests/base.py create mode 100644 fuel_external_git/tests/cfgs/controller_configs/nova.conf create mode 100644 fuel_external_git/tests/cfgs/node_1_configs/nova.conf create mode 100644 fuel_external_git/tests/cfgs/nova.conf create mode 100644 fuel_external_git/tests/cfgs/overrides.yaml create mode 100644 fuel_external_git/tests/test_openstack_config.py create mode 100644 fuel_external_git/tests/test_utils.py create mode 100644 test-requirements.txt create mode 100644 tox.ini diff --git a/fuel_external_git/tests/__init__.py b/fuel_external_git/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fuel_external_git/tests/base.py b/fuel_external_git/tests/base.py new file mode 100644 index 0000000..c45b2ef --- /dev/null +++ b/fuel_external_git/tests/base.py @@ -0,0 +1,14 @@ +import os + +from oslotest import base + +from fuel_external_git import settings + + +class TestCase(base.BaseTestCase): + + """Test case base class for all unit tests.""" + def setUp(self): + super(TestCase, self).setUp() + self.config = settings.GitExtensionSettings().config + self.cfg_sample_dir = os.path.join(os.path.dirname(__file__), 'cfgs') diff --git a/fuel_external_git/tests/cfgs/controller_configs/nova.conf b/fuel_external_git/tests/cfgs/controller_configs/nova.conf new file mode 100644 index 0000000..d2a641b --- /dev/null +++ b/fuel_external_git/tests/cfgs/controller_configs/nova.conf @@ -0,0 +1,5 @@ +[DEFAULT] +global_param = global_param +global_param_to_override = override_from_role +role_param = role_param +role_param_to_override = role_param_to_override diff --git a/fuel_external_git/tests/cfgs/node_1_configs/nova.conf b/fuel_external_git/tests/cfgs/node_1_configs/nova.conf new file mode 100644 index 0000000..a2020e1 --- /dev/null +++ b/fuel_external_git/tests/cfgs/node_1_configs/nova.conf @@ -0,0 +1,3 @@ +[DEFAULT] +role_param_to_override = override_from_node +node_param = node_param diff --git a/fuel_external_git/tests/cfgs/nova.conf b/fuel_external_git/tests/cfgs/nova.conf new file mode 100644 index 0000000..c623083 --- /dev/null +++ b/fuel_external_git/tests/cfgs/nova.conf @@ -0,0 +1,3 @@ +[DEFAULT] +global_param = global_param +global_param_to_override = global_param_to_override diff --git a/fuel_external_git/tests/cfgs/overrides.yaml b/fuel_external_git/tests/cfgs/overrides.yaml new file mode 100644 index 0000000..c148405 --- /dev/null +++ b/fuel_external_git/tests/cfgs/overrides.yaml @@ -0,0 +1,8 @@ +nodes: + '1': node_1_configs + '2': node_2_configs +roles: + 'cinder': 'cinder_configs' + 'compute': 'compute_configs' + 'controller': 'controller_configs' + 'primary-controller': 'controller_configs' diff --git a/fuel_external_git/tests/test_openstack_config.py b/fuel_external_git/tests/test_openstack_config.py new file mode 100644 index 0000000..0796e4c --- /dev/null +++ b/fuel_external_git/tests/test_openstack_config.py @@ -0,0 +1,25 @@ +import os + +from fuel_external_git.tests import base +from fuel_external_git.openstack_config import OpenStackConfig + + +class TestOpenStackConfig(base.TestCase): + + def test_config_name(self): + file_name = os.path.join(self.cfg_sample_dir, 'nova.conf') + cfg = OpenStackConfig(file_name, self.config['resource_mapping']) + self.assertEqual(cfg.config_name, 'nova_config') + + def test_dict_generation(self): + resource = { + 'DEFAULT/global_param': { + 'value': 'global_param' + }, + 'DEFAULT/global_param_to_override': { + 'value': 'global_param_to_override' + }, + } + file_name = os.path.join(self.cfg_sample_dir, 'nova.conf') + cfg = OpenStackConfig(file_name, self.config['resource_mapping']) + self.assertEqual(cfg.to_config_dict(), resource) diff --git a/fuel_external_git/tests/test_utils.py b/fuel_external_git/tests/test_utils.py new file mode 100644 index 0000000..6200d0a --- /dev/null +++ b/fuel_external_git/tests/test_utils.py @@ -0,0 +1,59 @@ +import copy +from fuel_external_git.tests import base +from fuel_external_git import utils + + +class TestUtils(base.TestCase): + def test_extension_list(self): + mapping = { + 'ceilometer_api_paste_ini': { + 'alias': 'ceilometer-api-paste.ini', + 'path': '/etc/ceilometer/api-paste.ini', + }, + 'ceilometer': { + 'alias': 'ceilometer.conf', + 'path': '/etc/ceilometer/ceilometer.conf', + } + } + ext_list = utils.get_file_exts_list(mapping) + self.assertEqual(ext_list, set(['ini', 'conf'])) + + def test_deep_merge_two_empy(self): + a = {} + b = {} + utils.deep_merge(a, b) + self.assertEqual(a, {}) + + def test_deep_merge_one_empy(self): + sample_dict = { + 'a': {'b': {'c': 'd'}}, + 'e': {'f': {'g': 'h'}}, + } + new_dict = copy.deepcopy(sample_dict) + utils.deep_merge(new_dict, {}) + self.assertEqual(new_dict, sample_dict) + + new_dict = {} + utils.deep_merge(new_dict, sample_dict) + self.assertEqual(new_dict, sample_dict) + + def test_merge_two_discts(self): + a = { + 'a': {'b': {'c': 'd'}}, + 'e': {'f': {'g': 'h'}}, + } + + b = { + 'x': {'b': {'c': 'd'}}, + 'y': {'f': {'g': 'h'}}, + } + + result = { + 'a': {'b': {'c': 'd'}}, + 'e': {'f': {'g': 'h'}}, + 'x': {'b': {'c': 'd'}}, + 'y': {'f': {'g': 'h'}}, + } + + utils.deep_merge(a, b) + self.assertEqual(a, result) diff --git a/setup.py b/setup.py index cfc0b2f..b334a4e 100644 --- a/setup.py +++ b/setup.py @@ -2,10 +2,15 @@ import os from setuptools import setup from setuptools.command.install import install +try: + from nailgun.db import db + from nailgun.db.sqlalchemy.models import Cluster + from nailgun.db.sqlalchemy.models import Release -from nailgun.db import db -from nailgun.db.sqlalchemy.models import Cluster -from nailgun.db.sqlalchemy.models import Release + no_nailgun = False +except: + no_nailgun = True + def package_files(directory): @@ -53,7 +58,7 @@ setup( ], packages=['fuel_external_git'], package_data={'fuel_external_git': extra_files}, - cmdclass={'install': ExtInstall}, + cmdclass={'install': ExtInstall} if not no_nailgun else {}, entry_points={ 'nailgun.extensions': [ 'fuel_external_git = fuel_external_git.extension:ExternalGit', diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..bb31766 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,17 @@ +# The order of packages is significant, because pip processes them in the order +# of appearance. Changing the order has an impact on the overall integration +# process, which may cause wedges in the gate later. + +hacking<0.11,>=0.10.0 + +coverage>=3.6 +discover +oslo.db[fixtures,mysql,postgresql] +oslotest>=1.10.0 # Apache-2.0 +testrepository>=0.0.18 +testscenarios>=0.4 +testtools>=1.4.0 +requests-mock +python-fuelclient +os-testr>=0.4.1 # Apache-2.0 +mock>=1.2 # BSD diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..2b61799 --- /dev/null +++ b/tox.ini @@ -0,0 +1,41 @@ +[tox] +minversion = 1.6 +envlist = py27,pep8 +skipsdist = True + +[base] +NAILGUN_REPO = git+https://github.com/openstack/fuel-web.git +NAILGUN_CONFIG = {toxinidir}/nailgun-test-settings.yaml +NAILGUN_BRANCH={env:ZUUL_BRANCH:stable/mitaka} + +[testenv] +usedevelop = True +install_command = pip install -U {opts} {packages} +setenv = + VIRTUAL_ENV={envdir} + PYTHONWARNINGS=ignore:Unmanaged access of declarative attribute __tablename__ from non-mapped class ModelMixin + OS_TEST_DBAPI_ADMIN_CONNECTION=mysql+pymysql://openstack_citest:openstack_citest@localhost/;postgresql://openstack_citest:openstack_citest@localhost/postgres;sqlite:///testdb +deps = -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + -e{[base]NAILGUN_REPO}@{[base]NAILGUN_BRANCH}#egg=nailgun[test]&subdirectory=nailgun +commands = py.test -v --junit-xml {toxinidir}/extension.xml {posargs} + +[testenv:pep8] +commands = flake8 + +[testenv:venv] +commands = {posargs} + +[testenv:cover] +commands = python setup.py test --coverage --testr-args='{posargs}' + +[testenv:debug] +commands = oslo_debug_helper {posargs} + +[flake8] +# E123, E125 skipped as they are invalid PEP-8. + +show-source = True +ignore = E123,E125 +builtins = _ +exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build