From f443d4ea68736bfb7849f83ed054fcbd51971765 Mon Sep 17 00:00:00 2001 From: Tim Rozet Date: Wed, 6 Sep 2017 14:33:18 -0400 Subject: Adds parser tests and cleanup Adds unit testing for the common/parsers library and cleans up some of the test files syntax. Change-Id: I7ff9d7ba20b028fba410af900a0c3107a5806d8f Signed-off-by: Tim Rozet --- apex/tests/config/nova_output.json | 23 ++++++++++++ apex/tests/config/test_overcloudrc | 17 +++++++++ apex/tests/constants.py | 1 + apex/tests/test_apex_clean.py | 8 ++--- apex/tests/test_apex_common_parsers.py | 54 +++++++++++++++++++++++++++++ apex/tests/test_apex_common_utils.py | 35 ++++++++++--------- apex/tests/test_apex_deploy_settings.py | 8 ++--- apex/tests/test_apex_inventory.py | 18 +++++----- apex/tests/test_apex_ip_utils.py | 42 +++++++++++----------- apex/tests/test_apex_network_environment.py | 21 +++++------ apex/tests/test_apex_network_settings.py | 8 ++--- 11 files changed, 167 insertions(+), 68 deletions(-) create mode 100644 apex/tests/config/nova_output.json create mode 100644 apex/tests/config/test_overcloudrc create mode 100644 apex/tests/test_apex_common_parsers.py diff --git a/apex/tests/config/nova_output.json b/apex/tests/config/nova_output.json new file mode 100644 index 00000000..1348ef24 --- /dev/null +++ b/apex/tests/config/nova_output.json @@ -0,0 +1,23 @@ +[ + { + "Status": "ACTIVE", + "Networks": "ctlplane=192.30.9.9", + "ID": "a5ff8aeb-5fd0-467f-9d89-791dfbc6267b", + "Image Name": "overcloud-full", + "Name": "overcloud-novacompute-1" + }, + { + "Status": "ACTIVE", + "Networks": "ctlplane=192.30.9.10", + "ID": "c8be26ae-6bef-4841-bb03-c7f336cfd785", + "Image Name": "overcloud-full", + "Name": "overcloud-novacompute-0" + }, + { + "Status": "ACTIVE", + "Networks": "ctlplane=192.30.9.8", + "ID": "105d1c61-78d3-498f-9191-6b21823b8544", + "Image Name": "overcloud-full", + "Name": "overcloud-controller-0" + } +] diff --git a/apex/tests/config/test_overcloudrc b/apex/tests/config/test_overcloudrc new file mode 100644 index 00000000..2707184d --- /dev/null +++ b/apex/tests/config/test_overcloudrc @@ -0,0 +1,17 @@ +# Clear any old environment that may conflict. +for key in $( set | awk '{FS="="} /^OS_/ {print $1}' ); do unset $key ; done +export OS_USERNAME=admin +export OS_BAREMETAL_API_VERSION=1.29 +export NOVA_VERSION=1.1 +export OS_PROJECT_NAME=admin +export OS_PASSWORD=Wd8ruyf6qG8cmcms6dq2HM93f +export OS_NO_CACHE=True +export COMPUTE_API_VERSION=1.1 +export no_proxy=,172.30.9.29,192.30.9.5 +export OS_CLOUDNAME=overcloud +export OS_AUTH_URL=http://172.30.9.29:5000/v2.0 +export IRONIC_API_VERSION=1.29 +export OS_AUTH_TYPE=password +export PYTHONWARNINGS="ignore:Certificate has no, ignore:A true SSLContext object is not available" +export OS_PROJECT_ID=4695721d82c1421094005ef4ab86d33a +export OS_TENANT_NAME=admin diff --git a/apex/tests/constants.py b/apex/tests/constants.py index 47e63e2c..eec64296 100644 --- a/apex/tests/constants.py +++ b/apex/tests/constants.py @@ -10,3 +10,4 @@ TEST_CONFIG_DIR = 'config' TEST_BUILD_DIR = 'build' TEST_PLAYBOOK_DIR = 'playbooks' +TEST_DUMMY_CONFIG = 'apex/tests/config' diff --git a/apex/tests/test_apex_clean.py b/apex/tests/test_apex_clean.py index d0b87917..7b7df512 100644 --- a/apex/tests/test_apex_clean.py +++ b/apex/tests/test_apex_clean.py @@ -16,16 +16,16 @@ from nose import tools from apex import clean_nodes -class TestClean(object): +class TestClean: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): diff --git a/apex/tests/test_apex_common_parsers.py b/apex/tests/test_apex_common_parsers.py new file mode 100644 index 00000000..bed2a8c5 --- /dev/null +++ b/apex/tests/test_apex_common_parsers.py @@ -0,0 +1,54 @@ +############################################################################## +# Copyright (c) 2016 Dan Radez (Red Hat) +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import os + +from apex.tests import constants as con +from apex.common import parsers as apex_parsers +from nose.tools import ( + assert_is_instance, + assert_dict_equal +) + + +class TestCommonParsers: + @classmethod + def setup_class(cls): + """This method is run once for each class before any tests are run""" + + @classmethod + def teardown_class(cls): + """This method is run once for each class _after_ all tests are run""" + + def setup(self): + """This method is run once before _each_ test method is executed""" + + def teardown(self): + """This method is run once after _each_ test method is executed""" + + def test_parse_nova_output(self): + output = apex_parsers.parse_nova_output( + os.path.join(con.TEST_DUMMY_CONFIG, 'nova_output.json')) + assert_is_instance(output, dict) + nodes = { + 'overcloud-controller-0': '192.30.9.8', + 'overcloud-novacompute-0': '192.30.9.10', + 'overcloud-novacompute-1': '192.30.9.9' + } + print(output) + assert_dict_equal(output, nodes) + + def test_parse_overcloudrc(self): + output = apex_parsers.parse_overcloudrc( + os.path.join(con.TEST_DUMMY_CONFIG, 'test_overcloudrc')) + assert_is_instance(output, dict) + assert 'OS_AUTH_TYPE' in output.keys() + assert output['OS_AUTH_TYPE'] == 'password' + assert 'OS_PASSWORD' in output.keys() + assert output['OS_PASSWORD'] == 'Wd8ruyf6qG8cmcms6dq2HM93f' diff --git a/apex/tests/test_apex_common_utils.py b/apex/tests/test_apex_common_utils.py index 357ad1b0..12aeaf2c 100644 --- a/apex/tests/test_apex_common_utils.py +++ b/apex/tests/test_apex_common_utils.py @@ -8,7 +8,6 @@ ############################################################################## import ipaddress -import nose.tools import os from apex.common import utils @@ -17,43 +16,47 @@ from apex.tests.constants import ( TEST_CONFIG_DIR, TEST_PLAYBOOK_DIR) +from nose.tools import ( + assert_equal, + assert_is_instance, + assert_not_is_instance) + NET_SETS = os.path.join(TEST_CONFIG_DIR, 'network', 'network_settings.yaml') -class TestCommonUtils(object): +class TestCommonUtils: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): """This method is run once after _each_ test method is executed""" def test_str2bool(self): - nose.tools.assert_equal(utils.str2bool(True), True) - nose.tools.assert_equal(utils.str2bool(False), False) - nose.tools.assert_equal(utils.str2bool("True"), True) - nose.tools.assert_equal(utils.str2bool("YES"), True) + assert_equal(utils.str2bool(True), True) + assert_equal(utils.str2bool(False), False) + assert_equal(utils.str2bool("True"), True) + assert_equal(utils.str2bool("YES"), True) def test_parse_yaml(self): - nose.tools.assert_is_instance(utils.parse_yaml(NET_SETS), dict) + assert_is_instance(utils.parse_yaml(NET_SETS), dict) def test_dict_to_string(self): net_settings = NetworkSettings(NET_SETS) output = utils.dict_objects_to_str(net_settings) - nose.tools.assert_is_instance(output, dict) + assert_is_instance(output, dict) for k, v in output.items(): - nose.tools.assert_is_instance(k, str) - nose.tools.assert_not_is_instance(v, ipaddress.IPv4Address) + assert_is_instance(k, str) + assert_not_is_instance(v, ipaddress.IPv4Address) def test_run_ansible(self): playbook = 'apex/tests/playbooks/test_playbook.yaml' - nose.tools.assert_equal( - utils.run_ansible(None, os.path.join(playbook), - dry_run=True), None) + assert_equal(utils.run_ansible(None, os.path.join(playbook), + dry_run=True), None) diff --git a/apex/tests/test_apex_deploy_settings.py b/apex/tests/test_apex_deploy_settings.py index 312c1f3a..0338087c 100644 --- a/apex/tests/test_apex_deploy_settings.py +++ b/apex/tests/test_apex_deploy_settings.py @@ -64,16 +64,16 @@ deploy_options: """,) -class TestIpUtils(object): +class TestIpUtils: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): diff --git a/apex/tests/test_apex_inventory.py b/apex/tests/test_apex_inventory.py index ed95c53c..cca8068b 100644 --- a/apex/tests/test_apex_inventory.py +++ b/apex/tests/test_apex_inventory.py @@ -8,13 +8,11 @@ ############################################################################## import os -import sys -from io import StringIO -from nose.tools import assert_equal -from nose.tools import assert_is_instance -from nose.tools import assert_raises -from nose.tools import assert_regexp_matches +from nose.tools import ( + assert_equal, + assert_is_instance, + assert_raises) from apex import Inventory from apex.inventory.inventory import InventoryException @@ -27,16 +25,16 @@ inventory_files = ('intel_pod2_settings.yaml', files_dir = os.path.join(TEST_CONFIG_DIR, 'inventory') -class TestInventory(object): +class TestInventory: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): diff --git a/apex/tests/test_apex_ip_utils.py b/apex/tests/test_apex_ip_utils.py index 04a1b2bb..eb4549d2 100644 --- a/apex/tests/test_apex_ip_utils.py +++ b/apex/tests/test_apex_ip_utils.py @@ -12,19 +12,21 @@ import re from ipaddress import IPv4Address from ipaddress import ip_network -from nose.tools import assert_equal -from nose.tools import assert_false -from nose.tools import assert_is_instance -from nose.tools import assert_raises -from nose.tools import assert_regexp_matches -from nose.tools import assert_true - -from apex.network.ip_utils import IPUtilsException -from apex.network.ip_utils import _validate_ip_range -from apex.network.ip_utils import find_gateway -from apex.network.ip_utils import get_interface -from apex.network.ip_utils import get_ip -from apex.network.ip_utils import get_ip_range +from nose.tools import ( + assert_equal, + assert_false, + assert_is_instance, + assert_raises, + assert_regexp_matches, + assert_true) + +from apex.network.ip_utils import ( + IPUtilsException, + _validate_ip_range, + find_gateway, + get_interface, + get_ip, + get_ip_range) ip4_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') ip4_range_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},\d{1,' @@ -40,19 +42,19 @@ def get_default_gateway_linux(): return fields[0] -class TestIpUtils(object): +class TestIpUtils: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" - klass.iface_name = get_default_gateway_linux() - iface = get_interface(klass.iface_name) - klass.iface = iface + cls.iface_name = get_default_gateway_linux() + iface = get_interface(cls.iface_name) + cls.iface = iface @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): diff --git a/apex/tests/test_apex_network_environment.py b/apex/tests/test_apex_network_environment.py index 5047adbb..4e3ae111 100644 --- a/apex/tests/test_apex_network_environment.py +++ b/apex/tests/test_apex_network_environment.py @@ -11,10 +11,11 @@ import os from copy import copy -from nose.tools import assert_equal -from nose.tools import assert_is_instance -from nose.tools import assert_not_equal -from nose.tools import assert_raises +from nose.tools import ( + assert_equal, + assert_is_instance, + assert_not_equal, + assert_raises) from apex.common.constants import ( EXTERNAL_NETWORK, @@ -29,23 +30,23 @@ from apex.tests.constants import TEST_CONFIG_DIR from apex.tests.constants import TEST_BUILD_DIR -class TestNetworkEnvironment(object): +class TestNetworkEnvironment: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" - klass.ns = NetworkSettings( + cls.ns = NetworkSettings( os.path.join(TEST_CONFIG_DIR, 'network/network_settings.yaml')) - klass.ns_vlans = NetworkSettings( + cls.ns_vlans = NetworkSettings( os.path.join(TEST_CONFIG_DIR, 'network/network_settings_vlans.yaml')) - klass.ns_ipv6 = NetworkSettings( + cls.ns_ipv6 = NetworkSettings( os.path.join(TEST_CONFIG_DIR, 'network/network_settings_v6.yaml')) @classmethod def teardown_class(klass): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): diff --git a/apex/tests/test_apex_network_settings.py b/apex/tests/test_apex_network_settings.py index adff8cff..5e2fa072 100644 --- a/apex/tests/test_apex_network_settings.py +++ b/apex/tests/test_apex_network_settings.py @@ -27,16 +27,16 @@ from apex.tests.constants import TEST_CONFIG_DIR files_dir = os.path.join(TEST_CONFIG_DIR, 'network') -class TestNetworkSettings(object): +class TestNetworkSettings: @classmethod - def setup_class(klass): + def setup_class(cls): """This method is run once for each class before any tests are run""" @classmethod - def teardown_class(klass): + def teardown_class(cls): """This method is run once for each class _after_ all tests are run""" - def setUp(self): + def setup(self): """This method is run once before _each_ test method is executed""" def teardown(self): -- cgit 1.2.3-korg