Provide a list of check results files instead of one 13/66813/5
authorStamatis Katsaounis <mokats@intracom-telecom.com>
Fri, 1 Feb 2019 14:09:57 +0000 (16:09 +0200)
committerGeorg Kunz <georg.kunz@ericsson.com>
Thu, 7 Mar 2019 13:25:01 +0000 (13:25 +0000)
This patchs gives the ability to provide more than one check results
file. Furthermore, it does not alter the behavior of the existing tests
but prepares dovetail to be able to fetch information from many
sources.

Change-Id: I23cd23d2908ad6bdddd94b977813d0e81dc0c05a
Signed-off-by: Stamatis Katsaounis <mokats@intracom-telecom.com>
46 files changed:
dovetail/report.py
dovetail/tests/unit/test_report.py
etc/testcase/bottlenecks.stress.ping.yml
etc/testcase/functest.bgpvpn.router_association.yml
etc/testcase/functest.bgpvpn.router_association_floating_ip.yml
etc/testcase/functest.bgpvpn.subnet_connectivity.yml
etc/testcase/functest.bgpvpn.tenant_separation.yml
etc/testcase/functest.healthcheck.api_check.yml
etc/testcase/functest.healthcheck.connection_check.yml
etc/testcase/functest.healthcheck.snaps_health_check.yml
etc/testcase/functest.k8s.conformance.yml
etc/testcase/functest.k8s.smoke.yml
etc/testcase/functest.security.patrole.yml
etc/testcase/functest.security.patrole_vxlan_dependent.yml
etc/testcase/functest.snaps.smoke.yml
etc/testcase/functest.tempest.bgpvpn.yml
etc/testcase/functest.tempest.compute.yml
etc/testcase/functest.tempest.identity_v3.yml
etc/testcase/functest.tempest.image.yml
etc/testcase/functest.tempest.ipv6_api.yml
etc/testcase/functest.tempest.ipv6_scenario.yml
etc/testcase/functest.tempest.multi_node_scheduling.yml
etc/testcase/functest.tempest.network_api.yml
etc/testcase/functest.tempest.network_scenario.yml
etc/testcase/functest.tempest.network_security.yml
etc/testcase/functest.tempest.osinterop.yml
etc/testcase/functest.tempest.trunk-ports.yml
etc/testcase/functest.tempest.vm_lifecycle.yml
etc/testcase/functest.tempest.volume.yml
etc/testcase/functest.vnf.vepc.yml
etc/testcase/functest.vnf.vims.yml
etc/testcase/functest.vping.ssh.yml
etc/testcase/functest.vping.userdata.yml
etc/testcase/onap-vtp.validate.csar.yml
etc/testcase/yardstick.ha.cinder_api.yml
etc/testcase/yardstick.ha.controller_restart.yml
etc/testcase/yardstick.ha.cpu_load.yml
etc/testcase/yardstick.ha.database.yml
etc/testcase/yardstick.ha.disk_load.yml
etc/testcase/yardstick.ha.glance_api.yml
etc/testcase/yardstick.ha.haproxy.yml
etc/testcase/yardstick.ha.keystone.yml
etc/testcase/yardstick.ha.neutron_l3_agent.yml
etc/testcase/yardstick.ha.neutron_server.yml
etc/testcase/yardstick.ha.nova_api.yml
etc/testcase/yardstick.ha.rabbitmq.yml

index 305129c..44555f4 100644 (file)
@@ -40,25 +40,29 @@ class Report(object):
 
     def check_tc_result(self, testcase):
         result_path = dt_cfg.dovetail_config['result_dir']
-        check_results_file = dt_utils.get_value_from_dict(
-            'report.check_results_file', testcase.testcase)
-        if not check_results_file:
-            self.logger.error("Failed to get 'check_results_file' from config "
-                              "file of test case {}".format(testcase.name()))
-            self.check_result(testcase)
-            return None
-        result_file = os.path.join(result_path, check_results_file)
-        if os.path.isfile(result_file):
-            self.logger.info(
-                'Results have been stored with file {}.'.format(result_file))
-            result = self.get_result(testcase, result_file)
-            self.check_result(testcase, result)
-            return result
-        else:
-            self.logger.error(
-                'Failed to store results with file {}.'.format(result_file))
+        check_results_files = dt_utils.get_value_from_dict(
+            'report.check_results_files', testcase.testcase)
+        if not check_results_files:
+            self.logger.error("Failed to get 'check_results_files' from config"
+                              " file of test case {}".format(testcase.name()))
             self.check_result(testcase)
             return None
