Update restack defcore sync
[functest.git] / functest / opnfv_tests / openstack / refstack / refstack.py
index 8266e28..22e09bc 100644 (file)
@@ -11,9 +11,9 @@
 
 import logging
 import os
-import shutil
-
-from refstack_client import list_parser
+import re
+import subprocess
+import yaml
 
 from functest.opnfv_tests.openstack.tempest import tempest
 from functest.utils import config
@@ -27,8 +27,54 @@ class Refstack(tempest.TempestCommon):
     defcorelist = os.path.join(
         getattr(config.CONF, 'dir_refstack_data'), 'defcore.txt')
 
+    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):
+        try:
+            cmd = ['stestr', '--here', self.verifier_repo_dir, '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
+        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):
-        parser = list_parser.TestListParser(
-            getattr(config.CONF, 'dir_repo_tempest'))
-        nfile = parser.get_normalized_test_list(Refstack.defcorelist)
-        shutil.copyfile(nfile, self.list)
+        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