diff options
author | SerenaFeng <feng.xiaowei@zte.com.cn> | 2016-12-21 15:42:54 +0800 |
---|---|---|
committer | jose.lausuch <jose.lausuch@ericsson.com> | 2016-12-21 12:55:44 +0100 |
commit | a59fea1046d167b4609c9b86836d178e799dc688 (patch) | |
tree | 64972a06ba7d10bbde13e63345136126dfa10a6e /functest/ci | |
parent | 3592444c8abcaca3312d831fd610d82bffd627ea (diff) |
Refactor test run related modules using new constants provider
JIRA: FUNCTEST-673
Change-Id: Ia37fb5a08c8fbc4a8acb666565ea887f9ae48b83
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
Diffstat (limited to 'functest/ci')
-rwxr-xr-x | functest/ci/config_functest.yaml | 8 | ||||
-rwxr-xr-x | functest/ci/generate_report.py | 54 | ||||
-rwxr-xr-x | functest/ci/prepare_env.py | 123 | ||||
-rwxr-xr-x | functest/ci/run_tests.py | 37 |
4 files changed, 108 insertions, 114 deletions
diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml index b6dde114..a819a579 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 a90bc555..89d8fc62 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 41cbbe09..3df3a0e0 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 557ba08d..7aac9d2c 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: |