2015-09-21 21:48:40 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
2019-05-09 11:22:41 +00:00
|
|
|
# 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"
|
|
|
|
|
2015-10-08 19:40:44 +00:00
|
|
|
rootdir=$(readlink -f $(dirname $0))
|
2018-02-27 22:14:08 +00:00
|
|
|
source "$rootdir/test/common/autotest_common.sh"
|
2015-09-21 21:48:40 +00:00
|
|
|
|
2015-10-03 00:11:56 +00:00
|
|
|
out=$PWD
|
2015-09-21 21:48:40 +00:00
|
|
|
|
2015-10-05 17:54:32 +00:00
|
|
|
umask 022
|
|
|
|
|
2015-10-08 19:40:44 +00:00
|
|
|
cd $rootdir
|
2015-09-21 21:48:40 +00:00
|
|
|
|
2016-12-16 17:14:48 +00:00
|
|
|
date -u
|
|
|
|
git describe --tags
|
|
|
|
|
2018-11-02 00:00:24 +00:00
|
|
|
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')
|
2019-01-21 09:05:59 +00:00
|
|
|
$MAKE $MAKEFLAGS include/spdk/config.h
|
2019-08-20 16:58:45 +00:00
|
|
|
CC=gcc CCAR=ar $MAKE $MAKEFLAGS -C lib/env_ocf exportlib O=$rootdir/build/ocf.a
|
2018-11-02 00:00:24 +00:00
|
|
|
# Set config to use precompiled library
|
|
|
|
config_params="$config_params --with-ocf=/$rootdir/build/ocf.a"
|
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
./configure $config_params
|
|
|
|
|
2018-04-02 12:42:46 +00:00
|
|
|
# Print some test system info out for the log
|
2018-03-19 20:29:11 +00:00
|
|
|
echo "** START ** Info for Hostname: $HOSTNAME"
|
|
|
|
uname -a
|
|
|
|
$MAKE cc_version
|
|
|
|
$MAKE cxx_version
|
|
|
|
echo "** END ** Info for Hostname: $HOSTNAME"
|
|
|
|
|
2015-10-08 19:40:44 +00:00
|
|
|
timing_enter autobuild
|
|
|
|
|
|
|
|
timing_enter check_format
|
2017-06-29 21:38:10 +00:00
|
|
|
if [ $SPDK_RUN_CHECK_FORMAT -eq 1 ]; then
|
|
|
|
./scripts/check_format.sh
|
|
|
|
fi
|
2015-10-08 19:40:44 +00:00
|
|
|
timing_exit check_format
|
2015-09-23 15:52:44 +00:00
|
|
|
|
2015-09-21 21:48:40 +00:00
|
|
|
scanbuild=''
|
2018-02-08 22:35:34 +00:00
|
|
|
make_timing_label='make'
|
2017-05-31 23:48:02 +00:00
|
|
|
if [ $SPDK_RUN_SCANBUILD -eq 1 ] && hash scan-build; then
|
2015-09-22 23:20:35 +00:00
|
|
|
scanbuild="scan-build -o $out/scan-build-tmp --status-bugs"
|
2018-02-08 22:35:34 +00:00
|
|
|
make_timing_label='scanbuild_make'
|
2017-12-18 21:20:41 +00:00
|
|
|
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"
|
2015-09-21 21:48:40 +00:00
|
|
|
fi
|
2017-12-18 21:20:41 +00:00
|
|
|
|
2017-05-31 23:48:02 +00:00
|
|
|
echo $scanbuild
|
2015-10-08 19:40:44 +00:00
|
|
|
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_enter "$make_timing_label"
|
2018-10-25 18:14:14 +00:00
|
|
|
|
|
|
|
$MAKE $MAKEFLAGS clean
|
|
|
|
if [ $SPDK_BUILD_SHARED_OBJECT -eq 1 ]; then
|
2019-08-23 23:50:25 +00:00
|
|
|
$rootdir/test/make/check_so_deps.sh
|
2018-10-25 18:14:14 +00:00
|
|
|
report_test_completion "shared_object_build"
|
|
|
|
fi
|
|
|
|
|
2015-09-22 23:20:35 +00:00
|
|
|
fail=0
|
2018-09-06 20:35:25 +00:00
|
|
|
./configure $config_params
|
2017-03-30 19:06:49 +00:00
|
|
|
time $scanbuild $MAKE $MAKEFLAGS || fail=1
|
2017-02-15 20:16:48 +00:00
|
|
|
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
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_exit "$make_timing_label"
|
2015-09-21 21:48:40 +00:00
|
|
|
|
2017-06-20 17:22:21 +00:00
|
|
|
# Check for generated files that are not listed in .gitignore
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_enter generated_files_check
|
2019-07-03 15:12:39 +00:00
|
|
|
if [ $(git status --porcelain --ignore-submodules | wc -l) -ne 0 ]; then
|
2017-06-20 17:22:21 +00:00
|
|
|
echo "Generated files missing from .gitignore:"
|
2019-01-13 22:28:03 +00:00
|
|
|
git status --porcelain --ignore-submodules
|
2017-06-20 17:22:21 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_exit generated_files_check
|
2017-06-20 17:22:21 +00:00
|
|
|
|
2015-09-25 20:29:39 +00:00
|
|
|
# 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.
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_enter dependency_check
|
2019-07-03 15:12:39 +00:00
|
|
|
STAT1=$(stat examples/nvme/identify/identify)
|
2015-11-03 01:37:15 +00:00
|
|
|
sleep 1
|
2015-09-25 20:29:39 +00:00
|
|
|
touch lib/nvme/nvme_internal.h
|
2017-03-30 19:06:49 +00:00
|
|
|
$MAKE $MAKEFLAGS
|
2019-07-03 15:12:39 +00:00
|
|
|
STAT2=$(stat examples/nvme/identify/identify)
|
2015-09-25 20:29:39 +00:00
|
|
|
|
|
|
|
if [ "$STAT1" == "$STAT2" ]; then
|
2017-02-15 20:16:48 +00:00
|
|
|
echo "Header dependency check failed"
|
|
|
|
exit 1
|
2015-09-25 20:29:39 +00:00
|
|
|
fi
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_exit dependency_check
|
2015-09-25 20:29:39 +00:00
|
|
|
|
2017-11-15 17:36:36 +00:00
|
|
|
# Test 'make install'
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_enter make_install
|
2017-11-15 17:36:36 +00:00
|
|
|
rm -rf /tmp/spdk
|
|
|
|
mkdir /tmp/spdk
|
|
|
|
$MAKE $MAKEFLAGS install DESTDIR=/tmp/spdk prefix=/usr
|
2018-02-08 22:35:34 +00:00
|
|
|
timing_exit make_install
|
2015-09-21 21:48:40 +00:00
|
|
|
|
2019-01-02 09:28:02 +00:00
|
|
|
# Test 'make uninstall'
|
|
|
|
timing_enter make_uninstall
|
|
|
|
# Create empty file to check if it is not deleted by target uninstall
|
|
|
|
touch /tmp/spdk/usr/lib/sample_xyz.a
|
|
|
|
$MAKE $MAKEFLAGS uninstall DESTDIR=/tmp/spdk prefix=/usr
|
2019-11-25 11:44:31 +00:00
|
|
|
if [[ $(find /tmp/spdk/usr -maxdepth 1 -mindepth 1 | wc -l) -ne 2 ]] || [[ $(find /tmp/spdk/usr/lib/ -maxdepth 1 -mindepth 1 | wc -l) -ne 1 ]]; then
|
2019-01-02 09:28:02 +00:00
|
|
|
ls -lR /tmp/spdk
|
|
|
|
rm -rf /tmp/spdk
|
|
|
|
echo "Make uninstall failed"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
rm -rf /tmp/spdk
|
|
|
|
fi
|
|
|
|
timing_exit make_uninstall
|
|
|
|
|
2015-10-08 19:40:44 +00:00
|
|
|
timing_enter doxygen
|
2017-05-02 00:38:42 +00:00
|
|
|
if [ $SPDK_BUILD_DOC -eq 1 ] && hash doxygen; then
|
2018-06-18 14:59:53 +00:00
|
|
|
$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
|
2018-06-19 19:24:47 +00:00
|
|
|
if hash pdflatex 2>/dev/null; then
|
2018-06-18 14:59:53 +00:00
|
|
|
$MAKE -C "$rootdir"/doc/output/latex --no-print-directory $MAKEFLAGS &>> "$out"/doxygen.log
|
2017-04-28 22:49:03 +00:00
|
|
|
fi
|
2015-09-21 21:48:40 +00:00
|
|
|
mkdir -p "$out"/doc
|
2016-03-25 16:54:24 +00:00
|
|
|
mv "$rootdir"/doc/output/html "$out"/doc
|
2017-04-28 22:49:03 +00:00
|
|
|
if [ -f "$rootdir"/doc/output/latex/refman.pdf ]; then
|
2017-05-02 01:12:29 +00:00
|
|
|
mv "$rootdir"/doc/output/latex/refman.pdf "$out"/doc/spdk.pdf
|
2017-04-28 22:49:03 +00:00
|
|
|
fi
|
2018-06-18 14:59:53 +00:00
|
|
|
$MAKE -C "$rootdir"/doc --no-print-directory $MAKEFLAGS clean &>> "$out"/doxygen.log
|
|
|
|
if [ -s "$out"/doxygen.log ]; then
|
|
|
|
rm "$out"/doxygen.log
|
|
|
|
fi
|
2016-03-25 16:54:24 +00:00
|
|
|
rm -rf "$rootdir"/doc/output
|
2015-09-21 21:48:40 +00:00
|
|
|
fi
|
2015-10-08 19:40:44 +00:00
|
|
|
timing_exit doxygen
|
|
|
|
|
|
|
|
timing_exit autobuild
|