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
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