From baa8f2d5f67d45e5761f92cb93fe22050f08d0fe Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Tue, 27 Feb 2018 14:25:49 +0100 Subject: Clean all OpenStack related modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Xtesting is only focused on the framework and entry points. Change-Id: I1a4146ed8519438b13810a20ddf1140c35bb6ecd Signed-off-by: Cédric Ollivier --- functest/api/resources/__init__.py | 0 functest/api/resources/v1/__init__.py | 0 functest/api/resources/v1/creds.py | 80 ----------------- functest/api/resources/v1/envs.py | 83 ----------------- functest/api/resources/v1/tasks.py | 111 ----------------------- functest/api/resources/v1/testcases.py | 157 --------------------------------- functest/api/resources/v1/tiers.py | 82 ----------------- 7 files changed, 513 deletions(-) delete mode 100644 functest/api/resources/__init__.py delete mode 100644 functest/api/resources/v1/__init__.py delete mode 100644 functest/api/resources/v1/creds.py delete mode 100644 functest/api/resources/v1/envs.py delete mode 100644 functest/api/resources/v1/tasks.py delete mode 100644 functest/api/resources/v1/testcases.py delete mode 100644 functest/api/resources/v1/tiers.py (limited to 'functest/api/resources') diff --git a/functest/api/resources/__init__.py b/functest/api/resources/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/functest/api/resources/v1/__init__.py b/functest/api/resources/v1/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/functest/api/resources/v1/creds.py b/functest/api/resources/v1/creds.py deleted file mode 100644 index 3eae1966..00000000 --- a/functest/api/resources/v1/creds.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# 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 - -""" -Resources to handle openstack related requests -""" - -import collections -import logging -import socket - -from flask import jsonify -from flasgger.utils import swag_from -import pkg_resources - -from functest.api.base import ApiResource -from functest.api.common import api_utils -from functest.ci import run_tests -from functest.cli.commands.cli_os import OpenStack -from functest.utils import constants - -LOGGER = logging.getLogger(__name__) - -ADDRESS = socket.gethostbyname(socket.gethostname()) -ENDPOINT_CREDS = ('http://{}:5000/api/v1/functest/openstack'.format(ADDRESS)) - - -class V1Creds(ApiResource): - """ V1Creds Resource class""" - - @swag_from( - pkg_resources.resource_filename('functest', 'api/swagger/creds.yaml'), - endpoint='{0}/credentials'.format(ENDPOINT_CREDS)) - def get(self): # pylint: disable=no-self-use - """ Get credentials """ - run_tests.Runner.source_envfile(constants.ENV_FILE) - credentials_show = OpenStack.show_credentials() - return jsonify(credentials_show) - - @swag_from( - pkg_resources.resource_filename('functest', - 'api/swagger/creds_action.yaml'), - endpoint='{0}/action'.format(ENDPOINT_CREDS)) - def post(self): - """ Used to handle post request """ - return self._dispatch_post() - - def update_openrc(self, args): # pylint: disable=no-self-use - """ Used to update the OpenStack RC file """ - try: - openrc_vars = args['openrc'] - except KeyError: - return api_utils.result_handler( - status=0, data='openrc must be provided') - else: - if not isinstance(openrc_vars, collections.Mapping): - return api_utils.result_handler( - status=0, data='args should be a dict') - - lines = ['export {}={}\n'.format(k, v) for k, v in openrc_vars.items()] - - rc_file = constants.ENV_FILE - with open(rc_file, 'w') as creds_file: - creds_file.writelines(lines) - - LOGGER.info("Sourcing the OpenStack RC file...") - try: - run_tests.Runner.source_envfile(rc_file) - except Exception as err: # pylint: disable=broad-except - LOGGER.exception('Failed to source the OpenStack RC file') - return api_utils.result_handler(status=0, data=str(err)) - - return api_utils.result_handler( - status=0, data='Update openrc successfully') diff --git a/functest/api/resources/v1/envs.py b/functest/api/resources/v1/envs.py deleted file mode 100644 index 3e6f05ac..00000000 --- a/functest/api/resources/v1/envs.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# 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 - -""" -Resources to handle environment related requests -""" - -import pkg_resources -import socket - -import IPy -from flask import jsonify -from flasgger.utils import swag_from - -from functest.api.base import ApiResource -from functest.api.common import api_utils -from functest.cli.commands.cli_env import Env - -ADDRESS = socket.gethostbyname(socket.gethostname()) -ENDPOINT_ENVS = ('http://{}:5000/api/v1/functest/envs'.format(ADDRESS)) - - -class V1Envs(ApiResource): - """ V1Envs Resource class""" - - @swag_from( - pkg_resources.resource_filename('functest', 'api/swagger/envs.yaml'), - endpoint=ENDPOINT_ENVS) - def get(self): # pylint: disable=no-self-use - """ Get environment """ - environment_show = Env().show() - return jsonify(environment_show) - - @swag_from( - pkg_resources.resource_filename('functest', - 'api/swagger/envs_action.yaml'), - endpoint='{0}/action'.format(ENDPOINT_ENVS)) - def post(self): - """ Used to handle post request """ - return self._dispatch_post() - - def update_hosts(self, hosts_info): # pylint: disable=no-self-use - """ Update hosts info """ - - if not isinstance(hosts_info, dict): - return api_utils.result_handler( - status=1, data='Error, args should be a dict') - - for key, value in hosts_info.items(): - if key: - try: - IPy.IP(value) - except Exception: # pylint: disable=broad-except - return api_utils.result_handler( - status=1, data='The IP %s is invalid' % value) - else: - return api_utils.result_handler( - status=1, data='Domain name is absent') - - try: - functest_flag = "# SUT hosts info for Functest" - hosts_list = ('\n{} {} {}'.format(ip, host_name, functest_flag) - for host_name, ip in hosts_info.items()) - - with open("/etc/hosts", 'r') as file_hosts: - origin_lines = [line for line in file_hosts - if functest_flag not in line] - - with open("/etc/hosts", 'w') as file_hosts: - file_hosts.writelines(origin_lines) - file_hosts.write(functest_flag) - file_hosts.writelines(hosts_list) - except Exception: # pylint: disable=broad-except - return api_utils.result_handler( - status=1, data='Error when updating hosts info') - else: - return api_utils.result_handler( - status=0, data='Update hosts info successfully') diff --git a/functest/api/resources/v1/tasks.py b/functest/api/resources/v1/tasks.py deleted file mode 100644 index 30501adf..00000000 --- a/functest/api/resources/v1/tasks.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# 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 - -""" -Resources to retrieve the task results -""" - -import errno -import json -import logging -import os -import uuid - -from flask import jsonify -from flasgger.utils import swag_from -import pkg_resources - -from functest.api.base import ApiResource -from functest.api.common import api_utils -from functest.api.database.v1.handlers import TasksHandler -from functest.utils import config - - -LOGGER = logging.getLogger(__name__) - - -class V1Task(ApiResource): - """ V1Task Resource class""" - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/task.yaml')) - def get(self, task_id): # pylint: disable=no-self-use - """ GET the result of the task id """ - try: - uuid.UUID(task_id) - except ValueError: - return api_utils.result_handler(status=1, data='Invalid task id') - - task_handler = TasksHandler() - try: - task = task_handler.get_task_by_taskid(task_id) - except ValueError: - return api_utils.result_handler(status=1, data='No such task id') - - status = task.status - LOGGER.debug('Task status is: %s', status) - - if status not in ['IN PROGRESS', 'FAIL', 'FINISHED']: - return api_utils.result_handler(status=1, - data='internal server error') - - switcher = {'IN PROGRESS': 0, 'FAIL': 1, 'FINISHED': 2} - if status == 'IN PROGRESS': - result = {'status': switcher.get(status), 'result': ''} - elif status == 'FAIL': - result = {'status': switcher.get(status), 'error': task.error} - else: - result = {'status': switcher.get(status), - 'result': json.loads(task.result)} - - return jsonify(result) - - -class V1TaskLog(ApiResource): - """ V1TaskLog Resource class""" - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/task_log.yaml')) - def get(self, task_id): # pylint: disable=no-self-use - """ GET the log of the task id """ - try: - uuid.UUID(task_id) - except ValueError: - return api_utils.result_handler(status=1, data='Invalid task id') - - task_handler = TasksHandler() - try: - task = task_handler.get_task_by_taskid(task_id) - except ValueError: - return api_utils.result_handler(status=1, data='No such task id') - - task_log_dir = getattr(config.CONF, 'dir_results') - # pylint: disable=maybe-no-member - index = int(self._get_args().get('index', 0)) - - try: - with open(os.path.join(task_log_dir, - '{}.log'.format(task_id)), 'r') as log_file: - log_file.seek(index) - data = log_file.readlines() - index = log_file.tell() - except OSError as err: - if err.errno == errno.ENOENT: - return api_utils.result_handler( - status=1, data='Log file does not exist') - - return api_utils.result_handler( - status=1, data='Error with log file') - - return_data = {'data': data, 'index': index} - - switcher = {'IN PROGRESS': 0, 'FAIL': 1, 'FINISHED': 2} - - return api_utils.result_handler(status=switcher.get(task.status), - data=return_data) diff --git a/functest/api/resources/v1/testcases.py b/functest/api/resources/v1/testcases.py deleted file mode 100644 index 2dbf97e4..00000000 --- a/functest/api/resources/v1/testcases.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# 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 - -""" -Resources to handle testcase related requests -""" - -import ConfigParser -import logging -import os -import re -import socket -import uuid - -from flask import jsonify -from flasgger.utils import swag_from -import pkg_resources - -from functest.api.base import ApiResource -from functest.api.common import api_utils, thread -from functest.cli.commands.cli_testcase import Testcase -from functest.api.database.v1.handlers import TasksHandler -from functest.utils import config -from functest.utils import env -import functest.utils.functest_utils as ft_utils - -LOGGER = logging.getLogger(__name__) - -ADDRESS = socket.gethostbyname(socket.gethostname()) -ENDPOINT_TESTCASES = ('http://{}:5000/api/v1/functest/testcases' - .format(ADDRESS)) - - -class V1Testcases(ApiResource): - """ V1Testcases Resource class""" - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/testcases.yaml')) - def get(self): # pylint: disable=no-self-use - """ GET all testcases """ - testcases_list = Testcase().list() - result = {'testcases': re.split(' |\n ', testcases_list)[1:]} - return jsonify(result) - - -class V1Testcase(ApiResource): - """ V1Testcase Resource class""" - - @swag_from( - pkg_resources.resource_filename('functest', - 'api/swagger/testcase.yaml'), - endpoint='{0}/'.format(ENDPOINT_TESTCASES)) - def get(self, testcase_name): # pylint: disable=no-self-use - """ GET the info of one testcase""" - testcase = Testcase().show(testcase_name) - if not testcase: - return api_utils.result_handler( - status=1, - data="The test case '%s' does not exist or is not supported" - % testcase_name) - - testcase_info = api_utils.change_obj_to_dict(testcase) - dependency_dict = api_utils.change_obj_to_dict( - testcase_info.get('dependency')) - testcase_info.pop('name') - testcase_info.pop('dependency') - result = {'testcase': testcase_name} - result.update(testcase_info) - result.update({'dependency': dependency_dict}) - return jsonify(result) - - @swag_from( - pkg_resources.resource_filename('functest', - 'api/swagger/testcase_run.yaml'), - endpoint='{0}/action'.format(ENDPOINT_TESTCASES)) - def post(self): - """ Used to handle post request """ - return self._dispatch_post() - - def run_test_case(self, args): - """ Run a testcase """ - try: - case_name = args['testcase'] - except KeyError: - return api_utils.result_handler( - status=1, data='testcase name must be provided') - - testcase = Testcase().show(case_name) - if not testcase: - return api_utils.result_handler( - status=1, - data="The test case '%s' does not exist or is not supported" - % case_name) - - task_id = str(uuid.uuid4()) - - task_args = {'testcase': case_name, 'task_id': task_id} - - task_args.update(args.get('opts', {})) - - task_thread = thread.TaskThread(self._run, task_args, TasksHandler()) - task_thread.start() - - result = {'testcase': case_name, 'task_id': task_id} - return jsonify({'result': result}) - - def _run(self, args): # pylint: disable=no-self-use - """ The built_in function to run a test case """ - - case_name = args.get('testcase') - self._update_logging_ini(args.get('task_id')) - - try: - cmd = "run_tests -t {}".format(case_name) - runner = ft_utils.execute_command(cmd) - except Exception: # pylint: disable=broad-except - result = 'FAIL' - LOGGER.exception("Running test case %s failed!", case_name) - if runner == os.EX_OK: - result = 'PASS' - else: - result = 'FAIL' - - env_info = { - 'installer': env.get('INSTALLER_TYPE'), - 'scenario': env.get('DEPLOY_SCENARIO'), - 'build_tag': env.get('BUILD_TAG'), - 'ci_loop': env.get('CI_LOOP') - } - result = { - 'task_id': args.get('task_id'), - 'testcase': case_name, - 'env_info': env_info, - 'result': result - } - - return {'result': result} - - def _update_logging_ini(self, task_id): # pylint: disable=no-self-use - """ Update the log file for each task""" - rconfig = ConfigParser.RawConfigParser() - rconfig.read( - pkg_resources.resource_filename('functest', 'ci/logging.ini')) - log_path = os.path.join(getattr(config.CONF, 'dir_results'), - '{}.log'.format(task_id)) - rconfig.set('handler_file', 'args', '("{}",)'.format(log_path)) - - with open( - pkg_resources.resource_filename( - 'functest', 'ci/logging.ini'), 'wb') as configfile: - rconfig.write(configfile) diff --git a/functest/api/resources/v1/tiers.py b/functest/api/resources/v1/tiers.py deleted file mode 100644 index 523df130..00000000 --- a/functest/api/resources/v1/tiers.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. -# -# 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 - -""" -Resources to handle tier related requests -""" - -import pkg_resources -import re - -from flask import jsonify -from flasgger.utils import swag_from - -from functest.api.base import ApiResource -from functest.api.common import api_utils -from functest.cli.commands.cli_tier import Tier - - -class V1Tiers(ApiResource): - """ V1Tiers Resource class """ - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/tiers.yaml')) - def get(self): - # pylint: disable=no-self-use - """ GET all tiers """ - tiers_list = Tier().list() - data = re.split("[\n\t]", tiers_list) - data = [i.strip() for i in data if i != ''] - data_dict = dict() - for i in range(len(data) / 2): - one_data = {data[i * 2].lstrip('- ').rstrip(':'): data[i * 2 + 1]} - if i == 0: - data_dict = one_data - else: - data_dict.update(one_data) - result = {'tiers': data_dict} - return jsonify(result) - - -class V1Tier(ApiResource): - """ V1Tier Resource class """ - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/tier.yaml')) - def get(self, tier_name): # pylint: disable=no-self-use - """ GET the info of one tier """ - tier_info = Tier().show(tier_name) - if not tier_info: - return api_utils.result_handler( - status=1, - data="The tier with name '%s' does not exist." % tier_name) - tier_info.__dict__.pop('name') - tier_info.__dict__.pop('tests_array') - tier_info.__dict__.pop('skipped_tests_array') - testcases = Tier().gettests(tier_name) - result = {'tier': tier_name, 'testcases': testcases} - result.update(tier_info.__dict__) - return jsonify(result) - - -class V1TestcasesinTier(ApiResource): - """ V1TestcasesinTier Resource class """ - - @swag_from(pkg_resources.resource_filename( - 'functest', 'api/swagger/testcases_in_tier.yaml')) - def get(self, tier_name): # pylint: disable=no-self-use - """ GET all testcases within given tier """ - tier_info = Tier().show(tier_name) - if not tier_info: - return api_utils.result_handler( - status=1, - data="The tier with name '%s' does not exist." % tier_name) - testcases = Tier().gettests(tier_name) - result = {'tier': tier_name, 'testcases': testcases} - return jsonify(result) -- cgit 1.2.3-korg