Archive all test case result files 05/57805/4
authorxudan <xudan16@huawei.com>
Thu, 24 May 2018 08:47:41 +0000 (04:47 -0400)
committerGeorg Kunz <georg.kunz@ericsson.com>
Sun, 27 May 2018 20:19:34 +0000 (20:19 +0000)
1. All detailed tempest test cases results are recorded with
   file tempest-report.html rather than tempest.log now.
2. Archive all results files include functest.log, yardstick.log ...
   for each test case. Otherwise, they will all be in one log file.
3. Support to set the source files and dest files need to be archived with
   the test case config files rather than hardcode with the source code.
4. Give the file which used to be parse the results (PASS/FAIL) with the
   test case config files rather than hardcode with the source code.

Change-Id: I30f435d91ab90cf20def47007f177fe98187484d
Signed-off-by: xudan <xudan16@huawei.com>
48 files changed:
.gitignore
dovetail/report.py
dovetail/run.py
dovetail/test_runner.py
dovetail/testcase.py
etc/conf/bottlenecks_config.yml
etc/conf/functest_config.yml
etc/conf/vnftest_config.yml
etc/conf/yardstick_config.yml
etc/testcase/ha.cinder_api.yml
etc/testcase/ha.controller_restart.yml
etc/testcase/ha.cpu_load.yml
etc/testcase/ha.database.yml
etc/testcase/ha.disk_load.yml
etc/testcase/ha.glance_api.yml
etc/testcase/ha.haproxy.yml
etc/testcase/ha.keystone.yml
etc/testcase/ha.neutron_l3_agent.yml
etc/testcase/ha.neutron_server.yml
etc/testcase/ha.nova_api.yml
etc/testcase/ha.rabbitmq.yml
etc/testcase/healthcheck.api_check.yml
etc/testcase/healthcheck.connection_check.yml
etc/testcase/healthcheck.snaps_health_check.yml
etc/testcase/onap.vnf_lifecycle.yml
etc/testcase/sdnvpn.router_association.yml
etc/testcase/sdnvpn.router_association_floating_ip.yml
etc/testcase/sdnvpn.subnet_connectivity.yml
etc/testcase/sdnvpn.tenant_separation.yml
etc/testcase/security.patrole.yml
etc/testcase/snaps.smoke.yml
etc/testcase/stress.ping.yml
etc/testcase/tempest.bgpvpn.yml
etc/testcase/tempest.compute.yml
etc/testcase/tempest.identity_v2.yml
etc/testcase/tempest.identity_v3.yml
etc/testcase/tempest.image.yml
etc/testcase/tempest.ipv6.yml
etc/testcase/tempest.multi_node_scheduling.yml
etc/testcase/tempest.network.yml
etc/testcase/tempest.network_security.yml
etc/testcase/tempest.osinterop.yml
etc/testcase/tempest.trunk-ports.yml
etc/testcase/tempest.vm_lifecycle.yml
etc/testcase/tempest.volume.yml
etc/testcase/vnf.vims.yml
etc/testcase/vping.ssh.yml
etc/testcase/vping.userdata.yml

index 46ccc9d..478b813 100644 (file)
@@ -23,6 +23,7 @@ pip-log.txt
 .coverage
 .tox
 .cache
+.pytest_cache
 nosetests.xml
 unittest_results.log
 
@@ -36,4 +37,4 @@ docs_output/
 docs/_build
 pre_config/
 docs/index.rst
-docs/requirements.txt
\ No newline at end of file
+docs/requirements.txt
index 20475a3..9808c7a 100644 (file)
@@ -35,8 +35,31 @@ class Report(object):
     def create_log(cls):
         cls.logger = dt_logger.Logger(__name__ + '.Report').getLogger()
 
