aboutsummaryrefslogtreecommitdiffstats
path: root/sfc/tests/functest/run_sfc_tests.py
diff options
context:
space:
mode:
authorCédric Ollivier <cedric.ollivier@orange.com>2017-08-02 11:34:06 +0200
committerCédric Ollivier <cedric.ollivier@orange.com>2017-08-02 11:39:51 +0200
commit221fd4cfd7f86e110b3536066ede2910191dfc1e (patch)
treec0fb82aa1bbe61f4f0ef617b125d97454e4df1e8 /sfc/tests/functest/run_sfc_tests.py
parentdbc4c0600620d62cc20a80c3402fe701b5091d72 (diff)
Install run_sfc_tests.py in $PATH
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 <cedric.ollivier@orange.com>
Diffstat (limited to 'sfc/tests/functest/run_sfc_tests.py')
-rw-r--r--sfc/tests/functest/run_sfc_tests.py158
1 files changed, 158 insertions, 0 deletions
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())