u-boot/test/run
Simon Glass 4583c00236 patman: Move library functions into a library directory
The patman directory has a number of modules which are used by other tools
in U-Boot. This makes it hard to package the tools using pypi since the
common files must be copied along with the tool that uses them.

To address this, move these files into a new u_boot_pylib library. This
can be packaged separately and listed as a dependency of each tool.

Signed-off-by: Simon Glass <sjg@chromium.org>
2023-03-08 11:40:49 -08:00

102 lines
3.2 KiB
Bash
Executable file

#!/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))
}
# 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
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} \
-k "${mark_expr}"
fi
# Run tests which require sandbox_spl
echo "${prompt}"
run_test "sandbox_spl" ./test/py/test.py --bd sandbox_spl --build ${para} \
-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} \
-k 'test_ofplatdata or test_handoff or test_spl'
if [ -z "$tools_only" ]; then
# 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 \
${para} --build -k "${ut_mark_expr}"
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=build-sandbox_spl/scripts/dtc
export PYTHONPATH=${DTC_DIR}/pylibfdt
export DTC=${DTC_DIR}/dtc
TOOLS_DIR=build-sandbox_spl/tools
run_test "binman" ./tools/binman/binman --toolpath ${TOOLS_DIR} 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
# 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
export PATH=$PATH:${TOOLS_DIR}
run_test "binman code coverage" ./tools/binman/binman 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