+    @classmethod
+    def check_tc_result(cls, 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:
+            cls.logger.error("Failed to get 'check_results_file' from config "
+                             "file of test case {}".format(testcase.name()))
+            cls.check_result(testcase)
+            return None
+        result_file = os.path.join(result_path, check_results_file)
+        if os.path.isfile(result_file):
+            cls.logger.info(
+                "Results have been stored with file {}.".format(result_file))
+            result = cls.get_result(testcase, result_file)
+            cls.check_result(testcase, result)
+            return result
+        else:
+            cls.logger.error(
+                "Failed to store results with file {}.".format(result_file))
+            cls.check_result(testcase)
+            return None
+
     @staticmethod
-    def check_result(testcase, db_result):
+    def check_result(testcase, db_result=None):
         checker = CheckerFactory.create(testcase.validate_type())
         if checker is not None:
             checker.check(testcase, db_result)
@@ -163,7 +186,7 @@ class Report(object):
         os.chdir(cwd)
 
     @classmethod
-    def get_result(cls, testcase):
+    def get_result(cls, testcase, check_results_file):
         validate_testcase = testcase.validate_testcase()
         type = testcase.validate_type()
         crawler = CrawlerFactory.create(type)
@@ -174,7 +197,7 @@ class Report(object):
         # if validate_testcase in cls.results[type]:
         #    return cls.results[type][validate_testcase]
 
-        result = crawler.crawl(testcase)
+        result = crawler.crawl(testcase, check_results_file)
 
         if result is not None:
             cls.results[type][validate_testcase] = result
@@ -216,10 +239,10 @@ class FunctestCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.FunctestCrawler').getLogger()
 
-    def crawl(self, testcase=None):
-        return self.crawl_from_file(testcase)
+    def crawl(self, testcase, file_path):
+        return self.crawl_from_file(testcase, file_path)
 
-    def crawl_from_file(self, testcase=None):
+    def crawl_from_file(self, testcase, file_path):
         dovetail_config = dt_cfg.dovetail_config
         criteria = 'FAIL'
         details = {}
@@ -228,9 +251,6 @@ class FunctestCrawler(Crawler):
         duration = 0
         testcase_name = testcase.validate_testcase()
         build_tag = '%s-%s' % (dovetail_config['build_tag'], testcase.name())
-        file_path = \
-            os.path.join(dovetail_config['result_dir'],
-                         dovetail_config[self.type]['result']['file_path'])
         if not os.path.exists(file_path):
             self.logger.error('Result file not found: {}'.format(file_path))
             return None
@@ -293,12 +313,10 @@ class YardstickCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.YardstickCrawler').getLogger()
 
-    def crawl(self, testcase=None):
-        return self.crawl_from_file(testcase)
+    def crawl(self, testcase, file_path):
+        return self.crawl_from_file(testcase, file_path)
 
-    def crawl_from_file(self, testcase=None):
-        file_path = os.path.join(dt_cfg.dovetail_config['result_dir'],
-                                 testcase.name() + '.out')
+    def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
             self.logger.error('Result file not found: {}'.format(file_path))
             return None
@@ -340,12 +358,10 @@ class BottlenecksCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.BottlenecksCrawler').getLogger()
 
-    def crawl(self, testcase=None):
-        return self.crawl_from_file(testcase)
+    def crawl(self, testcase, file_path):
+        return self.crawl_from_file(testcase, file_path)
 
-    def crawl_from_file(self, testcase=None):
-        file_path = os.path.join(dt_cfg.dovetail_config['result_dir'],
-                                 testcase.name() + '.out')
+    def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
             self.logger.error('Result file not found: {}'.format(file_path))
             return None
@@ -370,12 +386,10 @@ class ShellCrawler(Crawler):
     def __init__(self):
         self.type = 'shell'
 
-    def crawl(self, testcase=None):
-        return self.crawl_from_file(testcase)
+    def crawl(self, testcase, file_path):
+        return self.crawl_from_file(testcase, file_path)
 
-    def crawl_from_file(self, testcase=None):
-        file_path = os.path.join(dt_cfg.dovetail_config['result_dir'],
-                                 testcase.name()) + '.out'
+    def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
             return None
         try:
@@ -399,13 +413,10 @@ class VnftestCrawler(Crawler):
         cls.logger = \
             dt_logger.Logger(__name__ + '.VnftestCrawler').getLogger()
 
-    def crawl(self, testcase):
-        return self.crawl_from_file(testcase)
-
-    def crawl_from_file(self, testcase):
+    def crawl(self, testcase, file_path):
+        return self.crawl_from_file(testcase, file_path)
 
-        file_path = os.path.join(dt_cfg.dovetail_config['result_dir'],
-                                 testcase.name() + '.out')
+    def crawl_from_file(self, testcase, file_path):
         if not os.path.exists(file_path):
             self.logger.error('Result file not found: {}'.format(file_path))
             return None
index 512565c..19d0acb 100755 (executable)
@@ -59,7 +59,7 @@ def run_test(testcase_list, logger):
         if run_testcase:
             testcase.run()
 
-        stop_on_fail = check_tc_result(testcase, logger)
+        stop_on_fail = Report.check_tc_result(testcase)
         try:
             if (not stop_on_fail or stop_on_fail['criteria'] == "FAIL") \
                 and dt_cfg.dovetail_config['stop']:
@@ -72,28 +72,6 @@ def run_test(testcase_list, logger):
     return duration
 
 
-def check_tc_result(testcase, logger):
-    result_dir = dt_cfg.dovetail_config['result_dir']
-    validate_type = testcase.validate_type()
-    functest_result = dt_cfg.dovetail_config['functest']['result']['file_path']
-    if validate_type.lower() in ['yardstick', 'bottlenecks', 'vnftest']:
-        result_file = os.path.join(result_dir, testcase.name() + '.out')
-    elif validate_type.lower() == 'functest':
-        result_file = os.path.join(result_dir, functest_result)
-    else:
-        logger.error("Don't support {} now.".format(validate_type))
-        return
-    if os.path.isfile(result_file):
-        logger.info(
-            "Results have been stored with file {}.".format(result_file))
-    else:
-        logger.error(
-            "Failed to store results with file {}.".format(result_file))
-    result = Report.get_result(testcase)
-    Report.check_result(testcase, result)
-    return result
-
-
 def validate_input(input_dict, check_dict, logger):
     func_tag = input_dict['functest_tag']
     yard_tag = input_dict['yardstick_tag']
index aba457e..44eddab 100644 (file)
@@ -116,8 +116,29 @@ class DockerRunner(object):
         if not dt_cfg.dovetail_config['noclean']:
             Container.clean(container_id, self.type)
 
-    def save_logs(self):
-        pass
+    def archive_logs(self):
+        result_path = os.path.join(os.environ["DOVETAIL_HOME"], 'results')
+        src_files = dt_utils.get_value_from_dict(
+            'report.source_archive_files', self.testcase.testcase)
+        dest_files = dt_utils.get_value_from_dict(
+            'report.dest_archive_files', self.testcase.testcase)
+        if not src_files and not dest_files:
+            return True
+        if not (src_files and dest_files) or len(src_files) != len(dest_files):
+            self.logger.error("Can't find corresponding 'result_dest_files' "
+                              "for 'result_source_files' with testcase {}"
+                              .format(self.testcase.name()))
+            return False
+        res = True
+        for index in range(0, len(src_files)):
+            src_file_path = os.path.join(result_path, src_files[index])
+            dest_file_path = os.path.join(result_path, dest_files[index])
+            if os.path.isfile(src_file_path):
+                os.renames(src_file_path, dest_file_path)
+            else:
+                self.logger.error("Can't find file {}.".format(src_file_path))
+                res = False
+        return res
 
     @staticmethod
     def _render(task_template, **kwargs):
@@ -170,33 +191,6 @@ class FunctestRunner(DockerRunner):
         self.type = 'functest'
         super(FunctestRunner, self).__init__(testcase)
 
-    def save_logs(self):
-        validate_testcase = self.testcase.validate_testcase()
-        test_area = self.testcase.name().split(".")[1]
-        result_path = os.path.join(os.environ["DOVETAIL_HOME"], 'results')
-        dest_path = os.path.join(result_path, test_area + '_logs')
-        dest_file = os.path.join(dest_path, self.testcase.name() + '.log')
-        if validate_testcase == 'tempest_custom':
-            source_file = os.path.join(result_path, 'tempest', 'tempest.log')
-        elif validate_testcase == 'refstack_defcore':
-            source_file = os.path.join(result_path, 'refstack', 'tempest.log')
-        elif validate_testcase == 'bgpvpn':
-            source_file = os.path.join(result_path, 'bgpvpn.log')
-        elif validate_testcase == 'patrole':
-            source_file = os.path.join(result_path, 'patrole', 'tempest.log')
-        elif validate_testcase == 'neutron_trunk':
-            source_file = os.path.join(result_path,
-                                       'neutron_trunk',
-                                       'tempest.log')
-        else:
-            source_file = None
-        if source_file:
-            if os.path.isfile(source_file):
-                os.renames(source_file, dest_file)
-            else:
-                self.logger.error("Tempest log file for test case {} is not "
-                                  "found.".format(self.testcase.name()))
-
 
 class YardstickRunner(DockerRunner):
 
index 9680f19..272cf43 100644 (file)
@@ -159,7 +159,7 @@ class Testcase(object):
         runner = TestRunnerFactory.create(self)
         try:
             runner.run()
-            runner.save_logs()
+            runner.archive_logs()
         except AttributeError as e:
             self.logger.exception(
                 'Test case: {} Exception: {}'.format(self.name, e))
index 3004e91..76a57c3 100644 (file)
@@ -38,7 +38,6 @@ bottlenecks:
        openstack --insecure flavor delete yardstick-flavor)'
   result:
     dir: '/tmp'
