Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #!/bin/bash # Script to run all U-Boot tests that use sandbox. # $1: tests to run (empty for all, 'quick' for quick ones only) # Runs a test and checks the exit code to decide if it passed # $1: Test name # $2 onwards: command line to run run_test() { echo -n "$1: " shift "$@" [ $? -ne 0 ] && failures=$((failures+1)) } quiet=-q # Clean up things the Makefile created unset MAKE MAKEFLAGS MAKELEVEL MAKEOVERRIDES MAKE_TERMERR MAKE_TERMOUT # Unset this since this script is generally run from 'make qcheck' et al, which # targets are in no-dot-config-targets and thus dot-config is 0 and thus # config.mk was not included in the main Makefile, thus PLATFORM_LIBS does not # have the arch-specific settings (e.g. SDL libraries on sandbox). Better to # leave it empty than have it be wrong. This particularly affects # example/ulib/Makefile when called from 'make qcheck' unset PLATFORM_LIBS # Select test attributes ut_mark_expr=test_ut if [ "$1" = "quick" ]; then mark_expr="not slow" ut_mark_expr="test_ut and not slow" skip=--skip-net-tests fi [ "$1" == "tools" ] && tools_only=y if [ "$1" = "parallel" ]; then if ! echo 'import xdist' | python3 2>/dev/null; then echo "Please install python3-pytest-xdist - see doc/develop/py_testing.rst" exit 1 fi jobs="$(($(nproc) > 16 ? 16 : $(nproc)))" para="-n${jobs} -q" prompt="Building and..." skip=--skip-net-tests mark_expr="not slow and not bootstd and not spi_flash" ut_mark_expr="test_ut and not slow and not bootstd and not spi_flash" echo "Note: test log is garbled with parallel tests" fi failures=0 # Disable LTO as it messed up event_dump.py (fails to get some line numbers) export NO_LTO=1 if [ -z "$tools_only" ]; then # Run all tests that the standard sandbox build can support echo "${prompt}" run_test "sandbox" ./test/py/test.py --bd sandbox --build ${para} \ ${quiet} -k "${mark_expr}" # Run tests which require sandbox_spl echo "${prompt}" run_test "sandbox_spl" ./test/py/test.py --bd sandbox_spl \ --build ${para} ${quiet} \ -k 'test_ofplatdata or test_handoff or test_spl' # Run the same tests with sandbox_noinst (i.e. without OF_PLATDATA_INST) echo "${prompt}" run_test "sandbox_noinst" ./test/py/test.py --bd sandbox_noinst \ --build ${para} ${quiet} \ -k 'test_ofplatdata or test_handoff or test_spl' # Run tests which require sandbox_vpl echo "${prompt}" run_test "sandbox_vpl" ./test/py/test.py --bd sandbox_vpl \ --build ${para} ${quiet} \ -k 'vpl or test_spl' # Run tests for the flat-device-tree version of sandbox. This is a special # build which does not enable CONFIG_OF_LIVE for the live device tree, so we can # check that functionality is the same. The standard sandbox build (above) uses # CONFIG_OF_LIVE. echo "${prompt}" run_test "sandbox_flattree" ./test/py/test.py --bd sandbox_flattree \ --build ${para} ${quiet} \ -k "${ut_mark_expr}" else # Make sure sandbox_spl is built, as we need it from now on ./test/py/test.py --bd sandbox_spl --build -k none fi # Set up a path to dtc (device-tree compiler) and libfdt.py, a library it # provides and which is built by the sandbox_spl config. Also set up the path # to tools build by the build. DTC_DIR=$(pwd)/build-sandbox_spl/scripts/dtc export PYTHONPATH=${DTC_DIR}/pylibfdt export DTC=${DTC_DIR}/dtc TOOLS_DIR=$(pwd)/build-sandbox_spl/tools # TOOLPATH may be defined to provide mkimage, cbfstool, etc. export PATH=$PATH:${TOOLS_DIR} run_test "binman" ./tools/binman/binman ${TOOLPATH} test run_test "patman" ./tools/patman/patman test run_test "u_boot_pylib" ./tools/u_boot_pylib/u_boot_pylib run_test "buildman" ./tools/buildman/buildman -t ${skip} run_test "fdt" ./tools/dtoc/test_fdt -t run_test "dtoc" ./tools/dtoc/dtoc -t run_test "hwids_to_dtsi" python3 ./test/scripts/test_hwids_to_dtsi.py # This needs you to set up Python test coverage tools. # To enable Python test coverage on Debian-type distributions (e.g. Ubuntu): # $ sudo apt-get install python-pytest python-coverage # Code-coverage tests cannot run in parallel, so skip them in that case if [ -z "${para}" ]; then run_test "binman code coverage" ./tools/binman/binman ${TOOLPATH} test -T run_test "dtoc code coverage" ./tools/dtoc/dtoc -T run_test "fdt code coverage" ./tools/dtoc/test_fdt -T fi if [ $failures == 0 ]; then echo "Tests passed!" else echo "Tests FAILED" exit 1 fi |