cff52180c4
Most of our bash test scripts source autotest_common.sh to be able to use some autotest-specific functions like timing_enter(). The same test scripts allow specifying custom command line parameters without actually realizing that those parameters can be potentially picked up by autotest_common.sh as well. For example, if particular nvmf tests are run in "isolation" mode by being executed with the first param set to "iso", and there is a file named "iso" in the current dir, that file will be sourced. This could be bad. In this patch we stop sourcing or even processing $1 in autotest_common.sh. Instead, the test configuration will be sourced just once from autobuild.sh, autopackage.sh and autotest.sh. If the user wants to run particular test scripts manually, he should source an SPDK test configuration by himself - manually as well. In most cases he won't even have two, as only a few test scripts depend on SPDK_* variables. Note that we still have to setup the default values for SPDK_* variables in autotest_common.sh because some of our test scripts actually depend on them: > if [ $SPDK_TEST_RBD -eq 1 ]; then ... Because it lacks any type of quotes around SPDK_TEST_RBD, it will print the following message when that variable is unset: > /bin/bash: line 0: [: -eq: unary operator expected It doesn't trigger any error ($? == 0), but can be still a bit misleading in the script output. Change-Id: I350045d8582d66fe1ed7697d4bcbba324cb541ad Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453876 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
161 lines
4.0 KiB
Bash
Executable File
161 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
# If the configuration of tests is not provided, no tests will be carried out.
|
|
if [[ ! -f $1 ]]; then
|
|
echo "ERROR: SPDK test configuration not specified"
|
|
exit 1
|
|
fi
|
|
|
|
source "$1"
|
|
|
|
rootdir=$(readlink -f $(dirname $0))
|
|
source "$rootdir/test/common/autotest_common.sh"
|
|
|
|
out=$PWD
|
|
|
|
umask 022
|
|
|
|
cd $rootdir
|
|
|
|
date -u
|
|
git describe --tags
|
|
|
|
if [ "$SPDK_TEST_OCF" -eq 1 ]; then
|
|
# We compile OCF sources ourselves
|
|
# They don't need to be checked with scanbuild and code coverage is not applicable
|
|
# So we precompile OCF now for further use as standalone static library
|
|
./configure $(echo $config_params | sed 's/--enable-coverage//g')
|
|
$MAKE $MAKEFLAGS include/spdk/config.h
|
|
CC=gcc CCAR=ar $MAKE $MAKEFLAGS -C lib/bdev/ocf/env exportlib O=$rootdir/build/ocf.a
|
|
# Set config to use precompiled library
|
|
config_params="$config_params --with-ocf=/$rootdir/build/ocf.a"
|
|
fi
|
|
|
|
./configure $config_params
|
|
|
|
# Print some test system info out for the log
|
|
echo "** START ** Info for Hostname: $HOSTNAME"
|
|
uname -a
|
|
$MAKE cc_version
|
|
$MAKE cxx_version
|
|
echo "** END ** Info for Hostname: $HOSTNAME"
|
|
|
|
timing_enter autobuild
|
|
|
|
timing_enter check_format
|
|
if [ $SPDK_RUN_CHECK_FORMAT -eq 1 ]; then
|
|
./scripts/check_format.sh
|
|
fi
|
|
timing_exit check_format
|
|
|
|
scanbuild=''
|
|
make_timing_label='make'
|
|
if [ $SPDK_RUN_SCANBUILD -eq 1 ] && hash scan-build; then
|
|
scanbuild="scan-build -o $out/scan-build-tmp --status-bugs"
|
|
make_timing_label='scanbuild_make'
|
|
report_test_completion "scanbuild"
|
|
|
|
fi
|
|
|
|
if [ $SPDK_RUN_VALGRIND -eq 1 ]; then
|
|
report_test_completion "valgrind"
|
|
fi
|
|
|
|
if [ $SPDK_RUN_ASAN -eq 1 ]; then
|
|
report_test_completion "asan"
|
|
fi
|
|
|
|
if [ $SPDK_RUN_UBSAN -eq 1 ]; then
|
|
report_test_completion "ubsan"
|
|
fi
|
|
|
|
echo $scanbuild
|
|
|
|
timing_enter "$make_timing_label"
|
|
|
|
$MAKE $MAKEFLAGS clean
|
|
if [ $SPDK_BUILD_SHARED_OBJECT -eq 1 ]; then
|
|
./configure $config_params --with-shared
|
|
$MAKE $MAKEFLAGS
|
|
$MAKE $MAKEFLAGS clean
|
|
report_test_completion "shared_object_build"
|
|
fi
|
|
|
|
fail=0
|
|
./configure $config_params
|
|
time $scanbuild $MAKE $MAKEFLAGS || fail=1
|
|
if [ $fail -eq 1 ]; then
|
|
if [ -d $out/scan-build-tmp ]; then
|
|
scanoutput=$(ls -1 $out/scan-build-tmp/)
|
|
mv $out/scan-build-tmp/$scanoutput $out/scan-build
|
|
rm -rf $out/scan-build-tmp
|
|
chmod -R a+rX $out/scan-build
|
|
fi
|
|
exit 1
|
|
else
|
|
rm -rf $out/scan-build-tmp
|
|
fi
|
|
timing_exit "$make_timing_label"
|
|
|
|
# Check for generated files that are not listed in .gitignore
|
|
timing_enter generated_files_check
|
|
if [ `git status --porcelain --ignore-submodules | wc -l` -ne 0 ]; then
|
|
echo "Generated files missing from .gitignore:"
|
|
git status --porcelain --ignore-submodules
|
|
exit 1
|
|
fi
|
|
timing_exit generated_files_check
|
|
|
|
# Check that header file dependencies are working correctly by
|
|
# capturing a binary's stat data before and after touching a
|
|
# header file and re-making.
|
|
timing_enter dependency_check
|
|
STAT1=`stat examples/nvme/identify/identify`
|
|
sleep 1
|
|
touch lib/nvme/nvme_internal.h
|
|
$MAKE $MAKEFLAGS
|
|
STAT2=`stat examples/nvme/identify/identify`
|
|
|
|
if [ "$STAT1" == "$STAT2" ]; then
|
|
echo "Header dependency check failed"
|
|
exit 1
|
|
fi
|
|
timing_exit dependency_check
|
|
|
|
# Test 'make install'
|
|
timing_enter make_install
|
|
rm -rf /tmp/spdk
|
|
mkdir /tmp/spdk
|
|
$MAKE $MAKEFLAGS install DESTDIR=/tmp/spdk prefix=/usr
|
|
ls -lR /tmp/spdk
|
|
rm -rf /tmp/spdk
|
|
timing_exit make_install
|
|
|
|
timing_enter doxygen
|
|
if [ $SPDK_BUILD_DOC -eq 1 ] && hash doxygen; then
|
|
$MAKE -C "$rootdir"/doc --no-print-directory $MAKEFLAGS &> "$out"/doxygen.log
|
|
if [ -s "$out"/doxygen.log ]; then
|
|
cat "$out"/doxygen.log
|
|
echo "Doxygen errors found!"
|
|
exit 1
|
|
fi
|
|
if hash pdflatex 2>/dev/null; then
|
|
$MAKE -C "$rootdir"/doc/output/latex --no-print-directory $MAKEFLAGS &>> "$out"/doxygen.log
|
|
fi
|
|
mkdir -p "$out"/doc
|
|
mv "$rootdir"/doc/output/html "$out"/doc
|
|
if [ -f "$rootdir"/doc/output/latex/refman.pdf ]; then
|
|
mv "$rootdir"/doc/output/latex/refman.pdf "$out"/doc/spdk.pdf
|
|
fi
|
|
$MAKE -C "$rootdir"/doc --no-print-directory $MAKEFLAGS clean &>> "$out"/doxygen.log
|
|
if [ -s "$out"/doxygen.log ]; then
|
|
rm "$out"/doxygen.log
|
|
fi
|
|
rm -rf "$rootdir"/doc/output
|
|
fi
|
|
timing_exit doxygen
|
|
|
|
timing_exit autobuild
|