-    file_path: 'bottlenecks.log'
   openrc: '/tmp/admin_rc.sh'
   extra_container:
     - 'Bottlenecks-Yardstick'
index 0251b73..93e822f 100644 (file)
@@ -16,5 +16,4 @@ functest:
     - 'echo test for postcondition in functest'
   result:
     dir: '/home/opnfv/functest/results'
-    file_path: 'functest_results.txt'
   openrc: '/home/opnfv/functest/conf/env_file'
index 25a84c7..82e068b 100644 (file)
@@ -19,7 +19,6 @@ vnftest:
   result:
     dir: '/home/onap/vnftest/results'
     log: '/tmp/vnftest'
-    file_path: 'vnftest.log'
     key_path: '/root/.ssh/id_rsa'
   openrc: '/etc/vnftest/openstack.creds'
   vnftest_conf:
index 7e7ab73..4b32193 100644 (file)
@@ -30,5 +30,4 @@ yardstick:
     - 'echo this is post_condition'
   result:
     dir: '/tmp/yardstick'
-    file_path: 'yardstick.log'
   openrc: '/etc/yardstick/openstack.creds'
index 9ba86df..207e91f 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.cinder_api:
     type: yardstick
     testcase: opnfv_yardstick_tc048
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.cinder_api.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.cinder_api.log
+      - ha_logs/dovetail.ha.cinder_api.out
+    check_results_file: ha_logs/dovetail.ha.cinder_api.out
     sub_testcase_list:
