| Reviewing Tempest Code |
| ====================== |
| |
| To start read the `OpenStack Common Review Checklist |
| <https://docs.openstack.org/infra/manual/developers.html#peer-review>`_ |
| |
| |
| Ensuring code is executed |
| ------------------------- |
| |
| For any new or change to a test it has to be verified in the gate. This means |
| that the first thing to check with any change is that a gate job actually runs |
| it. Tests which aren't executed either because of configuration or skips should |
| not be accepted. |
| |
| If a new test is added that depends on a new config option (like a feature |
| flag), the commit message must reference a change in DevStack or DevStack-Gate |
| that enables the execution of this newly introduced test. This reference could |
| either be a `Cross-Repository Dependency <https://docs.openstack.org/infra/ |
| manual/developers.html#cross-repository-dependencies>`_ or a simple link |
| to a Gerrit review. |
| |
| |
| Execution time |
| -------------- |
| While checking in the job logs that a new test is actually executed, also |
| pay attention to the execution time of that test. Keep in mind that each test |
| is going to be executed hundreds of time each day, because Tempest tests |
| run in many OpenStack projects. It's worth considering how important/critical |
| the feature under test is with how costly the new test is. |
| |
| |
| Unit Tests |
| ---------- |
| |
| For any change that adds new functionality to either common functionality or an |
| out-of-band tool unit tests are required. This is to ensure we don't introduce |
| future regressions and to test conditions which we may not hit in the gate runs. |
| API and scenario tests aren't required to have unit tests since they should |
| be self-verifying by running them in the gate. All service clients, on the |
| other hand, `must have`_ unit tests, as they belong to ``tempest/lib``. |
| |
| .. _must have: https://docs.openstack.org/tempest/latest/library.html#testing |
| |
| |
| API Stability |
| ------------- |
| Tests should only be added for published stable APIs. If a patch contains |
| tests for an API which hasn't been marked as stable or for an API which |
| doesn't conform to the `API stability guidelines |
| <https://wiki.openstack.org/wiki/Governance/Approved/APIStability>`_ then it |
| should not be approved. |
| |
| |
| Reject Copy and Paste Test Code |
| ------------------------------- |
| When creating new tests that are similar to existing tests it is tempting to |
| simply copy the code and make a few modifications. This increases code size and |
| the maintenance burden. Such changes should not be approved if it is easy to |
| abstract the duplicated code into a function or method. |
| |
| |
| Tests overlap |
| ------------- |
| When a new test is being proposed, question whether this feature is not already |
| tested with Tempest. Tempest has more than 1200 tests, spread amongst many |
| directories, so it's easy to introduce test duplication. For example, testing |
| volume attachment to a server could be a compute test or a volume test, depending |
| on how you see it. So one must look carefully in the entire code base for possible |
| overlap. As a rule of thumb, the older a feature is, the more likely it's |
| already tested. |
| |
| |
| Being explicit |
| -------------- |
| When tests are being added that depend on a configurable feature or extension, |
| polling the API to discover that it is enabled should not be done. This will |
| just result in bugs being masked because the test can be skipped automatically. |
| Instead the config file should be used to determine whether a test should be |
| skipped or not. Do not approve changes that depend on an API call to determine |
| whether to skip or not. |
| |
| |
| Configuration Options |
| --------------------- |
| With the introduction of the Tempest external test plugin interface we needed |
| to provide a stable contract for Tempest's configuration options. This means |
| we can no longer simply remove a configuration option when it's no longer used. |
| Patches proposed that remove options without a deprecation cycle should not |
| be approved. Similarly when changing default values with configuration we need |
| to similarly be careful that we don't break existing functionality. Also, when |
| adding options, just as before, we need to weigh the benefit of adding an |
| additional option against the complexity and maintenance overhead having it |
| costs. |
| |
| |
| Test Documentation |
| ------------------ |
| When a new test is being added refer to the :ref:`TestDocumentation` section in |
| hacking to see if the requirements are being met. With the exception of a class |
| level docstring linking to the API ref doc in the API tests and a docstring for |
| scenario tests this is up to the reviewers discretion whether a docstring is |
| required or not. |
| |
| |
| Test Removal and Refactoring |
| ---------------------------- |
| Make sure that any test that is renamed, relocated (e.g. moved to another |
| class), or removed does not belong to the `interop`_ testing suite -- which |
| includes a select suite of Tempest tests for the purposes of validating that |
| OpenStack vendor clouds are interoperable -- or a project's `whitelist`_ or |
| `blacklist`_ files. |
| |
| It is of critical importance that no interop, whitelist or blacklist test |
| reference be broken by a patch set introduced to Tempest that renames, |
| relocates or removes a referenced test. |
| |
| Please check the existence of code which references Tempest tests with: |
| http://codesearch.openstack.org/ |
| |
| Interop |
| ^^^^^^^ |
| Make sure that modifications to an `interop`_ test are backwards-compatible. |
| This means that code modifications to tests should not undermine the quality of |
| the validation currently performed by the test or significantly alter the |
| behavior of the test. |
| |
| Removal |
| ^^^^^^^ |
| Reference the :ref:`test-removal` guidelines for understanding best practices |
| associated with test removal. |
| |
| .. _interop: https://www.openstack.org/brand/interop |
| .. _whitelist: https://docs.openstack.org/tempest/latest/run.html#test-selection |
| .. _blacklist: https://docs.openstack.org/tempest/latest/run.html#test-selection |
| |
| |
| Release Notes |
| ------------- |
| Release notes are how we indicate to users and other consumers of Tempest what |
| has changed in a given release. Since Tempest 10.0.0 we've been using `reno`_ |
| to manage and build the release notes. There are certain types of changes that |
| require release notes and we should not approve them without including a release |
| note. These include but aren't limited to, any addition, deprecation or removal |
| from the lib interface, any change to configuration options (including |
| deprecation), CLI additions or deprecations, major feature additions, and |
| anything backwards incompatible or would require a user to take note or do |
| something extra. |
| |
| .. _reno: https://docs.openstack.org/reno/latest/ |
| |
| |
| Deprecated Code |
| --------------- |
| Sometimes we have some bugs in deprecated code. Basically, we leave it. Because |
| we don't need to maintain it. However, if the bug is critical, we might need to |
| fix it. When it will happen, we will deal with it on a case-by-case basis. |
| |
| |
| When to approve |
| --------------- |
| * It's OK to hold off on an approval until a subject matter expert reviews it. |
| * Every patch needs at least single +2's before being approved. A single |
| Tempest core reviewer can approve patches but can always wait for another |
| +2 in any case. Following cases where single +2 can be used without any |
| issue: |
| |
| * If any trivial patch set fixes one of the items below: |
| |
| * Documentation or code comment typo |
| * Documentation ref link |
| * Example: `example`_ |
| |
| .. note:: |
| |
| Any other small documentation, CI job, or code change does not fall under |
| this category. |
| |
| * If the patch **unblocks** a failing project gate, provided that: |
| |
| * the project's PTL +1's the change |
| * the patch does not affect any other project's testing gates |
| * the patch does not cause any negative side effects |
| * If fixing and removing the faulty plugin (which leads to fail |
| voting ``tempest-tox-plugin-sanity-check`` job) and unblock the |
| tempest gate |
| |
| .. _example: https://review.opendev.org/#/c/611032/ |