summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStamatis Katsaounis <mokats@intracom-telecom.com>2018-09-07 09:44:30 +0300
committerStamatis Katsaounis <mokats@intracom-telecom.com>2018-10-02 12:45:02 +0300
commit490a2fde01b667e4a2a9133ab71cf026f1b9ba0e (patch)
treec1322d4bdd02fffd2a9c14515d01f56188b68d11
parent8e60d220cbe67c9274b32dfe8d73e1c16351a80f (diff)
Fix run_tempest testcase
JIRA: SDNVPN-221 This patch makes run_tempest testcase functional again. Due to changes to functest codebase this tescase was failing due to an exception when trying to get verifier id, because no verifier is created from functest, as it used to happen before. Change-Id: Ia31e913b81672215f607055765cac368b8ad5412 Signed-off-by: Stamatis Katsaounis <mokats@intracom-telecom.com> (cherry picked from commit b36f480f90b9c4a930d584e72534d18bb306d6b4)
-rw-r--r--sdnvpn/test/functest/config.yaml7
-rw-r--r--sdnvpn/test/functest/run_tempest.py126
2 files changed, 36 insertions, 97 deletions
diff --git a/sdnvpn/test/functest/config.yaml b/sdnvpn/test/functest/config.yaml
index d5dd337..116d941 100644
--- a/sdnvpn/test/functest/config.yaml
+++ b/sdnvpn/test/functest/config.yaml
@@ -6,6 +6,13 @@ testcases:
enabled: true
description: Neutron BGPVPN tests in tempest
image_name: bgpvpn-tempest-image
+ functest_conf:
+ case_name: bgpvpn-tempest-tests
+ run:
+ args:
+ mode: '^networking_bgpvpn_tempest\.'
+ option:
+ - '--concurrency=4'
sdnvpn.test.functest.testcase_1:
enabled: true
diff --git a/sdnvpn/test/functest/run_tempest.py b/sdnvpn/test/functest/run_tempest.py
index 15d4eda..f56b18f 100644
--- a/sdnvpn/test/functest/run_tempest.py
+++ b/sdnvpn/test/functest/run_tempest.py
@@ -8,120 +8,52 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
#
-import ConfigParser
import logging
import os
-import re
-import shutil
-import functest.opnfv_tests.openstack.tempest.conf_utils as tempest_utils
+from functest.opnfv_tests.openstack.tempest.tempest import TempestCommon
+from six.moves import configparser
from sdnvpn.lib import config as sdnvpn_config
-from sdnvpn.lib import openstack_utils as os_utils
logger = logging.getLogger('sdnvpn-tempest')
-COMMON_CONFIG = sdnvpn_config.CommonConfig()
TESTCASE_CONFIG = sdnvpn_config.TestcaseConfig(
'sdnvpn.test.functest.run_tempest')
-def main():
- verifier_id = tempest_utils.get_verifier_id()
- deployment_id = tempest_utils.get_verifier_deployment_id()
- src_tempest_dir = tempest_utils.get_verifier_deployment_dir(
- verifier_id, deployment_id)
-
- if not src_tempest_dir:
- logger.error("Rally deployment not found.")
- exit(-1)
-
- tempest_utils.configure_verifier(src_tempest_dir)
-
- src_tempest_conf = os.path.join(src_tempest_dir, 'tempest.conf')
- bgpvpn_tempest_conf = os.path.join(src_tempest_dir, 'bgpvpn_tempest.conf')
-
- if not os.path.isfile(src_tempest_conf):
- logger.error("tempest.conf not found in %s." % src_tempest_conf)
- exit(-1)
- shutil.copy(src_tempest_conf, bgpvpn_tempest_conf)
-
- glance_client = os_utils.get_glance_client()
- img_ref = os_utils.create_glance_image(glance_client,
- TESTCASE_CONFIG.image_name,
- COMMON_CONFIG.image_path,
- disk=COMMON_CONFIG.image_format,
- container="bare", public='public')
-
- nova_client = os_utils.get_nova_client()
- flav_ref = os_utils.get_flavor_id(nova_client,
- COMMON_CONFIG.default_flavor)
+class BgpvpnTempest(TempestCommon):
+ def configure(self, **kwargs):
+ super(BgpvpnTempest, self).configure(**kwargs)
+ rconfig = configparser.RawConfigParser()
+ rconfig.read(self.conf_file)
+ rconfig.set('service_available', 'bgpvpn', 'True')
+ logger.debug("Updating %s with bgpvpn=True"
+ % self.conf_file)
+ with open(self.conf_file, 'wb') as config_file:
+ rconfig.write(config_file)
+ self.backup_tempest_config(self.conf_file, self.res_dir)
- logger.info("Copying tempest.conf to %s." % bgpvpn_tempest_conf)
- config = ConfigParser.RawConfigParser()
- config.read(bgpvpn_tempest_conf)
- config.set('service_available', 'bgpvpn', 'True')
- logger.debug("Updating %s with bgpvpn=True" % bgpvpn_tempest_conf)
- config.set('compute', 'flavor_ref', flav_ref)
- logger.debug("Updating %s with flavor_id %s"
- % (bgpvpn_tempest_conf, flav_ref))
- config.set('compute', 'image_ref', img_ref)
- logger.debug("Updating %s with image_id %s"
- % (bgpvpn_tempest_conf, img_ref))
- with open(bgpvpn_tempest_conf, 'wb') as tempest_conf:
- config.write(tempest_conf)
- # TODO: Though --config-file parameter is set during the tempest run,
- # it looks for tempest.conf at /etc/tempest/ directory. so applying
- # the following workaround. Will remove it when the root cause is found.
- cmd = ("mkdir -p /etc/tempest;"
- "cp {0} /etc/tempest/tempest.conf".format(bgpvpn_tempest_conf))
- logger.info("Configuring default tempest conf file")
- os.popen(cmd)
-
- cmd_line = "tempest run -t --regex networking_bgpvpn_tempest " \
- "--config-file /etc/tempest/tempest.conf"
- logger.info("Executing: %s" % cmd_line)
- cmd = os.popen(cmd_line)
- output = cmd.read()
- logger.debug(output)
-
- # Results parsing
- error_logs = ""
- duration = 0
- failed = 0
+def main():
try:
- # Look For errors
- error_logs = ""
- for match in re.findall('(.*?)[. ]*FAILED', output):
- error_logs += match
- # look for duration
- m = re.search('tests in(.*)sec', output)
- duration = m.group(1)
- # Look for num tests run
- m = re.search('Ran:(.*)tests', output)
- num_tests = m.group(1)
- # Look for tests failed
- m = re.search('- Failed:(.*)', output)
- failed = m.group(1)
- # Look for name of the tests
- testcases = re.findall("\{0\} (.*)", output)
-
- results = {"duration": duration,
- "num_tests": num_tests, "failed": failed,
- "tests": testcases}
- if int(failed) == 0:
- status = "PASS"
- else:
- status = "FAIL"
-
- return {"status": status, "details": results}
+ test_case = BgpvpnTempest(**TESTCASE_CONFIG.functest_conf)
except Exception as e:
- logger.error("Problem when parsing the results: %s", e)
- finally:
- os_utils.delete_glance_image(glance_client, img_ref)
- logger.debug("Deleted image %s" % img_ref)
+ logger.error("Initialization of bgpvpn tempest failed: %s" % e)
+ status = 'FAIL'
+ else:
+ test_case.check_requirements()
+ try:
+ test_case.run(**TESTCASE_CONFIG.functest_conf['run']['args'])
+ except KeyError:
+ test_case.run()
+ status = 'PASS' if (test_case.is_successful() == os.EX_OK) else 'FAIL'
+ test_case.clean()
+
+ return {'status': status,
+ 'details': 'Tempest testcases have been completed'}
+
if __name__ == '__main__':
main()