index 79cc093..d64b06b 100644 (file)
@@ -6,4 +6,11 @@ dovetail.ha.controller_restart:
     type: yardstick
     testcase: opnfv_yardstick_tc025
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.controller_restart.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.controller_restart.log
+      - ha_logs/dovetail.ha.controller_restart.out
+    check_results_file: ha_logs/dovetail.ha.controller_restart.out
     sub_testcase_list:
index b10fc98..c8b5768 100644 (file)
@@ -11,4 +11,11 @@ dovetail.ha.cpu_load:
     type: yardstick
     testcase: opnfv_yardstick_tc051
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.cpu_load.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.cpu_load.log
+      - ha_logs/dovetail.ha.cpu_load.out
+    check_results_file: ha_logs/dovetail.ha.cpu_load.out
     sub_testcase_list:
index adcac25..427ccb1 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.database:
     type: yardstick
     testcase: opnfv_yardstick_tc090
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.database.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.database.log
+      - ha_logs/dovetail.ha.database.out
+    check_results_file: ha_logs/dovetail.ha.database.out
     sub_testcase_list:
index d314546..628cb94 100644 (file)
@@ -10,4 +10,11 @@ dovetail.ha.disk_load:
     type: yardstick
     testcase: opnfv_yardstick_tc052
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.disk_load.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.disk_load.log
+      - ha_logs/dovetail.ha.disk_load.out
+    check_results_file: ha_logs/dovetail.ha.disk_load.out
     sub_testcase_list:
index 7e6a2bd..6a4a8fc 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.glance_api:
     type: yardstick
     testcase: opnfv_yardstick_tc047
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.glance_api.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.glance_api.log
+      - ha_logs/dovetail.ha.glance_api.out
+    check_results_file: ha_logs/dovetail.ha.glance_api.out
     sub_testcase_list:
index 85a64e2..3b1b6f4 100644 (file)
@@ -11,4 +11,11 @@ dovetail.ha.haproxy:
     type: yardstick
     testcase: opnfv_yardstick_tc053
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.haproxy.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.haproxy.log
+      - ha_logs/dovetail.ha.haproxy.out
+    check_results_file: ha_logs/dovetail.ha.haproxy.out
     sub_testcase_list:
