Update kube bench test cases to latest dev
[functest-kubernetes.git] / functest_kubernetes / cnf_conformance / conformance.py
index 0a74ccf..2cf4baa 100644 (file)
@@ -43,7 +43,7 @@ class CNFConformance(testcase.TestCase):
     __logger = logging.getLogger(__name__)
 
     def __init__(self, **kwargs):
-        super(CNFConformance, self).__init__(**kwargs)
+        super().__init__(**kwargs)
         self.output_log_name = 'functest-kubernetes.log'
         self.output_debug_log_name = 'functest-kubernetes.debug.log'
 
@@ -76,18 +76,27 @@ class CNFConformance(testcase.TestCase):
         lfiles = glob.glob(os.path.join(
             self.src_dir, 'results', 'cnf-testsuite-results-*.yml'))
         results = max(lfiles, key=os.path.getmtime)
-        with open(os.path.join(self.src_dir, 'results', results)) as yfile:
+        with open(os.path.join(
+                self.src_dir, 'results', results), encoding='utf-8') as yfile:
             self.details = yaml.safe_load(yfile)
             msg = prettytable.PrettyTable(
                 header_style='upper', padding_width=5,
                 field_names=['name', 'status'])
+            item_criteria = 0
             for item in self.details['items']:
                 msg.add_row([item['name'], item['status']])
+                if item['status'] == "passed":
+                    item_criteria += 1
+                else:
+                    self.__logger.warning(
+                        "%s %s", item['name'], item['status'])
             self.__logger.info("\n\n%s\n", msg.get_string())
         grp = re.search(
             r'Final .* score: (\d+) of (\d+)', output.decode("utf-8"))
         if grp:
             self.result = int(grp.group(1)) / int(grp.group(2)) * 100
+        else:
+            self.result = item_criteria / len(self.details['items']) * 100
         if not os.path.exists(self.res_dir):
             os.makedirs(self.res_dir)
         shutil.copy2(
@@ -100,6 +109,10 @@ class CNFConformance(testcase.TestCase):
         try:
             self.setup()
             self.run_conformance(**kwargs)
+        except subprocess.CalledProcessError as exc:
+            self.__logger.exception(
+                "Can not run CNT Conformance: \n%s\n%s\n",
+                " ".join(exc.cmd), exc.output.decode("utf-8"))
         except Exception:  # pylint: disable=broad-except
             self.__logger.exception("Can not run CNF Conformance")
         self.stop_time = time.time()