summaryrefslogtreecommitdiffstats
path: root/utils/test/result_collection_api/resources
diff options
context:
space:
mode:
authorSerenaFeng <feng.xiaowei@zte.com.cn>2016-06-01 15:36:17 +0800
committerSerenaFeng <feng.xiaowei@zte.com.cn>2016-06-01 16:21:46 +0800
commita55651eb098da2e1aa90c93294a59857711b48c1 (patch)
tree654e3adace1e4ae1690d9612c5d7b1704a607a5e /utils/test/result_collection_api/resources
parente0d66ea067ea59724c1dc300abe8052d4dcf88d1 (diff)
project-ize testAPI
JIRA: FUNCTEST-284 Change-Id: I219e934bb11f50de84df2aa0345ecc7885223491 Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
Diffstat (limited to 'utils/test/result_collection_api/resources')
-rw-r--r--utils/test/result_collection_api/resources/__init__.py8
-rw-r--r--utils/test/result_collection_api/resources/dashboard_handlers.py99
-rw-r--r--utils/test/result_collection_api/resources/handlers.py230
-rw-r--r--utils/test/result_collection_api/resources/models.py70
-rw-r--r--utils/test/result_collection_api/resources/pod_handlers.py79
-rw-r--r--utils/test/result_collection_api/resources/pod_models.py79
-rw-r--r--utils/test/result_collection_api/resources/project_handlers.py84
-rw-r--r--utils/test/result_collection_api/resources/project_models.py88
-rw-r--r--utils/test/result_collection_api/resources/result_handlers.py162
-rw-r--r--utils/test/result_collection_api/resources/result_models.py162
-rw-r--r--utils/test/result_collection_api/resources/testcase_handlers.py107
-rw-r--r--utils/test/result_collection_api/resources/testcase_models.py99
12 files changed, 0 insertions, 1267 deletions
diff --git a/utils/test/result_collection_api/resources/__init__.py b/utils/test/result_collection_api/resources/__init__.py
deleted file mode 100644
index 05c0c9392..000000000
--- a/utils/test/result_collection_api/resources/__init__.py
+++ /dev/null
@@ -1,8 +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
-##############################################################################
diff --git a/utils/test/result_collection_api/resources/dashboard_handlers.py b/utils/test/result_collection_api/resources/dashboard_handlers.py
deleted file mode 100644
index 320fcc2be..000000000
--- a/utils/test/result_collection_api/resources/dashboard_handlers.py
+++ /dev/null
@@ -1,99 +0,0 @@
-from tornado.web import HTTPError
-
-from common.constants import HTTP_NOT_FOUND
-from dashboard.dashboard_utils import check_dashboard_ready_project, \
- check_dashboard_ready_case, get_dashboard_result
-from resources.result_handlers import GenericResultHandler
-from resources.result_models import TestResult
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-class GenericDashboardHandler(GenericResultHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericDashboardHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_results
- self.table_cls = TestResult
-
-
-class DashboardHandler(GenericDashboardHandler):
- @swagger.operation(nickname='query')
- def get(self):
- """
- @description: Retrieve dashboard ready result(s)
- for a test project
- @notes: Retrieve dashboard ready result(s) for a test project
- Available filters for this request are :
- - project : project name
- - case : case name
- - pod : pod name
- - version : platform version (Arno-R1, ...)
- - installer (fuel, ...)
- - period : x (x last days)
-
- GET /dashboard?project=functest&case=vPing&version=Colorado \
- &pod=pod_name&period=15
- @rtype: L{string}
- @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: True
- @param case: case name
- @type case: L{string}
- @in case: query
- @required case: True
- @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 period: last days
- @type period: L{string}
- @in period: query
- @required period: False
- @return 200: test result exist
- @raise 400: period is not in
- @raise 404: project or case name missing,
- or project or case is not dashboard ready
- """
-
- project_arg = self.get_query_argument("project", None)
- case_arg = self.get_query_argument("case", None)
-
- # on /dashboard retrieve the list of projects and testcases
- # ready for dashboard
- if project_arg is None:
- raise HTTPError(HTTP_NOT_FOUND, "Project name missing")
-
- if not check_dashboard_ready_project(project_arg):
- raise HTTPError(HTTP_NOT_FOUND,
- 'Project [{}] not dashboard ready'
- .format(project_arg))
-
- if case_arg is None:
- raise HTTPError(
- HTTP_NOT_FOUND,
- 'Test case missing for project [{}]'.format(project_arg))
-
- if not check_dashboard_ready_case(project_arg, case_arg):
- raise HTTPError(
- HTTP_NOT_FOUND,
- 'Test case [{}] not dashboard ready for project [{}]'
- .format(case_arg, project_arg))
-
- # special case of status for project
- if case_arg == 'status':
- self.finish_request(get_dashboard_result(project_arg, case_arg))
- else:
- def get_result(res, project, case):
- return get_dashboard_result(project, case, res)
-
- self._list(self.set_query(), get_result, project_arg, case_arg)
diff --git a/utils/test/result_collection_api/resources/handlers.py b/utils/test/result_collection_api/resources/handlers.py
deleted file mode 100644
index 0977ef07e..000000000
--- a/utils/test/result_collection_api/resources/handlers.py
+++ /dev/null
@@ -1,230 +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
-##############################################################################
-
-import json
-from datetime import datetime
-
-from tornado.web import RequestHandler, asynchronous, HTTPError
-from tornado import gen
-
-from models import CreateResponse
-from common.constants import DEFAULT_REPRESENTATION, HTTP_BAD_REQUEST, \
- HTTP_NOT_FOUND, HTTP_FORBIDDEN
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-class GenericApiHandler(RequestHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericApiHandler, self).__init__(application, request, **kwargs)
- self.db = self.settings["db"]
- 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'
-
- def prepare(self):
- if self.request.method != "GET" and self.request.method != "DELETE":
- 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:
- raise HTTPError(HTTP_BAD_REQUEST,
- "Bad Json format [{}]".
- format(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 CreateResponse(href=href).format()
-
- def format_data(self, data):
- cls_data = self.table_cls.from_dict(data)
- return cls_data.format_http()
-
- @asynchronous
- @gen.coroutine
- def _create(self, miss_checks, db_checks, **kwargs):
- """
- :param miss_checks: [miss1, miss2]
- :param db_checks: [(table, exist, query, error)]
- """
- if self.json_args is None:
- raise HTTPError(HTTP_BAD_REQUEST, "no body")
-
- data = self.table_cls.from_dict(self.json_args)
- for miss in miss_checks:
- miss_data = data.__getattribute__(miss)
- if miss_data is None or miss_data == '':
- raise HTTPError(HTTP_BAD_REQUEST,
- '{} missing'.format(miss))
-
- for k, v in kwargs.iteritems():
- data.__setattr__(k, v)
-
- for table, exist, query, error in db_checks:
- check = yield self._eval_db_find_one(query(data), table)
- if (exist and not check) or (not exist and check):
- code, message = error(data)
- raise HTTPError(code, message)
-
- data.creation_date = datetime.now()
- _id = yield self._eval_db(self.table, 'insert', data.format())
- if 'name' in self.json_args:
- resource = data.name
- else:
- resource = _id
- self.finish_request(self._create_response(resource))
-
- @asynchronous
- @gen.coroutine
- def _list(self, query=None, res_op=None, *args):
- if query is None:
- query = {}
- data = []
- cursor = self._eval_db(self.table, 'find', query)
- 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)
- self.finish_request(res)
-
- @asynchronous
- @gen.coroutine
- def _get_one(self, query):
- data = yield self._eval_db_find_one(query)
- if data is None:
- raise HTTPError(HTTP_NOT_FOUND,
- "[{}] not exist in table [{}]"
- .format(query, self.table))
- self.finish_request(self.format_data(data))
-
- @asynchronous
- @gen.coroutine
- def _delete(self, query):
- data = yield self._eval_db_find_one(query)
- if data is None:
- raise HTTPError(HTTP_NOT_FOUND,
- "[{}] not exit in table [{}]"
- .format(query, self.table))
-
- yield self._eval_db(self.table, 'remove', query)
- self.finish_request()
-
- @asynchronous
- @gen.coroutine
- def _update(self, query, db_keys):
- if self.json_args is None:
- raise HTTPError(HTTP_BAD_REQUEST, "No payload")
-
- # check old data exist
- from_data = yield self._eval_db_find_one(query)
- if from_data is None:
- raise HTTPError(HTTP_NOT_FOUND,
- "{} could not be found in table [{}]"
- .format(query, self.table))
-
- data = self.table_cls.from_dict(from_data)
- # check new data exist
- equal, new_query = self._update_query(db_keys, data)
- if not equal:
- to_data = yield self._eval_db_find_one(new_query)
- if to_data is not None:
- raise HTTPError(HTTP_FORBIDDEN,
- "{} already exists in table [{}]"
- .format(new_query, self.table))
-
- # we merge the whole document """
- edit_request = data.format()
- edit_request.update(self._update_requests(data))
-
- """ Updating the DB """
- yield self._eval_db(self.table, 'update', query, edit_request)
- edit_request['_id'] = str(data._id)
- self.finish_request(edit_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:
- raise HTTPError(HTTP_FORBIDDEN, "Nothing to update")
- return 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 len(new_value) > 0:
- 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.__getattribute__(key)
- if new is None:
- new = old
- elif new != old:
- equal = False
- query[key] = new
- return equal, query
-
- def _eval_db(self, table, method, *args):
- return eval('self.db.%s.%s(*args)' % (table, method))
-
- def _eval_db_find_one(self, query, table=None):
- if table is None:
- table = self.table
- return self._eval_db(table, 'find_one', query)
-
-
-class VersionHandler(GenericApiHandler):
- @swagger.operation(nickname='list')
- 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/result_collection_api/resources/models.py b/utils/test/result_collection_api/resources/models.py
deleted file mode 100644
index 7241bb7a8..000000000
--- a/utils/test/result_collection_api/resources/models.py
+++ /dev/null
@@ -1,70 +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 mv Pod to pod_models.py 5-18-2016
-# feng.xiaowei@zte.com.cn add MetaCreateResponse/MetaGetResponse 5-18-2016
-# feng.xiaowei@zte.com.cn mv TestProject to project_models.py 5-19-2016
-# feng.xiaowei@zte.com.cn delete meta class 5-19-2016
-# feng.xiaowei@zte.com.cn add CreateResponse 5-19-2016
-# feng.xiaowei@zte.com.cn mv TestCase to testcase_models.py 5-20-2016
-# feng.xiaowei@zte.com.cn mv TestResut to result_models.py 5-23-2016
-##############################################################################
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-class CreateResponse(object):
- def __init__(self, href=''):
- self.href = href
-
- @staticmethod
- def from_dict(res_dict):
- if res_dict is None:
- return None
-
- res = CreateResponse()
- res.href = res_dict.get('href')
- return res
-
- def format(self):
- return {'href': self.href}
-
-
-@swagger.model()
-class Versions(object):
- """
- @property versions:
- @ptype versions: C{list} of L{Version}
- """
- def __init__(self):
- self.versions = list()
-
- @staticmethod
- def from_dict(res_dict):
- if res_dict is None:
- return None
-
- res = Versions()
- for version in res_dict.get('versions'):
- res.versions.append(Version.from_dict(version))
- return res
-
-
-@swagger.model()
-class Version(object):
- def __init__(self, version=None, description=None):
- self.version = version
- self.description = description
-
- @staticmethod
- def from_dict(a_dict):
- if a_dict is None:
- return None
-
- ver = Version()
- ver.version = a_dict.get('version')
- ver.description = str(a_dict.get('description'))
- return ver
diff --git a/utils/test/result_collection_api/resources/pod_handlers.py b/utils/test/result_collection_api/resources/pod_handlers.py
deleted file mode 100644
index 9f583bbfc..000000000
--- a/utils/test/result_collection_api/resources/pod_handlers.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-from handlers import GenericApiHandler
-from pod_models import Pod
-from common.constants import HTTP_FORBIDDEN
-
-
-class GenericPodHandler(GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericPodHandler, self).__init__(application, request, **kwargs)
- self.table = 'pods'
- self.table_cls = Pod
-
-
-class PodCLHandler(GenericPodHandler):
- @swagger.operation(nickname='list-all')
- 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='create')
- def post(self):
- """
- @description: create a pod
- @param body: pod to be created
- @type body: L{PodCreateRequest}
- @in body: body
- @rtype: L{Pod}
- @return 200: pod is created.
- @raise 403: pod already exists
- @raise 400: body or name not provided
- """
- def query(data):
- return {'name': data.name}
-
- def error(data):
- message = '{} already exists as a pod'.format(data.name)
- return HTTP_FORBIDDEN, message
-
- miss_checks = ['name']
- db_checks = [(self.table, False, query, error)]
- self._create(miss_checks, db_checks)
-
-
-class PodGURHandler(GenericPodHandler):
- @swagger.operation(nickname='get-one')
- 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
- """
- query = dict()
- query['name'] = pod_name
- self._get_one(query)
-
- 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/result_collection_api/resources/pod_models.py b/utils/test/result_collection_api/resources/pod_models.py
deleted file mode 100644
index 0ccb66162..000000000
--- a/utils/test/result_collection_api/resources/pod_models.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-
-__author__ = '__serena__'
-
-# name: name of the POD e.g. zte-1
-# mode: metal or virtual
-# details: any detail
-# role: ci-pod or community-pod or single-node
-
-
-@swagger.model()
-class PodCreateRequest(object):
- def __init__(self, name, mode='', details='', role=""):
- self.name = name
- self.mode = mode
- self.details = details
- self.role = role
-
- def format(self):
- return {
- "name": self.name,
- "mode": self.mode,
- "details": self.details,
- "role": self.role,
- }
-
-
-@swagger.model()
-class Pod(PodCreateRequest):
- def __init__(self,
- name='', mode='', details='',
- role="", _id='', create_date=''):
- super(Pod, self).__init__(name, mode, details, role)
- self._id = _id
- self.creation_date = create_date
-
- @staticmethod
- def from_dict(pod_dict):
- if pod_dict is None:
- return None
-
- p = Pod()
- p._id = pod_dict.get('_id')
- p.creation_date = str(pod_dict.get('creation_date'))
- p.name = pod_dict.get('name')
- p.mode = pod_dict.get('mode')
- p.details = pod_dict.get('details')
- p.role = pod_dict.get('role')
- return p
-
- def format(self):
- f = super(Pod, self).format()
- f['creation_date'] = str(self.creation_date)
- return f
-
- def format_http(self):
- f = self.format()
- f['_id'] = str(self._id)
- return f
-
-
-@swagger.model()
-class Pods(object):
- """
- @property pods:
- @ptype pods: C{list} of L{Pod}
- """
- def __init__(self):
- self.pods = list()
-
- @staticmethod
- def from_dict(res_dict):
- if res_dict is None:
- return None
-
- res = Pods()
- for pod in res_dict.get('pods'):
- res.pods.append(Pod.from_dict(pod))
- return res
diff --git a/utils/test/result_collection_api/resources/project_handlers.py b/utils/test/result_collection_api/resources/project_handlers.py
deleted file mode 100644
index 0bc1a61bd..000000000
--- a/utils/test/result_collection_api/resources/project_handlers.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-from handlers import GenericApiHandler
-from common.constants import HTTP_FORBIDDEN
-from project_models import Project
-
-
-class GenericProjectHandler(GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericProjectHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = 'projects'
- self.table_cls = Project
-
-
-class ProjectCLHandler(GenericProjectHandler):
- @swagger.operation(nickname="list-all")
- 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="create")
- def post(self):
- """
- @description: create a project
- @param body: project to be created
- @type body: L{ProjectCreateRequest}
- @in body: body
- @rtype: L{Project}
- @return 200: project is created.
- @raise 403: project already exists
- @raise 400: body or name not provided
- """
- def query(data):
- return {'name': data.name}
-
- def error(data):
- message = '{} already exists as a project'.format(data.name)
- return HTTP_FORBIDDEN, message
-
- miss_checks = ['name']
- db_checks = [(self.table, False, query, error)]
- self._create(miss_checks, db_checks)
-
-
-class ProjectGURHandler(GenericProjectHandler):
- @swagger.operation(nickname='get-one')
- 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({'name': project_name})
-
- @swagger.operation(nickname="update")
- 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, db_keys)
-
- @swagger.operation(nickname='delete')
- def delete(self, project_name):
- """
- @description: delete a project by project_name
- @return 200: delete success
- @raise 404: project not exist
- """
- self._delete({'name': project_name})
diff --git a/utils/test/result_collection_api/resources/project_models.py b/utils/test/result_collection_api/resources/project_models.py
deleted file mode 100644
index 1dc0c40e5..000000000
--- a/utils/test/result_collection_api/resources/project_models.py
+++ /dev/null
@@ -1,88 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-
-__author__ = '__serena__'
-
-
-@swagger.model()
-class ProjectCreateRequest(object):
- def __init__(self, name, description=''):
- self.name = name
- self.description = description
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- }
-
-
-@swagger.model()
-class ProjectUpdateRequest(object):
- def __init__(self, name='', description=''):
- self.name = name
- self.description = description
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- }
-
-
-@swagger.model()
-class Project(object):
- def __init__(self,
- name=None, _id=None, description=None, create_date=None):
- self._id = _id
- self.name = name
- self.description = description
- self.creation_date = create_date
-
- @staticmethod
- def from_dict(res_dict):
-
- if res_dict is None:
- return None
-
- t = Project()
- t._id = res_dict.get('_id')
- t.creation_date = res_dict.get('creation_date')
- t.name = res_dict.get('name')
- t.description = res_dict.get('description')
-
- return t
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- "creation_date": str(self.creation_date)
- }
-
- def format_http(self):
- return {
- "_id": str(self._id),
- "name": self.name,
- "description": self.description,
- "creation_date": str(self.creation_date),
- }
-
-
-@swagger.model()
-class Projects(object):
- """
- @property projects:
- @ptype projects: C{list} of L{Project}
- """
- def __init__(self):
- self.projects = list()
-
- @staticmethod
- def from_dict(res_dict):
- if res_dict is None:
- return None
-
- res = Projects()
- for project in res_dict.get('projects'):
- res.projects.append(Project.from_dict(project))
- return res
diff --git a/utils/test/result_collection_api/resources/result_handlers.py b/utils/test/result_collection_api/resources/result_handlers.py
deleted file mode 100644
index f745d6331..000000000
--- a/utils/test/result_collection_api/resources/result_handlers.py
+++ /dev/null
@@ -1,162 +0,0 @@
-from datetime import datetime, timedelta
-
-from bson.objectid import ObjectId
-from tornado.web import HTTPError
-
-from common.constants import HTTP_BAD_REQUEST, HTTP_NOT_FOUND
-from resources.handlers import GenericApiHandler
-from resources.result_models import TestResult
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-class GenericResultHandler(GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericResultHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_results
- self.table_cls = TestResult
-
- def set_query(self):
- query = dict()
- 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':
- try:
- v = int(v)
- except:
- raise HTTPError(HTTP_BAD_REQUEST, 'period must be int')
- if v > 0:
- period = datetime.now() - timedelta(days=v)
- obj = {"$gte": str(period)}
- query['start_date'] = obj
- elif k == 'trust_indicator':
- query[k] = float(v)
- else:
- query[k] = v
- return query
-
-
-class ResultsCLHandler(GenericResultHandler):
- @swagger.operation(nickname="list-all")
- 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, ...)
- - build_tag : Jenkins build tag name
- - period : x (x last days)
- - 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
-
- GET /results/project=functest&case=vPing&version=Arno-R1 \
- &pod=pod_name&period=15
- @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: True
- @param case: case name
- @type case: L{string}
- @in case: query
- @required case: True
- @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 trust_indicator: must be int/long/float
- @type trust_indicator: L{string}
- @in trust_indicator: query
- @required trust_indicator: False
- """
- self._list(self.set_query())
-
- @swagger.operation(nickname="create")
- def post(self):
- """
- @description: create a test result
- @param body: result to be created
- @type body: L{ResultCreateRequest}
- @in body: body
- @rtype: L{TestResult}
- @return 200: result is created.
- @raise 404: pod/project/testcase not exist
- @raise 400: body/pod_name/project_name/case_name not provided
- """
- def pod_query(data):
- return {'name': data.pod_name}
-
- def pod_error(data):
- message = 'Could not find pod [{}]'.format(data.pod_name)
- return HTTP_NOT_FOUND, message
-
- def project_query(data):
- return {'name': data.project_name}
-
- def project_error(data):
- message = 'Could not find project [{}]'.format(data.project_name)
- return HTTP_NOT_FOUND, message
-
- def testcase_query(data):
- return {'project_name': data.project_name, 'name': data.case_name}
-
- def testcase_error(data):
- message = 'Could not find testcase [{}] in project [{}]'\
- .format(data.case_name, data.project_name)
- return HTTP_NOT_FOUND, message
-
- miss_checks = ['pod_name', 'project_name', 'case_name']
- db_checks = [('pods', True, pod_query, pod_error),
- ('projects', True, project_query, project_error),
- ('testcases', True, testcase_query, testcase_error)]
- self._create(miss_checks, db_checks)
-
-
-class ResultsGURHandler(GenericResultHandler):
- @swagger.operation(nickname='get-one')
- 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(result_id)
- self._get_one(query)
diff --git a/utils/test/result_collection_api/resources/result_models.py b/utils/test/result_collection_api/resources/result_models.py
deleted file mode 100644
index 40d21c331..000000000
--- a/utils/test/result_collection_api/resources/result_models.py
+++ /dev/null
@@ -1,162 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-@swagger.model()
-class ResultCreateRequest(object):
- def __init__(self,
- pod_name=None,
- project_name=None,
- case_name=None,
- installer=None,
- version=None,
- start_date=None,
- stop_date=None,
- details=None,
- build_tag=None,
- scenario=None,
- criteria=None,
- trust_indicator=None):
- self.pod_name = pod_name
- self.project_name = project_name
- self.case_name = case_name
- self.installer = installer
- self.version = version
- self.start_date = start_date
- self.stop_date = stop_date
- self.details = details
- self.build_tag = build_tag
- self.scenario = scenario
- self.criteria = criteria
- self.trust_indicator = trust_indicator
-
- def format(self):
- return {
- "pod_name": self.pod_name,
- "project_name": self.project_name,
- "case_name": self.case_name,
- "installer": self.installer,
- "version": self.version,
- "start_date": self.start_date,
- "stop_date": self.stop_date,
- "details": self.details,
- "build_tag": self.build_tag,
- "scenario": self.scenario,
- "criteria": self.criteria,
- "trust_indicator": self.trust_indicator
- }
-
-
-@swagger.model()
-class TestResult(object):
- """
- @property trust_indicator: must be int/long/float
- @ptype trust_indicator: L{float}
- """
- def __init__(self, _id=None, case_name=None, project_name=None,
- pod_name=None, installer=None, version=None,
- start_date=None, stop_date=None, details=None,
- build_tag=None, scenario=None, criteria=None,
- trust_indicator=None):
- self._id = _id
- self.case_name = case_name
- self.project_name = project_name
- self.pod_name = pod_name
- self.installer = installer
- self.version = version
- self.start_date = start_date
- self.stop_date = stop_date
- self.details = details
- self.build_tag = build_tag
- self.scenario = scenario
- self.criteria = criteria
- self.trust_indicator = trust_indicator
-
- @staticmethod
- def from_dict(a_dict):
-
- if a_dict is None:
- return None
-
- t = TestResult()
- t._id = a_dict.get('_id')
- t.case_name = a_dict.get('case_name')
- t.pod_name = a_dict.get('pod_name')
- t.project_name = a_dict.get('project_name')
- t.description = a_dict.get('description')
- t.start_date = str(a_dict.get('start_date'))
- t.stop_date = str(a_dict.get('stop_date'))
- t.details = a_dict.get('details')
- t.version = a_dict.get('version')
- t.installer = a_dict.get('installer')
- t.build_tag = a_dict.get('build_tag')
- t.scenario = a_dict.get('scenario')
- t.criteria = a_dict.get('criteria')
- # 0 < trust indicator < 1
- # if bad value => set this indicator to 0
- t.trust_indicator = a_dict.get('trust_indicator')
- if t.trust_indicator is not None:
- if isinstance(t.trust_indicator, (int, long, float)):
- if t.trust_indicator < 0:
- t.trust_indicator = 0
- elif t.trust_indicator > 1:
- t.trust_indicator = 1
- else:
- t.trust_indicator = 0
- else:
- t.trust_indicator = 0
- return t
-
- def format(self):
- return {
- "case_name": self.case_name,
- "project_name": self.project_name,
- "pod_name": self.pod_name,
- "description": self.description,
- "start_date": str(self.start_date),
- "stop_date": str(self.stop_date),
- "version": self.version,
- "installer": self.installer,
- "details": self.details,
- "build_tag": self.build_tag,
- "scenario": self.scenario,
- "criteria": self.criteria,
- "trust_indicator": self.trust_indicator
- }
-
- def format_http(self):
- return {
- "_id": str(self._id),
- "case_name": self.case_name,
- "project_name": self.project_name,
- "pod_name": self.pod_name,
- "description": self.description,
- "start_date": str(self.start_date),
- "stop_date": str(self.stop_date),
- "version": self.version,
- "installer": self.installer,
- "details": self.details,
- "build_tag": self.build_tag,
- "scenario": self.scenario,
- "criteria": self.criteria,
- "trust_indicator": self.trust_indicator
- }
-
-
-@swagger.model()
-class TestResults(object):
- """
- @property results:
- @ptype results: C{list} of L{TestResult}
- """
- def __init__(self):
- self.results = list()
-
- @staticmethod
- def from_dict(a_dict):
- if a_dict is None:
- return None
-
- res = TestResults()
- for result in a_dict.get('results'):
- res.results.append(TestResult.from_dict(result))
- return res
diff --git a/utils/test/result_collection_api/resources/testcase_handlers.py b/utils/test/result_collection_api/resources/testcase_handlers.py
deleted file mode 100644
index 8f3bea617..000000000
--- a/utils/test/result_collection_api/resources/testcase_handlers.py
+++ /dev/null
@@ -1,107 +0,0 @@
-from common.constants import HTTP_FORBIDDEN
-from resources.handlers import GenericApiHandler
-from resources.testcase_models import Testcase
-from tornado_swagger_ui.tornado_swagger import swagger
-
-
-class GenericTestcaseHandler(GenericApiHandler):
- def __init__(self, application, request, **kwargs):
- super(GenericTestcaseHandler, self).__init__(application,
- request,
- **kwargs)
- self.table = self.db_testcases
- self.table_cls = Testcase
-
-
-class TestcaseCLHandler(GenericTestcaseHandler):
- @swagger.operation(nickname="list-all")
- 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}
- """
- query = dict()
- query['project_name'] = project_name
- self._list(query)
-
- @swagger.operation(nickname="create")
- 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{Testcase}
- @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 p_query(data):
- return {'name': data.project_name}
-
- def tc_query(data):
- return {
- 'project_name': data.project_name,
- 'name': data.name
- }
-
- def p_error(data):
- message = 'Could not find project [{}]'.format(data.project_name)
- return HTTP_FORBIDDEN, message
-
- def tc_error(data):
- message = '{} already exists as a testcase in project {}'\
- .format(data.name, data.project_name)
- return HTTP_FORBIDDEN, message
-
- miss_checks = ['name']
- db_checks = [(self.db_projects, True, p_query, p_error),
- (self.db_testcases, False, tc_query, tc_error)]
- self._create(miss_checks, db_checks, project_name=project_name)
-
-
-class TestcaseGURHandler(GenericTestcaseHandler):
- @swagger.operation(nickname='get-one')
- 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)
-
- @swagger.operation(nickname="update")
- 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, db_keys)
-
- @swagger.operation(nickname='delete')
- 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)
diff --git a/utils/test/result_collection_api/resources/testcase_models.py b/utils/test/result_collection_api/resources/testcase_models.py
deleted file mode 100644
index a69f2f751..000000000
--- a/utils/test/result_collection_api/resources/testcase_models.py
+++ /dev/null
@@ -1,99 +0,0 @@
-from tornado_swagger_ui.tornado_swagger import swagger
-
-__author__ = '__serena__'
-
-
-@swagger.model()
-class TestcaseCreateRequest(object):
- def __init__(self, name, url=None, description=None):
- self.name = name
- self.url = url
- self.description = description
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- "url": self.url,
- }
-
-
-@swagger.model()
-class TestcaseUpdateRequest(object):
- def __init__(self, name=None, description=None, project_name=None):
- self.name = name
- self.description = description
- self.project_name = project_name
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- "project_name": self.project_name,
- }
-
-
-@swagger.model()
-class Testcase(object):
- def __init__(self):
- self._id = None
- self.name = None
- self.project_name = None
- self.description = None
- self.url = None
- self.creation_date = None
-
- @staticmethod
- def from_dict(a_dict):
-
- if a_dict is None:
- return None
-
- t = Testcase()
- t._id = a_dict.get('_id')
- t.project_name = a_dict.get('project_name')
- t.creation_date = a_dict.get('creation_date')
- t.name = a_dict.get('name')
- t.description = a_dict.get('description')
- t.url = a_dict.get('url')
-
- return t
-
- def format(self):
- return {
- "name": self.name,
- "description": self.description,
- "project_name": self.project_name,
- "creation_date": str(self.creation_date),
- "url": self.url
- }
-
- def format_http(self):
- return {
- "_id": str(self._id),
- "name": self.name,
- "project_name": self.project_name,
- "description": self.description,
- "creation_date": str(self.creation_date),
- "url": self.url,
- }
-
-
-@swagger.model()
-class Testcases(object):
- """
- @property testcases:
- @ptype testcases: C{list} of L{Testcase}
- """
- def __init__(self):
- self.testcases = list()
-
- @staticmethod
- def from_dict(res_dict):
- if res_dict is None:
- return None
-
- res = Testcases()
- for testcase in res_dict.get('testcases'):
- res.testcases.append(Testcase.from_dict(testcase))
- return res