]>
Commit | Line | Data |
---|---|---|
2f52018c SG |
1 | #!/bin/bash |
2 | ||
c9adb355 | 3 | # Script to run all U-Boot tests that use sandbox. |
499fde5c | 4 | # $1: tests to run (empty for all, 'quick' for quick ones only) |
c9adb355 SG |
5 | |
6 | # Runs a test and checks the exit code to decide if it passed | |
7 | # $1: Test name | |
8 | # $2 onwards: command line to run | |
2f52018c | 9 | run_test() { |
c9adb355 SG |
10 | echo -n "$1: " |
11 | shift | |
12 | "$@" | |
3bc11e81 | 13 | [ $? -ne 0 ] && failures=$((failures+1)) |
2f52018c | 14 | } |
07f4eadc | 15 | |
f6e6022f | 16 | # Select test attributes |
d1962ac7 | 17 | ut_mark_expr=test_ut |
f6e6022f SG |
18 | if [ "$1" = "quick" ]; then |
19 | mark_expr="not slow" | |
d1962ac7 | 20 | ut_mark_expr="test_ut and not slow" |
f6e6022f SG |
21 | skip=--skip-net-tests |
22 | fi | |
23 | ||
76160801 | 24 | [ "$1" == "tools" ] && tools_only=y |
499fde5c | 25 | |
d1962ac7 SG |
26 | if [ "$1" = "parallel" ]; then |
27 | if ! echo 'import xdist' | python3 2>/dev/null; then | |
28 | echo "Please install python3-pytest-xdist - see doc/develop/py_testing.rst" | |
29 | exit 1 | |
30 | fi | |
31 | jobs="$(($(nproc) > 16 ? 16 : $(nproc)))" | |
32 | para="-n${jobs} -q" | |
33 | prompt="Building and..." | |
34 | skip=--skip-net-tests | |
35 | mark_expr="not slow and not bootstd and not spi_flash" | |
36 | ut_mark_expr="test_ut and not slow and not bootstd and not spi_flash" | |
37 | echo "Note: test log is garbled with parallel tests" | |
38 | fi | |
39 | ||
3bc11e81 | 40 | failures=0 |
73a01d90 | 41 | |
76160801 SG |
42 | if [ -z "$tools_only" ]; then |
43 | # Run all tests that the standard sandbox build can support | |
d1962ac7 SG |
44 | echo "${prompt}" |
45 | run_test "sandbox" ./test/py/test.py --bd sandbox --build ${para} \ | |
f6e6022f | 46 | -k "${mark_expr}" |
76160801 | 47 | fi |
029ab15a SG |
48 | |
49 | # Run tests which require sandbox_spl | |
d1962ac7 SG |
50 | echo "${prompt}" |
51 | run_test "sandbox_spl" ./test/py/test.py --bd sandbox_spl --build ${para} \ | |
7b51bf77 | 52 | -k 'test_ofplatdata or test_handoff or test_spl' |
029ab15a | 53 | |
59c585e9 | 54 | # Run the same tests with sandbox_noinst (i.e. without OF_PLATDATA_INST) |
d1962ac7 | 55 | echo "${prompt}" |
59c585e9 | 56 | run_test "sandbox_noinst" ./test/py/test.py --bd sandbox_noinst --build ${para} \ |
c25b8dcd SG |
57 | -k 'test_ofplatdata or test_handoff or test_spl' |
58 | ||
00be5197 SG |
59 | # Run tests which require sandbox_vpl |
60 | echo "${prompt}" | |
61 | run_test "sandbox_vpl" ./test/py/test.py --bd sandbox_vpl --build ${para} \ | |
62 | -k 'vpl or test_spl' | |
63 | ||
76160801 SG |
64 | if [ -z "$tools_only" ]; then |
65 | # Run tests for the flat-device-tree version of sandbox. This is a special | |
66 | # build which does not enable CONFIG_OF_LIVE for the live device tree, so we can | |
67 | # check that functionality is the same. The standard sandbox build (above) uses | |
68 | # CONFIG_OF_LIVE. | |
d1962ac7 | 69 | echo "${prompt}" |
76160801 | 70 | run_test "sandbox_flattree" ./test/py/test.py --bd sandbox_flattree \ |
d1962ac7 | 71 | ${para} --build -k "${ut_mark_expr}" |
76160801 | 72 | fi |
2f52018c | 73 | |
734f3de9 | 74 | # Set up a path to dtc (device-tree compiler) and libfdt.py, a library it |
8acce60b SG |
75 | # provides and which is built by the sandbox_spl config. Also set up the path |
76 | # to tools build by the build. | |
ed772fe7 | 77 | DTC_DIR=build-sandbox_spl/scripts/dtc |
734f3de9 SG |
78 | export PYTHONPATH=${DTC_DIR}/pylibfdt |
79 | export DTC=${DTC_DIR}/dtc | |
8acce60b | 80 | TOOLS_DIR=build-sandbox_spl/tools |
ed772fe7 | 81 | |
53cd5d92 | 82 | run_test "binman" ./tools/binman/binman --toolpath ${TOOLS_DIR} test |
6bb74de7 | 83 | run_test "patman" ./tools/patman/patman test |
4583c002 | 84 | run_test "u_boot_pylib" ./tools/u_boot_pylib/u_boot_pylib |
499fde5c | 85 | |
499fde5c | 86 | run_test "buildman" ./tools/buildman/buildman -t ${skip} |
3bc11e81 | 87 | run_test "fdt" ./tools/dtoc/test_fdt -t |
c9adb355 | 88 | run_test "dtoc" ./tools/dtoc/dtoc -t |
72d8172b | 89 | |
30d704c6 SG |
90 | # This needs you to set up Python test coverage tools. |
91 | # To enable Python test coverage on Debian-type distributions (e.g. Ubuntu): | |
16d836cd | 92 | # $ sudo apt-get install python-pytest python-coverage |
d1962ac7 SG |
93 | |
94 | # Code-coverage tests cannot run in parallel, so skip them in that case | |
95 | if [ -z "${para}" ]; then | |
96 | export PATH=$PATH:${TOOLS_DIR} | |
97 | run_test "binman code coverage" ./tools/binman/binman test -T | |
98 | run_test "dtoc code coverage" ./tools/dtoc/dtoc -T | |
99 | run_test "fdt code coverage" ./tools/dtoc/test_fdt -T | |
100 | fi | |
30d704c6 | 101 | |
3bc11e81 | 102 | if [ $failures == 0 ]; then |
2f52018c SG |
103 | echo "Tests passed!" |
104 | else | |
105 | echo "Tests FAILED" | |
106 | exit 1 | |
107 | fi |