From a59fea1046d167b4609c9b86836d178e799dc688 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Wed, 21 Dec 2016 15:42:54 +0800 Subject: Refactor test run related modules using new constants provider JIRA: FUNCTEST-673 Change-Id: Ia37fb5a08c8fbc4a8acb666565ea887f9ae48b83 Signed-off-by: SerenaFeng --- functest/ci/config_functest.yaml | 8 +- functest/ci/generate_report.py | 54 +++++++------- functest/ci/prepare_env.py | 123 +++++++++++++++---------------- functest/ci/run_tests.py | 37 +++++----- functest/core/feature_base.py | 10 +-- functest/opnfv_tests/features/odl_sfc.py | 4 +- functest/utils/config.py | 15 ++-- functest/utils/env.py | 15 ++++ functest/utils/functest_constants.py | 8 +- functest/utils/openstack_clean.py | 8 +- functest/utils/openstack_snapshot.py | 7 +- 11 files changed, 151 insertions(+), 138 deletions(-) diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml index b6dde1148..a819a5795 100755 --- a/functest/ci/config_functest.yaml +++ b/functest/ci/config_functest.yaml @@ -14,17 +14,17 @@ general: dir_repos: /home/opnfv/repos repo_functest: /home/opnfv/repos/functest dir_repo_rally: /home/opnfv/repos/rally - dir_repo_tempest: /home/opnfv/repos/tempest + repo_tempest: /home/opnfv/repos/tempest dir_repo_releng: /home/opnfv/repos/releng dir_repo_vims_test: /home/opnfv/repos/vims-test dir_repo_sdnvpn: /home/opnfv/repos/sdnvpn - dir_repo_sfc: /home/opnfv/repos/sfc + repo_sfc: /home/opnfv/repos/sfc dir_repo_onos: /home/opnfv/repos/onos dir_repo_promise: /home/opnfv/repos/promise dir_repo_doctor: /home/opnfv/repos/doctor - dir_repo_copper: /home/opnfv/repos/copper + repo_copper: /home/opnfv/repos/copper dir_repo_ovno: /home/opnfv/repos/ovno - dir_repo_parser: /home/opnfv/repos/parser + repo_parser: /home/opnfv/repos/parser dir_repo_domino: /home/opnfv/repos/domino dir_repo_snaps: /home/opnfv/repos/snaps functest: /home/opnfv/functest diff --git a/functest/ci/generate_report.py b/functest/ci/generate_report.py index a90bc5553..89d8fc628 100755 --- a/functest/ci/generate_report.py +++ b/functest/ci/generate_report.py @@ -1,11 +1,17 @@ +#!/usr/bin/env python +# +# 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 json import re import urllib2 import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils -import functest.utils.functest_constants as ft_constants - +from functest.utils.constants import CONST COL_1_LEN = 25 COL_2_LEN = 15 @@ -17,14 +23,6 @@ COL_5_LEN = 75 # and then we can print the url to the specific test result -class GlobalVariables: - IS_CI_RUN = ft_constants.IS_CI_RUN - BUILD_TAG = ft_constants.CI_BUILD_TAG - INSTALLER = ft_constants.CI_INSTALLER_TYPE - CI_LOOP = ft_constants.CI_LOOP - SCENARIO = ft_constants.CI_SCENARIO - - logger = ft_logger.Logger("generate_report").getLogger() @@ -42,7 +40,7 @@ def init(tiers_to_run): def get_results_from_db(): url = "%s/results?build_tag=%s" % (ft_utils.get_db_url(), - GlobalVariables.BUILD_TAG) + CONST.BUILD_TAG) logger.debug("Query to rest api: %s" % url) try: data = json.load(urllib2.urlopen(url)) @@ -69,7 +67,7 @@ def print_line(w1, w2='', w3='', w4='', w5=''): '| ' + w2.ljust(COL_2_LEN - 1) + '| ' + w3.ljust(COL_3_LEN - 1) + '| ' + w4.ljust(COL_4_LEN - 1)) - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: str += ('| ' + w5.ljust(COL_5_LEN - 1)) str += '|\n' return str @@ -77,7 +75,7 @@ def print_line(w1, w2='', w3='', w4='', w5=''): def print_line_no_columns(str): TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN + 2 - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: TOTAL_LEN += COL_5_LEN + 1 return ('| ' + str.ljust(TOTAL_LEN) + "|\n") @@ -87,7 +85,7 @@ def print_separator(char="=", delimiter="+"): delimiter + char * COL_2_LEN + delimiter + char * COL_3_LEN + delimiter + char * COL_4_LEN) - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: str += (delimiter + char * COL_5_LEN) str += '+\n' return str @@ -96,7 +94,7 @@ def print_separator(char="=", delimiter="+"): def main(args): executed_test_cases = args - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: results = get_results_from_db() if results is not None: for test in executed_test_cases: @@ -105,15 +103,15 @@ def main(args): "result": data['result']}) TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: TOTAL_LEN += COL_5_LEN MID = TOTAL_LEN / 2 - if GlobalVariables.BUILD_TAG is not None: - if re.search("daily", GlobalVariables.BUILD_TAG) is not None: - GlobalVariables.CI_LOOP = "daily" + if CONST.BUILD_TAG is not None: + if re.search("daily", CONST.BUILD_TAG) is not None: + CONST.CI_LOOP = "daily" else: - GlobalVariables.CI_LOOP = "weekly" + CONST.CI_LOOP = "weekly" str = '' str += print_separator('=', delimiter="=") @@ -122,19 +120,19 @@ def main(args): str += print_line_no_columns(' ') str += print_line_no_columns(" Deployment description:") str += print_line_no_columns(" INSTALLER: %s" - % GlobalVariables.INSTALLER) - if GlobalVariables.SCENARIO is not None: + % CONST.INSTALLER_TYPE) + if CONST.DEPLOY_SCENARIO is not None: str += print_line_no_columns(" SCENARIO: %s" - % GlobalVariables.SCENARIO) - if GlobalVariables.BUILD_TAG is not None: + % CONST.DEPLOY_SCENARIO) + if CONST.BUILD_TAG is not None: str += print_line_no_columns(" BUILD TAG: %s" - % GlobalVariables.BUILD_TAG) - if GlobalVariables.CI_LOOP is not None: + % CONST.BUILD_TAG) + if CONST.CI_LOOP is not None: str += print_line_no_columns(" CI LOOP: %s" - % GlobalVariables.CI_LOOP) + % CONST.CI_LOOP) str += print_line_no_columns(' ') str += print_separator('=') - if GlobalVariables.IS_CI_RUN: + if CONST.IS_CI_RUN: str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT', 'URL') else: str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT') diff --git a/functest/ci/prepare_env.py b/functest/ci/prepare_env.py index 41cbbe098..3df3a0e0e 100755 --- a/functest/ci/prepare_env.py +++ b/functest/ci/prepare_env.py @@ -13,21 +13,20 @@ # +import argparse import json import os import re import subprocess import sys -import argparse import yaml +from opnfv.utils import constants as opnfv_constants import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils -import functest.utils.functest_constants as ft_constants - -from opnfv.utils import constants as opnfv_constants +from functest.utils.constants import CONST actions = ['start', 'check'] parser = argparse.ArgumentParser() @@ -41,7 +40,7 @@ args = parser.parse_args() logger = ft_logger.Logger("prepare_env").getLogger() -CONFIG_FUNCTEST_PATH = ft_constants.CONFIG_FUNCTEST_YAML +CONFIG_FUNCTEST_PATH = CONST.CONFIG_FUNCTEST_YAML CONFIG_PATCH_PATH = os.path.join(os.path.dirname( CONFIG_FUNCTEST_PATH), "config_patch.yaml") @@ -57,97 +56,97 @@ def check_env_variables(): print_separator() logger.info("Checking environment variables...") - if ft_constants.CI_INSTALLER_TYPE is None: + if CONST.INSTALLER_TYPE is None: logger.warning("The env variable 'INSTALLER_TYPE' is not defined.") - ft_constants.CI_INSTALLER_TYPE = "undefined" + CONST.INSTALLER_TYPE = "undefined" else: - if ft_constants.CI_INSTALLER_TYPE not in ft_constants.INSTALLERS: + if CONST.INSTALLER_TYPE not in opnfv_constants.INSTALLERS: logger.warning("INSTALLER_TYPE=%s is not a valid OPNFV installer. " "Available OPNFV Installers are : %s. " "Setting INSTALLER_TYPE=undefined." - % (ft_constants.CI_INSTALLER_TYPE, - ft_constants.INSTALLERS)) - ft_constants.CI_INSTALLER_TYPE = "undefined" + % (CONST.INSTALLER_TYPE, + opnfv_constants.INSTALLERS)) + CONST.INSTALLER_TYPE = "undefined" else: logger.info(" INSTALLER_TYPE=%s" - % ft_constants.CI_INSTALLER_TYPE) + % CONST.INSTALLER_TYPE) - if ft_constants.CI_INSTALLER_IP is None: + if CONST.INSTALLER_IP is None: logger.warning("The env variable 'INSTALLER_IP' is not defined. " "It is needed to fetch the OpenStack credentials. " "If the credentials are not provided to the " "container as a volume, please add this env variable " "to the 'docker run' command.") else: - logger.info(" INSTALLER_IP=%s" % ft_constants.CI_INSTALLER_IP) + logger.info(" INSTALLER_IP=%s" % CONST.INSTALLER_IP) - if ft_constants.CI_SCENARIO is None: + if CONST.DEPLOY_SCENARIO is None: logger.warning("The env variable 'DEPLOY_SCENARIO' is not defined. " "Setting CI_SCENARIO=undefined.") - ft_constants.CI_SCENARIO = "undefined" + CONST.DEPLOY_SCENARIO = "undefined" else: - logger.info(" DEPLOY_SCENARIO=%s" % ft_constants.CI_SCENARIO) - if ft_constants.CI_DEBUG: - logger.info(" CI_DEBUG=%s" % ft_constants.CI_DEBUG) + logger.info(" DEPLOY_SCENARIO=%s" % CONST.DEPLOY_SCENARIO) + if CONST.CI_DEBUG: + logger.info(" CI_DEBUG=%s" % CONST.CI_DEBUG) - if ft_constants.CI_NODE: - logger.info(" NODE_NAME=%s" % ft_constants.CI_NODE) + if CONST.NODE_NAME: + logger.info(" NODE_NAME=%s" % CONST.NODE_NAME) - if ft_constants.CI_BUILD_TAG: - logger.info(" BUILD_TAG=%s" % ft_constants.CI_BUILD_TAG) + if CONST.BUILD_TAG: + logger.info(" BUILD_TAG=%s" % CONST.BUILD_TAG) - if ft_constants.IS_CI_RUN: - logger.info(" IS_CI_RUN=%s" % ft_constants.IS_CI_RUN) + if CONST.IS_CI_RUN: + logger.info(" IS_CI_RUN=%s" % CONST.IS_CI_RUN) def create_directories(): print_separator() logger.info("Creating needed directories...") - if not os.path.exists(ft_constants.FUNCTEST_CONF_DIR): - os.makedirs(ft_constants.FUNCTEST_CONF_DIR) - logger.info(" %s created." % ft_constants.FUNCTEST_CONF_DIR) + if not os.path.exists(CONST.dir_functest_conf): + os.makedirs(CONST.dir_functest_conf) + logger.info(" %s created." % CONST.dir_functest_conf) else: logger.debug(" %s already exists." - % ft_constants.FUNCTEST_CONF_DIR) + % CONST.dir_functest_conf) - if not os.path.exists(ft_constants.FUNCTEST_DATA_DIR): - os.makedirs(ft_constants.FUNCTEST_DATA_DIR) - logger.info(" %s created." % ft_constants.FUNCTEST_DATA_DIR) + if not os.path.exists(CONST.dir_functest_data): + os.makedirs(CONST.dir_functest_data) + logger.info(" %s created." % CONST.dir_functest_data) else: logger.debug(" %s already exists." - % ft_constants.FUNCTEST_DATA_DIR) + % CONST.dir_functest_data) def source_rc_file(): print_separator() logger.info("Fetching RC file...") - if ft_constants.OPENSTACK_CREDS is None: + if CONST.openstack_creds is None: logger.warning("The environment variable 'creds' must be set and" "pointing to the local RC file. Using default: " "/home/opnfv/functest/conf/openstack.creds ...") - os.path.join(ft_constants.FUNCTEST_CONF_DIR, 'openstack.creds') + os.path.join(CONST.dir_functest_conf, 'openstack.creds') - if not os.path.isfile(ft_constants.OPENSTACK_CREDS): + if not os.path.isfile(CONST.openstack_creds): logger.info("RC file not provided. " "Fetching it from the installer...") - if ft_constants.CI_INSTALLER_IP is None: + if CONST.INSTALLER_IP is None: logger.error("The env variable CI_INSTALLER_IP must be provided in" " order to fetch the credentials from the installer.") sys.exit("Missing CI_INSTALLER_IP.") - if ft_constants.CI_INSTALLER_TYPE not in ft_constants.INSTALLERS: + if CONST.INSTALLER_TYPE not in opnfv_constants.INSTALLERS: logger.error("Cannot fetch credentials. INSTALLER_TYPE=%s is " "not a valid OPNFV installer. Available " "installers are : %s." % - (ft_constants.CI_INSTALLER_TYPE, + (CONST.INSTALLER_TYPE, opnfv_constants.INSTALLERS)) sys.exit("Wrong INSTALLER_TYPE.") cmd = ("/home/opnfv/repos/releng/utils/fetch_os_creds.sh " "-d %s -i %s -a %s" - % (ft_constants.OPENSTACK_CREDS, - ft_constants.CI_INSTALLER_TYPE, - ft_constants.CI_INSTALLER_IP)) + % (CONST.openstack_creds, + CONST.INSTALLER_TYPE, + CONST.INSTALLER_IP)) logger.debug("Executing command: %s" % cmd) p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) output = p.communicate()[0] @@ -157,38 +156,38 @@ def source_rc_file(): sys.exit(1) else: logger.info("RC file provided in %s." - % ft_constants.OPENSTACK_CREDS) - if os.path.getsize(ft_constants.OPENSTACK_CREDS) == 0: + % CONST.openstack_creds) + if os.path.getsize(CONST.openstack_creds) == 0: logger.error("The file %s is empty." - % ft_constants.OPENSTACK_CREDS) + % CONST.openstack_creds) sys.exit(1) logger.info("Sourcing the OpenStack RC file...") creds = os_utils.source_credentials( - ft_constants.OPENSTACK_CREDS) + CONST.openstack_creds) str = "" for key, value in creds.iteritems(): if re.search("OS_", key): str += "\n\t\t\t\t\t\t " + key + "=" + value if key == 'OS_AUTH_URL': - ft_constants.OS_AUTH_URL = value + CONST.OS_AUTH_URL = value elif key == 'OS_USERNAME': - ft_constants.OS_USERNAME = value + CONST.OS_USERNAME = value elif key == 'OS_TENANT_NAME': - ft_constants.OS_TENANT_NAME = value + CONST.OS_TENANT_NAME = value elif key == 'OS_PASSWORD': - ft_constants.OS_PASSWORD = value + CONST.OS_PASSWORD = value logger.debug("Used credentials: %s" % str) - logger.debug("OS_AUTH_URL:%s" % ft_constants.OS_AUTH_URL) - logger.debug("OS_USERNAME:%s" % ft_constants.OS_USERNAME) - logger.debug("OS_TENANT_NAME:%s" % ft_constants.OS_TENANT_NAME) - logger.debug("OS_PASSWORD:%s" % ft_constants.OS_PASSWORD) + logger.debug("OS_AUTH_URL:%s" % CONST.OS_AUTH_URL) + logger.debug("OS_USERNAME:%s" % CONST.OS_USERNAME) + logger.debug("OS_TENANT_NAME:%s" % CONST.OS_TENANT_NAME) + logger.debug("OS_PASSWORD:%s" % CONST.OS_PASSWORD) def patch_config_file(): updated = False for key in functest_patch_yaml: - if key in ft_constants.CI_SCENARIO: + if key in CONST.DEPLOY_SCENARIO: new_functest_yaml = dict(ft_utils.merge_dicts( ft_utils.get_functest_yaml(), functest_patch_yaml[key])) updated = True @@ -203,7 +202,7 @@ def patch_config_file(): def verify_deployment(): print_separator() logger.info("Verifying OpenStack services...") - cmd = ("%s/functest/ci/check_os.sh" % ft_constants.FUNCTEST_REPO_DIR) + cmd = ("%s/functest/ci/check_os.sh" % CONST.dir_repo_functest) logger.debug("Executing command: %s" % cmd) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) @@ -223,19 +222,19 @@ def install_rally(): cmd = "rally deployment destroy opnfv-rally" ft_utils.execute_command(cmd, error_msg=( "Deployment %s does not exist." - % ft_constants.RALLY_DEPLOYMENT_NAME), + % CONST.rally_deployment_name), verbose=False) rally_conf = os_utils.get_credentials_for_rally() with open('rally_conf.json', 'w') as fp: json.dump(rally_conf, fp) cmd = "rally deployment create --file=rally_conf.json --name=" - cmd += ft_constants.RALLY_DEPLOYMENT_NAME + cmd += CONST.rally_deployment_name ft_utils.execute_command(cmd, error_msg="Problem creating Rally deployment") logger.info("Installing tempest from existing repo...") cmd = ("rally verify install --source " + - ft_constants.TEMPEST_REPO_DIR + + CONST.dir_repo_tempest + " --system-wide") ft_utils.execute_command(cmd, error_msg="Problem installing Tempest.") @@ -258,11 +257,11 @@ def install_rally(): def check_environment(): msg_not_active = "The Functest environment is not installed." - if not os.path.isfile(ft_constants.ENV_FILE): + if not os.path.isfile(CONST.env_active): logger.error(msg_not_active) sys.exit(1) - with open(ft_constants.ENV_FILE, "r") as env_file: + with open(CONST.env_active, "r") as env_file: s = env_file.read() if not re.search("1", s): logger.error(msg_not_active) @@ -285,7 +284,7 @@ def main(): verify_deployment() install_rally() - with open(ft_constants.ENV_FILE, "w") as env_file: + with open(CONST.env_active, "w") as env_file: env_file.write("1") check_environment() diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py index 557ba08dd..7aac9d2cf 100755 --- a/functest/ci/run_tests.py +++ b/functest/ci/run_tests.py @@ -8,24 +8,23 @@ # http://www.apache.org/licenses/LICENSE-2.0 # +import argparse import datetime import importlib import os import re import sys -import argparse - import functest.ci.generate_report as generate_report import functest.ci.tier_builder as tb import functest.core.testcase_base as testcase_base +import functest.utils.functest_constants as ft_constants import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils -import functest.utils.functest_constants as ft_constants import functest.utils.openstack_clean as os_clean import functest.utils.openstack_snapshot as os_snapshot import functest.utils.openstack_utils as os_utils - +from functest.utils.constants import CONST parser = argparse.ArgumentParser() parser.add_argument("-t", "--test", dest="test", action='store', @@ -44,7 +43,7 @@ logger = ft_logger.Logger("run_tests").getLogger() """ global variables """ -EXEC_SCRIPT = ("%s/functest/ci/exec_test.sh" % ft_constants.FUNCTEST_REPO_DIR) +EXEC_SCRIPT = ("%s/functest/ci/exec_test.sh" % CONST.dir_repo_functest) # This will be the return code of this script. If any of the tests fails, # this variable will change to -1 @@ -65,7 +64,7 @@ def print_separator(str, count=45): def source_rc_file(): - rc_file = ft_constants.OPENSTACK_CREDS + rc_file = CONST.openstack_creds if not os.path.isfile(rc_file): logger.error("RC file %s does not exist..." % rc_file) sys.exit(1) @@ -75,16 +74,20 @@ def source_rc_file(): if re.search("OS_", key): if key == 'OS_AUTH_URL': ft_constants.OS_AUTH_URL = value + CONST.OS_AUTH_URL = value elif key == 'OS_USERNAME': ft_constants.OS_USERNAME = value + CONST.OS_USERNAME = value elif key == 'OS_TENANT_NAME': ft_constants.OS_TENANT_NAME = value + CONST.OS_TENANT_NAME = value elif key == 'OS_PASSWORD': ft_constants.OS_PASSWORD = value - logger.debug("OS_AUTH_URL:%s" % ft_constants.OS_AUTH_URL) - logger.debug("OS_USERNAME:%s" % ft_constants.OS_USERNAME) - logger.debug("OS_TENANT_NAME:%s" % ft_constants.OS_TENANT_NAME) - logger.debug("OS_PASSWORD:%s" % ft_constants.OS_PASSWORD) + CONST.OS_PASSWORD = value + logger.debug("OS_AUTH_URL:%s" % CONST.OS_AUTH_URL) + logger.debug("OS_USERNAME:%s" % CONST.OS_USERNAME) + logger.debug("OS_TENANT_NAME:%s" % CONST.OS_TENANT_NAME) + logger.debug("OS_PASSWORD:%s" % CONST.OS_PASSWORD) def generate_os_snapshot(): @@ -201,17 +204,11 @@ def run_tier(tier): def run_all(tiers): summary = "" - BUILD_TAG = ft_constants.CI_BUILD_TAG - if BUILD_TAG is not None and re.search("daily", BUILD_TAG) is not None: - CI_LOOP = "daily" - else: - CI_LOOP = "weekly" - tiers_to_run = [] for tier in tiers.get_tiers(): if (len(tier.get_tests()) != 0 and - re.search(CI_LOOP, tier.get_ci_loop()) is not None): + re.search(CONST.CI_LOOP, tier.get_ci_loop()) is not None): tiers_to_run.append(tier) summary += ("\n - %s:\n\t %s" % (tier.get_name(), @@ -227,10 +224,10 @@ def run_all(tiers): def main(): - CI_INSTALLER_TYPE = ft_constants.CI_INSTALLER_TYPE - CI_SCENARIO = ft_constants.CI_SCENARIO + CI_INSTALLER_TYPE = CONST.INSTALLER_TYPE + CI_SCENARIO = CONST.DEPLOY_SCENARIO - file = ft_constants.FUNCTEST_TESTCASES_YAML + file = CONST.functest_testcases_yaml _tiers = tb.TierBuilder(CI_INSTALLER_TYPE, CI_SCENARIO, file) if args.noclean: diff --git a/functest/core/feature_base.py b/functest/core/feature_base.py index 780170d44..873e21dae 100644 --- a/functest/core/feature_base.py +++ b/functest/core/feature_base.py @@ -3,6 +3,7 @@ import time import testcase_base as base import functest.utils.functest_utils as ft_utils import functest.utils.functest_logger as ft_logger +from functest.utils.constants import CONST class FeatureBase(base.TestcaseBase): @@ -11,7 +12,7 @@ class FeatureBase(base.TestcaseBase): self.project_name = project self.case_name = case self.cmd = cmd - self.repo = self.get_conf('general.dir.{}'.format(repo)) + self.repo = CONST.__getattribute__(repo) self.result_file = self.get_result_file() self.logger = ft_logger.Logger(project).getLogger() @@ -44,15 +45,10 @@ class FeatureBase(base.TestcaseBase): return exit_code def get_result_file(self): - dir = self.get_conf('general.dir.results') - return "{}/{}.log".format(dir, self.project_name) + return "{}/{}.log".format(CONST.dir_results, self.project_name) def log_results(self): ft_utils.logger_test_results(self.project_name, self.case_name, self.criteria, self.details) - - @staticmethod - def get_conf(parameter): - return ft_utils.get_functest_config(parameter) diff --git a/functest/opnfv_tests/features/odl_sfc.py b/functest/opnfv_tests/features/odl_sfc.py index b194b2840..3b68d4204 100644 --- a/functest/opnfv_tests/features/odl_sfc.py +++ b/functest/opnfv_tests/features/odl_sfc.py @@ -7,7 +7,6 @@ # # http://www.apache.org/licenses/LICENSE-2.0 # - import functest.core.feature_base as base @@ -17,4 +16,5 @@ class OpenDaylightSFC(base.FeatureBase): super(OpenDaylightSFC, self).__init__(project='sfc', case='functest-odl-sfc"', repo='dir_repo_sfc') - self.cmd = 'cd %s/tests/functest && python ./run_tests.py' % self.repo + dir_sfc_functest = '{}/sfc/tests/functest'.format(self.repo) + self.cmd = 'cd %s && python ./run_tests.py' % dir_sfc_functest diff --git a/functest/utils/config.py b/functest/utils/config.py index 4cee63494..84166c1d3 100644 --- a/functest/utils/config.py +++ b/functest/utils/config.py @@ -11,20 +11,25 @@ class Config(object): try: with open(self.config_functest) as f: self.functest_yaml = yaml.safe_load(f) - self.parse(None, self.functest_yaml) + self._parse(None, self.functest_yaml) except: raise Exception('Parse {} failed'.format(self.config_functest)) + self._set_others() - def parse(self, attr_now, left_parametes): + def _parse(self, attr_now, left_parametes): for param_n, param_v in left_parametes.iteritems(): - attr_further = self.get_attr_further(attr_now, param_n) + attr_further = self._get_attr_further(attr_now, param_n) if not isinstance(param_v, dict): self.__setattr__(attr_further, param_v) else: - self.parse(attr_further, param_v) + self._parse(attr_further, param_v) - def get_attr_further(self, attr_now, next): + def _get_attr_further(self, attr_now, next): return attr_now if next == 'general' else ( '{}_{}'.format(attr_now, next) if attr_now else next) + def _set_others(self): + self.env_active = os.path.join(self.dir_functest_conf, "env_active") + + CONF = Config() diff --git a/functest/utils/env.py b/functest/utils/env.py index 86b2be3dc..19c6099cd 100644 --- a/functest/utils/env.py +++ b/functest/utils/env.py @@ -1,4 +1,5 @@ import os +import re default_envs = { 'NODE_NAME': 'unknown_pod', @@ -19,6 +20,20 @@ class Environment(object): for k, v in default_envs.iteritems(): if k not in os.environ: self.__setattr__(k, v) + self._set_ci_run() + self._set_ci_loop() + + def _set_ci_run(self): + if self.BUILD_TAG: + self.IS_CI_RUN = True + else: + self.IS_CI_RUN = False + + def _set_ci_loop(self): + if self.BUILD_TAG and re.search("daily", self.BUILD_TAG): + self.CI_LOOP = "daily" + else: + self.CI_LOOP = "weekly" ENV = Environment() diff --git a/functest/utils/functest_constants.py b/functest/utils/functest_constants.py index a39d33ac8..dfa59eb37 100644 --- a/functest/utils/functest_constants.py +++ b/functest/utils/functest_constants.py @@ -78,7 +78,7 @@ FUNCTEST_TESTCASES_YAML = get_value('general.functest.testcases_yaml', 'FUNCTEST_TESTCASES_YAML') RALLY_DEPLOYMENT_NAME = get_value('rally.deployment_name', 'RALLY_DEPLOYMENT_NAME') -TEMPEST_REPO_DIR = get_value('general.dir.dir_repo_tempest', +TEMPEST_REPO_DIR = get_value('general.dir.repo_tempest', 'TEMPEST_REPO_DIR') ENV_FILE = os.path.join(FUNCTEST_CONF_DIR, "env_active") @@ -91,7 +91,7 @@ DOMINO_REPO_DIR = get_value('general.dir.dir_repo_domino', 'DOMINO_REPO_DIR') SDNVPN_REPO_DIR = get_value('general.dir.dir_repo_sdnvpn', 'SDNVPN_REPO_DIR') -SFC_REPO_DIR = get_value('general.dir.dir_repo_sfc', +SFC_REPO_DIR = get_value('general.dir.repo_sfc', 'SFC_REPO_DIR') ONOS_SFC_IMAGE_NAME = get_value('onos_sfc.image_name', @@ -219,7 +219,7 @@ PROMISE_ROUTER_NAME = get_value('promise.router_name', 'PROMISE_ROUTER_NAME') DOCTOR_REPO_DIR = get_value('general.dir.dir_repo_doctor', 'DOCTOR_REPO_DIR') -COPPER_REPO_DIR = get_value('general.dir.dir_repo_copper', +COPPER_REPO_DIR = get_value('general.dir.repo_copper', 'COPPER_REPO_DIR') EXAMPLE_INSTANCE_NAME = get_value('example.example_vm_name', 'EXAMPLE_INSTANCE_NAME') @@ -260,5 +260,5 @@ CW_DEPLOYMENT_NAME = get_value('vIMS.clearwater.deployment-name', CW_INPUTS = get_value('vIMS.clearwater.inputs', 'CW_INPUTS') CW_REQUIERMENTS = get_value('vIMS.clearwater.requierments', 'CW_REQUIERMENTS') -PARSER_REPO_DIR = get_value('general.dir.dir_repo_parser', +PARSER_REPO_DIR = get_value('general.dir.repo_parser', 'PARSER_REPO_DIR') diff --git a/functest/utils/openstack_clean.py b/functest/utils/openstack_clean.py index c08568bde..b1ad9664e 100755 --- a/functest/utils/openstack_clean.py +++ b/functest/utils/openstack_clean.py @@ -23,14 +23,16 @@ # import time + +import yaml + import functest.utils.functest_logger as ft_logger import functest.utils.openstack_utils as os_utils -import yaml -import functest.utils.functest_constants as ft_constants +from functest.utils.constants import CONST logger = ft_logger.Logger("openstack_clean").getLogger() -OS_SNAPSHOT_FILE = ft_constants.OPENSTACK_SNAPSHOT_FILE +OS_SNAPSHOT_FILE = CONST.openstack_snapshot_file def separator(): diff --git a/functest/utils/openstack_snapshot.py b/functest/utils/openstack_snapshot.py index 5b50ffa50..c59492cfd 100755 --- a/functest/utils/openstack_snapshot.py +++ b/functest/utils/openstack_snapshot.py @@ -20,15 +20,16 @@ # http://www.apache.org/licenses/LICENSE-2.0 # +import yaml + import functest.utils.functest_logger as ft_logger import functest.utils.openstack_utils as os_utils -import yaml -import functest.utils.functest_constants as ft_constants +from functest.utils.constants import CONST logger = ft_logger.Logger("openstack_snapshot").getLogger() -OS_SNAPSHOT_FILE = ft_constants.OPENSTACK_SNAPSHOT_FILE +OS_SNAPSHOT_FILE = CONST.openstack_snapshot_file def separator(): -- cgit 1.2.3-korg