blob: 4c63aa0ba4af8a331016f30d7d4eebf36ba8f596 [file] [log] [blame]
Matthew Treinish16dd51b2014-06-11 12:04:51 -04001Reviewing Tempest Code
2======================
3
4To start read the `OpenStack Common Review Checklist
davyyyac670dc2017-11-16 21:27:03 +08005<https://docs.openstack.org/infra/manual/developers.html#peer-review>`_
Matthew Treinish16dd51b2014-06-11 12:04:51 -04006
7
8Ensuring code is executed
9-------------------------
10
11For any new or change to a test it has to be verified in the gate. This means
12that the first thing to check with any change is that a gate job actually runs
13it. Tests which aren't executed either because of configuration or skips should
14not be accepted.
15
Jordan Pittierf6a0b5e2016-09-30 16:20:30 +020016If a new test is added that depends on a new config option (like a feature
17flag), the commit message must reference a change in DevStack or DevStack-Gate
18that enables the execution of this newly introduced test. This reference could
davyyyac670dc2017-11-16 21:27:03 +080019either be a `Cross-Repository Dependency <https://docs.openstack.org/infra/
Jordan Pittierf6a0b5e2016-09-30 16:20:30 +020020manual/developers.html#cross-repository-dependencies>`_ or a simple link
21to a Gerrit review.
22
Matthew Treinish16dd51b2014-06-11 12:04:51 -040023
Jordan Pittier74a56ab2017-04-26 16:46:20 +020024Execution time
25--------------
26While checking in the job logs that a new test is actually executed, also
27pay attention to the execution time of that test. Keep in mind that each test
28is going to be executed hundreds of time each day, because Tempest tests
29run in many OpenStack projects. It's worth considering how important/critical
30the feature under test is with how costly the new test is.
31
32
Matthew Treinish16dd51b2014-06-11 12:04:51 -040033Unit Tests
34----------
35
36For any change that adds new functionality to either common functionality or an
37out-of-band tool unit tests are required. This is to ensure we don't introduce
38future regressions and to test conditions which we may not hit in the gate runs.
Felipe Monteiroa7365ae2018-09-21 20:32:56 +010039API and scenario tests aren't required to have unit tests since they should
40be self-verifying by running them in the gate. All service clients, on the
41other hand, `must have`_ unit tests, as they belong to ``tempest/lib``.
42
43.. _must have: https://docs.openstack.org/tempest/latest/library.html#testing
Matthew Treinish16dd51b2014-06-11 12:04:51 -040044
45
46API Stability
47-------------
Chang Liu18610f92018-04-02 09:57:46 +080048Tests should only be added for published stable APIs. If a patch contains
49tests for an API which hasn't been marked as stable or for an API which
Matthew Treinish16dd51b2014-06-11 12:04:51 -040050doesn't conform to the `API stability guidelines
51<https://wiki.openstack.org/wiki/Governance/Approved/APIStability>`_ then it
52should not be approved.
53
54
55Reject Copy and Paste Test Code
Matthew Treinishf45ba2e2015-08-24 15:05:01 -040056-------------------------------
Matthew Treinish16dd51b2014-06-11 12:04:51 -040057When creating new tests that are similar to existing tests it is tempting to
58simply copy the code and make a few modifications. This increases code size and
59the maintenance burden. Such changes should not be approved if it is easy to
60abstract the duplicated code into a function or method.
61
62
Jordan Pittier74a56ab2017-04-26 16:46:20 +020063Tests overlap
64-------------
65When a new test is being proposed, question whether this feature is not already
66tested with Tempest. Tempest has more than 1200 tests, spread amongst many
67directories, so it's easy to introduce test duplication. For example, testing
68volume attachment to a server could be a compute test or a volume test, depending
69on how you see it. So one must look carefully in the entire code base for possible
70overlap. As a rule of thumb, the older a feature is, the more likely it's
71already tested.
72
73
Matthew Treinish16dd51b2014-06-11 12:04:51 -040074Being explicit
75--------------
76When tests are being added that depend on a configurable feature or extension,
77polling the API to discover that it is enabled should not be done. This will
78just result in bugs being masked because the test can be skipped automatically.
79Instead the config file should be used to determine whether a test should be
80skipped or not. Do not approve changes that depend on an API call to determine
81whether to skip or not.
82
83
Matthew Treinish13a1ed62015-09-08 10:39:58 -040084Configuration Options
85---------------------
Jordan Pittier74a56ab2017-04-26 16:46:20 +020086With the introduction of the Tempest external test plugin interface we needed
87to provide a stable contract for Tempest's configuration options. This means
Matthew Treinish13a1ed62015-09-08 10:39:58 -040088we can no longer simply remove a configuration option when it's no longer used.
89Patches proposed that remove options without a deprecation cycle should not
90be approved. Similarly when changing default values with configuration we need
91to similarly be careful that we don't break existing functionality. Also, when
92adding options, just as before, we need to weigh the benefit of adding an
93additional option against the complexity and maintenance overhead having it
94costs.
95
96
Matthew Treinish55078882014-08-12 19:01:34 -040097Test Documentation
98------------------
99When a new test is being added refer to the :ref:`TestDocumentation` section in
100hacking to see if the requirements are being met. With the exception of a class
101level docstring linking to the API ref doc in the API tests and a docstring for
102scenario tests this is up to the reviewers discretion whether a docstring is
103required or not.
104
Felipe Monteirof89ab812018-07-10 20:34:02 -0400105
106Test Removal and Refactoring
107----------------------------
108Make sure that any test that is renamed, relocated (e.g. moved to another
109class), or removed does not belong to the `interop`_ testing suite -- which
110includes a select suite of Tempest tests for the purposes of validating that
111OpenStack vendor clouds are interoperable -- or a project's `whitelist`_ or
112`blacklist`_ files.
113
114It is of critical importance that no interop, whitelist or blacklist test
115reference be broken by a patch set introduced to Tempest that renames,
116relocates or removes a referenced test.
117
118Please check the existence of code which references Tempest tests with:
119http://codesearch.openstack.org/
120
121Interop
122^^^^^^^
123Make sure that modifications to an `interop`_ test are backwards-compatible.
124This means that code modifications to tests should not undermine the quality of
125the validation currently performed by the test or significantly alter the
126behavior of the test.
127
128Removal
129^^^^^^^
130Reference the :ref:`test-removal` guidelines for understanding best practices
131associated with test removal.
132
133.. _interop: https://www.openstack.org/brand/interop
134.. _whitelist: https://docs.openstack.org/tempest/latest/run.html#test-selection
135.. _blacklist: https://docs.openstack.org/tempest/latest/run.html#test-selection
136
137
Matthew Treinishb786dca2016-06-22 10:32:45 -0400138Release Notes
139-------------
140Release notes are how we indicate to users and other consumers of Tempest what
141has changed in a given release. Since Tempest 10.0.0 we've been using `reno`_
142to manage and build the release notes. There are certain types of changes that
143require release notes and we should not approve them without including a release
144note. These include but aren't limited to, any addition, deprecation or removal
145from the lib interface, any change to configuration options (including
146deprecation), CLI additions or deprecations, major feature additions, and
147anything backwards incompatible or would require a user to take note or do
148something extra.
149
chenxinge98720a2017-07-19 03:42:23 +0000150.. _reno: https://docs.openstack.org/reno/latest/
Matthew Treinish55078882014-08-12 19:01:34 -0400151
Felipe Monteirof89ab812018-07-10 20:34:02 -0400152
Masayuki Igawa46617062016-09-02 16:38:56 +0900153Deprecated Code
154---------------
155Sometimes we have some bugs in deprecated code. Basically, we leave it. Because
156we don't need to maintain it. However, if the bug is critical, we might need to
157fix it. When it will happen, we will deal with it on a case-by-case basis.
158
Felipe Monteirof89ab812018-07-10 20:34:02 -0400159
Matthew Treinish16dd51b2014-06-11 12:04:51 -0400160When to approve
161---------------
Felipe Monteiro6fe405d2018-09-16 11:13:39 -0600162* It's OK to hold off on an approval until a subject matter expert reviews it.
Ghanshyam Mannbfce1f22021-02-03 16:50:34 -0600163* Every patch needs at least single +2's before being approved. A single
164 Tempest core reviewer can approve patches but can always wait for another
165 +2 in any case. Following cases where single +2 can be used without any
166 issue:
Felipe Monteiro6fe405d2018-09-16 11:13:39 -0600167
Felipe Monteiro6fe405d2018-09-16 11:13:39 -0600168 * If any trivial patch set fixes one of the items below:
169
170 * Documentation or code comment typo
171 * Documentation ref link
172 * Example: `example`_
173
174 .. note::
175
176 Any other small documentation, CI job, or code change does not fall under
177 this category.
178
179 * If the patch **unblocks** a failing project gate, provided that:
180
181 * the project's PTL +1's the change
182 * the patch does not affect any other project's testing gates
183 * the patch does not cause any negative side effects
Ghanshyam Mann20966312019-07-16 05:19:41 +0000184 * If fixing and removing the faulty plugin (which leads to fail
185 voting ``tempest-tox-plugin-sanity-check`` job) and unblock the
186 tempest gate
Felipe Monteiro6fe405d2018-09-16 11:13:39 -0600187
caoyuan349ba752019-04-23 19:40:06 +0800188.. _example: https://review.opendev.org/#/c/611032/