mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 05:20:08 +01:00
The code was just wrong. Usually in gitlab-ci, NMTST_SEED_RANDOM is unset, so the previous code would not have set it. Which means that our tests run with NMTST_SEED_RANDOM="0". Fuzzing (or randomizing tests) is very useful, we should do that for the unit tests that run in gitlab-ci. Fix this. But don't let the test choose a random number. Instead, let the calling script choose it. That is, because we might run the tests more than once (without debugging and no valgrind; in case of failure return with debugging; with valgrind). Those runs should use the same seed. This fixes commit70487d9ff8('ci: randomize tests during our CI'), but as fixing randomization can break previously running tests, we may only want to backport this commit after careful evaluation. (cherry picked from commit3bad3f8b24)
291 lines
7.1 KiB
Bash
Executable file
291 lines
7.1 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Arguments via environment variables:
|
|
# - CI
|
|
# - CC
|
|
# - BUILD_TYPE
|
|
# - CFLAGS
|
|
# - WITH_DOCS
|
|
|
|
set -ex
|
|
|
|
die() {
|
|
printf "%s\n" "$@"
|
|
exit 1
|
|
}
|
|
|
|
_is_true() {
|
|
case "$1" in
|
|
1|y|yes|YES|Yes|on)
|
|
return 0
|
|
;;
|
|
0|n|no|NO|No|off)
|
|
return 1
|
|
;;
|
|
"")
|
|
if [ "$2" == "" ]; then
|
|
die "not a boolean argument \"$1\""
|
|
fi
|
|
_is_true "$2"
|
|
return $?
|
|
;;
|
|
*)
|
|
die "not a boolean argument \"$1\""
|
|
;;
|
|
esac
|
|
}
|
|
|
|
USE_CCACHE=0
|
|
if command -v ccache &>/dev/null; then
|
|
USE_CCACHE=1
|
|
export PATH="/usr/lib64/ccache:/usr/lib/ccache${PATH:+:${PATH}}"
|
|
fi
|
|
|
|
IS_FEDORA=0
|
|
IS_CENTOS=0
|
|
IS_ALPINE=0
|
|
grep -q '^NAME=.*\(CentOS\)' /etc/os-release && IS_CENTOS=1
|
|
grep -q '^NAME=.*\(Fedora\)' /etc/os-release && IS_FEDORA=1
|
|
grep -q '^NAME=.*\(Alpine\)' /etc/os-release && IS_ALPINE=1
|
|
|
|
###############################################################################
|
|
|
|
if [ "$BUILD_TYPE" == meson ]; then
|
|
_TRUE=true
|
|
_FALSE=false
|
|
elif [ "$BUILD_TYPE" == autotools ]; then
|
|
_TRUE=yes
|
|
_FALSE=no
|
|
else
|
|
die "invalid \$BUILD_TYPE \"$BUILD_TYPE\""
|
|
fi
|
|
|
|
_WITH_CRYPTO="gnutls"
|
|
_WITH_WERROR=1
|
|
_WITH_LIBTEAM="$_TRUE"
|
|
_WITH_DOCS="$_TRUE"
|
|
_WITH_SYSTEMD_LOGIND="$_TRUE"
|
|
if [ $IS_ALPINE = 1 ]; then
|
|
_WITH_SYSTEMD_LOGIND="$_FALSE"
|
|
fi
|
|
|
|
if [ -z "${NMTST_SEED_RAND+x}" ]; then
|
|
NMTST_SEED_RAND="$SRANDOM"
|
|
if [ -z "$NMTST_SEED_RAND" ]; then
|
|
NMTST_SEED_RAND="$(( ( (RANDOM<<15|RANDOM)<<15|RANDOM ) % 0xfffffffe ))"
|
|
fi
|
|
fi
|
|
export NMTST_SEED_RAND
|
|
|
|
case "$CI" in
|
|
""|"true"|"default"|"gitlab")
|
|
CI=default
|
|
;;
|
|
*)
|
|
die "invalid \$CI \"$CI\""
|
|
;;
|
|
esac
|
|
|
|
if [ "$CC" != gcc ]; then
|
|
_WITH_CRYPTO=nss
|
|
fi
|
|
|
|
if [ "$WITH_DOCS" != "" ]; then
|
|
if _is_true "$WITH_DOCS"; then
|
|
_WITH_DOCS="$_TRUE"
|
|
else
|
|
_WITH_DOCS="$_FALSE"
|
|
fi
|
|
fi
|
|
|
|
unset _WITH_VALGRIND_CHECKED
|
|
_with_valgrind() {
|
|
_is_true "$WITH_VALGRIND" 0 || return 1
|
|
|
|
test "$_WITH_VALGRIND_CHECKED" == "1" && return 0
|
|
_WITH_VALGRIND_CHECKED=1
|
|
|
|
if [ "$IS_ALPINE" = 1 ]; then
|
|
# on Alpine we have no debug symbols and the suppressions
|
|
# don't work. Skip valgrind tests.
|
|
WITH_VALGRIND=0
|
|
fi
|
|
|
|
# Certain glib2 versions are known to report *lots* of leaks. Disable
|
|
# valgrind tests in this case.
|
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1710417
|
|
if grep -q '^PRETTY_NAME="Fedora 30 (.*)"$' /etc/os-release ; then
|
|
if rpm -q glib2 | grep -q glib2-2.60.2-1.fc30 ; then
|
|
WITH_VALGRIND=0
|
|
fi
|
|
elif grep -q '^PRETTY_NAME="Fedora 31 (.*)"$' /etc/os-release; then
|
|
if rpm -q glib2 | grep -q glib2-2.61.0-2.fc31 ; then
|
|
WITH_VALGRIND=0
|
|
fi
|
|
elif grep -q '^PRETTY_NAME="Debian.*sid"$' /etc/os-release; then
|
|
if dpkg -s libglib2.0-bin | grep -q '^Version: 2.66.4-2$' ; then
|
|
WITH_VALGRIND=0
|
|
fi
|
|
fi
|
|
if [ "$WITH_VALGRIND" == 0 ]; then
|
|
echo "Don't use valgrind due to known issues in other packages."
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
###############################################################################
|
|
|
|
_print_test_logs() {
|
|
echo ">>>> PRINT TEST LOGS $1 (start)"
|
|
if test -f test-suite.log; then
|
|
cat test-suite.log
|
|
fi
|
|
echo ">>>> PRINT TEST LOGS $1 (done)"
|
|
if _with_valgrind; then
|
|
echo ">>>> PRINT VALGRIND LOGS $1 (start)"
|
|
find -name '*.valgrind-log' -print0 | xargs -0 grep -H ^ || true
|
|
echo ">>>> PRINT VALGRIND LOGS $1 (done)"
|
|
fi
|
|
}
|
|
|
|
run_autotools() {
|
|
NOCONFIGURE=1 ./autogen.sh
|
|
mkdir ./build
|
|
if [ "$_WITH_WERROR" == 1 ]; then
|
|
_WITH_WERROR_VAL="error"
|
|
else
|
|
_WITH_WERROR_VAL="yes"
|
|
fi
|
|
DISABLE_DEPENDENCY_TRACKING=
|
|
if [ $IS_ALPINE = 1 ]; then
|
|
DISABLE_DEPENDENCY_TRACKING='--disable-dependency-tracking'
|
|
fi
|
|
pushd ./build
|
|
../configure \
|
|
--prefix="$PWD/INST" \
|
|
$DISABLE_DEPENDENCY_TRACKING \
|
|
\
|
|
--enable-introspection=$_WITH_DOCS \
|
|
--enable-gtk-doc=$_WITH_DOCS \
|
|
--with-systemd-logind=$_WITH_SYSTEMD_LOGIND \
|
|
--enable-more-warnings="$_WITH_WERROR_VAL" \
|
|
--enable-tests=yes \
|
|
--with-crypto=$_WITH_CRYPTO \
|
|
\
|
|
--with-ebpf=no \
|
|
\
|
|
--with-iwd=yes \
|
|
--with-ofono=yes \
|
|
--enable-teamdctl=$_WITH_LIBTEAM \
|
|
\
|
|
--with-dhcpcanon=yes \
|
|
--with-dhcpcd=yes \
|
|
--with-dhclient=yes \
|
|
\
|
|
--with-netconfig=/bin/nowhere/netconfig \
|
|
--with-resolvconf=/bin/nowhere/resolvconf \
|
|
\
|
|
--enable-ifcfg-rh=yes \
|
|
--enable-ifupdown=yes \
|
|
\
|
|
#end
|
|
|
|
make -j 6
|
|
make install
|
|
|
|
export NM_TEST_CLIENT_CHECK_L10N=1
|
|
|
|
if ! make check -j 6 -k ; then
|
|
|
|
_print_test_logs "first-test"
|
|
|
|
echo ">>>> RUN SECOND TEST (start)"
|
|
NMTST_DEBUG=TRACE,no-expect-message make check -k || :
|
|
echo ">>>> RUN SECOND TEST (done)"
|
|
|
|
_print_test_logs "second-test"
|
|
die "test failed"
|
|
fi
|
|
|
|
if _with_valgrind; then
|
|
if ! NMTST_USE_VALGRIND=1 make check -j 3 -k ; then
|
|
_print_test_logs "(valgrind test)"
|
|
die "valgrind test failed"
|
|
fi
|
|
fi
|
|
popd
|
|
}
|
|
|
|
###############################################################################
|
|
|
|
run_meson() {
|
|
if [ "$_WITH_WERROR" == 1 ]; then
|
|
_WITH_WERROR_VAL="--werror"
|
|
else
|
|
_WITH_WERROR_VAL=""
|
|
fi
|
|
meson build \
|
|
\
|
|
-Dprefix="$PWD/INST" \
|
|
\
|
|
--warnlevel 2 \
|
|
$_WITH_WERROR_VAL \
|
|
\
|
|
-D ld_gc=false \
|
|
-D session_tracking=no \
|
|
-D systemdsystemunitdir=no \
|
|
-D systemd_journal=false \
|
|
-D selinux=false \
|
|
-D libaudit=no \
|
|
-D libpsl=false \
|
|
-D vapi=false \
|
|
-D introspection=$_WITH_DOCS \
|
|
-D qt=false \
|
|
-D crypto=$_WITH_CRYPTO \
|
|
-D docs=$_WITH_DOCS \
|
|
\
|
|
-D ebpf=false \
|
|
\
|
|
-D iwd=true \
|
|
-D ofono=true \
|
|
-D teamdctl=$_WITH_LIBTEAM \
|
|
\
|
|
-D dhclient=/bin/nowhere/dhclient \
|
|
-D dhcpcanon=/bin/nowhere/dhcpcanon \
|
|
-D dhcpcd=/bin/nowhere/dhcpd \
|
|
\
|
|
-D netconfig=/bin/nowhere/netconfig \
|
|
-D resolvconf=/bin/nowhere/resolvconf \
|
|
\
|
|
-D ifcfg_rh=false \
|
|
-D ifupdown=true \
|
|
\
|
|
#end
|
|
|
|
export NM_TEST_CLIENT_CHECK_L10N=1
|
|
|
|
ninja -C build
|
|
ninja -C build install
|
|
ninja -C build test
|
|
|
|
if _with_valgrind; then
|
|
if ! NMTST_USE_VALGRIND=1 ninja -C build test; then
|
|
_print_test_logs "(valgrind test)"
|
|
die "valgrind test failed"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
###############################################################################
|
|
|
|
if [ "$BUILD_TYPE" == autotools ]; then
|
|
run_autotools
|
|
elif [ "$BUILD_TYPE" == meson ]; then
|
|
run_meson
|
|
fi
|
|
|
|
if [ "$USE_CCACHE" = 1 ]; then
|
|
echo "ccache statistics:"
|
|
ccache -s
|
|
fi
|