Implement additional properties Defcore waiver
Spec describing the features to be added into refstack-client in order to implement Defcore waiver in regards of additional properties on Nova API. Change-Id: I27b55073ea36ea2c12c2893d33e8c8558505ac98
This commit is contained in:
parent
7523bc5dbc
commit
5e4553c8e7
264
specs/newton/approved/refstack-waiver.rst
Normal file
264
specs/newton/approved/refstack-waiver.rst
Normal file
@ -0,0 +1,264 @@
|
||||
======================================================================
|
||||
Refstack-client implementation of Defcore waiver regarding additional
|
||||
properties on Nova API response
|
||||
======================================================================
|
||||
|
||||
Launchpad blueprint: https://blueprints.launchpad.net/refstack/+spec/refstack-waiver
|
||||
|
||||
Defcore waiver: https://review.openstack.org/#/c/333067/
|
||||
|
||||
Defcore committee approved above waiver which allows vendors who are using the
|
||||
Nova 2.0 API with additional properties to disable strict response checking
|
||||
when testing products for the OpenStack Powered program in 2016.
|
||||
|
||||
This spec defines the changes needed for refstack-client to optionally bypass
|
||||
Tempest strict validation.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Vendors need an automated way to apply the waiver. The proposed method is to
|
||||
run Tempest from the RefStack client, identify tests that fail because of
|
||||
strict response checking, and rerun those tests with strict checking disabled.
|
||||
|
||||
APIs and test cases using the waiver must be clearly identified.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
1. Workflow
|
||||
|
||||
- Vendor run Tempest suite as usual: via refstack-client test, ostestr, testr
|
||||
or with any other test runner. Some test cases failed due to additional
|
||||
properties in Nova response.
|
||||
|
||||
- Vendor have the subunit test results file from the Tempest test execution.
|
||||
|
||||
- Vendor have the Tempest configuration file.
|
||||
|
||||
- Vendor rerun failed test cases by running ``refstack-client bypass-extras``
|
||||
command. Command identifies failed test cases, disables Tempest strict
|
||||
validations, rerun test cases, and enables strict validations again.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ refstack-client bypass-extras --subunit-file <results> --conf-file <tempest-conf-file>
|
||||
|
||||
- Output of bypass-extras command is a zip bundle containing the following
|
||||
files:
|
||||
|
||||
- tests_list - List of failed test cases due to additional properties.
|
||||
|
||||
- patched_schemas - List of tempest schemas which value was set to True
|
||||
(to allow additional properties).
|
||||
|
||||
- api_details - API call details from each failed test case (due to
|
||||
additional properties).
|
||||
|
||||
- rerun_test_results - The subunit result file for the re-run test cases.
|
||||
|
||||
- combined_test_results.json - The Refstack JSON file with the combined
|
||||
passed TCs from both initial and rerun subunit files.
|
||||
|
||||
2. Implement "bypass-extras" Refstack command:
|
||||
Assume Tempest test suite was run independently.
|
||||
Subunit test results and Tempest configuration files are available.
|
||||
|
||||
*bypass-extras* command is the helper tool for vendors to bypass the strict
|
||||
validation of additional properties in Tempest. Process steps and
|
||||
implementation details are explained on step 3.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ refstack-client --help
|
||||
|
||||
usage: refstack-client [-h] <ARG> ...
|
||||
...
|
||||
bypass-extras Apply Defcore waiver to identify additional properties
|
||||
on Nova API response. Re-runs failed test cases
|
||||
without Tempest strict response validations.
|
||||
|
||||
$ refstack-client bypass-extras --help
|
||||
|
||||
usage: refstack-client [-h] <ARG> ...
|
||||
|
||||
To see help on specific argument, do:
|
||||
refstack-client <ARG> -h waiver
|
||||
[-h] [-s | -v] [-y] [--url URL] [-k] [-i PRIV_KEY] file
|
||||
|
||||
optional arguments:
|
||||
-h, --help Show this help message and exit
|
||||
-s, --silent Suppress output except warnings and errors.
|
||||
-v, --verbose Show verbose output.
|
||||
-y Assume Yes to all prompt queries
|
||||
--subunit-file Path to subunit test result file.
|
||||
-c, --conf-file Path of the Tempest configuration file to use.
|
||||
|
||||
3. Flow for ``bypass-extras`` command.
|
||||
|
||||
Having as input a subunit test results file and a Tempest configuration file:
|
||||
|
||||
3.1 Find failed test cases and its details
|
||||
|
||||
Integrate code from find_additional_properties.py into Refstack-client to
|
||||
analyze subunit stream (from input results file). Find failed test cases
|
||||
due to additional properties in the response. Reconstruct the tempest schema
|
||||
causing the test case failure. Run subunit-describe-calls
|
||||
filter command to get test cases API call details.
|
||||
|
||||
Input: subunit-results
|
||||
|
||||
Output files:
|
||||
|
||||
- tests_list - List of failed test cases due to additional properties.
|
||||
|
||||
- patched_schemas - List of tempest schemas causing errors
|
||||
|
||||
- api_details - API calls from each test case.
|
||||
|
||||
3.2 Patch Tempest:
|
||||
|
||||
Create patch for .tempest virtual environment which lives under refstack-client
|
||||
installation.
|
||||
|
||||
- Modify tempest/lib/api_schema/response/compute/v2_1/__init__.py:
|
||||
|
||||
- Import module where schema lives.
|
||||
|
||||
- Set schema addtionalProperties key to True so that additional properties
|
||||
are accepted - bypass strict validation.
|
||||
|
||||
3.3 Rerun failed test cases using patched refstack-client .tempest environment
|
||||
|
||||
Use tests_list as withelist for ostestr in order to re-run failed test cases.
|
||||
|
||||
.. code-block:: bash
|
||||
ostestr --serial -w test_list
|
||||
|
||||
Input: test_list and conf-file files.
|
||||
|
||||
Output: rerun_test_results subunit file
|
||||
|
||||
3.4 Remove Tempest patch
|
||||
|
||||
Regardless of previous steps outcome, unpatching Tempest step will be
|
||||
attempted.
|
||||
|
||||
Clean __init__.py by opening with access mode 'w'
|
||||
|
||||
3.5 Create refstack JSON format files
|
||||
|
||||
Transform subunit result files - The one provided as input and the rerun
|
||||
test results - into a combined refstack JSON format.
|
||||
|
||||
Input: initial_results_file, rerun_test_results files.
|
||||
|
||||
Output: combined_test_results.json files.
|
||||
|
||||
3.6 Create zip bundle
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
- Add additional property to Tempest config file
|
||||
|
||||
- For Tempest patch
|
||||
Comment the validate_response call by looking into the service_client.py file
|
||||
for the corresponding method (search through code files).
|
||||
|
||||
- Manual process
|
||||
Products applying for the OpenStack Powered Trademark in 2016 may
|
||||
request the waiver by submitting subunit data from their Tempest run
|
||||
that can be manually analyzed by the `find_additional_properties.py` script
|
||||
from the DefCore repository. This script will identify tests that
|
||||
failed because of additional properties. The vendor will then need
|
||||
to manually modify tempest-lib to remove additional checks on the impacted
|
||||
APIs.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
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:
|
||||
|
||||
luz-cazares
|
||||
|
||||
Other contributors:
|
||||
|
||||
Chris Hoge
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
- Add *bypass-extras* command to refstack-client.
|
||||
- Integrate find_additional_properties code
|
||||
- Method to call subunit-describe-calls filter
|
||||
- Implement JSON schema gathering from test exception
|
||||
- Implement Tempest patch
|
||||
- Implement Tempest unpatch
|
||||
- Create zip bundle with file results
|
||||
- Add *bypass-extras* command usage documentation
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Add unit testing for the new command, verify expected outcomes are met.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Add refstack-client bypass-extras usage information under refstack-client/
|
||||
README.rst
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user