From 221fd4cfd7f86e110b3536066ede2910191dfc1e Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Wed, 2 Aug 2017 11:34:06 +0200 Subject: Install run_sfc_tests.py in $PATH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It eases how Functest runs it (see testcases.yaml [1]). The former run_tests.py is renamed to avoid duplicated binaries (see [2] and [3]). [1] https://git.opnfv.org/functest/tree/functest/ci/testcases.yaml [2] https://git.opnfv.org/sdnvpn/tree/sdnvpn/test/functest/run_tests.py [3] https://git.opnfv.org/promise/tree/promise/test/functest/run_tests.py Change-Id: I75aaf950f7b072c142fa9894cef7ef7f057adac3 Signed-off-by: Cédric Ollivier --- sfc/tests/functest/run_sfc_tests.py | 158 ++++++++++++++++++++++++++++++++++++ sfc/tests/functest/run_tests.py | 158 ------------------------------------ 2 files changed, 158 insertions(+), 158 deletions(-) create mode 100644 sfc/tests/functest/run_sfc_tests.py delete mode 100644 sfc/tests/functest/run_tests.py (limited to 'sfc/tests/functest') diff --git a/sfc/tests/functest/run_sfc_tests.py b/sfc/tests/functest/run_sfc_tests.py new file mode 100644 index 00000000..c569165b --- /dev/null +++ b/sfc/tests/functest/run_sfc_tests.py @@ -0,0 +1,158 @@ +#!/bin/python +# +# Copyright (c) 2015 All rights reserved +# This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# + +import importlib +import os +import time +import sys +import yaml + +from functest.core import testcase +from functest.utils import openstack_utils as os_utils +from opnfv.utils import ovs_logger as ovs_log +from opnfv.deployment.factory import Factory as DeploymentFactory +from sfc.lib import cleanup as sfc_cleanup +from sfc.lib import config as sfc_config +from sfc.lib import utils as sfc_utils + +from collections import OrderedDict +import logging + +logger = logging.getLogger(__name__) +COMMON_CONFIG = sfc_config.CommonConfig() + + +class SfcFunctest(testcase.OSGCTestCase): + + def __fetch_tackerc_file(self, controller_node): + rc_file = os.path.join(COMMON_CONFIG.sfc_test_dir, 'tackerc') + if not os.path.exists(rc_file): + logger.info("tackerc file not found, fetching it from controller") + controller_node.get_file("/root/tackerc", rc_file) + else: + logger.info("found tackerc file") + return rc_file + + def __disable_heat_resource_finder_cache(self, nodes): + controllers = [node for node in nodes if node.is_controller()] + remote_heat_conf = '/etc/heat/heat.conf' + local_heat_conf = '/tmp/heat.conf' + for controller in controllers: + logger.info("Fetch {0} from controller {1}" + .format(remote_heat_conf, controller.ip)) + controller.get_file(remote_heat_conf, local_heat_conf) + with open(local_heat_conf, 'a') as cfg: + cfg.write('\n[resource_finder_cache]\n') + cfg.write('caching=False\n') + logger.info("Replace {0} with {1} in controller {2}" + .format(remote_heat_conf, + local_heat_conf, + controller.ip)) + controller.run_cmd('rm -f {0}'.format(remote_heat_conf)) + controller.put_file(local_heat_conf, remote_heat_conf) + logger.info("Restart heat-engine in {0}".format(controller.ip)) + controller.run_cmd('service heat-engine restart') + os.remove(local_heat_conf) + logger.info("Waiting for heat-engine to restart in controllers") + time.sleep(10) + + def run(self): + + deploymentHandler = DeploymentFactory.get_handler( + COMMON_CONFIG.installer_type, + COMMON_CONFIG.installer_ip, + COMMON_CONFIG.installer_user, + installer_pwd=COMMON_CONFIG.installer_password) + + cluster = COMMON_CONFIG.installer_cluster + nodes = (deploymentHandler.get_nodes({'cluster': cluster}) + if cluster is not None + else deploymentHandler.get_nodes()) + + a_controller = [node for node in nodes + if node.is_controller()][0] + + self.__disable_heat_resource_finder_cache(nodes) + + rc_file = self.__fetch_tackerc_file(a_controller) + os_utils.source_credentials(rc_file) + + logger.info("Updating env with {0}".format(rc_file)) + logger.info("OS credentials:") + for var, value in os.environ.items(): + if var.startswith("OS_"): + logger.info("\t{0}={1}".format(var, value)) + + odl_ip, odl_port = sfc_utils.get_odl_ip_port(nodes) + + ovs_logger = ovs_log.OVSLogger( + os.path.join(COMMON_CONFIG.sfc_test_dir, 'ovs-logs'), + COMMON_CONFIG.functest_results_dir) + + config_file = os.path.join(COMMON_CONFIG.config_file) + with open(config_file) as f: + config_yaml = yaml.safe_load(f) + + testcases = config_yaml.get("testcases") + testcases_ordered = OrderedDict(sorted(testcases.items(), + key=lambda x: x[1]['order'])) + overall_status = "NOT TESTED" + self.start_time = time.time() + for tc, test_cfg in testcases_ordered.items(): + if test_cfg['enabled']: + test_name = tc + test_descr = test_cfg['description'] + title = ("Running '%s - %s'" % + (test_name, test_descr)) + logger.info(title) + logger.info("%s\n" % ("=" * len(title))) + t = importlib.import_module( + "sfc.tests.functest.{0}".format(test_name), + package=None) + start_time = time.time() + try: + result = t.main() + except Exception as e: + logger.error("Exception when executing: %s" % test_name) + logger.error(e) + result = {'status': 'FAILED'} + end_time = time.time() + duration = end_time - start_time + logger.info("Results of test case '%s - %s':\n%s\n" % + (test_name, test_descr, result)) + if result['status'] == 'PASS': + status = 'PASS' + self.details.update({test_name: "worked"}) + if overall_status != "FAIL": + overall_status = "PASS" + else: + status = 'FAIL' + overall_status = "FAIL" + self.details.update({test_name: "execution error."}) + ovs_logger.create_artifact_archive() + + dic = {"duration": duration, "status": status} + self.details.update({test_name: dic}) + sfc_cleanup.cleanup(odl_ip=odl_ip, odl_port=odl_port) + + self.stop_time = time.time() + + if overall_status == "PASS": + self.result = 100 + return testcase.TestCase.EX_OK + + return testcase.TestCase.EX_RUN_ERROR + + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s' + '- %(levelname)s - %(message)s') + SFC = SfcFunctest() + sys.exit(SFC.run()) diff --git a/sfc/tests/functest/run_tests.py b/sfc/tests/functest/run_tests.py deleted file mode 100644 index c569165b..00000000 --- a/sfc/tests/functest/run_tests.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/bin/python -# -# Copyright (c) 2015 All rights reserved -# This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# - -import importlib -import os -import time -import sys -import yaml - -from functest.core import testcase -from functest.utils import openstack_utils as os_utils -from opnfv.utils import ovs_logger as ovs_log -from opnfv.deployment.factory import Factory as DeploymentFactory -from sfc.lib import cleanup as sfc_cleanup -from sfc.lib import config as sfc_config -from sfc.lib import utils as sfc_utils - -from collections import OrderedDict -import logging - -logger = logging.getLogger(__name__) -COMMON_CONFIG = sfc_config.CommonConfig() - - -class SfcFunctest(testcase.OSGCTestCase): - - def __fetch_tackerc_file(self, controller_node): - rc_file = os.path.join(COMMON_CONFIG.sfc_test_dir, 'tackerc') - if not os.path.exists(rc_file): - logger.info("tackerc file not found, fetching it from controller") - controller_node.get_file("/root/tackerc", rc_file) - else: - logger.info("found tackerc file") - return rc_file - - def __disable_heat_resource_finder_cache(self, nodes): - controllers = [node for node in nodes if node.is_controller()] - remote_heat_conf = '/etc/heat/heat.conf' - local_heat_conf = '/tmp/heat.conf' - for controller in controllers: - logger.info("Fetch {0} from controller {1}" - .format(remote_heat_conf, controller.ip)) - controller.get_file(remote_heat_conf, local_heat_conf) - with open(local_heat_conf, 'a') as cfg: - cfg.write('\n[resource_finder_cache]\n') - cfg.write('caching=False\n') - logger.info("Replace {0} with {1} in controller {2}" - .format(remote_heat_conf, - local_heat_conf, - controller.ip)) - controller.run_cmd('rm -f {0}'.format(remote_heat_conf)) - controller.put_file(local_heat_conf, remote_heat_conf) - logger.info("Restart heat-engine in {0}".format(controller.ip)) - controller.run_cmd('service heat-engine restart') - os.remove(local_heat_conf) - logger.info("Waiting for heat-engine to restart in controllers") - time.sleep(10) - - def run(self): - - deploymentHandler = DeploymentFactory.get_handler( - COMMON_CONFIG.installer_type, - COMMON_CONFIG.installer_ip, - COMMON_CONFIG.installer_user, - installer_pwd=COMMON_CONFIG.installer_password) - - cluster = COMMON_CONFIG.installer_cluster - nodes = (deploymentHandler.get_nodes({'cluster': cluster}) - if cluster is not None - else deploymentHandler.get_nodes()) - - a_controller = [node for node in nodes - if node.is_controller()][0] - - self.__disable_heat_resource_finder_cache(nodes) - - rc_file = self.__fetch_tackerc_file(a_controller) - os_utils.source_credentials(rc_file) - - logger.info("Updating env with {0}".format(rc_file)) - logger.info("OS credentials:") - for var, value in os.environ.items(): - if var.startswith("OS_"): - logger.info("\t{0}={1}".format(var, value)) - - odl_ip, odl_port = sfc_utils.get_odl_ip_port(nodes) - - ovs_logger = ovs_log.OVSLogger( - os.path.join(COMMON_CONFIG.sfc_test_dir, 'ovs-logs'), - COMMON_CONFIG.functest_results_dir) - - config_file = os.path.join(COMMON_CONFIG.config_file) - with open(config_file) as f: - config_yaml = yaml.safe_load(f) - - testcases = config_yaml.get("testcases") - testcases_ordered = OrderedDict(sorted(testcases.items(), - key=lambda x: x[1]['order'])) - overall_status = "NOT TESTED" - self.start_time = time.time() - for tc, test_cfg in testcases_ordered.items(): - if test_cfg['enabled']: - test_name = tc - test_descr = test_cfg['description'] - title = ("Running '%s - %s'" % - (test_name, test_descr)) - logger.info(title) - logger.info("%s\n" % ("=" * len(title))) - t = importlib.import_module( - "sfc.tests.functest.{0}".format(test_name), - package=None) - start_time = time.time() - try: - result = t.main() - except Exception as e: - logger.error("Exception when executing: %s" % test_name) - logger.error(e) - result = {'status': 'FAILED'} - end_time = time.time() - duration = end_time - start_time - logger.info("Results of test case '%s - %s':\n%s\n" % - (test_name, test_descr, result)) - if result['status'] == 'PASS': - status = 'PASS' - self.details.update({test_name: "worked"}) - if overall_status != "FAIL": - overall_status = "PASS" - else: - status = 'FAIL' - overall_status = "FAIL" - self.details.update({test_name: "execution error."}) - ovs_logger.create_artifact_archive() - - dic = {"duration": duration, "status": status} - self.details.update({test_name: dic}) - sfc_cleanup.cleanup(odl_ip=odl_ip, odl_port=odl_port) - - self.stop_time = time.time() - - if overall_status == "PASS": - self.result = 100 - return testcase.TestCase.EX_OK - - return testcase.TestCase.EX_RUN_ERROR - - -if __name__ == '__main__': - logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s' - '- %(levelname)s - %(message)s') - SFC = SfcFunctest() - sys.exit(SFC.run()) -- cgit 1.2.3-korg