+        result_files = []
+        for check_results_file in check_results_files:
+            result_file = os.path.join(result_path, check_results_file)
+            if not os.path.isfile(result_file):
+                self.logger.error(
+                    'Failed to store results with file {}.'.
+                    format(result_file))
+                self.check_result(testcase)
+                return None
+            else:
+                result_files.append(result_file)
+        self.logger.info(
+            'Results have been stored with files: {}.'.format(result_files))
+        result = self.get_result(testcase, result_files)
+        self.check_result(testcase, result)
+        return result
 
     @staticmethod
     def check_result(testcase, db_result=None):
@@ -197,7 +201,7 @@ class Report(object):
                     f_out.add(os.path.join('results', f))
         os.chdir(cwd)
 
-    def get_result(self, testcase, check_results_file):
+    def get_result(self, testcase, check_results_files):
         validate_testcase = testcase.validate_testcase()
         type = testcase.validate_type()
         crawler = CrawlerFactory.create(type)
@@ -205,7 +209,7 @@ class Report(object):
             self.logger.error('Crawler is None: {}'.format(testcase.name()))
             return None
 
-        result = crawler.crawl(testcase, check_results_file)
+        result = crawler.crawl(testcase, check_results_files)
 
         if result is not None:
             self.results[type][validate_testcase] = result
@@ -235,8 +239,8 @@ class FunctestCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.FunctestCrawler').getLogger()
 
-    def crawl(self, testcase, file_path):
-        return self.crawl_from_file(testcase, file_path)
+    def crawl(self, testcase, file_paths):
+        return self.crawl_from_file(testcase, file_paths[0])
 
     def crawl_from_file(self, testcase, file_path):
         dovetail_config = dt_cfg.dovetail_config
@@ -266,16 +270,7 @@ class FunctestCrawler(Crawler):
                         duration = dt_utils.get_duration(timestart, timestop,
                                                          self.logger)
                         if complex_testcase:
-                            tests = data['details']['tests_number']
-                            failed_num = data['details']['failures_number']
-                            success_case = data['details']['success']
-                            error_case = data['details']['failures']
-                            skipped_case = data['details']['skipped']
-                            details = {'tests': tests,
-                                       'failures': failed_num,
-                                       'success': success_case,
-                                       'errors': error_case,
-                                       'skipped': skipped_case}
+                            details = self.get_details(data)
                 except KeyError as e:
                     self.logger.exception(
                         "Result data don't have key {}.".format(e))
@@ -290,6 +285,19 @@ class FunctestCrawler(Crawler):
         testcase.set_results(json_results)
         return json_results
 
+    def get_details(self, data):
+        tests = data['details']['tests_number']
+        failed_num = data['details']['failures_number']
+        success_case = data['details']['success']
+        error_case = data['details']['failures']
+        skipped_case = data['details']['skipped']
+        details = {'tests': tests,
+                   'failures': failed_num,
+                   'success': success_case,
+                   'errors': error_case,
+                   'skipped': skipped_case}
+        return details
+
 
 class FunctestK8sCrawler(FunctestCrawler):
 
@@ -318,8 +326,8 @@ class YardstickCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.YardstickCrawler').getLogger()
 
-    def crawl(self, testcase, file_path):
-        return self.crawl_from_file(testcase, file_path)
+    def crawl(self, testcase, file_paths):
+        return self.crawl_from_file(testcase, file_paths[0])
 
     def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
@@ -359,8 +367,8 @@ class BottlenecksCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.BottlenecksCrawler').getLogger()
 
-    def crawl(self, testcase, file_path):
-        return self.crawl_from_file(testcase, file_path)
+    def crawl(self, testcase, file_paths):
+        return self.crawl_from_file(testcase, file_paths[0])
 
     def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
@@ -389,8 +397,8 @@ class ShellCrawler(Crawler):
     def __init__(self):
         self.type = 'shell'
 
-    def crawl(self, testcase, file_path):
-        return self.crawl_from_file(testcase, file_path)
+    def crawl(self, testcase, file_paths):
+        return self.crawl_from_file(testcase, file_paths[0])
 
     def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
@@ -415,8 +423,8 @@ class OnapVtpCrawler(Crawler):
     def create_log(cls):
         cls.logger = dt_logger.Logger(__name__ + '.OnapVtpCrawler').getLogger()
 
-    def crawl(self, testcase, file_path):
-        return self.crawl_from_file(testcase, file_path)
+    def crawl(self, testcase, file_paths):
+        return self.crawl_from_file(testcase, file_paths[0])
 
     # The pass result looks like
     # {
