summaryrefslogtreecommitdiffstats
path: root/functest/api/resources/v1
diff options
context:
space:
mode:
Diffstat (limited to 'functest/api/resources/v1')
-rw-r--r--functest/api/resources/v1/__init__.py0
-rw-r--r--functest/api/resources/v1/creds.py80
-rw-r--r--functest/api/resources/v1/envs.py83
-rw-r--r--functest/api/resources/v1/tasks.py111
-rw-r--r--functest/api/resources/v1/testcases.py157
-rw-r--r--functest/api/resources/v1/tiers.py82
6 files changed, 0 insertions, 513 deletions
diff --git a/functest/api/resources/v1/__init__.py b/functest/api/resources/v1/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/functest/api/resources/v1/__init__.py
+++ /dev/null
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}/<testcase_name>'.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)