| Testing in U-Boot |
| ================= |
| |
| U-Boot has a large amount of code. This file describes how this code is |
| tested and what tests you should write when adding a new feature. |
| |
| |
| Running tests |
| ------------- |
| |
| To run most tests on sandbox, type this: |
| |
| test/run |
| |
| in the U-Boot directory. Note that only the pytest suite is run using this |
| command. |
| |
| |
| Sandbox |
| ------- |
| U-Boot can be built as a user-space application (e.g. for Linux). This |
| allows test to be executed without needing target hardware. The 'sandbox' |
| target provides this feature and it is widely used in tests. |
| |
| |
| Pytest Suite |
| ------------ |
| |
| Many tests are available using the pytest suite, in test/py. This can run |
| either on sandbox or on real hardware. It relies on the U-Boot console to |
| inject test commands and check the result. It is slower to run than C code, |
| but provides the ability to unify lots of tests and summarise their results. |
| |
| You can run the tests on sandbox with: |
| |
| ./test/py/test.py --bd sandbox --build |
| |
| This will produce HTML output in build-sandbox/test-log.html |
| |
| See test/py/README.md for more information about the pytest suite. |
| |
| |
| tbot |
| ---- |
| |
| Tbot provides a way to execute tests on target hardware. It is intended for |
| trying out both U-Boot and Linux (and potentially other software) on a |
| number of boards automatically. It can be used to create a continuous test |
| environment. See http://www.tbot.tools for more information. |
| |
| |
| Ad-hoc tests |
| ------------ |
| |
| There are several ad-hoc tests which run outside the pytest environment: |
| |
| test/fs - File system test (shell script) |
| test/image - FIT and legacy image tests (shell script and Python) |
| test/stdint - A test that stdint.h can be used in U-Boot (shell script) |
| trace - Test for the tracing feature (shell script) |
| |
| TODO: Move these into pytest. |
| |
| |
| When to write tests |
| ------------------- |
| |
| If you add code to U-Boot without a test you are taking a risk. Even if you |
| perform thorough manual testing at the time of submission, it may break when |
| future changes are made to U-Boot. It may even break when applied to mainline, |
| if other changes interact with it. A good mindset is that untested code |
| probably doesn't work and should be deleted. |
| |
| You can assume that the Pytest suite will be run before patches are accepted |
| to mainline, so this provides protection against future breakage. |
| |
| On the other hand there is quite a bit of code that is not covered with tests, |
| or is covered sparingly. So here are some suggestions: |
| |
| - If you are adding a new uclass, add a sandbox driver and a test that uses it |
| - If you are modifying code covered by an existing test, add a new test case |
| to cover your changes |
| - If the code you are modifying has not tests, consider writing one. Even a |
| very basic test is useful, and may be picked up and enhanced by others. It |
| is much easier to add onto a test - writing a new large test can seem |
| daunting to most contributors. |
| |
| |
| Future work |
| ----------- |
| |
| Converting existing shell scripts into pytest tests. |