index e5f97f2..c9de127 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.keystone:
     type: yardstick
     testcase: opnfv_yardstick_tc046
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.keystone.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.keystone.log
+      - ha_logs/dovetail.ha.keystone.out
+    check_results_file: ha_logs/dovetail.ha.keystone.out
     sub_testcase_list:
index 6238360..018dcda 100644 (file)
@@ -18,4 +18,11 @@ dovetail.ha.neutron_l3_agent:
     post_condition:
       - 'source /etc/yardstick/openstack.creds && openstack --insecure image delete cirros-ha-11'
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.neutron_l3_agent.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.neutron_l3_agent.log
+      - ha_logs/dovetail.ha.neutron_l3_agent.out
+    check_results_file: ha_logs/dovetail.ha.neutron_l3_agent.out
     sub_testcase_list:
index 7523b3b..98bfd7d 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.neutron_server:
     type: yardstick
     testcase: opnfv_yardstick_tc045
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.neutron_server.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.neutron_server.log
+      - ha_logs/dovetail.ha.neutron_server.out
+    check_results_file: ha_logs/dovetail.ha.neutron_server.out
     sub_testcase_list:
index 31f56a0..3de0d26 100644 (file)
@@ -8,4 +8,11 @@ dovetail.ha.nova_api:
     type: yardstick
     testcase: opnfv_yardstick_tc019
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.nova_api.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.nova_api.log
+      - ha_logs/dovetail.ha.nova_api.out
+    check_results_file: ha_logs/dovetail.ha.nova_api.out
     sub_testcase_list:
index f55eb7b..39611b4 100644 (file)
@@ -6,4 +6,11 @@ dovetail.ha.rabbitmq:
     type: yardstick
     testcase: opnfv_yardstick_tc056
   report:
+    source_archive_files:
+      - yardstick.log
+      - dovetail.ha.rabbitmq.out
+    dest_archive_files:
+      - ha_logs/dovetail.ha.rabbitmq.log
+      - ha_logs/dovetail.ha.rabbitmq.out
+    check_results_file: ha_logs/dovetail.ha.rabbitmq.out
     sub_testcase_list:
index 5a8b47b..ed1a350 100644 (file)
@@ -6,4 +6,9 @@ dovetail.healthcheck.api_check:
     type: functest
     testcase: api_check
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - healthcheck_logs/dovetail.healthcheck.api_check.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 195bf50..f644649 100644 (file)
@@ -6,4 +6,9 @@ dovetail.healthcheck.connection_check:
     type: functest
     testcase: connection_check
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - healthcheck_logs/dovetail.healthcheck.connection_check.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 87b4ec4..5d18344 100644 (file)
@@ -6,4 +6,9 @@ dovetail.healthcheck.snaps_health_check:
     type: functest
     testcase: snaps_health_check
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - healthcheck_logs/dovetail.healthcheck.snaps_health_check.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index f1e8a34..cc1789c 100644 (file)
@@ -6,4 +6,11 @@ dovetail.onap.vnf_lifecycle:
     type: vnftest
     testcase: onap_vnftest_tc001
   report:
-    sub_testcase_list:
\ No newline at end of file
+    source_archive_files:
+      - vnftest.log
+      - dovetail.onap.vnf_lifecycle.out
+    dest_archive_files:
+      - onap_logs/dovetail.onap.vnf_lifecycle.log
+      - onap_logs/dovetail.onap.vnf_lifecycle.out
+    check_results_file: onap_logs/dovetail.onap.vnf_lifecycle.out
+    sub_testcase_list:
index 2860d98..f52446f 100644 (file)
@@ -10,4 +10,11 @@ dovetail.sdnvpn.router_association:
       exist_src_file: sdnvpn_config_testcase4.yaml
       dest_path: /usr/lib/python2.7/site-packages/sdnvpn/test/functest/config.yaml
   report:
+    source_archive_files:
+      - functest.log
+      - bgpvpn.log
+    dest_archive_files:
+      - sdnvpn_logs/dovetail.sdnvpn.router_association.functest.log
+      - sdnvpn_logs/dovetail.sdnvpn.router_association.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index f105c86..bdcc38d 100644 (file)
@@ -10,4 +10,11 @@ dovetail.sdnvpn.router_association_floating_ip:
       exist_src_file: sdnvpn_config_testcase8.yaml
       dest_path: /usr/lib/python2.7/site-packages/sdnvpn/test/functest/config.yaml
   report:
