X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=sdnvpn%2Ftest%2Ffunctest%2Frun_sdnvpn_tests.py;h=224ef9b103ace6af32012d4a98ef7b926e347b05;hb=592c41bd3f46da98162999a3aaf1a8456036ecf7;hp=e6712647a02984219169e7fc60f4e5da4dc4c027;hpb=8b31653352a27e1dc9495d6f19b25849ffbbda1b;p=sdnvpn.git diff --git a/sdnvpn/test/functest/run_sdnvpn_tests.py b/sdnvpn/test/functest/run_sdnvpn_tests.py index e671264..224ef9b 100644 --- a/sdnvpn/test/functest/run_sdnvpn_tests.py +++ b/sdnvpn/test/functest/run_sdnvpn_tests.py @@ -1,4 +1,4 @@ -#!/bin/python +#!/usr/bin/env python # # Copyright (c) 2017 All rights reserved # This program and the accompanying materials @@ -8,108 +8,133 @@ # http://www.apache.org/licenses/LICENSE-2.0 # -import argparse import importlib import logging import os import sys -import time import traceback import yaml -import functest.utils.functest_utils as ft_utils +from xtesting.core import feature from sdnvpn.lib import config as sdnvpn_config +from sdnvpn.lib import openstack_utils as os_utils from sdnvpn.lib.gather_logs import gather_logs - -logger = logging.getLogger('sdnvpn-run-tests') +from sdnvpn.lib import utils as test_utils COMMON_CONFIG = sdnvpn_config.CommonConfig() -TEST_DB_URL = COMMON_CONFIG.test_db - - -def push_results(testname, start_time, end_time, criteria, details): - logger.info("Push testcase '%s' results into the DB...\n" % testname) - ft_utils.push_results_to_db("sdnvpn", - testname, - start_time, - end_time, - criteria, - details) - - -def main(report=False): - # Workaround for https://jira.opnfv.org/projects/SDNVPN/issues/SDNVPN-100 - # and SDNVPN-126 - cmd_line = "neutron quota-update --subnet -1 --network -1 --port -1" - logger.info("Setting subnet/net quota to unlimited : %s" % cmd_line) - cmd = os.popen(cmd_line) - output = cmd.read() - logger.debug(output) - - # Workaround for https://jira.opnfv.org/projects/SDNVPN/issues/SDNVPN-115 - cmd_line = "nova quota-class-update --instances -1 default" - logger.info("Setting instances quota to unlimited : %s" % cmd_line) - cmd = os.popen(cmd_line) - output = cmd.read() - logger.debug(output) - - with open(COMMON_CONFIG.config_file) as f: - config_yaml = yaml.safe_load(f) - - testcases = config_yaml.get("testcases") - overall_status = "PASS" - for testcase in testcases: - if testcases[testcase]['enabled']: - test_name = testcase - test_descr = testcases[testcase]['description'] - test_name_db = testcases[testcase]['testname_db'] - title = ("Running '%s - %s'" % - (test_name, test_descr)) - logger.info(title) - logger.info("%s\n" % ("=" * len(title))) - t = importlib.import_module(testcase, package=None) - start_time = time.time() - try: - result = t.main() - except Exception as ex: - result = -1 - logger.info("Caught Exception in %s: %s Trace: %s" % - (test_name, ex, traceback.format_exc())) - end_time = time.time() - if result < 0: - status = "FAIL" - overall_status = "FAIL" - logger.info("Testcase %s failed" % test_name) - else: - status = result.get("status") - details = result.get("details") - logger.info("Results of test case '%s - %s':\n%s\n" % - (test_name, test_descr, result)) - if status == "FAIL": - overall_status = "FAIL" - if report: - push_results( - test_name_db, start_time, end_time, status, details) +class SdnvpnFunctest(feature.Feature): + + __logger = logging.getLogger(__name__) + + def execute(self): + + nova_client = os_utils.get_nova_client() + neutron_client = os_utils.get_neutron_client() + + tenant_id = os_utils.get_tenant_id(os_utils.get_keystone_client(), + os.environ['OS_PROJECT_NAME']) + + neutron_quota = test_utils.get_neutron_quota(neutron_client, tenant_id) + (neutron_nw_quota, neutron_subnet_quota, neutron_port_quota, + neutron_router_quota) = ( + neutron_quota['network'], neutron_quota['subnet'], + neutron_quota['port'], neutron_quota['router']) + instances_quota = test_utils.get_nova_instances_quota(nova_client) + + self.__logger.info("Setting net/subnet/port/router " + "quota to unlimited") + test_utils.update_nw_subnet_port_quota( + neutron_client, + tenant_id, + COMMON_CONFIG.neutron_nw_quota, + COMMON_CONFIG.neutron_subnet_quota, + COMMON_CONFIG.neutron_port_quota, + COMMON_CONFIG.neutron_router_quota) + test_utils.create_default_flavor() + + # Workaround for + # https://jira.opnfv.org/projects/SDNVPN/issues/SDNVPN-115 + self.__logger.info("Setting instances quota class to unlimited") + test_utils.update_instance_quota_class( + nova_client, + COMMON_CONFIG.nova_instances_quota_class) + + with open(COMMON_CONFIG.config_file) as f: + config_yaml = yaml.safe_load(f) + + testcases = config_yaml.get("testcases") + overall_status = "PASS" + for tc in testcases: + if testcases[tc]['enabled']: + test_name = tc + test_descr = testcases[tc]['description'] + title = ("Running '%s - %s'" % + (test_name, test_descr)) + self.__logger.info(title) + self.__logger.info("%s\n" % ("=" * len(title))) + try: + self.__logger.info("Importing the testcase %s" % test_name) + t = importlib.import_module(test_name, package=None) + self.__logger.info("Calling the testcase %s main method" + % test_name) + result = t.main() + self.__logger.info("Execution is complete for the testcase %s" + % test_name) + except Exception as ex: + result = -1 + self.__logger.info("Caught Exception in %s: %s Trace: %s" + % (test_name, ex, + traceback.format_exc())) + if result < 0: + status = "FAIL" + overall_status = "FAIL" + self.__logger.info("Testcase %s failed" % test_name) + else: + status = result.get("status") + self.details.update( + {test_name: {'status': status, + 'details': result.get("details")}}) + self.__logger.info("Results of test case '%s - %s':\n%s\n" + % (test_name, test_descr, result)) + + if status == "FAIL": + overall_status = "FAIL" + + self.__logger.info("Resetting subnet/net/port quota") + test_utils.update_nw_subnet_port_quota(neutron_client, + tenant_id, + neutron_nw_quota, + neutron_subnet_quota, + neutron_port_quota, + neutron_router_quota) + + self.__logger.info("Resetting instances quota class") + test_utils.update_instance_quota_class(nova_client, instances_quota) + + try: + installer_type = str(os.environ['INSTALLER_TYPE'].lower()) + if installer_type in ["fuel", "apex"]: + gather_logs('overall') + else: + self.__logger.info("Skipping log gathering because installer" + "type %s is neither fuel nor apex" % + installer_type) + except Exception as ex: + self.__logger.error(('Something went wrong in the Log gathering.' + 'Ex: %s, Trace: %s') + % (ex, traceback.format_exc())) - try: - gather_logs('overall') - except Exception as ex: - logger.error(('Something went wrong in the Log gathering.' - 'Ex: %s, Trace: %s') - % ex, traceback.format_exc()) - if overall_status == "FAIL": - sys.exit(-1) + if overall_status == "PASS": + self.result = 100 + return feature.Feature.EX_OK - sys.exit(0) + return feature.Feature.EX_RUN_ERROR if __name__ == '__main__': - logging.basicConfig(level=logging.INFO) - parser = argparse.ArgumentParser() - parser.add_argument("-r", "--report", - help="Create json result file", - action="store_true") - args = parser.parse_args() - main(report=args.report) + logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s' + '- %(levelname)s - %(message)s') + SDNVPN = SdnvpnFunctest() + sys.exit(SDNVPN.execute())