Merge "test APi evolution add filter to retrieve last results"
authorMorgan Richomme <morgan.richomme@orange.com>
Sat, 4 Jun 2016 16:59:51 +0000 (16:59 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Sat, 4 Jun 2016 16:59:52 +0000 (16:59 +0000)
utils/test/result_collection_api/opnfv_testapi/dashboard/dashboard_utils.py
utils/test/result_collection_api/opnfv_testapi/resources/dashboard_handlers.py
utils/test/result_collection_api/opnfv_testapi/router/url_mappings.py
utils/test/result_collection_api/opnfv_testapi/tests/unit/test_dashboard_project.py [new file with mode: 0644]
utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py

index 090aaa5..f331e28 100644 (file)
@@ -67,6 +67,22 @@ def get_dashboard_cases():
     return modules
 
 
+def get_dashboard_projects():
+    # Retrieve all the projects that could provide
+    # Dashboard ready graphs
+    # look in the releng repo
+    # search all the project2Dashboard.py files
+    # we assume that dashboard processing of project <Project>
+    # is performed in the <Project>2Dashboard.py file
+    projects = []
+    cp = re.compile('opnfv_testapi\.dashboard\.(.+?)2Dashboard')
+    for module in sys.modules:
+        project = re.findall(cp, module)
+        if project:
+            projects.extend(project)
+    return projects
+
+
 def get_dashboard_result(project, case, results=None):
     # get the dashboard ready results
     # paramters are:
index 84e7bc1..303e8d1 100644 (file)
@@ -11,8 +11,8 @@ from tornado.web import HTTPError
 
 from opnfv_testapi.common.constants import HTTP_NOT_FOUND
 from opnfv_testapi.dashboard.dashboard_utils import \
-    check_dashboard_ready_project, \
-    check_dashboard_ready_case, get_dashboard_result
+    check_dashboard_ready_project, check_dashboard_ready_case, \
+    get_dashboard_result, get_dashboard_projects
 from opnfv_testapi.resources.result_handlers import GenericResultHandler
 from opnfv_testapi.resources.result_models import TestResult
 from opnfv_testapi.tornado_swagger import swagger
@@ -107,3 +107,14 @@ class DashboardHandler(GenericDashboardHandler):
                 return get_dashboard_result(project, case, res)
 
             self._list(self.set_query(), get_result, project_arg, case_arg)
+
+
+class DashboardProjectsHandler(GenericDashboardHandler):
+    @swagger.operation(nickname='list')
+    def get(self):
+        """
+            @description: Retrieve dashboard ready project(s)
+            @rtype: L{list}
+            @return 200: return all dashboard ready project(s)
+        """
+        self.finish_request(get_dashboard_projects())
index 874754b..695c27d 100644 (file)
@@ -14,7 +14,8 @@ from opnfv_testapi.resources.project_handlers import ProjectCLHandler, \
     ProjectGURHandler
 from opnfv_testapi.resources.result_handlers import ResultsCLHandler, \
     ResultsGURHandler
-from opnfv_testapi.resources.dashboard_handlers import DashboardHandler
+from opnfv_testapi.resources.dashboard_handlers import DashboardHandler, \
+    DashboardProjectsHandler
 
 
 mappings = [
@@ -53,4 +54,5 @@ mappings = [
     # get /dashboard
     #  => get the list of project with dashboard ready results
     (r"/dashboard/v1/results", DashboardHandler),
+    (r"/dashboard/v1/projects", DashboardProjectsHandler),
 ]
diff --git a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_dashboard_project.py b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_dashboard_project.py
new file mode 100644 (file)
index 0000000..f9d2015
--- /dev/null
@@ -0,0 +1,20 @@
+import json
+
+from opnfv_testapi.common.constants import HTTP_OK
+from test_base import TestBase
+
+
+class TestDashboardProjectBase(TestBase):
+    def setUp(self):
+        super(TestDashboardProjectBase, self).setUp()
+        self.basePath = '/dashboard/v1/projects'
+        self.list_res = None
+        self.projects = ['bottlenecks', 'doctor', 'functest',
+                         'promise', 'qtip', 'vsperf', 'yardstick']
+
+
+class TestDashboardProjectGet(TestDashboardProjectBase):
+    def test_list(self):
+        code, body = self.get()
+        self.assertEqual(code, HTTP_OK)
+        self.assertItemsEqual(self.projects, json.loads(body))
index fc1e9ba..5a5dd38 100644 (file)
@@ -7,16 +7,15 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 import unittest
-import copy
 
-from test_base import TestBase
+from opnfv_testapi.common.constants import HTTP_OK, HTTP_BAD_REQUEST, \
+    HTTP_NOT_FOUND
 from opnfv_testapi.resources.pod_models import PodCreateRequest
 from opnfv_testapi.resources.project_models import ProjectCreateRequest
-from opnfv_testapi.resources.testcase_models import TestcaseCreateRequest
 from opnfv_testapi.resources.result_models import ResultCreateRequest, \
     TestResult, TestResults
-from opnfv_testapi.common.constants import HTTP_OK, HTTP_BAD_REQUEST, \
-    HTTP_NOT_FOUND
+from opnfv_testapi.resources.testcase_models import TestcaseCreateRequest
+from test_base import TestBase
 
 
 class Details(object):