]>
Commit | Line | Data |
---|---|---|
f6349c3c SG |
1 | Testing in U-Boot |
2 | ================= | |
3 | ||
4 | U-Boot has a large amount of code. This file describes how this code is | |
5 | tested and what tests you should write when adding a new feature. | |
6 | ||
7 | ||
07f4eadc SG |
8 | Running tests |
9 | ------------- | |
10 | ||
ccf69386 | 11 | To run most tests on sandbox, type this:: |
07f4eadc | 12 | |
499fde5c | 13 | make check |
07f4eadc SG |
14 | |
15 | in the U-Boot directory. Note that only the pytest suite is run using this | |
bcbd0c8f | 16 | command. |
07f4eadc | 17 | |
ccf69386 | 18 | Some tests take ages to run. To run just the quick ones, type this:: |
499fde5c SG |
19 | |
20 | make qcheck | |
21 | ||
07f4eadc | 22 | |
f6349c3c SG |
23 | Sandbox |
24 | ------- | |
25 | U-Boot can be built as a user-space application (e.g. for Linux). This | |
26 | allows test to be executed without needing target hardware. The 'sandbox' | |
27 | target provides this feature and it is widely used in tests. | |
28 | ||
29 | ||
30 | Pytest Suite | |
31 | ------------ | |
32 | ||
33 | Many tests are available using the pytest suite, in test/py. This can run | |
34 | either on sandbox or on real hardware. It relies on the U-Boot console to | |
35 | inject test commands and check the result. It is slower to run than C code, | |
bcbd0c8f | 36 | but provides the ability to unify lots of tests and summarise their results. |
f6349c3c | 37 | |
ccf69386 | 38 | You can run the tests on sandbox with:: |
f6349c3c | 39 | |
ccf69386 | 40 | ./test/py/test.py --bd sandbox --build |
f6349c3c SG |
41 | |
42 | This will produce HTML output in build-sandbox/test-log.html | |
43 | ||
44 | See test/py/README.md for more information about the pytest suite. | |
45 | ||
46 | ||
47 | tbot | |
48 | ---- | |
49 | ||
50 | Tbot provides a way to execute tests on target hardware. It is intended for | |
51 | trying out both U-Boot and Linux (and potentially other software) on a | |
52 | number of boards automatically. It can be used to create a continuous test | |
630dfede | 53 | environment. See http://www.tbot.tools for more information. |
f6349c3c SG |
54 | |
55 | ||
56 | Ad-hoc tests | |
57 | ------------ | |
58 | ||
59 | There are several ad-hoc tests which run outside the pytest environment: | |
60 | ||
ccf69386 SG |
61 | test/fs |
62 | File system test (shell script) | |
63 | test/image | |
64 | FIT and legacy image tests (shell script and Python) | |
65 | test/stdint | |
66 | A test that stdint.h can be used in U-Boot (shell script) | |
67 | trace | |
68 | Test for the tracing feature (shell script) | |
f6349c3c | 69 | |
bcbd0c8f | 70 | TODO: Move these into pytest. |
f6349c3c SG |
71 | |
72 | ||
73 | When to write tests | |
74 | ------------------- | |
75 | ||
76 | If you add code to U-Boot without a test you are taking a risk. Even if you | |
77 | perform thorough manual testing at the time of submission, it may break when | |
78 | future changes are made to U-Boot. It may even break when applied to mainline, | |
79 | if other changes interact with it. A good mindset is that untested code | |
80 | probably doesn't work and should be deleted. | |
81 | ||
82 | You can assume that the Pytest suite will be run before patches are accepted | |
83 | to mainline, so this provides protection against future breakage. | |
84 | ||
85 | On the other hand there is quite a bit of code that is not covered with tests, | |
86 | or is covered sparingly. So here are some suggestions: | |
87 | ||
88 | - If you are adding a new uclass, add a sandbox driver and a test that uses it | |
89 | - If you are modifying code covered by an existing test, add a new test case | |
90 | to cover your changes | |
91 | - If the code you are modifying has not tests, consider writing one. Even a | |
92 | very basic test is useful, and may be picked up and enhanced by others. It | |
93 | is much easier to add onto a test - writing a new large test can seem | |
94 | daunting to most contributors. | |
95 | ||
96 | ||
97 | Future work | |
98 | ----------- | |
99 | ||
100 | Converting existing shell scripts into pytest tests. |