From 7d69a1eae658fae6c7437e0a8316312cb625acb5 Mon Sep 17 00:00:00 2001 From: akhilbatra898 Date: Sat, 18 Mar 2017 14:16:26 +0530 Subject: Add unit tests for List and get in API. - refactor controllers - remove abspath and other irrelvant data in response - move fixtures - refactor decorators JIRA: QTIP-226 Change-Id: I5fac5b1bc998da198098992e7ddb47ba49685f31 Signed-off-by: akhilbatra898 (cherry picked from commit bef693f40ad87170b7233b9fef62f2fd8abfc8d8) --- qtip/api/controllers/common.py | 15 +++++++++++---- qtip/api/controllers/metric.py | 13 ++++++------- qtip/api/controllers/plan.py | 25 +++++++++---------------- qtip/api/controllers/qpi.py | 21 +++++++-------------- 4 files changed, 33 insertions(+), 41 deletions(-) (limited to 'qtip/api/controllers') diff --git a/qtip/api/controllers/common.py b/qtip/api/controllers/common.py index 6cabbc7f..96101f80 100644 --- a/qtip/api/controllers/common.py +++ b/qtip/api/controllers/common.py @@ -5,15 +5,22 @@ import connexion from qtip.base import error -def get_one_exceptions(resource): +def check_endpoint_for_error(resource, operation=None): def _decorator(func): - def _execute(name): + def _execute(name=None): try: return func(name), httplib.OK except error.NotFoundError: return connexion.problem( httplib.NOT_FOUND, - '{} Not Found'.format(resource), - 'Requested {} `{}` not found.'.format(resource, name)) + '{} not found'.format(resource), + 'Requested {} `{}` not found.' + .format(resource.lower(), name)) + except error.ToBeDoneError: + return connexion.problem( + httplib.NOT_IMPLEMENTED, + '{} handler not implemented'.format(operation), + 'Requested operation `{}` on {} not implemented.' + .format(operation.lower(), resource.lower())) return _execute return _decorator diff --git a/qtip/api/controllers/metric.py b/qtip/api/controllers/metric.py index dd4c8ac6..96cd985c 100644 --- a/qtip/api/controllers/metric.py +++ b/qtip/api/controllers/metric.py @@ -14,13 +14,12 @@ from qtip.loader import metric def list_metrics(): - metric_list = list(metric.MetricSpec.list_all()) - return metric_list, httplib.OK + metrics = list(metric.MetricSpec.list_all()) + metrics_by_name = [m['name'] for m in metrics] + return {'metrics': metrics_by_name}, httplib.OK -@common.get_one_exceptions(resource='metric') +@common.check_endpoint_for_error(resource='Metric') def get_metric(name): - metric_spec = metric.MetricSpec(name) - return {'name': metric_spec.name, - 'abspath': metric_spec.abspath, - 'content': metric_spec.content} + metric_spec = metric.MetricSpec(name) + return metric_spec.content diff --git a/qtip/api/controllers/plan.py b/qtip/api/controllers/plan.py index 93836a32..00593878 100644 --- a/qtip/api/controllers/plan.py +++ b/qtip/api/controllers/plan.py @@ -9,30 +9,23 @@ import httplib -import connexion - +from qtip.api.controllers import common from qtip.base import error from qtip.loader import plan def list_plans(): - plan_list = list(plan.Plan.list_all()) - return plan_list, httplib.OK + plans = list(plan.Plan.list_all()) + plans_by_name = [p['name'] for p in plans] + return {'plans': plans_by_name}, httplib.OK +@common.check_endpoint_for_error(resource='Plan') def get_plan(name): - try: - plan_spec = plan.Plan(name) - return {'name': plan_spec.name, - 'abspath': plan_spec.abspath, - 'content': plan_spec.content}, httplib.OK - except error.NotFoundError: - return connexion.problem(httplib.NOT_FOUND, - 'Plan Not Found', - 'requested plan `' + name + '` not found.') + plan_spec = plan.Plan(name) + return plan_spec.content +@common.check_endpoint_for_error(resource='Plan', operation='Run') def run_plan(name, action="run"): - return connexion.problem(httplib.NOT_IMPLEMENTED, - 'Run a plan', - 'Plan runner not implemented') + raise error.ToBeDoneError('run_plan', 'plan') diff --git a/qtip/api/controllers/qpi.py b/qtip/api/controllers/qpi.py index 3c4dd718..af08a824 100644 --- a/qtip/api/controllers/qpi.py +++ b/qtip/api/controllers/qpi.py @@ -9,24 +9,17 @@ import httplib -import connexion - -from qtip.base import error +from qtip.api.controllers import common from qtip.loader import qpi def list_qpis(): - qpi_spec_list = list(qpi.QPISpec.list_all()) - return qpi_spec_list, httplib.OK + qpi_specs = list(qpi.QPISpec.list_all()) + qpis_by_name = [q['name'] for q in qpi_specs] + return {'qpis': qpis_by_name}, httplib.OK +@common.check_endpoint_for_error(resource='QPI') def get_qpi(name): - try: - qpi_spec = qpi.QPISpec(name) - return {'name': qpi_spec.name, - 'abspath': qpi_spec.abspath, - 'content': qpi_spec.content}, httplib.OK - except error.NotFoundError: - return connexion.problem(httplib.NOT_FOUND, - 'QPI Not Found', - 'Requested QPI Spec `' + name + '` not found.') + qpi_spec = qpi.QPISpec(name) + return qpi_spec.content -- cgit 1.2.3-korg