+    source_archive_files:
+      - functest.log
+      - bgpvpn.log
+    dest_archive_files:
+      - sdnvpn_logs/dovetail.sdnvpn.router_association_floating_ip.functest.log
+      - sdnvpn_logs/dovetail.sdnvpn.router_association_floating_ip.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 226653c..dcecd78 100644 (file)
@@ -10,4 +10,11 @@ dovetail.sdnvpn.subnet_connectivity:
       exist_src_file: sdnvpn_config_testcase1.yaml
       dest_path: /usr/lib/python2.7/site-packages/sdnvpn/test/functest/config.yaml
   report:
+    source_archive_files:
+      - functest.log
+      - bgpvpn.log
+    dest_archive_files:
+      - sdnvpn_logs/dovetail.sdnvpn.subnet_connectivity.functest.log
+      - sdnvpn_logs/dovetail.sdnvpn.subnet_connectivity.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index b4f2711..bf0459c 100644 (file)
@@ -10,4 +10,11 @@ dovetail.sdnvpn.tenant_separation:
       exist_src_file: sdnvpn_config_testcase2.yaml
       dest_path: /usr/lib/python2.7/site-packages/sdnvpn/test/functest/config.yaml
   report:
+    source_archive_files:
+      - functest.log
+      - bgpvpn.log
+    dest_archive_files:
+      - sdnvpn_logs/dovetail.sdnvpn.tenant_separation.functest.log
+      - sdnvpn_logs/dovetail.sdnvpn.tenant_separation.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 354f2fe..97068f7 100644 (file)
@@ -6,4 +6,13 @@ dovetail.security.patrole:
     type: functest
     testcase: patrole
   report:
+    source_archive_files:
+      - functest.log
+      - patrole/tempest.log
+      - patrole/tempest-report.html
+    dest_archive_files:
+      - security_logs/dovetail.security.patrole.functest.log
+      - security_logs/dovetail.security.patrole.log
+      - security_logs/dovetail.security.patrole.html
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 3ebbfa2..f012a7c 100644 (file)
@@ -6,4 +6,9 @@ dovetail.snaps.smoke:
     type: functest
     testcase: snaps_smoke
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - snaps_logs/dovetail.snaps.smoke.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index e102654..4c8e2c5 100644 (file)
@@ -8,4 +8,11 @@ dovetail.stress.ping:
     type: bottlenecks
     testcase: posca_factor_ping
   report:
+    source_archive_files:
+      - bottlenecks.log
+      - dovetail.stress.ping.out
+    dest_archive_files:
+      - stress_logs/dovetail.stress.ping.log
+      - stress_logs/dovetail.stress.ping.out
+    check_results_file: stress_logs/dovetail.stress.ping.out
     sub_testcase_list:
index 0207262..0801a31 100644 (file)
@@ -13,4 +13,11 @@ dovetail.tempest.bgpvpn:
       exist_src_file: sdnvpn_config_tc000.yaml
       dest_path: /usr/lib/python2.7/site-packages/sdnvpn/test/functest/config.yaml
   report:
+    source_archive_files:
+      - functest.log
+      - bgpvpn.log
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.bgpvpn.functest.log
+      - tempest_logs/dovetail.tempest.bgpvpn.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 630a36c..4ce58d1 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.compute:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.compute.functest.log
+      - tempest_logs/dovetail.tempest.compute.log
+      - tempest_logs/dovetail.tempest.compute.html
+    check_results_file: '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 7d1ca7c..8a9e578 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.identity_v2:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.identity_v2.functest.log
+      - tempest_logs/dovetail.tempest.identity_v2.log
+      - tempest_logs/dovetail.tempest.identity_v2.html
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.identity.admin.v2.test_services.ServicesTestJSON.test_list_services[id-34ea6489-012d-4a86-9038-1287cadd5eca,smoke]
       - tempest.api.identity.admin.v2.test_users.UsersTestJSON.test_create_user[id-2d55a71e-da1d-4b43-9c03-d269fd93d905,smoke]
