X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fopnfv_tests%2Fopenstack%2Frefstack%2Frefstack.py;h=c709e56265cd3402a288993a0cf1f13d559753b5;hb=5d54a533d25a989dc64a2789788ff2f2fd6ad5c6;hp=a55b147f1f2994e2334c2ec26dad05e078815c61;hpb=cbcc92a846108386803d07fbb5d9c7838889090a;p=functest.git diff --git a/functest/opnfv_tests/openstack/refstack/refstack.py b/functest/opnfv_tests/openstack/refstack/refstack.py index a55b147f1..c709e5626 100644 --- a/functest/opnfv_tests/openstack/refstack/refstack.py +++ b/functest/opnfv_tests/openstack/refstack/refstack.py @@ -11,12 +11,9 @@ import logging import os -import shutil -import time - -from refstack_client import list_parser -from xtesting.core import testcase -from xtesting.energy import energy +import re +import subprocess +import yaml from functest.opnfv_tests.openstack.tempest import tempest from functest.utils import config @@ -30,32 +27,57 @@ class Refstack(tempest.TempestCommon): defcorelist = os.path.join( getattr(config.CONF, 'dir_refstack_data'), 'defcore.txt') - def __init__(self, **kwargs): - if "case_name" not in kwargs: - kwargs["case_name"] = 'refstack' - super(Refstack, self).__init__(**kwargs) - self.res_dir = os.path.join( - getattr(config.CONF, 'dir_results'), 'refstack') - self.list = os.path.join(self.res_dir, 'tempest-list.txt') - - @energy.enable_recording - def run(self, **kwargs): - """Start Refstack testcase.""" - self.start_time = time.time() + def _extract_refstack_data(self): + yaml_data = "" + with open(self.defcorelist) as def_file: + for line in def_file: + try: + grp = re.search(r'^([^\[]*)(\[.*\])\n*$', line) + yaml_data = "{}\n{}: {}".format( + yaml_data, grp.group(1), grp.group(2)) + except Exception: # pylint: disable=broad-except + self.__logger.warning("Cannot parse %s", line) + return yaml.load(yaml_data) + + def _extract_tempest_data(self): + olddir = os.getcwd() try: - self.configure() - parser = list_parser.TestListParser( - getattr(config.CONF, 'dir_repo_tempest')) - nfile = parser.get_normalized_test_list(Refstack.defcorelist) - shutil.copyfile(nfile, self.list) - self.run_verifier_tests() - self.parse_verifier_result() - self.generate_report() - res = testcase.TestCase.EX_OK - except Exception: # pylint: disable=broad-except - self.__logger.exception('Error with run') - res = testcase.TestCase.EX_RUN_ERROR + os.chdir(self.verifier_repo_dir) + cmd = ['stestr', 'list', '^tempest.'] + output = subprocess.check_output(cmd) + except subprocess.CalledProcessError as cpe: + self.__logger.error( + "Exception when listing tempest tests: %s\n%s", + cpe.cmd, cpe.output) + raise finally: - self.resources.cleanup() - self.stop_time = time.time() - return res + os.chdir(olddir) + yaml_data2 = "" + for line in output.splitlines(): + try: + grp = re.search(r'^([^\[]*)(\[.*\])\n*$', line) + yaml_data2 = "{}\n{}: {}".format( + yaml_data2, grp.group(1), grp.group(2)) + except Exception: # pylint: disable=broad-except + self.__logger.warning("Cannot parse %s. skipping it", line) + return yaml.load(yaml_data2) + + def generate_test_list(self, **kwargs): + self.backup_tempest_config(self.conf_file, '/etc') + refstack_data = self._extract_refstack_data() + tempest_data = self._extract_tempest_data() + with open(self.list, 'w') as ref_file: + for key in refstack_data.keys(): + try: + for data in tempest_data[key]: + if data == refstack_data[key][0]: + break + else: + self.__logger.info("%s: ids differ. skipping it", key) + continue + ref_file.write("{}{}\n".format( + key, str(tempest_data[key]).replace( + "'", "").replace(", ", ","))) + except Exception: # pylint: disable=broad-except + self.__logger.info("%s: not found. skipping it", key) + continue