summaryrefslogtreecommitdiffstats
path: root/utils/test/testapi/opnfv_testapi/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'utils/test/testapi/opnfv_testapi/handlers')
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/__init__.py0
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/base_handlers.py257
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/pod_handlers.py78
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/project_handlers.py86
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/result_handlers.py288
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/root_handlers.py10
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/scenario_handlers.py775
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/sign_handlers.py59
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/testcase_handlers.py103
-rw-r--r--utils/test/testapi/opnfv_testapi/handlers/user_handlers.py25
10 files changed, 0 insertions, 1681 deletions
diff --git a/utils/test/testapi/opnfv_testapi/handlers/__init__.py b/utils/test/testapi/opnfv_testapi/handlers/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/__init__.py
+++ /dev/null
diff --git a/utils/test/testapi/opnfv_testapi/handlers/base_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/base_handlers.py
deleted file mode 100644
index a8ee3db2b..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/base_handlers.py
+++ /dev/null
@@ -1,257 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Orange
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
-# 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
-# feng.xiaowei@zte.com.cn refactor db.pod to db.pods 5-19-2016
-# feng.xiaowei@zte.com.cn refactor test_project to project 5-19-2016
-# feng.xiaowei@zte.com.cn refactor response body 5-19-2016
-# feng.xiaowei@zte.com.cn refactor pod/project response info 5-19-2016
-# feng.xiaowei@zte.com.cn refactor testcase related handler 5-20-2016
-# feng.xiaowei@zte.com.cn refactor result related handler 5-23-2016
-# feng.xiaowei@zte.com.cn refactor dashboard related handler 5-24-2016
-# feng.xiaowei@zte.com.cn add methods to GenericApiHandler 5-26-2016
-# feng.xiaowei@zte.com.cn remove PodHandler 5-26-2016
-# feng.xiaowei@zte.com.cn remove ProjectHandler 5-26-2016
-# feng.xiaowei@zte.com.cn remove TestcaseHandler 5-27-2016
-# feng.xiaowei@zte.com.cn remove ResultHandler 5-29-2016
-# feng.xiaowei@zte.com.cn remove DashboardHandler 5-30-2016
-##############################################################################
-
-from datetime import datetime
-import json
-
-from tornado import gen
-from tornado import web
-
-from opnfv_testapi.common import check
-from opnfv_testapi.common import message
-from opnfv_testapi.common import raises
-from opnfv_testapi.db import api as dbapi
-from opnfv_testapi.models import base_models
-from opnfv_testapi.tornado_swagger import swagger
-
-DEFAULT_REPRESENTATION = "application/json"
-
-
-class GenericApiHandler(web.RequestHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericApiHandler, self).__init__(application, request, **kwargs)
- self.json_args = None
- self.table = None
- self.table_cls = None
- self.db_projects = 'projects'
- self.db_pods = 'pods'
- self.db_testcases = 'testcases'
- self.db_results = 'results'
- self.db_scenarios = 'scenarios'
- self.auth = self.settings["auth"]
-
- def prepare(self):
- if self.request.body:
- if self.request.headers.get("Content-Type") is not None:
- if self.request.headers["Content-Type"].startswith(
- DEFAULT_REPRESENTATION):
- try:
- self.json_args = json.loads(self.request.body)
- except (ValueError, KeyError, TypeError) as error:
- raises.BadRequest(message.bad_format(str(error)))
-
- def finish_request(self, json_object=None):
- if json_object:
- self.write(json.dumps(json_object))
- self.set_header("Content-Type", DEFAULT_REPRESENTATION)
- self.finish()
-
- def _create_response(self, resource):
- href = self.request.full_url() + '/' + str(resource)
- return base_models.CreateResponse(href=href).format()
-
- def format_data(self, data):
- cls_data = self.table_cls.from_dict(data)
- return cls_data.format_http()
-
- @web.asynchronous
- @gen.coroutine
- @check.is_authorized
- @check.valid_token
- @check.no_body
- @check.miss_fields
- @check.values_check
- @check.carriers_exist
- @check.new_not_exists
- def _create(self, **kwargs):
- """
- :param miss_checks: [miss1, miss2]
- :param db_checks: [(table, exist, query, error)]
- """
- data = self.table_cls.from_dict(self.json_args)
- for k, v in kwargs.iteritems():
- if k != 'query':
- data.__setattr__(k, v)
-
- if self.table != 'results':
- data.creation_date = datetime.now()
- _id = yield dbapi.db_save(self.table, data.format())
- if 'name' in self.json_args:
- resource = data.name
- else:
- resource = _id
- self.finish_request(self._create_response(resource))
-
- @web.asynchronous
- @gen.coroutine
- def _list(self, query=None, res_op=None, *args, **kwargs):
- sort = kwargs.get('sort')
- page = kwargs.get('page', 0)
- last = kwargs.get('last', 0)
- per_page = kwargs.get('per_page', 0)
- if query is None:
- query = {}
- pipelines = list()
- pipelines.append({'$match': query})
-
- total_pages = 0
- data = list()
- cursor = dbapi.db_list(self.table, query)
- records_count = yield cursor.count()
- if records_count > 0:
- if page > 0:
- total_pages, return_nr = self._calc_total_pages(records_count,
- last,
- page,
- per_page)
- pipelines = self._set_pipelines(pipelines,
- sort,
- return_nr,
- page,
- per_page)
- cursor = dbapi.db_aggregate(self.table, pipelines)
- while (yield cursor.fetch_next):
- data.append(self.format_data(cursor.next_object()))
- if res_op is None:
- res = {self.table: data}
- else:
- res = res_op(data, *args)
- if page > 0:
- res.update({
- 'pagination': {
- 'current_page': kwargs.get('page'),
- 'total_pages': total_pages
- }
- })
- self.finish_request(res)
-
- @staticmethod
- def _calc_total_pages(records_count, last, page, per_page):
- records_nr = records_count
- if (records_count > last) and (last > 0):
- records_nr = last
-
- total_pages, remainder = divmod(records_nr, per_page)
- if remainder > 0:
- total_pages += 1
- if page > 1 and page > total_pages:
- raises.BadRequest(
- 'Request page > total_pages [{}]'.format(total_pages))
- return total_pages, records_nr
-
- @staticmethod
- def _set_pipelines(pipelines, sort, return_nr, page, per_page):
- if sort:
- pipelines.append({'$sort': sort})
-
- over = (page - 1) * per_page
- left = return_nr - over
- pipelines.append({'$skip': over})
- pipelines.append({'$limit': per_page if per_page < left else left})
-
- return pipelines
-
- @web.asynchronous
- @gen.coroutine
- @check.not_exist
- def _get_one(self, data, query=None):
- self.finish_request(self.format_data(data))
-
- @web.asynchronous
- @gen.coroutine
- @check.not_exist
- def _delete(self, data, query=None):
- yield dbapi.db_delete(self.table, query)
- self.finish_request()
-
- @web.asynchronous
- @gen.coroutine
- @check.no_body
- @check.not_exist
- @check.updated_one_not_exist
- def _update(self, data, query=None, **kwargs):
- data = self.table_cls.from_dict(data)
- update_req = self._update_requests(data)
- yield dbapi.db_update(self.table, query, update_req)
- update_req['_id'] = str(data._id)
- self.finish_request(update_req)
-
- @web.asynchronous
- @gen.coroutine
- @check.no_body
- @check.not_exist
- @check.updated_one_not_exist
- def pure_update(self, data, query=None, **kwargs):
- data = self.table_cls.from_dict(data)
- update_req = self._update_requests(data)
- yield dbapi.db_update(self.table, query, update_req)
- self.finish_request()
-
- def _update_requests(self, data):
- request = dict()
- for k, v in self.json_args.iteritems():
- request = self._update_request(request, k, v,
- data.__getattribute__(k))
- if not request:
- raises.Forbidden(message.no_update())
-
- edit_request = data.format()
- edit_request.update(request)
- return edit_request
-
- @staticmethod
- def _update_request(edit_request, key, new_value, old_value):
- """
- This function serves to prepare the elements in the update request.
- We try to avoid replace the exact values in the db
- edit_request should be a dict in which we add an entry (key) after
- comparing values
- """
- if not (new_value is None):
- if new_value != old_value:
- edit_request[key] = new_value
-
- return edit_request
-
- def _update_query(self, keys, data):
- query = dict()
- equal = True
- for key in keys:
- new = self.json_args.get(key)
- old = data.get(key)
- if new is None:
- new = old
- elif new != old:
- equal = False
- query[key] = new
- return query if not equal else dict()
-
-
-class VersionHandler(GenericApiHandler):
- @swagger.operation(nickname='listAllVersions')
- def get(self):
- """
- @description: list all supported versions
- @rtype: L{Versions}
- """
- versions = [{'version': 'v1.0', 'description': 'basics'}]
- self.finish_request({'versions': versions})
diff --git a/utils/test/testapi/opnfv_testapi/handlers/pod_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/pod_handlers.py
deleted file mode 100644
index abf5bf9f1..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/pod_handlers.py
+++ /dev/null
@@ -1,78 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Orange
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
-# 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
-##############################################################################
-from opnfv_testapi.handlers import base_handlers
-from opnfv_testapi.models import pod_models
-from opnfv_testapi.tornado_swagger import swagger
-
-
-class GenericPodHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericPodHandler, self).__init__(application, request, **kwargs)
- self.table = 'pods'
- self.table_cls = pod_models.Pod
-
-
-class PodCLHandler(GenericPodHandler):
- @swagger.operation(nickname='listAllPods')
- def get(self):
- """
- @description: list all pods
- @return 200: list all pods, empty list is no pod exist
- @rtype: L{Pods}
- """
- self._list()
-
- @swagger.operation(nickname='createPod')
- def post(self):
- """
- @description: create a pod
- @param body: pod to be created
- @type body: L{PodCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: pod is created.
- @raise 403: pod already exists
- @raise 400: body or name not provided
- """
- def query():
- return {'name': self.json_args.get('name')}
- miss_fields = ['name']
- self._create(miss_fields=miss_fields, query=query)
-
-
-class PodGURHandler(GenericPodHandler):
- @swagger.operation(nickname='getPodByName')
- def get(self, pod_name):
- """
- @description: get a single pod by pod_name
- @rtype: L{Pod}
- @return 200: pod exist
- @raise 404: pod not exist
- """
- self._get_one(query={'name': pod_name})
-
- def delete(self, pod_name):
- """ Remove a POD
-
- # check for an existing pod to be deleted
- mongo_dict = yield self.db.pods.find_one(
- {'name': pod_name})
- pod = TestProject.pod(mongo_dict)
- if pod is None:
- raise HTTPError(HTTP_NOT_FOUND,
- "{} could not be found as a pod to be deleted"
- .format(pod_name))
-
- # just delete it, or maybe save it elsewhere in a future
- res = yield self.db.projects.remove(
- {'name': pod_name})
-
- self.finish_request(answer)
- """
- pass
diff --git a/utils/test/testapi/opnfv_testapi/handlers/project_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/project_handlers.py
deleted file mode 100644
index 30d9ab34a..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/project_handlers.py
+++ /dev/null
@@ -1,86 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Orange
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
-# 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
-##############################################################################
-
-from opnfv_testapi.handlers import base_handlers
-from opnfv_testapi.models import project_models
-from opnfv_testapi.tornado_swagger import swagger
-
-
-class GenericProjectHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericProjectHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = 'projects'
- self.table_cls = project_models.Project
-
-
-class ProjectCLHandler(GenericProjectHandler):
- @swagger.operation(nickname="listAllProjects")
- def get(self):
- """
- @description: list all projects
- @return 200: return all projects, empty list is no project exist
- @rtype: L{Projects}
- """
- self._list()
-
- @swagger.operation(nickname="createProject")
- def post(self):
- """
- @description: create a project
- @param body: project to be created
- @type body: L{ProjectCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: project is created.
- @raise 403: project already exists
- @raise 400: body or name not provided
- """
- def query():
- return {'name': self.json_args.get('name')}
- miss_fields = ['name']
- self._create(miss_fields=miss_fields, query=query)
-
-
-class ProjectGURHandler(GenericProjectHandler):
- @swagger.operation(nickname='getProjectByName')
- def get(self, project_name):
- """
- @description: get a single project by project_name
- @rtype: L{Project}
- @return 200: project exist
- @raise 404: project not exist
- """
- self._get_one(query={'name': project_name})
-
- @swagger.operation(nickname="updateProjectByName")
- def put(self, project_name):
- """
- @description: update a single project by project_name
- @param body: project to be updated
- @type body: L{ProjectUpdateRequest}
- @in body: body
- @rtype: L{Project}
- @return 200: update success
- @raise 404: project not exist
- @raise 403: new project name already exist or nothing to update
- """
- query = {'name': project_name}
- db_keys = ['name']
- self._update(query=query, db_keys=db_keys)
-
- @swagger.operation(nickname='deleteProjectByName')
- def delete(self, project_name):
- """
- @description: delete a project by project_name
- @return 200: delete success
- @raise 404: project not exist
- """
- self._delete(query={'name': project_name})
diff --git a/utils/test/testapi/opnfv_testapi/handlers/result_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/result_handlers.py
deleted file mode 100644
index c4b61ff22..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/result_handlers.py
+++ /dev/null
@@ -1,288 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Orange
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
-# 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
-##############################################################################
-from datetime import datetime
-from datetime import timedelta
-import json
-import logging
-
-from bson import objectid
-
-from opnfv_testapi.common import constants
-from opnfv_testapi.common import message
-from opnfv_testapi.common import raises
-from opnfv_testapi.common.config import CONF
-from opnfv_testapi.handlers import base_handlers
-from opnfv_testapi.models import result_models
-from opnfv_testapi.tornado_swagger import swagger
-
-
-class GenericResultHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericResultHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_results
- self.table_cls = result_models.TestResult
-
- def get_int(self, key, value):
- try:
- value = int(value)
- except Exception:
- raises.BadRequest(message.must_int(key))
- return value
-
- def set_query(self):
- query = dict()
- date_range = dict()
-
- query['public'] = {'$not': {'$eq': 'false'}}
- for k in self.request.query_arguments.keys():
- v = self.get_query_argument(k)
- if k == 'project' or k == 'pod' or k == 'case':
- query[k + '_name'] = v
- elif k == 'period':
- v = self.get_int(k, v)
- if v > 0:
- period = datetime.now() - timedelta(days=v)
- obj = {"$gte": str(period)}
- query['start_date'] = obj
- elif k == 'trust_indicator':
- query[k + '.current'] = float(v)
- elif k == 'from':
- date_range.update({'$gte': str(v)})
- elif k == 'to':
- date_range.update({'$lt': str(v)})
- elif k == 'signed':
- username = self.get_secure_cookie(constants.TESTAPI_ID)
- role = self.get_secure_cookie(constants.ROLE)
- if role:
- del query['public']
- if role != "reviewer":
- query['user'] = username
- elif k not in ['last', 'page', 'descend']:
- query[k] = v
- if date_range:
- query['start_date'] = date_range
-
- # if $lt is not provided,
- # empty/None/null/'' start_date will also be returned
- if 'start_date' in query and '$lt' not in query['start_date']:
- query['start_date'].update({'$lt': str(datetime.now())})
-
- return query
-
-
-class ResultsCLHandler(GenericResultHandler):
- @swagger.operation(nickname="queryTestResults")
- def get(self):
- """
- @description: Retrieve result(s) for a test project
- on a specific pod.
- @notes: Retrieve result(s) for a test project on a specific pod.
- Available filters for this request are :
- - project : project name
- - case : case name
- - pod : pod name
- - version : platform version (Arno-R1, ...)
- - installer : fuel/apex/compass/joid/daisy
- - build_tag : Jenkins build tag name
- - period : x last days, incompatible with from/to
- - from : starting time in 2016-01-01 or 2016-01-01 00:01:23
- - to : ending time in 2016-01-01 or 2016-01-01 00:01:23
- - scenario : the test scenario (previously version)
- - criteria : the global criteria status passed or failed
- - trust_indicator : evaluate the stability of the test case
- to avoid running systematically long and stable test case
- - signed : get logined user result
-
- GET /results/project=functest&case=vPing&version=Arno-R1 \
- &pod=pod_name&period=15&signed
- @return 200: all test results consist with query,
- empty list if no result is found
- @rtype: L{TestResults}
- @param pod: pod name
- @type pod: L{string}
- @in pod: query
- @required pod: False
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: False
- @param case: case name
- @type case: L{string}
- @in case: query
- @required case: False
- @param version: i.e. Colorado
- @type version: L{string}
- @in version: query
- @required version: False
- @param installer: fuel/apex/joid/compass
- @type installer: L{string}
- @in installer: query
- @required installer: False
- @param build_tag: i.e. v3.0
- @type build_tag: L{string}
- @in build_tag: query
- @required build_tag: False
- @param scenario: i.e. odl
- @type scenario: L{string}
- @in scenario: query
- @required scenario: False
- @param criteria: i.e. passed
- @type criteria: L{string}
- @in criteria: query
- @required criteria: False
- @param period: last days
- @type period: L{string}
- @in period: query
- @required period: False
- @param from: i.e. 2016-01-01 or 2016-01-01 00:01:23
- @type from: L{string}
- @in from: query
- @required from: False
- @param to: i.e. 2016-01-01 or 2016-01-01 00:01:23
- @type to: L{string}
- @in to: query
- @required to: False
- @param last: last records stored until now
- @type last: L{string}
- @in last: query
- @required last: False
- @param page: which page to list, default to 1
- @type page: L{int}
- @in page: query
- @required page: False
- @param trust_indicator: must be float
- @type trust_indicator: L{float}
- @in trust_indicator: query
- @required trust_indicator: False
- @param signed: user results or all results
- @type signed: L{string}
- @in signed: query
- @required signed: False
- @param descend: true, newest2oldest; false, oldest2newest
- @type descend: L{string}
- @in descend: query
- @required descend: False
- """
- def descend_limit():
- descend = self.get_query_argument('descend', 'true')
- return -1 if descend.lower() == 'true' else 1
-
- def last_limit():
- return self.get_int('last', self.get_query_argument('last', 0))
-
- def page_limit():
- return self.get_int('page', self.get_query_argument('page', 1))
-
- limitations = {
- 'sort': {'_id': descend_limit()},
- 'last': last_limit(),
- 'page': page_limit(),
- 'per_page': CONF.api_results_per_page
- }
-
- self._list(query=self.set_query(), **limitations)
-
- @swagger.operation(nickname="createTestResult")
- def post(self):
- """
- @description: create a test result
- @param body: result to be created
- @type body: L{ResultCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: result is created.
- @raise 404: pod/project/testcase not exist
- @raise 400: body/pod_name/project_name/case_name not provided
- """
- self._post()
-
- def _post(self):
- def pod_query():
- return {'name': self.json_args.get('pod_name')}
-
- def project_query():
- return {'name': self.json_args.get('project_name')}
-
- def testcase_query():
- return {'project_name': self.json_args.get('project_name'),
- 'name': self.json_args.get('case_name')}
-
- def options_check(field, options):
- return self.json_args.get(field).upper() in options
-
- miss_fields = ['pod_name', 'project_name', 'case_name']
- carriers = [('pods', pod_query),
- ('projects', project_query),
- ('testcases', testcase_query)]
- values_check = [('criteria', options_check, ['PASS', 'FAIL'])]
-
- self._create(miss_fields=miss_fields,
- carriers=carriers,
- values_check=values_check)
-
-
-class ResultsUploadHandler(ResultsCLHandler):
- @swagger.operation(nickname="uploadTestResult")
- def post(self):
- """
- @description: upload and create a test result
- @param body: result to be created
- @type body: L{ResultCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: result is created.
- @raise 404: pod/project/testcase not exist
- @raise 400: body/pod_name/project_name/case_name not provided
- """
- logging.info('file upload')
- fileinfo = self.request.files['file'][0]
- is_public = self.get_body_argument('public')
- logging.warning('public:%s', is_public)
- logging.info('results is :%s', fileinfo['filename'])
- logging.info('results is :%s', fileinfo['body'])
- self.json_args = json.loads(fileinfo['body']).copy()
- self.json_args['public'] = is_public
-
- openid = self.get_secure_cookie(constants.TESTAPI_ID)
- if openid:
- self.json_args['user'] = openid
-
- super(ResultsUploadHandler, self)._post()
-
-
-class ResultsGURHandler(GenericResultHandler):
- @swagger.operation(nickname='getTestResultById')
- def get(self, result_id):
- """
- @description: get a single result by result_id
- @rtype: L{TestResult}
- @return 200: test result exist
- @raise 404: test result not exist
- """
- query = dict()
- query["_id"] = objectid.ObjectId(result_id)
- self._get_one(query=query)
-
- @swagger.operation(nickname="updateTestResultById")
- def put(self, result_id):
- """
- @description: update a single result by _id
- @param body: fields to be updated
- @type body: L{ResultUpdateRequest}
- @in body: body
- @rtype: L{Result}
- @return 200: update success
- @raise 404: result not exist
- @raise 403: nothing to update
- """
- query = {'_id': objectid.ObjectId(result_id)}
- db_keys = []
- self._update(query=query, db_keys=db_keys)
diff --git a/utils/test/testapi/opnfv_testapi/handlers/root_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/root_handlers.py
deleted file mode 100644
index 92920fa85..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/root_handlers.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from opnfv_testapi.common.config import CONF
-from opnfv_testapi.handlers import base_handlers
-
-
-class RootHandler(base_handlers.GenericApiHandler):
- def get_template_path(self):
- return CONF.ui_static_path
-
- def get(self):
- self.render('testapi-ui/index.html')
diff --git a/utils/test/testapi/opnfv_testapi/handlers/scenario_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/scenario_handlers.py
deleted file mode 100644
index 67abcfff6..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/scenario_handlers.py
+++ /dev/null
@@ -1,775 +0,0 @@
-import functools
-
-from opnfv_testapi.common import message
-from opnfv_testapi.common import raises
-from opnfv_testapi.handlers import base_handlers
-import opnfv_testapi.models.scenario_models as models
-from opnfv_testapi.tornado_swagger import swagger
-
-
-class GenericScenarioHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericScenarioHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_scenarios
- self.table_cls = models.Scenario
-
- def set_query(self, locators):
- query = dict()
- elem_query = dict()
- for k, v in locators.iteritems():
- if k == 'scenario':
- query['name'] = v
- elif k == 'installer':
- elem_query["installer"] = v
- elif k == 'version':
- elem_query["versions.version"] = v
- elif k == 'project':
- elem_query["versions.projects.project"] = v
- else:
- query[k] = v
- if elem_query:
- query['installers'] = {'$elemMatch': elem_query}
- return query
-
-
-class ScenariosCLHandler(GenericScenarioHandler):
- @swagger.operation(nickname="queryScenarios")
- def get(self):
- """
- @description: Retrieve scenario(s).
- @notes: Retrieve scenario(s)
- Available filters for this request are :
- - name : scenario name
-
- GET /scenarios?name=scenario_1
- @param name: scenario name
- @type name: L{string}
- @in name: query
- @required name: False
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: False
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: False
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: False
- @return 200: all scenarios satisfy queries,
- empty list if no scenario is found
- @rtype: L{Scenarios}
- """
-
- def _set_query():
- query = dict()
- elem_query = dict()
- for k in self.request.query_arguments.keys():
- v = self.get_query_argument(k)
- if k == 'installer':
- elem_query["installer"] = v
- elif k == 'version':
- elem_query["versions.version"] = v
- elif k == 'project':
- elem_query["versions.projects.project"] = v
- else:
- query[k] = v
- if elem_query:
- query['installers'] = {'$elemMatch': elem_query}
- return query
-
- self._list(query=_set_query())
-
- @swagger.operation(nickname="createScenario")
- def post(self):
- """
- @description: create a new scenario by name
- @param body: scenario to be created
- @type body: L{ScenarioCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: scenario is created.
- @raise 403: scenario already exists
- @raise 400: body or name not provided
- """
- def query():
- return {'name': self.json_args.get('name')}
- miss_fields = ['name']
- self._create(miss_fields=miss_fields, query=query)
-
-
-class ScenarioGURHandler(GenericScenarioHandler):
- @swagger.operation(nickname='getScenarioByName')
- def get(self, name):
- """
- @description: get a single scenario by name
- @rtype: L{Scenario}
- @return 200: scenario exist
- @raise 404: scenario not exist
- """
- self._get_one(query={'name': name})
- pass
-
- @swagger.operation(nickname="updateScenarioName")
- def put(self, name):
- """
- @description: update scenario, only rename is supported currently
- @param body: fields to be updated
- @type body: L{ScenarioUpdateRequest}
- @in body: body
- @rtype: L{Scenario}
- @return 200: update success
- @raise 404: scenario not exist
- @raise 403: nothing to update
- """
- query = {'name': name}
- db_keys = ['name']
- self._update(query=query, db_keys=db_keys)
-
- @swagger.operation(nickname="deleteScenarioByName")
- def delete(self, name):
- """
- @description: delete a scenario by name
- @return 200: delete success
- @raise 404: scenario not exist:
- """
- self._delete(query={'name': name})
-
-
-class ScenarioUpdater(object):
- def __init__(self, data, body=None,
- installer=None, version=None, project=None):
- self.data = data
- self.body = body
- self.installer = installer
- self.version = version
- self.project = project
-
- def update(self, item, action):
- updates = {
- ('scores', 'post'): self._update_requests_add_score,
- ('trust_indicators', 'post'): self._update_requests_add_ti,
- ('customs', 'post'): self._update_requests_add_customs,
- ('customs', 'put'): self._update_requests_update_customs,
- ('customs', 'delete'): self._update_requests_delete_customs,
- ('projects', 'post'): self._update_requests_add_projects,
- ('projects', 'put'): self._update_requests_update_projects,
- ('projects', 'delete'): self._update_requests_delete_projects,
- ('owner', 'put'): self._update_requests_change_owner,
- ('versions', 'post'): self._update_requests_add_versions,
- ('versions', 'put'): self._update_requests_update_versions,
- ('versions', 'delete'): self._update_requests_delete_versions,
- ('installers', 'post'): self._update_requests_add_installers,
- ('installers', 'put'): self._update_requests_update_installers,
- ('installers', 'delete'): self._update_requests_delete_installers,
- }
- updates[(item, action)](self.data)
-
- return self.data.format()
-
- def iter_installers(xstep):
- @functools.wraps(xstep)
- def magic(self, data):
- [xstep(self, installer)
- for installer in self._filter_installers(data.installers)]
- return magic
-
- def iter_versions(xstep):
- @functools.wraps(xstep)
- def magic(self, installer):
- [xstep(self, version)
- for version in (self._filter_versions(installer.versions))]
- return magic
-
- def iter_projects(xstep):
- @functools.wraps(xstep)
- def magic(self, version):
- [xstep(self, project)
- for project in (self._filter_projects(version.projects))]
- return magic
-
- @iter_installers
- @iter_versions
- @iter_projects
- def _update_requests_add_score(self, project):
- project.scores.append(
- models.ScenarioScore.from_dict(self.body))
-
- @iter_installers
- @iter_versions
- @iter_projects
- def _update_requests_add_ti(self, project):
- project.trust_indicators.append(
- models.ScenarioTI.from_dict(self.body))
-
- @iter_installers
- @iter_versions
- @iter_projects
- def _update_requests_add_customs(self, project):
- project.customs = list(set(project.customs + self.body))
-
- @iter_installers
- @iter_versions
- @iter_projects
- def _update_requests_update_customs(self, project):
- project.customs = list(set(self.body))
-
- @iter_installers
- @iter_versions
- @iter_projects
- def _update_requests_delete_customs(self, project):
- project.customs = filter(
- lambda f: f not in self.body,
- project.customs)
-
- @iter_installers
- @iter_versions
- def _update_requests_add_projects(self, version):
- version.projects = self._update_with_body(models.ScenarioProject,
- 'project',
- version.projects)
-
- @iter_installers
- @iter_versions
- def _update_requests_update_projects(self, version):
- version.projects = self._update_with_body(models.ScenarioProject,
- 'project',
- list())
-
- @iter_installers
- @iter_versions
- def _update_requests_delete_projects(self, version):
- version.projects = self._remove_projects(version.projects)
-
- @iter_installers
- @iter_versions
- def _update_requests_change_owner(self, version):
- version.owner = self.body.get('owner')
-
- @iter_installers
- def _update_requests_add_versions(self, installer):
- installer.versions = self._update_with_body(models.ScenarioVersion,
- 'version',
- installer.versions)
-
- @iter_installers
- def _update_requests_update_versions(self, installer):
- installer.versions = self._update_with_body(models.ScenarioVersion,
- 'version',
- list())
-
- @iter_installers
- def _update_requests_delete_versions(self, installer):
- installer.versions = self._remove_versions(installer.versions)
-
- def _update_requests_add_installers(self, scenario):
- scenario.installers = self._update_with_body(models.ScenarioInstaller,
- 'installer',
- scenario.installers)
-
- def _update_requests_update_installers(self, scenario):
- scenario.installers = self._update_with_body(models.ScenarioInstaller,
- 'installer',
- list())
-
- def _update_requests_delete_installers(self, scenario):
- scenario.installers = self._remove_installers(scenario.installers)
-
- def _update_with_body(self, clazz, field, withs):
- exists = list()
- malformat = list()
- for new in self.body:
- try:
- format_new = clazz.from_dict_with_raise(new)
- new_name = getattr(format_new, field)
- if not any(getattr(o, field) == new_name for o in withs):
- withs.append(format_new)
- else:
- exists.append(new_name)
- except Exception as error:
- malformat.append(error.message)
- if malformat:
- raises.BadRequest(message.bad_format(malformat))
- elif exists:
- raises.Conflict(message.exist('{}s'.format(field), exists))
- return withs
-
- def _filter_installers(self, installers):
- return self._filter('installer', installers)
-
- def _remove_installers(self, installers):
- return self._remove('installer', installers)
-
- def _filter_versions(self, versions):
- return self._filter('version', versions)
-
- def _remove_versions(self, versions):
- return self._remove('version', versions)
-
- def _filter_projects(self, projects):
- return self._filter('project', projects)
-
- def _remove_projects(self, projects):
- return self._remove('project', projects)
-
- def _filter(self, item, items):
- return filter(
- lambda f: getattr(f, item) == getattr(self, item),
- items)
-
- def _remove(self, field, fields):
- return filter(
- lambda f: getattr(f, field) not in self.body,
- fields)
-
-
-class GenericScenarioUpdateHandler(GenericScenarioHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericScenarioUpdateHandler, self).__init__(application,
- request,
- **kwargs)
- self.installer = None
- self.version = None
- self.project = None
- self.item = None
- self.action = None
-
- def do_update(self, item, action, locators):
- self.item = item
- self.action = action
- for k, v in locators.iteritems():
- if not v:
- v = self.get_query_argument(k)
- setattr(self, k, v)
- locators[k] = v
- self.pure_update(query=self.set_query(locators=locators))
-
- def _update_requests(self, data):
- return ScenarioUpdater(data,
- self.json_args,
- self.installer,
- self.version,
- self.project).update(self.item, self.action)
-
-
-class ScenarioScoresHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addScoreRecord")
- def post(self, scenario):
- """
- @description: add a new score record
- @notes: add a new score record to a project
- POST /api/v1/scenarios/<scenario_name>/scores? \
- installer=<installer_name>& \
- version=<version_name>& \
- project=<project_name>
- @param body: score to be added
- @type body: L{ScenarioScore}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: True
- @return 200: score is created.
- @raise 404: scenario/installer/version/project not existed
- """
- self.do_update('scores',
- 'post',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None,
- 'project': None})
-
-
-class ScenarioTIsHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addTrustIndicatorRecord")
- def post(self, scenario):
- """
- @description: add a new trust indicator record
- @notes: add a new trust indicator record to a project
- POST /api/v1/scenarios/<scenario_name>/trust_indicators? \
- installer=<installer_name>& \
- version=<version_name>& \
- project=<project_name>
- @param body: trust indicator to be added
- @type body: L{ScenarioTI}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: True
- @return 200: trust indicator is added.
- @raise 404: scenario/installer/version/project not existed
- """
- self.do_update('trust_indicators',
- 'post',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None,
- 'project': None})
-
-
-class ScenarioCustomsHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addCustomizedTestCases")
- def post(self, scenario):
- """
- @description: add customized test cases
- @notes: add several test cases to a project
- POST /api/v1/scenarios/<scenario_name>/customs? \
- installer=<installer_name>& \
- version=<version_name>& \
- project=<project_name>
- @param body: test cases to be added
- @type body: C{list} of L{string}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: True
- @return 200: test cases are added.
- @raise 404: scenario/installer/version/project not existed
- """
- self.do_update('customs',
- 'post',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None,
- 'project': None})
-
- @swagger.operation(nickname="updateCustomizedTestCases")
- def put(self, scenario):
- """
- @description: update customized test cases
- @notes: substitute all the customized test cases
- PUT /api/v1/scenarios/<scenario_name>/customs? \
- installer=<installer_name>& \
- version=<version_name>& \
- project=<project_name>
- @param body: new supported test cases
- @type body: C{list} of L{string}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: True
- @return 200: substitute test cases success.
- @raise 404: scenario/installer/version/project not existed
- """
- self.do_update('customs',
- 'put',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None,
- 'project': None})
-
- @swagger.operation(nickname="deleteCustomizedTestCases")
- def delete(self, scenario):
- """
- @description: delete one or several customized test cases
- @notes: delete one or some customized test cases
- DELETE /api/v1/scenarios/<scenario_name>/customs? \
- installer=<installer_name>& \
- version=<version_name>& \
- project=<project_name>
- @param body: test case(s) to be deleted
- @type body: C{list} of L{string}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @param project: project name
- @type project: L{string}
- @in project: query
- @required project: True
- @return 200: delete test case(s) success.
- @raise 404: scenario/installer/version/project not existed
- """
- self.do_update('customs',
- 'delete',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None,
- 'project': None})
-
-
-class ScenarioProjectsHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addProjectsUnderScenario")
- def post(self, scenario):
- """
- @description: add projects to scenario
- @notes: add one or multiple projects
- POST /api/v1/scenarios/<scenario_name>/projects? \
- installer=<installer_name>& \
- version=<version_name>
- @param body: projects to be added
- @type body: C{list} of L{ScenarioProject}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @return 200: projects are added.
- @raise 400: bad schema
- @raise 409: conflict, project already exists
- @raise 404: scenario/installer/version not existed
- """
- self.do_update('projects',
- 'post',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None})
-
- @swagger.operation(nickname="updateScenarioProjects")
- def put(self, scenario):
- """
- @description: replace all projects
- @notes: substitute all projects, delete existed ones with new provides
- PUT /api/v1/scenarios/<scenario_name>/projects? \
- installer=<installer_name>& \
- version=<version_name>
- @param body: new projects
- @type body: C{list} of L{ScenarioProject}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @return 200: replace projects success.
- @raise 400: bad schema
- @raise 404: scenario/installer/version not existed
- """
- self.do_update('projects',
- 'put',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None})
-
- @swagger.operation(nickname="deleteProjectsUnderScenario")
- def delete(self, scenario):
- """
- @description: delete one or multiple projects
- @notes: delete one or multiple projects
- DELETE /api/v1/scenarios/<scenario_name>/projects? \
- installer=<installer_name>& \
- version=<version_name>
- @param body: projects(names) to be deleted
- @type body: C{list} of L{string}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @return 200: delete project(s) success.
- @raise 404: scenario/installer/version not existed
- """
- self.do_update('projects',
- 'delete',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None})
-
-
-class ScenarioOwnerHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="changeScenarioOwner")
- def put(self, scenario):
- """
- @description: change scenario owner
- @notes: substitute all projects, delete existed ones with new provides
- PUT /api/v1/scenarios/<scenario_name>/owner? \
- installer=<installer_name>& \
- version=<version_name>
- @param body: new owner
- @type body: L{ScenarioChangeOwnerRequest}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @param version: version
- @type version: L{string}
- @in version: query
- @required version: True
- @return 200: change owner success.
- @raise 404: scenario/installer/version not existed
- """
- self.do_update('owner',
- 'put',
- locators={'scenario': scenario,
- 'installer': None,
- 'version': None})
-
-
-class ScenarioVersionsHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addVersionsUnderScenario")
- def post(self, scenario):
- """
- @description: add versions to scenario
- @notes: add one or multiple versions
- POST /api/v1/scenarios/<scenario_name>/versions? \
- installer=<installer_name>
- @param body: versions to be added
- @type body: C{list} of L{ScenarioVersion}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @return 200: versions are added.
- @raise 400: bad schema
- @raise 409: conflict, version already exists
- @raise 404: scenario/installer not exist
- """
- self.do_update('versions',
- 'post',
- locators={'scenario': scenario,
- 'installer': None})
-
- @swagger.operation(nickname="updateVersionsUnderScenario")
- def put(self, scenario):
- """
- @description: replace all versions
- @notes: substitute all versions as a totality
- PUT /api/v1/scenarios/<scenario_name>/versions? \
- installer=<installer_name>
- @param body: new versions
- @type body: C{list} of L{ScenarioVersion}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @return 200: replace versions success.
- @raise 400: bad schema
- @raise 404: scenario/installer not exist
- """
- self.do_update('versions',
- 'put',
- locators={'scenario': scenario,
- 'installer': None})
-
- @swagger.operation(nickname="deleteVersionsUnderScenario")
- def delete(self, scenario):
- """
- @description: delete one or multiple versions
- @notes: delete one or multiple versions
- DELETE /api/v1/scenarios/<scenario_name>/versions? \
- installer=<installer_name>
- @param body: versions(names) to be deleted
- @type body: C{list} of L{string}
- @in body: body
- @param installer: installer type
- @type installer: L{string}
- @in installer: query
- @required installer: True
- @return 200: delete versions success.
- @raise 404: scenario/installer not exist
- """
- self.do_update('versions',
- 'delete',
- locators={'scenario': scenario,
- 'installer': None})
-
-
-class ScenarioInstallersHandler(GenericScenarioUpdateHandler):
- @swagger.operation(nickname="addInstallersUnderScenario")
- def post(self, scenario):
- """
- @description: add installers to scenario
- @notes: add one or multiple installers
- POST /api/v1/scenarios/<scenario_name>/installers
- @param body: installers to be added
- @type body: C{list} of L{ScenarioInstaller}
- @in body: body
- @return 200: installers are added.
- @raise 400: bad schema
- @raise 409: conflict, installer already exists
- @raise 404: scenario not exist
- """
- self.do_update('installers',
- 'post',
- locators={'scenario': scenario})
-
- @swagger.operation(nickname="updateInstallersUnderScenario")
- def put(self, scenario):
- """
- @description: replace all installers
- @notes: substitute all installers as a totality
- PUT /api/v1/scenarios/<scenario_name>/installers
- @param body: new installers
- @type body: C{list} of L{ScenarioInstaller}
- @in body: body
- @return 200: replace versions success.
- @raise 400: bad schema
- @raise 404: scenario/installer not exist
- """
- self.do_update('installers',
- 'put',
- locators={'scenario': scenario})
-
- @swagger.operation(nickname="deleteInstallersUnderScenario")
- def delete(self, scenario):
- """
- @description: delete one or multiple installers
- @notes: delete one or multiple installers
- DELETE /api/v1/scenarios/<scenario_name>/installers
- @param body: installers(names) to be deleted
- @type body: C{list} of L{string}
- @in body: body
- @return 200: delete versions success.
- @raise 404: scenario/installer not exist
- """
- self.do_update('installers',
- 'delete',
- locators={'scenario': scenario})
diff --git a/utils/test/testapi/opnfv_testapi/handlers/sign_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/sign_handlers.py
deleted file mode 100644
index 754066256..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/sign_handlers.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from cas import CASClient
-from tornado import gen
-from tornado import web
-
-from opnfv_testapi.common import constants
-from opnfv_testapi.common.config import CONF
-from opnfv_testapi.db import api as dbapi
-from opnfv_testapi.handlers import base_handlers
-
-
-class SignBaseHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(SignBaseHandler, self).__init__(application, request, **kwargs)
- self.table = 'users'
- self.cas_client = CASClient(version='2',
- server_url=CONF.lfid_cas_url,
- service_url='{}/{}'.format(
- CONF.ui_url,
- CONF.lfid_signin_return))
-
-
-class SigninHandler(SignBaseHandler):
- def get(self):
- self.redirect(url=(self.cas_client.get_login_url()))
-
-
-class SigninReturnHandler(SignBaseHandler):
-
- @web.asynchronous
- @gen.coroutine
- def get(self):
- ticket = self.get_query_argument('ticket', default=None)
- if ticket:
- (user, attrs, _) = self.cas_client.verify_ticket(ticket=ticket)
- login_user = {
- 'user': user,
- 'email': attrs.get('mail'),
- 'fullname': attrs.get('field_lf_full_name'),
- 'groups': constants.TESTAPI_USERS + attrs.get('group', [])
- }
- q_user = {'user': user}
- db_user = yield dbapi.db_find_one(self.table, q_user)
- if not db_user:
- dbapi.db_save(self.table, login_user)
- else:
- dbapi.db_update(self.table, q_user, login_user)
-
- self.clear_cookie(constants.TESTAPI_ID)
- self.set_secure_cookie(constants.TESTAPI_ID, user)
-
- self.redirect(url=CONF.ui_url)
-
-
-class SignoutHandler(SignBaseHandler):
- def get(self):
- """Handle signout request."""
- self.clear_cookie(constants.TESTAPI_ID)
- logout_url = self.cas_client.get_logout_url(redirect_url=CONF.ui_url)
- self.redirect(url=logout_url)
diff --git a/utils/test/testapi/opnfv_testapi/handlers/testcase_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/testcase_handlers.py
deleted file mode 100644
index c4c3c21f5..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/testcase_handlers.py
+++ /dev/null
@@ -1,103 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Orange
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
-# 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
-##############################################################################
-
-from opnfv_testapi.handlers import base_handlers
-from opnfv_testapi.models import testcase_models
-from opnfv_testapi.tornado_swagger import swagger
-
-
-class GenericTestcaseHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericTestcaseHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_testcases
- self.table_cls = testcase_models.Testcase
-
-
-class TestcaseCLHandler(GenericTestcaseHandler):
- @swagger.operation(nickname="listAllTestCases")
- def get(self, project_name):
- """
- @description: list all testcases of a project by project_name
- @return 200: return all testcases of this project,
- empty list is no testcase exist in this project
- @rtype: L{TestCases}
- """
- self._list(query={'project_name': project_name})
-
- @swagger.operation(nickname="createTestCase")
- def post(self, project_name):
- """
- @description: create a testcase of a project by project_name
- @param body: testcase to be created
- @type body: L{TestcaseCreateRequest}
- @in body: body
- @rtype: L{CreateResponse}
- @return 200: testcase is created in this project.
- @raise 403: project not exist
- or testcase already exists in this project
- @raise 400: body or name not provided
- """
- def project_query():
- return {'name': project_name}
-
- def testcase_query():
- return {'project_name': project_name,
- 'name': self.json_args.get('name')}
- miss_fields = ['name']
- carriers = [(self.db_projects, project_query)]
- self._create(miss_fields=miss_fields,
- carriers=carriers,
- query=testcase_query,
- project_name=project_name)
-
-
-class TestcaseGURHandler(GenericTestcaseHandler):
- @swagger.operation(nickname='getTestCaseByName')
- def get(self, project_name, case_name):
- """
- @description: get a single testcase
- by case_name and project_name
- @rtype: L{Testcase}
- @return 200: testcase exist
- @raise 404: testcase not exist
- """
- query = dict()
- query['project_name'] = project_name
- query["name"] = case_name
- self._get_one(query=query)
-
- @swagger.operation(nickname="updateTestCaseByName")
- def put(self, project_name, case_name):
- """
- @description: update a single testcase
- by project_name and case_name
- @param body: testcase to be updated
- @type body: L{TestcaseUpdateRequest}
- @in body: body
- @rtype: L{Project}
- @return 200: update success
- @raise 404: testcase or project not exist
- @raise 403: new testcase name already exist in project
- or nothing to update
- """
- query = {'project_name': project_name, 'name': case_name}
- db_keys = ['name', 'project_name']
- self._update(query=query, db_keys=db_keys)
-
- @swagger.operation(nickname='deleteTestCaseByName')
- def delete(self, project_name, case_name):
- """
- @description: delete a testcase by project_name and case_name
- @return 200: delete success
- @raise 404: testcase not exist
- """
- query = {'project_name': project_name, 'name': case_name}
- self._delete(query=query)
diff --git a/utils/test/testapi/opnfv_testapi/handlers/user_handlers.py b/utils/test/testapi/opnfv_testapi/handlers/user_handlers.py
deleted file mode 100644
index 5067e358b..000000000
--- a/utils/test/testapi/opnfv_testapi/handlers/user_handlers.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from opnfv_testapi.common import constants
-from opnfv_testapi.common import raises
-from opnfv_testapi.common.config import CONF
-from opnfv_testapi.handlers import base_handlers
-from opnfv_testapi.models.user_models import User
-
-
-class UserHandler(base_handlers.GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(UserHandler, self).__init__(application, request, **kwargs)
- self.table = 'users'
- self.table_cls = User
-
- def get(self):
- if CONF.api_authenticate:
- username = self.get_secure_cookie(constants.TESTAPI_ID)
- if username:
- self._get_one(query={'user': username})
- else:
- raises.Unauthorized('Unauthorized')
- else:
- self.finish_request(User('anonymous',
- 'anonymous@linuxfoundation.com',
- 'anonymous lf',
- constants.TESTAPI_USERS).format())