index 5cb387c..2ba4654 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.identity_v3:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.identity_v3.functest.log
+      - tempest_logs/dovetail.tempest.identity_v3.log
+      - tempest_logs/dovetail.tempest.identity_v3.html
+    check_results_file: '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 739647f..d2d6fdd 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.image:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.image.functest.log
+      - tempest_logs/dovetail.tempest.image.log
+      - tempest_logs/dovetail.tempest.image.html
+    check_results_file: '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 31ea3c8..99733e1 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.ipv6:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.ipv6.functest.log
+      - tempest_logs/dovetail.tempest.ipv6.log
+      - tempest_logs/dovetail.tempest.ipv6.html
+    check_results_file: '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 47eef0a..0c77bb7 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.multi_node_scheduling:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.multi_node_scheduling.functest.log
+      - tempest_logs/dovetail.tempest.multi_node_scheduling.log
+      - tempest_logs/dovetail.tempest.multi_node_scheduling.html
+    check_results_file: '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 40fb966..36cf547 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.network:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.network.functest.log
+      - tempest_logs/dovetail.tempest.network.log
+      - tempest_logs/dovetail.tempest.network.html
+    check_results_file: '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 197af7f..dbd3332 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.network_security:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.network_security.functest.log
+      - tempest_logs/dovetail.tempest.network_security.log
+      - tempest_logs/dovetail.tempest.network_security.html
+    check_results_file: '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 b91fe5f..005fe64 100644 (file)
@@ -11,10 +11,16 @@ dovetail.tempest.osinterop:
     pre_condition:
       - 'cp /home/opnfv/userconfig/pre_config/tempest_conf.yaml /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml'
       - 'cp /home/opnfv/userconfig/pre_config/testcases.yaml /usr/lib/python2.7/site-packages/xtesting/ci/testcases.yaml'
-    pre_copy:
-      src_file: osinterop.txt
-      dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/refstack_client/defcore.txt
   report:
+    source_archive_files:
+      - functest.log
+      - refstack/tempest.log
+      - refstack/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.osinterop.functest.log
+      - tempest_logs/dovetail.tempest.osinterop.log
+      - tempest_logs/dovetail.tempest.osinterop.html
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
       - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code
       - tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp
index ea07d65..00c4f84 100644 (file)
@@ -6,4 +6,13 @@ dovetail.tempest.neutron_trunk_ports:
     type: functest
     testcase: neutron_trunk
   report:
+    source_archive_files:
+      - functest.log
+      - neutron_trunk/tempest.log
+      - neutron_trunk/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.neutron_trunk_ports.functest.log
+      - tempest_logs/dovetail.tempest.neutron_trunk_ports.log
+      - tempest_logs/dovetail.tempest.neutron_trunk_ports.html
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index c35de6e..282c450 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.vm_lifecycle:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.vm_lifecycle.functest.log
+      - tempest_logs/dovetail.tempest.vm_lifecycle.log
+      - tempest_logs/dovetail.tempest.vm_lifecycle.html
+    check_results_file: '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 a8f9367..0f24b5c 100644 (file)
@@ -12,6 +12,15 @@ dovetail.tempest.volume:
       src_file: tempest_custom.txt
       dest_path: /usr/lib/python2.7/site-packages/functest/opnfv_tests/openstack/tempest/custom_tests/test_list.txt
   report:
+    source_archive_files:
+      - functest.log
+      - tempest/tempest.log
+      - tempest/tempest-report.html
+    dest_archive_files:
+      - tempest_logs/dovetail.tempest.volume.functest.log
+      - tempest_logs/dovetail.tempest.volume.log
+      - tempest_logs/dovetail.tempest.volume.html
+    check_results_file: '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]
       #
index 4a36fe0..8dc7ce4 100644 (file)
@@ -7,4 +7,9 @@ dovetail.vnf.vims:
     testcase: cloudify_ims
     image_name: opnfv/functest-vnf
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - vnf_logs/dovetail.vnf.vims.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index a46bcc8..a2a9603 100644 (file)
@@ -6,4 +6,9 @@ dovetail.vping.ssh:
     type: functest
     testcase: vping_ssh
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - vping_logs/dovetail.vping.ssh.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list:
index 9a6f4c5..0bf1f9a 100644 (file)
@@ -6,4 +6,9 @@ dovetail.vping.userdata:
     type: functest
     testcase: vping_userdata
   report:
+    source_archive_files:
+      - functest.log
+    dest_archive_files:
+      - vping_logs/dovetail.vping.userdata.log
+    check_results_file: 'functest_results.txt'
     sub_testcase_list: