This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
collection_of_test_results [2015/07/09 14:09] Guy Rodrigue Koffi |
collection_of_test_results [2016/01/08 13:57] (current) Nauman Ahad |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Test Result Collection Api ====== | ||
+ | |||
+ | |||
====== Description ====== | ====== 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. | 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|}} | + | {{:collection_of_results_api.png?800|}} |
- | ====== REST API ====== | ||
- | Here are the key functions : | + | ====== Database ====== |
- | **Test projects** | + | The goal is to have three main collections in a Mongo DB: |
- | * List all test projects | + | * tests projects |
- | * Details on a specific test project | + | * test cases |
- | * Create a test project | + | * test results |
- | * Update a test project | + | |
+ | {{:results_collection_structure.png?800|}} | ||
- | **Test cases** | + | The test result are stored in json format in the test results collection. |
- | Specifiying a test project : | + | 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. |
- | * List all test cases | + | |
- | * Details on a test case | + | |
- | * Create a test case | + | |
- | * Update a test case | + | |
- | **Test results** | + | <code json> |
- | Specfiying both test project and test case : | + | "details": { |
- | * List all test results | + | |
- | * Details on a test result | + | |
- | * Push a test result | + | |
- | * Remove a test result | + | |
- | This API will rely on JSON to represent states of REST resources. | + | "timestart": 1444395967.9822, |
- | See the full API specification [[collection_api|here]]. | + | "duration": 40.9, |
+ | "status": "OK" | ||
+ | } | ||
+ | </code> | ||
- | ====== Database ====== | + | ====== Data model ====== |
- | + | ||
- | + | ||
- | The goal is to have three main collections : tests projects, test cases and test results related to each other by a numbering system. | + | |
- | The test result would be stored either as plain text or json structure in the test results collection on details field | + | |
- | + | ||
- | {{:results_collection_structure.png|}} | + | |
**Test projects** | **Test projects** | ||
Line 44: | Line 36: | ||
[ | [ | ||
{ | { | ||
- | "id": 1, | + | "id": "", |
- | "name": "functest", | + | "name": "", |
+ | "creation_date": "YYYY-MM-DD HH:MM:SS", | ||
"description":"" | "description":"" | ||
}, | }, | ||
Line 55: | Line 48: | ||
<code json> | <code json> | ||
[ | [ | ||
+ | |||
{ | { | ||
- | "id":1.1, | + | "id": "", |
"name":"", | "name":"", | ||
- | "testproject": "1", | + | "creation_date": "YYYY-MM-DD HH:MM:SS", |
- | "test": "", | + | "description": "", |
- | "description": "" | + | "url":"" |
}, | }, | ||
{...} | {...} | ||
Line 71: | Line 65: | ||
[ | [ | ||
{ | { | ||
- | "id": "1.1.1", | + | "_id": "", |
- | "testcase": "1.1", | + | "project_name": "", |
- | "date": "", | + | "pod_name": "", |
- | "platform":"", | + | "version": "", |
- | "global_status":"", | + | "installer": "", |
- | "hardware_details":"", | + | "description": "", |
- | "installer_type":"", | + | "creation_date": "YYYY-MM-DD HH:MM:SS", |
- | "details":{} | + | "case_name": "" |
+ | "details":{ | ||
+ | <- the results to be put here -> | ||
+ | } | ||
}, | }, | ||
- | {...} | ||
] | ] | ||
</code> | </code> | ||
+ | |||
+ | ====== 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 \\ { \\ <the field(s) you want to modify> \\ } | | ||
+ | | 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": "<the url detailing the testcase>", \\ "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": { <your results> } \\ } | | ||
+ | |||
+ | ==== 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 | |