From df3843843c4449585550e8a0bb8fcc79b43b7871 Mon Sep 17 00:00:00 2001 From: Juha Kosonen Date: Mon, 19 Feb 2018 11:18:11 +0200 Subject: Enhance variable manipulation in tempest Use getattr/setattr to read/write CONST. JIRA: FUNCTEST-932 Change-Id: Ic9a944100c60563b16f5d89b622ef7f04183cceb Signed-off-by: Juha Kosonen --- .../opnfv_tests/openstack/tempest/conf_utils.py | 46 ++++++------- functest/opnfv_tests/openstack/tempest/tempest.py | 79 ++++++++++------------ .../unit/openstack/tempest/test_conf_utils.py | 25 +++---- 3 files changed, 68 insertions(+), 82 deletions(-) diff --git a/functest/opnfv_tests/openstack/tempest/conf_utils.py b/functest/opnfv_tests/openstack/tempest/conf_utils.py index 09471fa52..875939ecc 100644 --- a/functest/opnfv_tests/openstack/tempest/conf_utils.py +++ b/functest/opnfv_tests/openstack/tempest/conf_utils.py @@ -31,10 +31,9 @@ RALLY_CONF_PATH = "/etc/rally/rally.conf" RALLY_AARCH64_PATCH_PATH = pkg_resources.resource_filename( 'functest', 'ci/rally_aarch64_patch.conf') GLANCE_IMAGE_PATH = os.path.join( - CONST.__getattribute__('dir_functest_images'), - CONST.__getattribute__('openstack_image_file_name')) -TEMPEST_RESULTS_DIR = os.path.join(CONST.__getattribute__('dir_results'), - 'tempest') + getattr(CONST, 'dir_functest_images'), + getattr(CONST, 'openstack_image_file_name')) +TEMPEST_RESULTS_DIR = os.path.join(getattr(CONST, 'dir_results'), 'tempest') TEMPEST_CUSTOM = pkg_resources.resource_filename( 'functest', 'opnfv_tests/openstack/tempest/custom_tests/test_list.txt') TEMPEST_BLACKLIST = pkg_resources.resource_filename( @@ -44,8 +43,7 @@ TEMPEST_DEFCORE = pkg_resources.resource_filename( 'opnfv_tests/openstack/tempest/custom_tests/defcore_req.txt') TEMPEST_RAW_LIST = os.path.join(TEMPEST_RESULTS_DIR, 'test_raw_list.txt') TEMPEST_LIST = os.path.join(TEMPEST_RESULTS_DIR, 'test_list.txt') -REFSTACK_RESULTS_DIR = os.path.join(CONST.__getattribute__('dir_results'), - 'refstack') +REFSTACK_RESULTS_DIR = os.path.join(getattr(CONST, 'dir_results'), 'refstack') TEMPEST_CONF_YAML = pkg_resources.resource_filename( 'functest', 'opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml') TEST_ACCOUNTS_FILE = pkg_resources.resource_filename( @@ -79,11 +77,11 @@ def create_rally_deployment(): cmd = "rally deployment destroy opnfv-rally" ft_utils.execute_command(cmd, error_msg=( "Deployment %s does not exist." - % CONST.__getattribute__('rally_deployment_name')), + % getattr(CONST, 'rally_deployment_name')), verbose=False) cmd = ("rally deployment create --fromenv --name={0}" - .format(CONST.__getattribute__('rally_deployment_name'))) + .format(getattr(CONST, 'rally_deployment_name'))) error_msg = "Problem while creating Rally deployment" ft_utils.execute_command_raise(cmd, error_msg=error_msg) @@ -96,15 +94,15 @@ def create_verifier(): """Create new verifier""" LOGGER.info("Create verifier from existing repo...") cmd = ("rally verify delete-verifier --id '{0}' --force").format( - CONST.__getattribute__('tempest_verifier_name')) + getattr(CONST, 'tempest_verifier_name')) ft_utils.execute_command(cmd, error_msg=( "Verifier %s does not exist." - % CONST.__getattribute__('tempest_verifier_name')), + % getattr(CONST, 'tempest_verifier_name')), verbose=False) cmd = ("rally verify create-verifier --source {0} " "--name {1} --type tempest --system-wide" - .format(CONST.__getattribute__('dir_repo_tempest'), - CONST.__getattribute__('tempest_verifier_name'))) + .format(getattr(CONST, 'dir_repo_tempest'), + getattr(CONST, 'tempest_verifier_name'))) ft_utils.execute_command_raise(cmd, error_msg='Problem while creating verifier') @@ -116,7 +114,7 @@ def get_verifier_id(): create_rally_deployment() create_verifier() cmd = ("rally verify list-verifiers | awk '/" + - CONST.__getattribute__('tempest_verifier_name') + + getattr(CONST, 'tempest_verifier_name') + "/ {print $2}'") proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, @@ -133,7 +131,7 @@ def get_verifier_deployment_id(): Returns deployment id for active Rally deployment """ cmd = ("rally deployment list | awk '/" + - CONST.__getattribute__('rally_deployment_name') + + getattr(CONST, 'rally_deployment_name') + "/ {print $2}'") proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, @@ -152,7 +150,7 @@ def get_verifier_repo_dir(verifier_id): if not verifier_id: verifier_id = get_verifier_id() - return os.path.join(CONST.__getattribute__('dir_rally_inst'), + return os.path.join(getattr(CONST, 'dir_rally_inst'), 'verification', 'verifier-{}'.format(verifier_id), 'repo') @@ -168,7 +166,7 @@ def get_verifier_deployment_dir(verifier_id, deployment_id): if not deployment_id: deployment_id = get_verifier_deployment_id() - return os.path.join(CONST.__getattribute__('dir_rally_inst'), + return os.path.join(getattr(CONST, 'dir_rally_inst'), 'verification', 'verifier-{}'.format(verifier_id), 'for-deployment-{}'.format(deployment_id)) @@ -238,12 +236,10 @@ def generate_test_accounts_file(tenant_id): LOGGER.debug("Add needed params into test_accounts.yaml...") accounts_list = [ { - 'tenant_name': - CONST.__getattribute__('tempest_identity_tenant_name'), + 'tenant_name': getattr(CONST, 'tempest_identity_tenant_name'), 'tenant_id': str(tenant_id), - 'username': CONST.__getattribute__('tempest_identity_user_name'), - 'password': - CONST.__getattribute__('tempest_identity_user_password') + 'username': getattr(CONST, 'tempest_identity_user_name'), + 'password': getattr(CONST, 'tempest_identity_user_password') } ] @@ -279,13 +275,13 @@ def configure_tempest_update_params(tempest_conf_file, network_name=None, config.read(tempest_conf_file) config.set('compute', 'fixed_network_name', network_name) config.set('compute', 'volume_device_name', - CONST.__getattribute__('tempest_volume_device_name')) + getattr(CONST, 'tempest_volume_device_name')) if image_id is not None: config.set('compute', 'image_ref', image_id) if IMAGE_ID_ALT is not None: config.set('compute', 'image_ref_alt', IMAGE_ID_ALT) - if CONST.__getattribute__('tempest_use_custom_flavors'): + if getattr(CONST, 'tempest_use_custom_flavors'): if flavor_id is not None: config.set('compute', 'flavor_ref', flavor_id) if FLAVOR_ID_ALT is not None: @@ -306,9 +302,9 @@ def configure_tempest_update_params(tempest_conf_file, network_name=None, config.set('identity', 'auth_version', auth_version) config.set( 'validation', 'ssh_timeout', - CONST.__getattribute__('tempest_validation_ssh_timeout')) + getattr(CONST, 'tempest_validation_ssh_timeout')) config.set('object-storage', 'operator_role', - CONST.__getattribute__('tempest_object_storage_operator_role')) + getattr(CONST, 'tempest_object_storage_operator_role')) if os.environ.get('OS_ENDPOINT_TYPE') is not None: config.set('identity', 'v3_endpoint_type', diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py index c19c8d9d2..5148d114e 100644 --- a/functest/opnfv_tests/openstack/tempest/tempest.py +++ b/functest/opnfv_tests/openstack/tempest/tempest.py @@ -320,21 +320,16 @@ class TempestResourcesManager(object): self.os_creds = kwargs.get('os_creds') or snaps_utils.get_credentials() self.guid = '-' + str(uuid.uuid4()) self.creators = list() - - if hasattr(CONST, 'snaps_images_cirros'): - self.cirros_image_config = CONST.__getattribute__( - 'snaps_images_cirros') - else: - self.cirros_image_config = None + self.cirros_image_config = getattr(CONST, 'snaps_images_cirros', None) def _create_project(self): """Create project for tests.""" project_creator = deploy_utils.create_project( self.os_creds, ProjectConfig( - name=CONST.__getattribute__( - 'tempest_identity_tenant_name') + self.guid, - description=CONST.__getattribute__( - 'tempest_identity_tenant_description'))) + name=getattr( + CONST, 'tempest_identity_tenant_name') + self.guid, + description=getattr( + CONST, 'tempest_identity_tenant_description'))) if project_creator is None or project_creator.get_project() is None: raise Exception("Failed to create tenant") self.creators.append(project_creator) @@ -344,12 +339,12 @@ class TempestResourcesManager(object): """Create user for tests.""" user_creator = deploy_utils.create_user( self.os_creds, UserConfig( - name=CONST.__getattribute__( - 'tempest_identity_user_name') + self.guid, - password=CONST.__getattribute__( - 'tempest_identity_user_password'), - project_name=CONST.__getattribute__( - 'tempest_identity_tenant_name') + self.guid)) + name=getattr( + CONST, 'tempest_identity_user_name') + self.guid, + password=getattr( + CONST, 'tempest_identity_user_password'), + project_name=getattr( + CONST, 'tempest_identity_tenant_name') + self.guid)) if user_creator is None or user_creator.get_user() is None: raise Exception("Failed to create user") self.creators.append(user_creator) @@ -361,18 +356,14 @@ class TempestResourcesManager(object): tempest_physical_network = None tempest_segmentation_id = None - if hasattr(CONST, 'tempest_network_type'): - tempest_network_type = CONST.__getattribute__( - 'tempest_network_type') - if hasattr(CONST, 'tempest_physical_network'): - tempest_physical_network = CONST.__getattribute__( - 'tempest_physical_network') - if hasattr(CONST, 'tempest_segmentation_id'): - tempest_segmentation_id = CONST.__getattribute__( - 'tempest_segmentation_id') - - tempest_net_name = CONST.__getattribute__( - 'tempest_private_net_name') + self.guid + tempest_network_type = getattr( + CONST, 'tempest_network_type', None) + tempest_physical_network = getattr( + CONST, 'tempest_physical_network', None) + tempest_segmentation_id = getattr( + CONST, 'tempest_segmentation_id', None) + tempest_net_name = getattr( + CONST, 'tempest_private_net_name') + self.guid network_creator = deploy_utils.create_network( self.os_creds, NetworkConfig( @@ -382,11 +373,11 @@ class TempestResourcesManager(object): physical_network=tempest_physical_network, segmentation_id=tempest_segmentation_id, subnet_settings=[SubnetConfig( - name=CONST.__getattribute__( - 'tempest_private_subnet_name') + self.guid, + name=getattr( + CONST, 'tempest_private_subnet_name') + self.guid, project_name=project_name, - cidr=CONST.__getattribute__( - 'tempest_private_subnet_cidr'))])) + cidr=getattr( + CONST, 'tempest_private_subnet_cidr'))])) if network_creator is None or network_creator.get_network() is None: raise Exception("Failed to create private network") self.creators.append(network_creator) @@ -413,9 +404,9 @@ class TempestResourcesManager(object): flavor_creator = OpenStackFlavor( self.os_creds, FlavorConfig( name=name, - ram=CONST.__getattribute__('openstack_flavor_ram'), - disk=CONST.__getattribute__('openstack_flavor_disk'), - vcpus=CONST.__getattribute__('openstack_flavor_vcpus'), + ram=getattr(CONST, 'openstack_flavor_ram'), + disk=getattr(CONST, 'openstack_flavor_disk'), + vcpus=getattr(CONST, 'openstack_flavor_vcpus'), metadata=flavor_metadata)) flavor = flavor_creator.create() if flavor is None: @@ -437,8 +428,8 @@ class TempestResourcesManager(object): if create_project: LOGGER.debug("Creating project and user for Tempest suite") - project_name = CONST.__getattribute__( - 'tempest_identity_tenant_name') + self.guid + project_name = getattr( + CONST, 'tempest_identity_tenant_name') + self.guid result['project_id'] = self._create_project() result['user_id'] = self._create_user() result['tenant_id'] = result['project_id'] # for compatibility @@ -447,28 +438,26 @@ class TempestResourcesManager(object): result['tempest_net_name'] = self._create_network(project_name) LOGGER.debug("Creating image for Tempest suite") - image_name = CONST.__getattribute__('openstack_image_name') + self.guid + image_name = getattr(CONST, 'openstack_image_name') + self.guid result['image_id'] = self._create_image(image_name) if use_custom_images: LOGGER.debug("Creating 2nd image for Tempest suite") - image_name = CONST.__getattribute__( - 'openstack_image_name_alt') + self.guid + image_name = getattr(CONST, 'openstack_image_name_alt') + self.guid result['image_id_alt'] = self._create_image(image_name) - if (CONST.__getattribute__('tempest_use_custom_flavors') == 'True' or + if (getattr(CONST, 'tempest_use_custom_flavors') == 'True' or use_custom_flavors): LOGGER.info("Creating flavor for Tempest suite") - name = CONST.__getattribute__('openstack_flavor_name') + self.guid + name = getattr(CONST, 'openstack_flavor_name') + self.guid result['flavor_id'] = self._create_flavor(name) if use_custom_flavors: LOGGER.info("Creating 2nd flavor for Tempest suite") scenario = env.get('DEPLOY_SCENARIO') if 'ovs' in scenario or 'fdio' in scenario: - CONST.__setattr__('openstack_flavor_ram', 1024) - name = CONST.__getattribute__( - 'openstack_flavor_name_alt') + self.guid + setattr(CONST, 'openstack_flavor_ram', 1024) + name = getattr(CONST, 'openstack_flavor_name_alt') + self.guid result['flavor_id_alt'] = self._create_flavor(name) return result diff --git a/functest/tests/unit/openstack/tempest/test_conf_utils.py b/functest/tests/unit/openstack/tempest/test_conf_utils.py index 1097d481d..34dc0f4c4 100644 --- a/functest/tests/unit/openstack/tempest/test_conf_utils.py +++ b/functest/tests/unit/openstack/tempest/test_conf_utils.py @@ -8,6 +8,7 @@ # pylint: disable=missing-docstring import logging +import os import unittest import mock @@ -76,13 +77,13 @@ class OSTempestConfUtilsTesting(unittest.TestCase): tempest_resources = tempest.TempestResourcesManager( os_creds=self.os_creds) - CONST.__setattr__('tempest_use_custom_flavors', 'True') + setattr(CONST, 'tempest_use_custom_flavors', 'True') with self.assertRaises(Exception) as context: tempest_resources.create() msg = 'Failed to create flavor' self.assertTrue(msg in context.exception, msg=str(context.exception)) - CONST.__setattr__('tempest_use_custom_flavors', 'False') + setattr(CONST, 'tempest_use_custom_flavors', 'False') with self.assertRaises(Exception) as context: tempest_resources.create(use_custom_flavors=True) msg = 'Failed to create flavor' @@ -100,12 +101,12 @@ class OSTempestConfUtilsTesting(unittest.TestCase): cmd = "rally deployment destroy opnfv-rally" error_msg = "Deployment %s does not exist." % \ - CONST.__getattribute__('rally_deployment_name') + getattr(CONST, 'rally_deployment_name') mock_logger_info.assert_any_call("Creating Rally environment...") mock_exec.assert_any_call(cmd, error_msg=error_msg, verbose=False) cmd = "rally deployment create --fromenv --name=" - cmd += CONST.__getattribute__('rally_deployment_name') + cmd += getattr(CONST, 'rally_deployment_name') error_msg = "Problem while creating Rally deployment" mock_exec_raise.assert_any_call(cmd, error_msg=error_msg) @@ -122,7 +123,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'stdout.readline.return_value': '0'} mock_popen.configure_mock(**attrs) - CONST.__setattr__('tempest_verifier_name', 'test_veifier_name') + setattr(CONST, 'tempest_verifier_name', 'test_veifier_name') with mock.patch('functest.utils.functest_utils.execute_command_raise', side_effect=Exception), \ self.assertRaises(Exception): @@ -136,7 +137,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'create_rally_deployment', return_value=mock.Mock()) def test_get_verif_id_missing_verif(self, mock_rally, mock_tempest): # pylint: disable=unused-argument - CONST.__setattr__('tempest_verifier_name', 'test_verifier_name') + setattr(CONST, 'tempest_verifier_name', 'test_verifier_name') with mock.patch('functest.opnfv_tests.openstack.tempest.' 'conf_utils.subprocess.Popen') as mock_popen, \ self.assertRaises(Exception): @@ -152,7 +153,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'create_rally_deployment', return_value=mock.Mock()) def test_get_verifier_id_default(self, mock_rally, mock_tempest): # pylint: disable=unused-argument - CONST.__setattr__('tempest_verifier_name', 'test_verifier_name') + setattr(CONST, 'tempest_verifier_name', 'test_verifier_name') with mock.patch('functest.opnfv_tests.openstack.tempest.' 'conf_utils.subprocess.Popen') as mock_popen: mock_stdout = mock.Mock() @@ -164,7 +165,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'test_deploy_id') def test_get_depl_id_missing_rally(self): - CONST.__setattr__('tempest_verifier_name', 'test_deploy_name') + setattr(CONST, 'tempest_verifier_name', 'test_deploy_name') with mock.patch('functest.opnfv_tests.openstack.tempest.' 'conf_utils.subprocess.Popen') as mock_popen, \ self.assertRaises(Exception): @@ -175,7 +176,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): conf_utils.get_verifier_deployment_id() def test_get_depl_id_default(self): - CONST.__setattr__('tempest_verifier_name', 'test_deploy_name') + setattr(CONST, 'tempest_verifier_name', 'test_deploy_name') with mock.patch('functest.opnfv_tests.openstack.tempest.' 'conf_utils.subprocess.Popen') as mock_popen: mock_stdout = mock.Mock() @@ -295,7 +296,7 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'conf_utils.backup_tempest_config'), \ mock.patch('functest.utils.functest_utils.yaml.safe_load', return_value={'validation': {'ssh_timeout': 300}}): - CONST.__setattr__('OS_ENDPOINT_TYPE', None) + os.environ['OS_ENDPOINT_TYPE'] = '' conf_utils.configure_tempest_update_params( 'test_conf_file', image_id=image_id, flavor_id=flavor_id) mset.assert_any_call(params[0], params[1], params[2]) @@ -312,12 +313,12 @@ class OSTempestConfUtilsTesting(unittest.TestCase): 'test_image_id_alt'), None, None) def test_upd_missing_flavor_id(self): - CONST.__setattr__('tempest_use_custom_flavors', 'True') + setattr(CONST, 'tempest_use_custom_flavors', 'True') self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'), None, 'test_flavor_id') def test_upd_missing_flavor_id_alt(self): - CONST.__setattr__('tempest_use_custom_flavors', 'True') + setattr(CONST, 'tempest_use_custom_flavors', 'True') conf_utils.FLAVOR_ID_ALT = 'test_flavor_id_alt' self._test_missing_param(('compute', 'flavor_ref_alt', 'test_flavor_id_alt'), None, None) -- cgit 1.2.3-korg