index acd4414..9d3acbf 100644 (file)
@@ -82,7 +82,7 @@ class ReportTesting(unittest.TestCase):
         inner_testcase_obj = Mock()
         testcase_obj.testcase = inner_testcase_obj
         mock_config.dovetail_config = {'result_dir': 'result_dir'}
-        mock_utils.get_value_from_dict.return_value = 'check_results_file'
+        mock_utils.get_value_from_dict.return_value = ['check_results_file']
         mock_path.join.return_value = 'results_file'
         mock_path.isfile.return_value = True
         mock_get.return_value = 'result'
@@ -90,13 +90,13 @@ class ReportTesting(unittest.TestCase):
         result = report.check_tc_result(testcase_obj)
 
         mock_utils.get_value_from_dict.assert_called_once_with(
-            'report.check_results_file', inner_testcase_obj)
+            'report.check_results_files', inner_testcase_obj)
         mock_path.join.assert_called_once_with(
             'result_dir', 'check_results_file')
         mock_path.isfile.assert_called_once_with('results_file')
         logger_obj.info.assert_called_once_with(
-            'Results have been stored with file results_file.')
-        mock_get.assert_called_once_with(testcase_obj, 'results_file')
+            'Results have been stored with files: [\'results_file\'].')
+        mock_get.assert_called_once_with(testcase_obj, ['results_file'])
         mock_check.assert_called_once_with(testcase_obj, 'result')
         self.assertEquals('result', result)
 
@@ -114,14 +114,14 @@ class ReportTesting(unittest.TestCase):
         inner_testcase_obj = Mock()
         testcase_obj.testcase = inner_testcase_obj
         mock_config.dovetail_config = {'result_dir': 'result_dir'}
-        mock_utils.get_value_from_dict.return_value = 'check_results_file'
+        mock_utils.get_value_from_dict.return_value = ['check_results_file']
         mock_path.join.return_value = 'results_file'
         mock_path.isfile.return_value = False
 
         result = report.check_tc_result(testcase_obj)
 
         mock_utils.get_value_from_dict.assert_called_once_with(
-            'report.check_results_file', inner_testcase_obj)
+            'report.check_results_files', inner_testcase_obj)
         mock_path.join.assert_called_once_with(
             'result_dir', 'check_results_file')
         mock_path.isfile.assert_called_once_with('results_file')
@@ -150,9 +150,9 @@ class ReportTesting(unittest.TestCase):
         result = report.check_tc_result(testcase_obj)
 
         mock_utils.get_value_from_dict.assert_called_once_with(
-            'report.check_results_file', inner_testcase_obj)
+            'report.check_results_files', inner_testcase_obj)
         logger_obj.error.assert_called_once_with(
-            "Failed to get 'check_results_file' from config "
+            "Failed to get 'check_results_files' from config "
             "file of test case name")
         mock_check.assert_called_once_with(testcase_obj)
         self.assertEquals(None, result)
@@ -411,13 +411,13 @@ class ReportTesting(unittest.TestCase):
         mock_crawler.create.return_value = crawler_obj
         crawler_obj.crawl.return_value = 'result'
 
-        result = report.get_result(testcase_obj, 'check_results_file')
+        result = report.get_result(testcase_obj, 'check_results_files')
 
         testcase_obj.validate_testcase.assert_called_once_with()
         testcase_obj.validate_type.assert_called_once_with()
         mock_crawler.create.assert_called_once_with('functest')
         crawler_obj.crawl.assert_called_once_with(
-            testcase_obj, 'check_results_file')
+            testcase_obj, 'check_results_files')
         logger_obj.debug.assert_called_once_with(
             'Test case: validate -> result acquired')
         self.assertEquals({'validate': 'result'},
@@ -437,13 +437,13 @@ class ReportTesting(unittest.TestCase):
         mock_crawler.create.return_value = crawler_obj
         crawler_obj.crawl.return_value = None
 
-        result = report.get_result(testcase_obj, 'check_results_file')
+        result = report.get_result(testcase_obj, 'check_results_files')
 
         testcase_obj.validate_testcase.assert_called_once_with()
         testcase_obj.validate_type.assert_called_once_with()
         mock_crawler.create.assert_called_once_with('functest')
         crawler_obj.crawl.assert_called_once_with(
-            testcase_obj, 'check_results_file')
+            testcase_obj, 'check_results_files')
         testcase_obj.increase_retry.assert_called_once_with()
         logger_obj.debug.assert_called_once_with(
             'Test case: validate -> result acquired retry: retry')
@@ -460,7 +460,7 @@ class ReportTesting(unittest.TestCase):
         testcase_obj.validate_type.return_value = 'functest'
         mock_crawler.create.return_value = None
 
