Merge "Specification to associate test results to vendor products."
This commit is contained in:
353
specs/newton/approved/associate-test-result-to-product.rst
Executable file
353
specs/newton/approved/associate-test-result-to-product.rst
Executable file
@@ -0,0 +1,353 @@
|
|||||||
|
=============================================
|
||||||
|
Test Results to Vendor Products Association
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
Launchpad blueprint:
|
||||||
|
|
||||||
|
* https://blueprints.launchpad.net/refstack/+spec/result-listing-page
|
||||||
|
* https://blueprints.launchpad.net/refstack/+spec/marketplace-product-model
|
||||||
|
|
||||||
|
This specification defines the processes and mechanisms to associate test
|
||||||
|
results to vendor products.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
So far, community test results are shared to the public anonymously, with no
|
||||||
|
linkage to users, vendors or products. DefCore, OpenStack Foundation (OSF)
|
||||||
|
and community user feedback revealed strong interest in enabling RefStack to
|
||||||
|
show the results with linkage to vendors, products and test statuses. This is
|
||||||
|
especially important for those test results that were used for official
|
||||||
|
OpenStack Powered Logo applications.
|
||||||
|
|
||||||
|
With the recent implementation of vendor and product registration process, it
|
||||||
|
is now possible to associate a particular test result record to a vendor's
|
||||||
|
product of a particular version.
|
||||||
|
|
||||||
|
**Note**
|
||||||
|
|
||||||
|
Test results are not associated directly to vendors. Test results are
|
||||||
|
associated to products which belong to vendors. A product may have many
|
||||||
|
versions.
|
||||||
|
|
||||||
|
RefStack interprets OSF/DefCore requirements as following:
|
||||||
|
|
||||||
|
* Vocabulary:
|
||||||
|
|
||||||
|
* product version: a product version is a version of a product.
|
||||||
|
* product vendor: a product vendor is a vendor who owns the product.
|
||||||
|
|
||||||
|
* Model:
|
||||||
|
|
||||||
|
* A product version can be used to deploy many clouds.
|
||||||
|
* A product version can have many tests.
|
||||||
|
* Test results will be associated to product versions (not products).
|
||||||
|
|
||||||
|
* Use cases:
|
||||||
|
|
||||||
|
* Only the user who uploads the result and is also an admin of the product
|
||||||
|
vendor or an interop admin can associate a test result to a product
|
||||||
|
version.
|
||||||
|
* Once a test is associated to a product version, only the admins of the
|
||||||
|
product vendor or interop admins can perform CRUD operations on the test
|
||||||
|
result.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
* Add a new columns to the "test" table in the database:
|
||||||
|
|
||||||
|
* **product_version_id**: this field stores the product version ID that the
|
||||||
|
test run is associated to.
|
||||||
|
|
||||||
|
* Associate a test result to a product
|
||||||
|
|
||||||
|
* The association must be initiated by a user who creates the test result
|
||||||
|
record and is an admin of the vendor which owns the product. The
|
||||||
|
association is done by updating the product_version_id field of the test
|
||||||
|
result with the ID of the product version from the "version" table.
|
||||||
|
|
||||||
|
* Once a test result is associated to a product version, the test result can
|
||||||
|
not be deleted until it is disassociate from a product.
|
||||||
|
|
||||||
|
* Once a test result is associated to a product version, only interop
|
||||||
|
(i.e. RefStack site) admins or vendor admins can manage the test result
|
||||||
|
(e.g. making decision of sharing the test result record).
|
||||||
|
|
||||||
|
* A product version can't be deleted if there are tests associated to it.
|
||||||
|
|
||||||
|
**Note**
|
||||||
|
|
||||||
|
Currently, RefStack has not implemented "user role" to differentiate the
|
||||||
|
roles of users in a "user group". As such, at this time, all users in a
|
||||||
|
"user group" are admin users.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
An alternative method to associate a test record to a product is by matching
|
||||||
|
values of the "cpid" field (in the "version" table) and the "cpid" field (in
|
||||||
|
the "test" table). The major concern and shortcomings of this option are as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
* The "cpid" field is a user input parameter, therefore it is not guarantee to
|
||||||
|
be unique.
|
||||||
|
|
||||||
|
* The cpid fields may be identical for test results run by different users
|
||||||
|
against the same public cloud instance.
|
||||||
|
|
||||||
|
* A product may have many cloud instances which are identified by different
|
||||||
|
cpids.
|
||||||
|
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Add a new column named "product_version_id" to the existing "test" table.
|
||||||
|
This field can be null.
|
||||||
|
|
||||||
|
+------------------------+-------------+----------+
|
||||||
|
| Column | Type | |
|
||||||
|
+========================+=============+==========+
|
||||||
|
| product_version_id | varchar(36) | FK |
|
||||||
|
+------------------------+-------------+----------+
|
||||||
|
|
||||||
|
Note: The user input product_version_id must exist in the "version" table.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The following REST APIs will be modified.
|
||||||
|
|
||||||
|
**Update result**
|
||||||
|
|
||||||
|
* Description:
|
||||||
|
|
||||||
|
This API will be used to make update to a test entry of the "test" table.
|
||||||
|
To begin with, only the owner user who uploaded the test result, can make
|
||||||
|
update to the product_version_id filed. Once a test is associated to a
|
||||||
|
product version, only interop or vendor admins can make updates to a test
|
||||||
|
result.
|
||||||
|
|
||||||
|
* Method type: PUT
|
||||||
|
|
||||||
|
* URI: v1/results/{result_id}/
|
||||||
|
|
||||||
|
* Normal Response Codes:
|
||||||
|
|
||||||
|
* OK (200)
|
||||||
|
|
||||||
|
* Error Response Codes:
|
||||||
|
|
||||||
|
* Bad Request (400)
|
||||||
|
* Unauthorized (401)
|
||||||
|
* Forbidden (403)
|
||||||
|
* Not found (404)
|
||||||
|
|
||||||
|
* Request parameters:
|
||||||
|
|
||||||
|
+---------------+-------+--------------+-----------------------------------+
|
||||||
|
| Parameter | Style | Type | Description |
|
||||||
|
+===============+=======+==============+===================================+
|
||||||
|
| result_id | URI | csapi:UUID | Test result ID for marking. |
|
||||||
|
+---------------+-------+--------------+-----------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
* JSON schema definition for the body data:
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"verification_status" : 1,
|
||||||
|
"product_version_id": "85346866-307f-4052-ba31-ff6270635e14",
|
||||||
|
"required": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
**Note**
|
||||||
|
|
||||||
|
* Although the verification_status column is listed here for completeness of
|
||||||
|
the API body schema, this field can only be updated by interop admin as
|
||||||
|
described in spec https://review.openstack.org/#/c/343954/ .
|
||||||
|
* Update request including the "verification_status" field will return
|
||||||
|
"Forbidden(403)" if the requester is not an interop admin.
|
||||||
|
|
||||||
|
* JSON schema definition for the response data: N/A
|
||||||
|
|
||||||
|
**List results**
|
||||||
|
|
||||||
|
* Description: (No update)
|
||||||
|
|
||||||
|
* Method type: GET (No update)
|
||||||
|
|
||||||
|
* URI: v1/results/ (No update)
|
||||||
|
|
||||||
|
* Normal Response Codes: (No update)
|
||||||
|
|
||||||
|
* Error Response Codes: (No update)
|
||||||
|
|
||||||
|
* Request parameters: (No update)
|
||||||
|
|
||||||
|
Add the following parameter to the existing ones:
|
||||||
|
|
||||||
|
+---------------------+-------+-------------+---------------------------------+
|
||||||
|
| Parameter | Style | Type | Description |
|
||||||
|
+=====================+=======+=============+=================================+
|
||||||
|
| product_version_id | query | xsd:string | Only return the test records |
|
||||||
|
| (optional) | | | belonging to this |
|
||||||
|
| | | | product_version_id. |
|
||||||
|
+---------------------+-------+-------------+---------------------------------+
|
||||||
|
|
||||||
|
* JSON schema definition for the body data: N/A
|
||||||
|
|
||||||
|
* JSON schema definition for the response data:
|
||||||
|
|
||||||
|
Update to add product_version_id to the response body.
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
{
|
||||||
|
pagination: {
|
||||||
|
current_page: 6,
|
||||||
|
total_pages: 37
|
||||||
|
},
|
||||||
|
results: [
|
||||||
|
{
|
||||||
|
url: "https://refstack.openstack.org/#/results/7943e04a-2b95-453c-b627-8a24b2c6faa0",
|
||||||
|
created_at: "2016-07-25 02:24:34",
|
||||||
|
meta: { },
|
||||||
|
id: "7943e04a-2b95-453c-b627-8a24b2c6faa0",
|
||||||
|
duration_seconds: 0,
|
||||||
|
verification_status : 0,
|
||||||
|
product_version_id: ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: "https://refstack.openstack.org/#/results/91ae10c5-ecf5-4823-81d4-09836dc212cf",
|
||||||
|
created_at: "2016-07-13 18:37:53",
|
||||||
|
meta: {
|
||||||
|
shared: ""true"",
|
||||||
|
target: "compute",
|
||||||
|
guideline: "2016.01.json"
|
||||||
|
},
|
||||||
|
id: "91ae10c5-ecf5-4823-81d4-09836dc212cf",
|
||||||
|
duration_seconds: 6037,
|
||||||
|
verification_status : 1,
|
||||||
|
product_version_id: "68668534-307f-4052-ba31-ff6270635e14"
|
||||||
|
},
|
||||||
|
........
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
**Show result details**
|
||||||
|
|
||||||
|
* Description: (No update)
|
||||||
|
|
||||||
|
* Method type: GET (No update)
|
||||||
|
|
||||||
|
* URI: v1/results/{result_id} (No update)
|
||||||
|
|
||||||
|
* Normal Response Codes: (No update)
|
||||||
|
|
||||||
|
* Error Response Codes: (No update)
|
||||||
|
|
||||||
|
* Request parameters: (No update)
|
||||||
|
|
||||||
|
* JSON schema definition for the body data: N/A
|
||||||
|
|
||||||
|
* JSON schema definition for the response data:
|
||||||
|
|
||||||
|
Update to add product_version_id to the response body.
|
||||||
|
|
||||||
|
.. parsed-literal::
|
||||||
|
{
|
||||||
|
user_role: "user",
|
||||||
|
created_at: "2016-07-13 18:37:53",
|
||||||
|
meta: {
|
||||||
|
shared: ""true"",
|
||||||
|
target: "compute",
|
||||||
|
guideline: "2016.01.json"
|
||||||
|
},
|
||||||
|
id: "91ae10c5-ecf5-4823-81d4-09836dc212cf",
|
||||||
|
duration_seconds: 6037,
|
||||||
|
verification_status : 1,
|
||||||
|
product_version_id; "68668534-307f-4052-ba31-ff6270635e14",
|
||||||
|
results: [
|
||||||
|
"tempest.api.compute.certificates.test_certificates.CertificatesV2TestJSON.test_create_root_certificate",
|
||||||
|
"tempest.api.compute.certificates.test_certificates.CertificatesV2TestJSON.test_get_root_certificate",
|
||||||
|
......
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
Paul Van Eck
|
||||||
|
Andrey Pavlov
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
TBD
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Add the defined additional field to the "test" table.
|
||||||
|
* Develop business and UI code to enable association of a test result to a
|
||||||
|
product.
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Add unit tests to test the newly added code.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
None
|
Reference in New Issue
Block a user