X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fopnfv_tests%2Fopenstack%2Frally%2Frally.py;h=add0f2437e40b7e13db2041ec6b425f6daf8d466;hb=d589e4e5345ed82c68d9a011ac89f8cdbefe2ca3;hp=b3aaab6598240a2366f7a60e51f0103ae2cad08d;hpb=3a042e00c533dae47014842ed345da6b321f5eb9;p=functest.git diff --git a/functest/opnfv_tests/openstack/rally/rally.py b/functest/opnfv_tests/openstack/rally/rally.py index b3aaab659..add0f2437 100644 --- a/functest/opnfv_tests/openstack/rally/rally.py +++ b/functest/opnfv_tests/openstack/rally/rally.py @@ -29,6 +29,7 @@ from functest.energy import energy from functest.opnfv_tests.openstack.snaps import snaps_utils from functest.opnfv_tests.openstack.tempest import conf_utils from functest.utils.constants import CONST +from functest.utils import env from snaps.config.flavor import FlavorConfig from snaps.config.image import ImageConfig @@ -36,7 +37,6 @@ from snaps.config.network import NetworkConfig, SubnetConfig from snaps.config.router import RouterConfig from snaps.openstack.create_flavor import OpenStackFlavor -from snaps.openstack.tests import openstack_tests from snaps.openstack.utils import deploy_utils LOGGER = logging.getLogger(__name__) @@ -45,26 +45,23 @@ LOGGER = logging.getLogger(__name__) class RallyBase(testcase.TestCase): """Base class form Rally testcases implementation.""" + # pylint: disable=too-many-instance-attributes TESTS = ['authenticate', 'glance', 'ceilometer', 'cinder', 'heat', 'keystone', 'neutron', 'nova', 'quotas', 'vm', 'all'] - GLANCE_IMAGE_NAME = CONST.__getattribute__('openstack_image_name') - GLANCE_IMAGE_FILENAME = CONST.__getattribute__('openstack_image_file_name') - GLANCE_IMAGE_PATH = os.path.join( - CONST.__getattribute__('dir_functest_images'), - GLANCE_IMAGE_FILENAME) - GLANCE_IMAGE_FORMAT = CONST.__getattribute__('openstack_image_disk_format') - GLANCE_IMAGE_USERNAME = CONST.__getattribute__('openstack_image_username') - GLANCE_IMAGE_EXTRA_PROPERTIES = {} - if hasattr(CONST, 'openstack_extra_properties'): - GLANCE_IMAGE_EXTRA_PROPERTIES = CONST.__getattribute__( - 'openstack_extra_properties') - FLAVOR_NAME = CONST.__getattribute__('rally_flavor_name') - FLAVOR_ALT_NAME = CONST.__getattribute__('rally_flavor_alt_name') - FLAVOR_EXTRA_SPECS = None + GLANCE_IMAGE_NAME = getattr(CONST, 'openstack_image_name') + GLANCE_IMAGE_FILENAME = getattr(CONST, 'openstack_image_file_name') + GLANCE_IMAGE_PATH = os.path.join(getattr(CONST, 'dir_functest_images'), + GLANCE_IMAGE_FILENAME) + GLANCE_IMAGE_FORMAT = getattr(CONST, 'openstack_image_disk_format') + GLANCE_IMAGE_USERNAME = getattr(CONST, 'openstack_image_username') + GLANCE_IMAGE_EXTRA_PROPERTIES = getattr(CONST, + 'openstack_extra_properties', {}) + FLAVOR_NAME = getattr(CONST, 'rally_flavor_name') + FLAVOR_ALT_NAME = getattr(CONST, 'rally_flavor_alt_name') FLAVOR_RAM = 512 FLAVOR_RAM_ALT = 1024 - if hasattr(CONST, 'flavor_extra_specs'): - FLAVOR_EXTRA_SPECS = CONST.__getattribute__('flavor_extra_specs') + FLAVOR_EXTRA_SPECS = getattr(CONST, 'flavor_extra_specs', None) + if FLAVOR_EXTRA_SPECS: FLAVOR_RAM = 1024 FLAVOR_RAM_ALT = 2048 @@ -80,32 +77,20 @@ class RallyBase(testcase.TestCase): TENANTS_AMOUNT = 3 ITERATIONS_AMOUNT = 10 CONCURRENCY = 4 - RESULTS_DIR = os.path.join(CONST.__getattribute__('dir_results'), 'rally') + RESULTS_DIR = os.path.join(getattr(CONST, 'dir_results'), 'rally') BLACKLIST_FILE = os.path.join(RALLY_DIR, "blacklist.txt") TEMP_DIR = os.path.join(RALLY_DIR, "var") - RALLY_PRIVATE_NET_NAME = CONST.__getattribute__('rally_network_name') - RALLY_PRIVATE_SUBNET_NAME = CONST.__getattribute__('rally_subnet_name') - RALLY_PRIVATE_SUBNET_CIDR = CONST.__getattribute__('rally_subnet_cidr') - RALLY_ROUTER_NAME = CONST.__getattribute__('rally_router_name') + RALLY_PRIVATE_NET_NAME = getattr(CONST, 'rally_network_name') + RALLY_PRIVATE_SUBNET_NAME = getattr(CONST, 'rally_subnet_name') + RALLY_PRIVATE_SUBNET_CIDR = getattr(CONST, 'rally_subnet_cidr') + RALLY_ROUTER_NAME = getattr(CONST, 'rally_router_name') def __init__(self, **kwargs): """Initialize RallyBase object.""" super(RallyBase, self).__init__(**kwargs) - if 'os_creds' in kwargs: - self.os_creds = kwargs['os_creds'] - else: - creds_override = None - if hasattr(CONST, 'snaps_os_creds_override'): - creds_override = CONST.__getattribute__( - 'snaps_os_creds_override') - - self.os_creds = openstack_tests.get_credentials( - os_env_file=CONST.__getattribute__('openstack_creds'), - overrides=creds_override) - + self.os_creds = kwargs.get('os_creds') or snaps_utils.get_credentials() self.guid = '-' + str(uuid.uuid4()) - self.creators = [] self.mode = '' self.summary = [] @@ -123,6 +108,7 @@ class RallyBase(testcase.TestCase): self.compute_cnt = 0 def _build_task_args(self, test_file_name): + """Build arguments for the Rally task.""" task_args = {'service_list': [test_file_name]} task_args['image_name'] = self.image_name task_args['flavor_name'] = self.flavor_name @@ -153,6 +139,7 @@ class RallyBase(testcase.TestCase): return task_args def _prepare_test_list(self, test_name): + """Build the list of test cases to be executed.""" test_yaml_file_name = 'opnfv-{}.yaml'.format(test_name) scenario_file_name = os.path.join(self.RALLY_SCENARIO_DIR, test_yaml_file_name) @@ -232,8 +219,8 @@ class RallyBase(testcase.TestCase): with open(RallyBase.BLACKLIST_FILE, 'r') as black_list_file: black_list_yaml = yaml.safe_load(black_list_file) - installer_type = CONST.__getattribute__('INSTALLER_TYPE') - deploy_scenario = CONST.__getattribute__('DEPLOY_SCENARIO') + installer_type = env.get('INSTALLER_TYPE') + deploy_scenario = env.get('DEPLOY_SCENARIO') if (bool(installer_type) and bool(deploy_scenario) and 'scenario' in black_list_yaml.keys()): for item in black_list_yaml['scenario']: @@ -244,7 +231,7 @@ class RallyBase(testcase.TestCase): in_it(installer_type, installers)): tests = item['tests'] black_tests.extend(tests) - except Exception: + except Exception: # pylint: disable=broad-except LOGGER.debug("Scenario exclusion not applied.") return black_tests @@ -267,8 +254,8 @@ class RallyBase(testcase.TestCase): # match if regex pattern is set and found in the needle if pattern and re.search(pattern, needle) is not None: return True - else: - return False + + return False def excl_func(self): """Exclude functionalities.""" @@ -412,6 +399,7 @@ class RallyBase(testcase.TestCase): LOGGER.info('Test scenario: "{}" Failed.'.format(test_name) + "\n") def _append_summary(self, json_raw, test_name): + """Update statistics summary info.""" nb_tests = 0 nb_success = 0 overall_duration = 0.0 @@ -434,6 +422,7 @@ class RallyBase(testcase.TestCase): self.summary.append(scenario_summary) def _prepare_env(self): + """Create resources needed by test scenarios.""" LOGGER.debug('Validating the test name...') if self.test_name not in self.TESTS: raise Exception("Test name '%s' is invalid" % self.test_name) @@ -462,19 +451,9 @@ class RallyBase(testcase.TestCase): LOGGER.debug("Creating network '%s'...", network_name) - rally_network_type = None - rally_physical_network = None - rally_segmentation_id = None - - if hasattr(CONST, 'rally_network_type'): - rally_network_type = CONST.__getattribute__( - 'rally_network_type') - if hasattr(CONST, 'rally_physical_network'): - rally_physical_network = CONST.__getattribute__( - 'rally_physical_network') - if hasattr(CONST, 'rally_segmentation_id'): - rally_segmentation_id = CONST.__getattribute__( - 'rally_segmentation_id') + rally_network_type = getattr(CONST, 'rally_network_type', None) + rally_physical_network = getattr(CONST, 'rally_physical_network', None) + rally_segmentation_id = getattr(CONST, 'rally_segmentation_id', None) network_creator = deploy_utils.create_network( self.os_creds, NetworkConfig( @@ -485,8 +464,7 @@ class RallyBase(testcase.TestCase): segmentation_id=rally_segmentation_id, subnet_settings=[SubnetConfig( name=subnet_name, - cidr=self.RALLY_PRIVATE_SUBNET_CIDR) - ])) + cidr=self.RALLY_PRIVATE_SUBNET_CIDR)])) if network_creator is None: raise Exception("Failed to create private network") self.priv_net_id = network_creator.get_network().id @@ -521,6 +499,7 @@ class RallyBase(testcase.TestCase): self.creators.append(flavor_alt_creator) def _run_tests(self): + """Execute tests.""" if self.test_name == 'all': for test in self.TESTS: if test == 'all' or test == 'vm': @@ -530,6 +509,7 @@ class RallyBase(testcase.TestCase): self._run_task(self.test_name) def _generate_report(self): + """Generate test execution summary report.""" total_duration = 0.0 total_nb_tests = 0 total_nb_success = 0 @@ -582,11 +562,12 @@ class RallyBase(testcase.TestCase): self.details = payload def _clean_up(self): + """Cleanup all OpenStack objects. Should be called on completion.""" for creator in reversed(self.creators): try: creator.clean() - except Exception as e: - LOGGER.error('Unexpected error cleaning - %s', e) + except Exception as exc: # pylint: disable=broad-except + LOGGER.error('Unexpected error cleaning - %s', exc) @energy.enable_recording def run(self, **kwargs):