-        result = report.get_result(testcase_obj, 'check_results_file')
+        result = report.get_result(testcase_obj, 'check_results_files')
 
         testcase_obj.validate_testcase.assert_called_once_with()
         testcase_obj.validate_type.assert_called_once_with()
@@ -493,7 +493,7 @@ class ReportTesting(unittest.TestCase):
         testcase_obj.name.return_value = 'name'
 
         crawler = dt_report.FunctestCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         testcase_obj.validate_testcase.assert_called_once_with()
@@ -538,7 +538,7 @@ class ReportTesting(unittest.TestCase):
         mock_utils.get_duration.return_value = 'duration'
 
         crawler = dt_report.FunctestCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'criteria', 'timestart': 'start_date',
                     'timestop': 'stop_date', 'duration': 'duration',
                     'details': {
@@ -580,7 +580,7 @@ class ReportTesting(unittest.TestCase):
         mock_utils.get_duration.return_value = 'duration'
 
         crawler = dt_report.FunctestCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         mock_open.assert_called_once_with(file_path, 'r')
@@ -616,7 +616,7 @@ class ReportTesting(unittest.TestCase):
 
         crawler = dt_report.FunctestK8sCrawler()
 
-        result = crawler.crawl(testcase, file_path)
+        result = crawler.crawl(testcase, [file_path])
 
         dt_report.FunctestK8sCrawler.crawl_from_file.assert_called_once_with(
             'testcase', 'file_path')
@@ -641,7 +641,7 @@ class ReportTesting(unittest.TestCase):
         file_path = 'file_path'
 
         crawler = dt_report.YardstickCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         logger_obj.error.assert_called_once_with(
@@ -678,7 +678,7 @@ class ReportTesting(unittest.TestCase):
         mock_utils.get_value_from_dict.return_value = 'PASS'
 
         crawler = dt_report.YardstickCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -709,7 +709,7 @@ class ReportTesting(unittest.TestCase):
         mock_utils.get_value_from_dict.return_value = 'PASS'
 
         crawler = dt_report.YardstickCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'PASS'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -742,7 +742,7 @@ class ReportTesting(unittest.TestCase):
         file_path = 'file_path'
 
         crawler = dt_report.BottlenecksCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         logger_obj.error.assert_called_once_with(
@@ -768,7 +768,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.BottlenecksCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'PASS'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -796,7 +796,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.BottlenecksCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -821,7 +821,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = {}
 
         crawler = dt_report.BottlenecksCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -838,7 +838,7 @@ class ReportTesting(unittest.TestCase):
         file_path = 'file_path'
 
         crawler = dt_report.ShellCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         self.assertEquals(None, result)
@@ -851,7 +851,7 @@ class ReportTesting(unittest.TestCase):
         mock_open.return_value.__enter__.return_value = Exception()
 
         crawler = dt_report.ShellCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         mock_open.assert_called_once_with(file_path, 'r')
@@ -869,7 +869,7 @@ class ReportTesting(unittest.TestCase):
         mock_load.return_value = 'result'
 
         crawler = dt_report.ShellCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         mock_open.assert_called_once_with(file_path, 'r')
@@ -906,7 +906,7 @@ class ReportTesting(unittest.TestCase):
         file_path = 'file_path'
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(None, file_path)
+        result = crawler.crawl(None, [file_path])
 
         mock_path.exists.assert_called_once_with(file_path)
         logger_obj.error.assert_called_once_with(
@@ -1041,7 +1041,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'PASS'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -1071,7 +1071,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -1101,7 +1101,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -1133,7 +1133,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.return_value = data_dict
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
@@ -1158,7 +1158,7 @@ class ReportTesting(unittest.TestCase):
         mock_loads.side_effect = ValueError('No JSON object could be decoded')
 
         crawler = dt_report.OnapVtpCrawler()
-        result = crawler.crawl(testcase_obj, file_path)
+        result = crawler.crawl(testcase_obj, [file_path])
         expected = {'criteria': 'FAIL'}
 
         mock_path.exists.assert_called_once_with(file_path)
index 6371704..48e452e 100644 (file)
@@ -14,5 +14,6 @@ bottlenecks.stress.ping:
     dest_archive_files:
       - stress_logs/bottlenecks.stress.ping.log
       - stress_logs/bottlenecks.stress.ping.out
-    check_results_file: stress_logs/bottlenecks.stress.ping.out
+    check_results_files:
+      - stress_logs/bottlenecks.stress.ping.out
     sub_testcase_list:
index f6c56ff..1f720ca 100644 (file)
@@ -14,5 +14,6 @@ functest.bgpvpn.router_association:
       - functest.log
     dest_archive_files:
       - bgpvpn_logs/functest.bgpvpn.router_association.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index b1c6cb4..6e13f5d 100644 (file)
@@ -14,5 +14,6 @@ functest.bgpvpn.router_association_floating_ip:
       - functest.log
     dest_archive_files:
       - bgpvpn_logs/functest.bgpvpn.router_association_floating_ip.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index bb48663..8ff57e9 100644 (file)
@@ -14,5 +14,6 @@ functest.bgpvpn.subnet_connectivity:
       - functest.log
     dest_archive_files:
       - bgpvpn_logs/functest.bgpvpn.subnet_connectivity.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 61e768d..b40dd00 100644 (file)
@@ -14,5 +14,6 @@ functest.bgpvpn.tenant_separation:
       - functest.log
     dest_archive_files:
       - bgpvpn_logs/functest.bgpvpn.tenant_separation.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index ed58668..18a2892 100644 (file)
@@ -11,5 +11,6 @@ functest.healthcheck.api_check:
       - functest.log
     dest_archive_files:
       - healthcheck_logs/functest.healthcheck.api_check.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index e9ddd40..6dc9d45 100644 (file)
@@ -11,5 +11,6 @@ functest.healthcheck.connection_check:
       - functest.log
     dest_archive_files:
       - healthcheck_logs/functest.healthcheck.connection_check.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 014ccfd..9b21547 100644 (file)
@@ -11,5 +11,6 @@ functest.healthcheck.snaps_health_check:
       - functest.log
     dest_archive_files:
       - healthcheck_logs/functest.healthcheck.snaps_health_check.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index db85342..78ed6ac 100644 (file)
@@ -11,5 +11,6 @@ functest.k8s.conformance:
       - functest-kubernetes.log
     dest_archive_files:
       - k8s_logs/functest.k8s.conformance.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index cedc022..e3f61ae 100644 (file)
@@ -11,5 +11,6 @@ functest.k8s.smoke:
       - functest-kubernetes.log
     dest_archive_files:
       - k8s_logs/functest.k8s.smoke.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 7f3f973..369e915 100644 (file)
@@ -16,7 +16,8 @@ functest.security.patrole:
       - security_logs/functest.security.patrole.functest.log
       - security_logs/functest.security.patrole.log
       - security_logs/functest.security.patrole.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - patrole_tempest_plugin.tests.api.image.test_image_namespace_objects_rbac.ImageNamespacesObjectsRbacTest.test_create_metadef_object_in_namespace
       - patrole_tempest_plugin.tests.api.image.test_image_namespace_objects_rbac.ImageNamespacesObjectsRbacTest.test_list_metadef_objects_in_namespace
index 8208584..cd2a378 100644 (file)
@@ -18,7 +18,8 @@ functest.security.patrole_vxlan_dependent:
       - security_logs/functest.security.patrole_vxlan_dependent.functest.log
       - security_logs/functest.security.patrole_vxlan_dependent.log
       - security_logs/functest.security.patrole_vxlan_dependent.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - patrole_tempest_plugin.tests.api.network.test_networks_rbac.NetworksRbacTest.test_create_network_provider_network_type[admin]
       - patrole_tempest_plugin.tests.api.network.test_networks_rbac.NetworksRbacTest.test_create_network_provider_segmentation_id[admin]
index fc0cd4e..68a5714 100644 (file)
@@ -10,5 +10,6 @@ functest.snaps.smoke:
       - functest.log
     dest_archive_files:
       - snaps_logs/functest.snaps.smoke.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 19ad7a6..9b11caf 100644 (file)
@@ -19,7 +19,8 @@ functest.tempest.bgpvpn:
       - tempest_logs/functest.tempest.bgpvpn.functest.log
       - tempest_logs/functest.tempest.bgpvpn.log
       - tempest_logs/functest.tempest.bgpvpn.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - networking_bgpvpn_tempest.tests.api.test_bgpvpn.BgpvpnTest.test_associate_disassociate_network
       - networking_bgpvpn_tempest.tests.api.test_bgpvpn.BgpvpnTest.test_associate_disassociate_router
index 9649e96..96cf4ec 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.compute:
       - tempest_logs/functest.tempest.compute.functest.log
       - tempest_logs/functest.tempest.compute.log
       - tempest_logs/functest.tempest.compute.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.compute.flavors.test_flavors.FlavorsV2TestJSON.test_get_flavor[id-1f12046b-753d-40d2-abb6-d8eb8b30cb2f,smoke]
       - tempest.api.compute.flavors.test_flavors.FlavorsV2TestJSON.test_list_flavors[id-e36c0eaa-dff5-4082-ad1f-3f9a80aa3f59,smoke]
index 5f12199..93451b6 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.identity_v3:
       - tempest_logs/functest.tempest.identity_v3.functest.log
       - tempest_logs/functest.tempest.identity_v3.log
       - tempest_logs/functest.tempest.identity_v3.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
       - tempest.api.identity.admin.v3.test_domains.DefaultDomainTestJSON.test_default_domain_exists[id-17a5de24-e6a0-4e4a-a9ee-d85b6e5612b5,smoke]
index 90aaf4e..f4ebae2 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.image:
       - tempest_logs/functest.tempest.image.functest.log
       - tempest_logs/functest.tempest.image.log
       - tempest_logs/functest.tempest.image.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_register_upload_get_image_file[id-139b765e-7f3d-4b3d-8b37-3ca3876ee318,smoke]
       - tempest.api.image.v2.test_versions.VersionsTest.test_list_versions[id-659ea30a-a17c-4317-832c-0f68ed23c31d,smoke]
index a251c54..a0171e5 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.ipv6_api:
       - tempest_logs/functest.tempest.ipv6_api.functest.log
       - tempest_logs/functest.tempest.ipv6_api.log
       - tempest_logs/functest.tempest.ipv6_api.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_network[id-d4f9024d-1e28-4fc1-a6b1-25dbc6fa11e2,smoke]
       - tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_port[id-48037ff2-e889-4c3b-b86a-8e3f34d2d060,smoke]
index 9a82ff3..db56dc1 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.ipv6_scenario:
       - tempest_logs/functest.tempest.ipv6_scenario.functest.log
       - tempest_logs/functest.tempest.ipv6_scenario.log
       - tempest_logs/functest.tempest.ipv6_scenario.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.scenario.test_network_v6.TestGettingAddress.test_dhcp6_stateless_from_os[compute,id-d7e1f858-187c-45a6-89c9-bdafde619a9f,network,slow]
       - tempest.scenario.test_network_v6.TestGettingAddress.test_dualnet_dhcp6_stateless_from_os[compute,id-76f26acd-9688-42b4-bc3e-cd134c4cb09e,network,slow]
index d78d874..6ccc307 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.multi_node_scheduling:
       - tempest_logs/functest.tempest.multi_node_scheduling.functest.log
       - tempest_logs/functest.tempest.multi_node_scheduling.log
       - tempest_logs/functest.tempest.multi_node_scheduling.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.scenario.test_server_multinode.TestServerMultinode.test_schedule_to_all_nodes[compute,id-9cecbe35-b9d4-48da-a37e-7ce70aa43d30,network,smoke]
       - tempest.api.compute.servers.test_server_group.ServerGroupTestJSON.test_create_delete_multiple_server_groups_with_same_name_policy[id-154dc5a4-a2fe-44b5-b99e-f15806a4a113]
index 0c4feec..3fdf6a9 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.network_api:
       - tempest_logs/functest.tempest.network_api.functest.log
       - tempest_logs/functest.tempest.network_api.log
       - tempest_logs/functest.tempest.network_api.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.network.test_extensions.ExtensionsTestJSON.test_list_show_extensions[id-ef28c7e6-e646-4979-9d67-deb207bc5564,smoke]
       - tempest.api.network.test_floating_ips.FloatingIPTestJSON.test_create_floating_ip_specifying_a_fixed_ip_address[id-36de4bd0-f09c-43e3-a8e1-1decc1ffd3a5,smoke]
index 4622641..01104ac 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.network_scenario:
       - tempest_logs/functest.tempest.network_scenario.functest.log
       - tempest_logs/functest.tempest.network_scenario.log
       - tempest_logs/functest.tempest.network_scenario.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_hotplug_nic[compute,id-c5adff73-e961-41f1-b4a9-343614f18cfa,network]
       - tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_network_basic_ops[compute,id-f323b3ba-82f8-4db7-8ea6-6a895869ec49,network,smoke]
index b2eb9ac..ac0d0ce 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.network_security:
       - tempest_logs/functest.tempest.network_security.functest.log
       - tempest_logs/functest.tempest.network_security.log
       - tempest_logs/functest.tempest.network_security.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_port_security_macspoofing_port[compute,id-7c0bb1a2-d053-49a4-98f9-ca1a1d849f63,network,slow]
       - tempest.scenario.test_security_groups_basic_ops.TestSecurityGroupsBasicOps.test_cross_tenant_traffic[compute,id-e79f879e-debb-440c-a7e4-efeda05b6848,network]
index cb2d597..84c5c9f 100644 (file)
@@ -19,7 +19,8 @@ functest.tempest.osinterop:
       - tempest_logs/functest.tempest.osinterop.functest.log
       - tempest_logs/functest.tempest.osinterop.log
       - tempest_logs/functest.tempest.osinterop.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code[id-c9463db8-b44d-4f52-b6c0-8dbda99f26ce]
       - tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp[id-3d3852eb-3009-49ec-97ac-5ce83b73010a]
index 31725ad..73853ca 100644 (file)
@@ -16,7 +16,8 @@ functest.tempest.neutron_trunk_ports:
       - tempest_logs/functest.tempest.neutron_trunk_ports.functest.log
       - tempest_logs/functest.tempest.neutron_trunk_ports.log
       - tempest_logs/functest.tempest.neutron_trunk_ports.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - neutron_tempest_plugin.api.test_trunk.TrunkTestJSON.test_add_subport
       - neutron_tempest_plugin.api.test_trunk.TrunkTestJSON.test_create_show_delete_trunk
index 707ed36..f9fa61d 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.vm_lifecycle:
       - tempest_logs/functest.tempest.vm_lifecycle.functest.log
       - tempest_logs/functest.tempest.vm_lifecycle.log
       - tempest_logs/functest.tempest.vm_lifecycle.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.scenario.test_minimum_basic.TestMinimumBasicScenario.test_minimum_basic_scenario[compute,id-bdbb5441-9204-419d-a225-b4fdbfb1a1a8,image,network,volume]
       - tempest.scenario.test_network_advanced_server_ops.TestNetworkAdvancedServerOps.test_server_connectivity_cold_migration[compute,id-a4858f6c-401e-4155-9a49-d5cd053d1a2f,network,slow]
index a1c658f..5c3d15d 100644 (file)
@@ -18,7 +18,8 @@ functest.tempest.volume:
       - tempest_logs/functest.tempest.volume.functest.log
       - tempest_logs/functest.tempest.volume.log
       - tempest_logs/functest.tempest.volume.html
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.volume.test_volumes_actions.VolumesActionsTest.test_attach_detach_volume_to_instance[compute,id-fff42874-7db5-4487-a8e1-ddda5fb5288d,smoke]
       - tempest.scenario.test_volume_boot_pattern.TestVolumeBootPattern.test_volume_boot_pattern[compute,id-557cd2c2-4eb8-4dce-98be-f86765ff311b,image,volume]
index 7c75f0a..33543ba 100644 (file)
@@ -13,5 +13,6 @@ functest.vnf.vepc:
       - functest.log
     dest_archive_files:
       - vnf_logs/functest.vnf.vepc.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index cc9b2a8..3cd3538 100644 (file)
@@ -13,5 +13,6 @@ functest.vnf.vims:
       - functest.log
     dest_archive_files:
       - vnf_logs/functest.vnf.vims.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 43a6e2b..5ca2649 100644 (file)
@@ -11,5 +11,6 @@ functest.vping.ssh:
       - functest.log
     dest_archive_files:
       - vping_logs/functest.vping.ssh.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 1943e92..07e0a2f 100644 (file)
@@ -11,5 +11,6 @@ functest.vping.userdata:
       - functest.log
     dest_archive_files:
       - vping_logs/functest.vping.userdata.log
-    check_results_file: 'functest_results.txt'
+    check_results_files:
+      - 'functest_results.txt'
     sub_testcase_list:
index 4a9d0eb..d544b6c 100644 (file)
@@ -10,5 +10,6 @@ onap-vtp.validate.csar:
       - onap-vtp.validate.csar.out
     dest_archive_files:
       - onap-vtp_logs/onap-vtp.validate.csar.out
-    check_results_file: onap-vtp_logs/onap-vtp.validate.csar.out
+    check_results_files:
+      - onap-vtp_logs/onap-vtp.validate.csar.out
     sub_testcase_list:
index ca99e10..e03949d 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.cinder_api:
     dest_archive_files:
       - ha_logs/yardstick.ha.cinder_api.log
       - ha_logs/yardstick.ha.cinder_api.out
-    check_results_file: ha_logs/yardstick.ha.cinder_api.out
+    check_results_files:
+      - ha_logs/yardstick.ha.cinder_api.out
     sub_testcase_list:
index fba59f8..4ede1b3 100644 (file)
@@ -12,5 +12,6 @@ yardstick.ha.controller_restart:
     dest_archive_files:
       - ha_logs/yardstick.ha.controller_restart.log
       - ha_logs/yardstick.ha.controller_restart.out
-    check_results_file: ha_logs/yardstick.ha.controller_restart.out
+    check_results_files:
+      - ha_logs/yardstick.ha.controller_restart.out
     sub_testcase_list:
index f991df8..897a843 100644 (file)
@@ -17,5 +17,6 @@ yardstick.ha.cpu_load:
     dest_archive_files:
       - ha_logs/yardstick.ha.cpu_load.log
       - ha_logs/yardstick.ha.cpu_load.out
-    check_results_file: ha_logs/yardstick.ha.cpu_load.out
+    check_results_files:
+      - ha_logs/yardstick.ha.cpu_load.out
     sub_testcase_list:
index a653f39..c308d83 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.database:
     dest_archive_files:
       - ha_logs/yardstick.ha.database.log
       - ha_logs/yardstick.ha.database.out
-    check_results_file: ha_logs/yardstick.ha.database.out
+    check_results_files:
+      - ha_logs/yardstick.ha.database.out
     sub_testcase_list:
index 6311a7b..4fd1aed 100644 (file)
@@ -16,5 +16,6 @@ yardstick.ha.disk_load:
     dest_archive_files:
       - ha_logs/yardstick.ha.disk_load.log
       - ha_logs/yardstick.ha.disk_load.out
-    check_results_file: ha_logs/yardstick.ha.disk_load.out
+    check_results_files:
+      - ha_logs/yardstick.ha.disk_load.out
     sub_testcase_list:
index ee900cf..3ba48a6 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.glance_api:
     dest_archive_files:
       - ha_logs/yardstick.ha.glance_api.log
       - ha_logs/yardstick.ha.glance_api.out
-    check_results_file: ha_logs/yardstick.ha.glance_api.out
+    check_results_files:
+      - ha_logs/yardstick.ha.glance_api.out
     sub_testcase_list:
index 6fc1df9..d579932 100644 (file)
@@ -17,5 +17,6 @@ yardstick.ha.haproxy:
     dest_archive_files:
       - ha_logs/yardstick.ha.haproxy.log
       - ha_logs/yardstick.ha.haproxy.out
-    check_results_file: ha_logs/yardstick.ha.haproxy.out
+    check_results_files:
+      - ha_logs/yardstick.ha.haproxy.out
     sub_testcase_list:
index 101b255..a40da4a 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.keystone:
     dest_archive_files:
       - ha_logs/yardstick.ha.keystone.log
       - ha_logs/yardstick.ha.keystone.out
-    check_results_file: ha_logs/yardstick.ha.keystone.out
+    check_results_files:
+      - ha_logs/yardstick.ha.keystone.out
     sub_testcase_list:
index cf8453e..e827038 100644 (file)
@@ -28,5 +28,6 @@ yardstick.ha.neutron_l3_agent:
     dest_archive_files:
       - ha_logs/yardstick.ha.neutron_l3_agent.log
       - ha_logs/yardstick.ha.neutron_l3_agent.out
-    check_results_file: ha_logs/yardstick.ha.neutron_l3_agent.out
+    check_results_files:
+      - ha_logs/yardstick.ha.neutron_l3_agent.out
     sub_testcase_list:
index 9d741c2..6d50beb 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.neutron_server:
     dest_archive_files:
       - ha_logs/yardstick.ha.neutron_server.log
       - ha_logs/yardstick.ha.neutron_server.out
-    check_results_file: ha_logs/yardstick.ha.neutron_server.out
+    check_results_files:
+      - ha_logs/yardstick.ha.neutron_server.out
     sub_testcase_list:
index b15f2db..da9c199 100644 (file)
@@ -14,5 +14,6 @@ yardstick.ha.nova_api:
     dest_archive_files:
       - ha_logs/yardstick.ha.nova_api.log
       - ha_logs/yardstick.ha.nova_api.out
-    check_results_file: ha_logs/yardstick.ha.nova_api.out
+    check_results_files:
+      - ha_logs/yardstick.ha.nova_api.out
     sub_testcase_list:
index 027cb35..28c66f8 100644 (file)
@@ -12,5 +12,6 @@ yardstick.ha.rabbitmq:
     dest_archive_files:
       - ha_logs/yardstick.ha.rabbitmq.log
       - ha_logs/yardstick.ha.rabbitmq.out
-    check_results_file: ha_logs/yardstick.ha.rabbitmq.out
+    check_results_files:
+      - ha_logs/yardstick.ha.rabbitmq.out
     sub_testcase_list: