====== Test Result Collection Api ====== ====== Description ====== The mission of this project is to provide a common way for gathering all the results of OPNFV tests projects into a single place. It should expose a REST API for the collect of results and push them into a MongoDB database. {{:collection_of_results_api.png?800|}} ====== Database ====== The goal is to have three main collections in a Mongo DB: * tests projects * test cases * test results {{:results_collection_structure.png?800|}} The test result are stored in json format in the test results collection. The json format include a details field. This field shall be used to provide the details on the results. These details may be used later for the dashboard. "details": { "timestart": 1444395967.9822, "duration": 40.9, "status": "OK" } ====== Data model ====== **Test projects** [ { "id": "", "name": "", "creation_date": "YYYY-MM-DD HH:MM:SS", "description":"" }, {...} ] **Test cases** [ { "id": "", "name":"", "creation_date": "YYYY-MM-DD HH:MM:SS", "description": "", "url":"" }, {...} ] **Test results** [ { "_id": "", "project_name": "", "pod_name": "", "version": "", "installer": "", "description": "", "creation_date": "YYYY-MM-DD HH:MM:SS", "case_name": "" "details":{ <- the results to be put here -> } }, ] ====== REST API ====== The temp Mongo DB + API is hosted in an Orange public VM (http://213.77.62.197). ==== Version ==== ^Method ^Path ^Description ^ | GET | /version | API version | ==== Pods ==== ^Method ^Path ^Description ^ | GET | /pods | Get the list of declared PODs | | POST | /pods | Create a new POD \\ Content-Type: application/json \\ { \\ "name": "pod-foo", \\ "creation_date": "YYYY-MM-DD HH:MM:SS" \\ } | ==== Test projects ==== ^Method ^Path ^Description ^ | GET | /test_projects | Give the list of test projects | | GET | /test_projects/{project_name} | Give details on the selected project | | POST | /test_projects | Add a Test project \\ Content-Type: application/json \\ { \\ "name": "project-foo", \\ "description": "Example with project foo" \\ } | | PUT | /test_projects/{project_name} | Update project \\ { \\ \\ } | | DELETE | /test_projects/{project_name} | Delete project \\ Content-Type: application/json \\ { \\ } | ==== Test cases ==== ^Method ^Path ^Description ^ | GET | /test_projects/{project_name}/cases | Give details on the testcases of the foo project | | POST | /test_projects/{project_name}/cases | Add test cases \\ Content-Type: application/json \\ { \\ "url": "", \\ "creation_date": "YYYY-MM-DD HH:MM:SS", \\ "name": "vFoo", \\ "description": "vFoo use case" \\ } | | PUT | /test_projects/{project_name}?case_name={case_name} | Modify a test case \\ Content-Type: application/json \\ { \\ < the field(s) to be modified > \\ } | | DELETE | | Remove a test case \\ Content-Type: application/json | ==== test results ==== ^Method ^Path ^Description ^ | GET | /results | Get all the test results | | GET | /results/project={test_project_name} | Get all the results of the test project {test_project_name} | | GET | /results/case={test_case_name} | Get all the results of the test case {test_case_name} | | GET | /results?pod={pod_name} | Get all the results executed on pod {pod_name} | | GET | /results?installer={installer_name} | Get all the results done with installer {installer_name} | | GET | /results?version={version_name} | Get all the results done with version {version_name} | | GET | /results?period={days} | Get all the results stored since {Days} days | | GET | /results?project={test_project_name}&case={case_name}[&installer={installer_name}&version={version_name}&pod={pod_name}&period={days}] | Get all the results of the test case {case_name} of the project {project_name} with version {version_name} installed by installer {installer_name} on POD {pod_name} stored since {days} days \\ {project_name} and {case_name} are mandatory, the other parameters are optional | | POST |/results | Add test result in the Database \\ Content-Type: application/json \\ { \\ "project_name": {project_name}, \\ "case_name": {case_name}, \\ "pod_name": {pod_name}, \\ "installer": {installer_name}, \\ "version":{version_name}, \\ "details": { } \\ } | ==== test results ==== ^Method ^Path ^Description ^ | GET | /dashboard | Get all the test projects providing dashboard ready results | | GET | dashboard?project={project_name}&case={case_name}[&pod={pod_name}&installer={installer_name}&version={version_name}&period={days}] | Get all the results (in dashboard ready format) of the test case {case_name} of the project {project_name} with version {version_name} installed by installer {installer_name} on POD [pod_name} stored since {days} days \\ {project_name} and {case_name} are mandatory, the other parameters are optional |